X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/3e32eb8e48a56bca543faa522909d3d83538c55d..9701b7ab4dc4cd709ad4dcaa750fc0021f15e231:/include/stg/resetable.h diff --git a/include/stg/resetable.h b/include/stg/resetable.h new file mode 100644 index 00000000..d31bffda --- /dev/null +++ b/include/stg/resetable.h @@ -0,0 +1,98 @@ + /* + $Revision: 1.9 $ + $Date: 2010/03/11 14:42:04 $ + $Author: faust $ + */ + +/* + * Copyright (c) 2001 by Peter Simons . + * All rights reserved. + */ + +#ifndef RESETABLE_VARIABLE_H +#define RESETABLE_VARIABLE_H + +// This is a wrapper class about variables where you want to keep +// track of whether it has been assigened yet or not. + +#include + +template +class RESETABLE +{ + template + friend std::ostream & operator<<(std::ostream & o, RESETABLE v); +public: + typedef varT value_type; + + //------------------------------------------------------------------------- + RESETABLE() + : value(), + is_set(false) + { + } + //------------------------------------------------------------------------- + RESETABLE(const RESETABLE & rvalue) + : value(rvalue.value), + is_set(rvalue.is_set) + { + } + //------------------------------------------------------------------------- + RESETABLE(const value_type& val) + : value(val), + is_set(true) + { + } + //------------------------------------------------------------------------- + RESETABLE & operator=(const RESETABLE & rvalue) + { + value = rvalue.value; + is_set = rvalue.is_set; + return *this; + } + //------------------------------------------------------------------------- + RESETABLE & operator= (const value_type& rhs) + { + value = rhs; + is_set = true; + return *this; + } + //------------------------------------------------------------------------- + const value_type& const_data() const throw() + { + return value; + } + //------------------------------------------------------------------------- + value_type& data() throw() + { + return value; + } + //------------------------------------------------------------------------- + operator const value_type&() const throw() + { + return value; + } + //------------------------------------------------------------------------- + bool res_empty() const throw() + { + return !is_set; + } + //------------------------------------------------------------------------- + void reset() throw() + { + is_set = false; + } + //------------------------------------------------------------------------- +protected: + value_type value; + bool is_set; +}; +//----------------------------------------------------------------------------- +template +std::ostream & operator<<(std::ostream & o, RESETABLE v) +{ + return o << v.value; +} +//------------------------------------------------------------------------- +#endif // RESETABLE_VARIABLE_H +