1 /** 2 * @file cached_value.h 3 * Hold a cached value. 4 * 5 * @remark Copyright 2005 OProfile authors 6 * @remark Read the file COPYING 7 * 8 * @author John Levon 9 */ 10 11 #ifndef CACHED_VALUE_H 12 #define CACHED_VALUE_H 13 14 #include "op_exception.h" 15 16 /** 17 * Hold a single value, returning a cached value if there is one. 18 */ 19 template <class T> 20 class cached_value 21 { 22 public: cached_value()23 cached_value() : set(false) {} 24 25 typedef T value_type; 26 27 /// return the cached value get()28 value_type const get() const { 29 if (!set) 30 throw op_fatal_error("cached value not set"); 31 return value; 32 } 33 34 /// return true if a value is cached cached()35 bool cached() const { return set; } 36 37 /// set the contained value reset(value_type const & val)38 value_type const reset(value_type const & val) { 39 value = val; 40 set = true; 41 return value; 42 } 43 44 private: 45 /// the cached value 46 value_type value; 47 /// is the value valid? 48 bool set; 49 }; 50 51 52 #endif /* !CACHED_VALUE_H */ 53