• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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