00001 // -*- C++ -*- 00002 00008 #if !defined(__ads_utility_ObjectAndBlankSpace_h__) 00009 #define __ads_utility_ObjectAndBlankSpace_h__ 00010 00011 #include "../defs.h" 00012 00013 BEGIN_NAMESPACE_ADS 00014 00016 template<typename _Object, int _BlankSpaceSize = 64> 00017 class ObjectAndBlankSpace : public _Object { 00018 // 00019 // Public types. 00020 // 00021 00022 public: 00023 00025 typedef _Object Base; 00026 00027 // 00028 // Member data. 00029 // 00030 00031 private: 00032 00033 // The blank space 00034 char _blankSpace[_BlankSpaceSize]; 00035 00036 public: 00037 00038 //-------------------------------------------------------------------------- 00040 00041 00043 ObjectAndBlankSpace() : 00044 Base() 00045 {} 00046 00048 ObjectAndBlankSpace(const ObjectAndBlankSpace& other) : 00049 Base(other) 00050 {} 00051 00053 ObjectAndBlankSpace& 00054 operator=(const ObjectAndBlankSpace& other) { 00055 if (this != &other) { 00056 Base::operator=(other); 00057 } 00058 return *this; 00059 } 00060 00062 ObjectAndBlankSpace(const Base& object) : 00063 Base(object) 00064 {} 00065 00067 ~ObjectAndBlankSpace() 00068 {} 00069 00071 }; 00072 00073 00074 00075 00076 00077 #if 0 00078 00079 template<typename _Object, int _BlankSpaceSize = 64> 00080 class ObjectAndBlankSpace { 00081 // 00082 // Public types. 00083 // 00084 00085 public: 00086 00088 typedef _Object Object; 00089 00090 // 00091 // Member data. 00092 // 00093 00094 private: 00095 00096 // The object 00097 Object _object; 00098 // The blank space 00099 char _blankSpace[_BlankSpaceSize]; 00100 00101 public: 00102 00103 //-------------------------------------------------------------------------- 00105 00106 00108 ObjectAndBlankSpace() : 00109 _object() 00110 {} 00111 00113 ObjectAndBlankSpace(const ObjectAndBlankSpace& other) : 00114 _object(other._object) 00115 {} 00116 00118 ObjectAndBlankSpace& 00119 operator=(const ObjectAndBlankSpace& other) { 00120 if (this != &other) { 00121 _object = other._object; 00122 } 00123 return *this; 00124 } 00125 00127 ObjectAndBlankSpace(const Object& object) : 00128 _object(object) 00129 {} 00130 00132 ~ObjectAndBlankSpace() 00133 {} 00134 00136 //-------------------------------------------------------------------------- 00138 00139 00140 operator const Object&() const { 00141 return _object; 00142 } 00143 00144 operator Object&() { 00145 return _object; 00146 } 00147 00149 }; 00150 #endif 00151 00152 END_NAMESPACE_ADS 00153 00154 #endif