00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026 #include "VectorParser.ih"
00027
00028
00029
00030 #define prefix_
00031
00032
00033
00034
00035
00036 template <class ElementParser, class AuxPolicy>
00037 prefix_ void senf::VectorParser<ElementParser,AuxPolicy>::init()
00038 const
00039 {
00040 aux(0, i(), state());
00041 iterator i (begin());
00042 iterator const e (end());
00043 for (; i!=e; ++i)
00044 i->init();
00045 }
00046
00047
00048
00049
00050 template <class ElementParser, class AuxPolicy>
00051 prefix_ void senf::VectorParser_Container<ElementParser,AuxPolicy>::init()
00052 const
00053 {
00054 iterator i (begin());
00055 iterator const e (end());
00056 for (; i!=e; ++i)
00057 i->init();
00058 }
00059
00060
00061
00062 template <class ElementParser, class AuxPolicy>
00063 prefix_ typename senf::VectorParser_Container<ElementParser,AuxPolicy>::iterator
00064 senf::VectorParser_Container<ElementParser,AuxPolicy>::shift(iterator pos, size_type n)
00065 {
00066 size_type ix (std::distance(data().begin(),pos.raw()));
00067 setSize(size()+n);
00068 data().insert(pos.raw(),n*ElementParser::fixed_bytes,0);
00069 return iterator(boost::next(data().begin(),ix),state());
00070 }
00071
00072 template <class ElementParser, class AuxPolicy>
00073 template <class Value>
00074 prefix_ void senf::VectorParser_Container<ElementParser,AuxPolicy>::insert(iterator pos,
00075 size_type n,
00076 Value const & t)
00077 {
00078 for (iterator j (shift(pos,n)); n; --n, ++j)
00079 *j << t;
00080 }
00081
00082 #ifndef DOXYGEN
00083 template <class ElementParser, class AuxPolicy>
00084 template <class ForwardIterator>
00085 prefix_ void senf::VectorParser_Container<ElementParser,AuxPolicy>::
00086 insert(iterator pos, ForwardIterator f, ForwardIterator l,
00087 typename boost::disable_if< boost::is_convertible<ForwardIterator,size_type> >::type *)
00088 {
00089 for (iterator j (shift(pos,std::distance(f,l))); f!=l; ++f,++j)
00090 *j << *f;
00091 }
00092 #else
00093 template <class ElementParser, class AuxPolicy>
00094 template <class ForwardIterator>
00095 prefix_ void senf::VectorParser_Container<ElementParser,AuxPolicy>::
00096 insert(iterator pos, ForwardIterator f, ForwardIterator l)
00097 {}
00098 #endif
00099
00100 template <class ElementParser, class AuxPolicy>
00101 prefix_ void senf::VectorParser_Container<ElementParser,AuxPolicy>::resize(size_type n)
00102 {
00103 if (size()>=n)
00104 erase(boost::next(begin(),n),end());
00105 else
00106 push_back_space(n-size());
00107 }
00108
00109 template <class ElementParser, class AuxPolicy>
00110 template <class Value>
00111 prefix_ void senf::VectorParser_Container<ElementParser,AuxPolicy>::resize(size_type n,
00112 Value value)
00113 {
00114 if (size()>=n)
00115 erase(boost::next(begin(),n),end());
00116 else
00117 push_back(value,n-size());
00118 }
00119
00120
00121 #undef prefix_
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132