00001 #include <list> 00002 00003 namespace groupindex 00004 { 00005 00033 template <class T> 00034 class trivial_container : public T 00035 { 00036 00037 public: 00038 00039 class iterator; 00040 00041 inline void insert(const iterator& pos, const T& t) 00042 { 00043 *this = t; 00044 } 00045 00046 inline trivial_container<T>() : T() {} 00047 00048 inline trivial_container<T>(const T& t) : T(t) {} 00049 00051 class iterator 00052 { 00053 private: 00054 T* t; 00055 public: 00056 00057 iterator() {} 00058 00059 inline iterator(const trivial_container<T>& s) 00060 { 00061 this->t = (T*)&s; 00062 } 00063 00064 inline iterator(trivial_container<T>* s) 00065 { 00066 this->t = s; 00067 } 00068 00069 inline iterator& operator++() 00070 { 00071 t = NULL; 00072 return *this; 00073 } 00074 00075 inline iterator& operator++(int) 00076 { 00077 t = NULL; 00078 return *this; 00079 } 00080 00081 inline bool operator!=(const iterator& it) 00082 { 00083 return t!=it.t; 00084 00085 } 00086 00087 inline T& operator*() 00088 { 00089 return *t; 00090 } 00091 00092 }; 00093 00094 inline iterator begin() const 00095 { 00096 return iterator(*this); 00097 }; 00098 00099 inline iterator end() const 00100 { 00101 return iterator((trivial_container<T>*)NULL); 00102 }; 00103 00104 00105 }; 00106 00110 template<class T> 00111 class ac_list : public ::std::list<T> 00112 { 00113 00114 public: 00115 00116 ac_list() {} 00117 00118 ac_list(T& t) 00119 { 00120 insert(begin(),t); 00121 } 00122 00123 ac_list<T>& operator=(const T& t) 00124 { 00125 insert(begin(),t); 00126 } 00127 00128 operator T&() 00129 { 00130 return *begin(); 00131 } 00132 00133 }; 00134 00135 }