Mercurial > octave-nkf
diff libinterp/corefcn/oct-handle.h @ 17544:fc31cd1bd503
extract handle object to a separate file
* oct-handle.h: New file.
* libinterp/corefcn/module.mk (COREFCN_INC): Add it to the list.
* graphics.in.h, graphics.cc (graphics_handle class): move to
oct-handle.h and rename octave_handle.
(graphics_handle): Now a typedef for octave_handle.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 02 Oct 2013 19:52:39 -0400 |
parents | |
children | d63878346099 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libinterp/corefcn/oct-handle.h Wed Oct 02 19:52:39 2013 -0400 @@ -0,0 +1,147 @@ +/* + +Copyright (C) 2007-2012 John W. Eaton + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, see +<http://www.gnu.org/licenses/>. + +*/ + +#if !defined (octave_handle_h) +#define octave_handle_h 1 + +#include "dMatrix.h" +#include "lo-ieee.h" + +#include "ov.h" + +// --------------------------------------------------------------------- + +class octave_handle +{ +public: + octave_handle (void) : val (octave_NaN) { } + + octave_handle (const octave_value& a) + : val (octave_NaN) + { + if (a.is_empty ()) + /* do nothing */; + else + { + double tval = a.double_value (); + + if (! error_state) + val = tval; + else + error ("invalid handle"); + } + } + + octave_handle (int a) : val (a) { } + + octave_handle (double a) : val (a) { } + + octave_handle (const octave_handle& a) : val (a.val) { } + + octave_handle& operator = (const octave_handle& a) + { + if (&a != this) + val = a.val; + + return *this; + } + + ~octave_handle (void) { } + + double value (void) const { return val; } + + octave_value as_octave_value (void) const + { + return ok () ? octave_value (val) : octave_value (Matrix ()); + } + + // Prefix increment/decrement operators. + octave_handle& operator ++ (void) + { + ++val; + return *this; + } + + octave_handle& operator -- (void) + { + --val; + return *this; + } + + // Postfix increment/decrement operators. + const octave_handle operator ++ (int) + { + octave_handle old_value = *this; + ++(*this); + return old_value; + } + + const octave_handle operator -- (int) + { + octave_handle old_value = *this; + --(*this); + return old_value; + } + + bool ok (void) const { return ! xisnan (val); } + +private: + double val; +}; + +inline bool +operator == (const octave_handle& a, const octave_handle& b) +{ + return a.value () == b.value (); +} + +inline bool +operator != (const octave_handle& a, const octave_handle& b) +{ + return a.value () != b.value (); +} + +inline bool +operator < (const octave_handle& a, const octave_handle& b) +{ + return a.value () < b.value (); +} + +inline bool +operator <= (const octave_handle& a, const octave_handle& b) +{ + return a.value () <= b.value (); +} + +inline bool +operator >= (const octave_handle& a, const octave_handle& b) +{ + return a.value () >= b.value (); +} + +inline bool +operator > (const octave_handle& a, const octave_handle& b) +{ + return a.value () > b.value (); +} + +#endif