00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef lestes__std___list_hh___included
00029 #define lestes__std___list_hh___included
00030
00031 #include <lestes/common.hh>
00032 #include <lestes/std/collection_refl.hh>
00033 #include <lestes/std/objectize.hh>
00034 #include <list>
00035 #include <iterator>
00036 #include <algorithm>
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 package(lestes);
00048 package(std);
00049
00050 template< typename T >
00051 class list : public object, public ::std::list<T> {
00052 public:
00053
00054 static ptr< list<T> > create();
00055 #if 0
00056
00057 template<typename InputIterator>
00058 static ptr< list < T > > create(InputIterator first, InputIterator last);
00059 #endif
00060
00061 static ptr< list<T> > create( ptr< list<T> > );
00062 virtual ptr<reflection_list> reflection_get() const;
00063 virtual ptr<field_list_list> field_values_get() const;
00064 protected:
00065
00066 list();
00067
00068 list( ptr< list<T> > );
00069 #if 0
00070
00071 template<typename InputIterator>
00072 list(InputIterator first, InputIterator last) : ::std::list < T >(first,last) {}
00073 #endif
00074 };
00075
00076 template< typename T >
00077 class list< srp<T> > : public object, public ::std::list< srp<T> > {
00078 public:
00079
00080 static ptr< list< srp<T> > > create();
00081 #if 0
00082
00083 template<typename InputIterator>
00084 static ptr< list < srp < T > > > create(InputIterator first, InputIterator last);
00085 #endif
00086
00087 static ptr< list< srp<T> > > create( ptr< list< srp<T> > > );
00088 virtual ptr<reflection_list> reflection_get() const;
00089 virtual ptr<field_list_list> field_values_get() const;
00090 protected:
00091
00092 list();
00093
00094 list( ptr< list< srp<T> > > );
00095 #if 0
00096
00097 template<typename InputIterator>
00098 list(InputIterator first, InputIterator last) : ::std::list < srp < T > >(first,last) {}
00099 #endif
00100
00101 void gc_mark(void);
00102 };
00103
00104 template< typename T >
00105 ptr< list<T> > list<T>::create() {
00106 return new list<T>();
00107 }
00108
00109 template< typename T >
00110 ptr< list<T> > list<T>::create( ptr< list<T> > from ) {
00111 return new list<T>(from);
00112 }
00113
00114 template< typename T >
00115 ptr<object::reflection_list> list<T>::reflection_get() const
00116 {
00117 if (!collection_refl::list_simple)
00118 collection_refl::list_simple_init( object::reflection_get() );
00119 return collection_refl::list_simple;
00120 }
00121
00122 template< typename T >
00123 ptr<object::field_list_list> list<T>::field_values_get() const
00124 {
00125 ptr<field_list_list> result = object::field_values_get();
00126 result->push_back( value_list::create() );
00127
00128 transform( this->begin(), this->end(),
00129 back_inserter( *result->back() ), unary_objectizer<T>() );
00130 return result;
00131 }
00132
00133 template< typename T >
00134 list<T>::list()
00135 : object(), ::std::list<T>()
00136 {}
00137
00138 template< typename T >
00139 list<T>::list( ptr< list<T> > from )
00140 : object(), ::std::list<T>( *checked(from) )
00141 {}
00142
00143 template< typename T >
00144 ptr< list< srp<T> > > list< srp<T> >::create() {
00145 return new list< srp<T> >();
00146 }
00147
00148 template< typename T >
00149 ptr< list< srp<T> > > list< srp<T> >::create( ptr< list< srp<T> > > from )
00150 {
00151 return new list< srp<T> >(from);
00152 }
00153
00154 #if 0
00155 template<typename T>
00156 template<typename InputIterator>
00157 ptr < list < T > > list < T >::create(InputIterator first, InputIterator last)
00158 {
00159 return new list < T >(first, last);
00160 }
00161
00162 template<typename T>
00163 template<typename InputIterator>
00164 ptr < list < srp < T > > > list < srp < T > >::create(InputIterator first, InputIterator last)
00165 {
00166 return new list < srp < T > >(first, last);
00167 }
00168 #endif
00169
00170 template< typename T >
00171 ptr<object::reflection_list> list< srp<T> >::reflection_get() const
00172 {
00173 if (!collection_refl::list_srp)
00174 collection_refl::list_srp_init( object::reflection_get() );
00175 return collection_refl::list_srp;
00176 }
00177
00178 template< typename T >
00179 ptr<object::field_list_list> list< srp<T> >::field_values_get() const
00180 {
00181 ptr<field_list_list> result = object::field_values_get();
00182 result->push_back( value_list::create() );
00183 result->back()->insert( result->back()->end(), this->begin(), this->end() );
00184 return result;
00185 }
00186
00187 template< typename T >
00188 list< srp<T> >::list()
00189 : object(), ::std::list< srp<T> >()
00190 { }
00191
00192 template< typename T >
00193 list< srp<T> >::list( ptr< list< srp<T> > > from )
00194 : object(), ::std::list< srp<T> >( *checked(from) )
00195 {}
00196
00197 template< typename T >
00198 void list< srp<T> >::gc_mark() {
00199
00200 for (typename list::iterator i = this->begin(); i != this->end(); ++i)
00201 i->gc_mark();
00202 object::gc_mark();
00203 }
00204
00205 end_package(std);
00206 end_package(lestes);
00207
00208 #endif // lestes__std___list_hh___included
00209