00001 // -*- indent-tabs-mode: nil -*- 00002 00003 #ifndef __ARC_DATAHANDLE_H__ 00004 #define __ARC_DATAHANDLE_H__ 00005 00006 #include <arc/data/DataPoint.h> 00007 00008 namespace Arc { 00009 00010 class URL; 00011 class UserConfig; 00012 00014 00119 class DataHandle { 00120 public: 00122 DataHandle(const URL& url, const UserConfig& usercfg) 00123 : p(loader.load(url, usercfg)) {} 00125 ~DataHandle() { 00126 if (p) 00127 delete p; 00128 } 00130 DataPoint* operator->() { 00131 return p; 00132 } 00134 const DataPoint* operator->() const { 00135 return p; 00136 } 00138 DataPoint& operator*() { 00139 return *p; 00140 } 00142 const DataPoint& operator*() const { 00143 return *p; 00144 } 00146 bool operator!() const { 00147 return !p; 00148 } 00150 operator bool() const { 00151 return !!p; 00152 } 00156 static DataPoint* GetPoint(const URL& url, const UserConfig& usercfg) { 00157 return loader.load(url, usercfg); 00158 } 00159 private: 00161 DataPoint *p; 00162 static DataPointLoader loader; 00164 DataHandle(void); 00167 DataHandle(const DataHandle&); 00168 DataHandle& operator=(const DataHandle&); 00169 }; 00170 00171 } // namespace Arc 00172 00173 #endif // __ARC_DATAHANDLE_H__