00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <boost/concept_check.hpp>
00023
00024 #include <algorithm>
00025 #include <iterator>
00026
00027
00028 template <typename T>
00029 template <typename InputIterator>
00030 BTK::SharedVectorBase<T>::
00031 SharedVectorBase(InputIterator first,
00032 InputIterator last){
00034
00035
00036
00037
00038 for (;first!=last;++first) { push_back(static_cast<value_type>(*first)); }
00039 }
00040
00041 template <typename T>
00042 void
00043 BTK::SharedVectorBase<T>::
00044 insert(iterator pos,
00045 size_type s,
00046 const value_type& x){
00047 direct_iterator _pos = pos.base();
00048 for(;s>0;--s){
00049 shared_pointer p(new value_type(x));
00050 _pos = _vector.insert(_pos,p);
00051 _pos++;
00052 }
00053 }
00054
00055 template <typename T>
00056 template <typename InputIterator>
00057 void
00058 BTK::SharedVectorBase<T>::
00059 insert(iterator pos,
00060 InputIterator first,
00061 InputIterator last){
00062 direct_iterator _pos = pos.base();
00063 while(first != last){
00064 shared_pointer p(new value_type(*first));
00065 _pos = _vector.insert(_pos,p);
00066 ++_pos; ++first;
00067 }
00068 }
00069
00070 template <typename T>
00071 template <typename T2>
00072 void
00073 BTK::SharedVectorBase<T>::
00074 deep_copy(const SharedVectorBase<T2>& source) {
00075 boost::function_requires<boost::ConvertibleConcept<T2,value_type> >();
00076
00077 clear();
00078 reserve(source.size());
00079 typename SharedVectorBase<T2>::const_iterator i=source.begin(),i_end=source.end();
00080 for(;i!=i_end;++i){
00081 push_back(*i);
00082 }
00083 #if 0
00084
00085
00086
00087
00088
00089
00090 std::copy(source.begin(),
00091 source.end(),
00092 std::back_insert_iterator<self_type>(*this));
00093 #endif
00094 }
00095
00096 template <typename T>
00097 void
00098 BTK::SharedVectorBase<T>::
00099 shallow_copy(const self_type& source){
00100 clear();
00101 reserve(source.size());
00102 std::copy(source._vector.begin(),
00103 source._vector.end(),
00104 std::back_insert_iterator<container_type>(_vector));
00105 }
00106
00107