00001 #ifndef EXPRHANDLE_H 00002 #define EXPRHANDLE_H 00003 00004 #include "SundanceDefs.h" 00005 #include "ExprBase.h" 00006 00007 namespace Sundance 00008 { 00009 00010 using namespace TSF; 00011 using std::string; 00012 00013 using std::ostream; 00014 00015 00016 /** \ingroup LowLevelSymbolics 00017 * reference-counting handle for ExprBase. 00018 */ 00019 00020 class ExprHandle 00021 { 00022 public: 00023 /** \name Developer-only methods */ 00024 //@{ 00025 /** construct given a ExprBase ptr */ 00026 ExprHandle(ExprBase* ptr); 00027 /** */ 00028 ~ExprHandle(); 00029 /** */ 00030 ExprHandle(const ExprHandle& other); 00031 00032 /** */ 00033 const ExprBase* ptr() const {return ptr_;} 00034 /** */ 00035 ExprBase* ptr() {return ptr_;} 00036 /** */ 00037 void killCopy(); 00038 /** */ 00039 void fullForm(ostream& os) const ; 00040 //@} 00041 private: 00042 const ExprHandle& operator=(const ExprHandle& other); 00043 ExprBase* ptr_; 00044 int* refCount_; 00045 }; 00046 00047 00048 } 00049 #endif