18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file cached_value.h 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Hold a cached value. 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2005 OProfile authors 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef CACHED_VALUE_H 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define CACHED_VALUE_H 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_exception.h" 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Hold a single value, returning a cached value if there is one. 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddtemplate <class T> 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddclass cached_value 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{ 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddpublic: 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd cached_value() : set(false) {} 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd typedef T value_type; 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// return the cached value 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd value_type const get() const { 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd if (!set) 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd throw op_fatal_error("cached value not set"); 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return value; 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// return true if a value is cached 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd bool cached() const { return set; } 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// set the contained value 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd value_type const reset(value_type const & val) { 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd value = val; 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd set = true; 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd return value; 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd } 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddprivate: 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// the cached value 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd value_type value; 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /// is the value valid? 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd bool set; 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}; 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* !CACHED_VALUE_H */ 53