/* * 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. template class RESETABLE { public: typedef T value_type; RESETABLE() : value(), is_set(false) {} RESETABLE(const T & v) : value(v), is_set(true) {} RESETABLE(const RESETABLE & rvalue) : value(rvalue.value), is_set(rvalue.is_set) {} RESETABLE & operator=(const RESETABLE & rhs) { value = rhs.value; is_set = rhs.is_set; return *this; } RESETABLE & operator=(const T & rhs) { value = rhs; is_set = true; return *this; } const T & const_data() const throw() { return value; } T & data() throw() { return value; } const T & data() const throw() { return value; } bool empty() const throw() { return !is_set; } void reset() throw() { is_set = false; } void splice(const RESETABLE & rhs) { if (rhs.is_set) { value = rhs.value; is_set = true; } } private: value_type value; bool is_set; }; #endif // RESETABLE_VARIABLE_H