/* $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