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