Packets: Fix ListBParser and ListNParser to corretly utilize AuxPolicy::WrapperPolicy
g0dil [Wed, 6 Oct 2010 13:37:19 +0000 (13:37 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1727 270642c3-0616-0410-b53a-bc976706d245

senf/Packets/ListBParser.ct
senf/Packets/ListBParser.cti
senf/Packets/ListBParser.ih
senf/Packets/ListNParser.cti
senf/Packets/ListNParser.ih

index 03baab8..f430e70 100644 (file)
@@ -37,12 +37,12 @@ template <class ElementParser, class AuxPolicy>
 prefix_
 senf::detail::ListBParser_Policy<ElementParser,AuxPolicy>::container_policy::
 container_policy(parser_policy const & p)
-    : AuxPolicy (p)
+    : AuxPolicy::WrapperPolicy (p)
 {
     parser_type selfp (parser_type::get(p));
     size_type totalsz (selfp.bytes());
     data_iterator const e (selfp.i(totalsz));
-    data_iterator i (AuxPolicy::adjust(selfp.i(), selfp.state()));
+    data_iterator i (AuxPolicy::WrapperPolicy::adjust(selfp.i(), selfp.state()));
     n_ = 0;
     while (i!=e) {
         ElementParser p (i,selfp.state());
index 80e8c79..9f2dcf4 100644 (file)
@@ -79,7 +79,7 @@ senf::detail::ListBParser_Policy<ElementParser,AuxPolicy>::container_policy::byt
                                                                                    state_type s)
     const
 {
-    return AuxPolicy::aux(i,s) + AuxPolicy::aux_bytes;
+    return AuxPolicy::WrapperPolicy::aux(i,s) + AuxPolicy::aux_bytes;
 }
 
 template <class ElementParser, class AuxPolicy>
@@ -97,7 +97,7 @@ init(data_iterator i, state_type s)
 {
     n_ = 0;
     container_size_ = s->size();
-    AuxPolicy::aux(0,i,s);
+    AuxPolicy::WrapperPolicy::aux(0,i,s);
 }
 
 template <class ElementParser, class AuxPolicy>
@@ -119,7 +119,8 @@ prefix_ void senf::detail::ListBParser_Policy<ElementParser,AuxPolicy>::containe
 erase(container_type & c, data_iterator p)
 {
     size_type b (senf::bytes(ElementParser(p,c.state())));
-    AuxPolicy::aux( AuxPolicy::aux(c.i(), c.state())-b, c.i(), c.state());
+    AuxPolicy::WrapperPolicy::aux(
+        AuxPolicy::WrapperPolicy::aux(c.i(), c.state())-b, c.i(), c.state());
     --n_;
     // The container will be reduced by b bytes directly after this call
     container_size_ = c.data().size()-b;
@@ -131,7 +132,8 @@ senf::detail::ListBParser_Policy<ElementParser,AuxPolicy>::container_policy::
 insert(container_type & c, data_iterator p)
 {
     size_type b (senf::bytes(ElementParser(p,c.state())));
-    AuxPolicy::aux( AuxPolicy::aux(c.i(), c.state())+b, c.i(), c.state());
+    AuxPolicy::WrapperPolicy::aux(
+        AuxPolicy::WrapperPolicy::aux(c.i(), c.state())+b, c.i(), c.state());
     ++n_;
     container_size_ = c.data().size();
 }
@@ -145,7 +147,7 @@ update(container_type const & c)
     if (container_size_ == c.data().size())
         return;
 #if 1
-    data_iterator i (AuxPolicy::adjust(c.i(), c.state()));
+    data_iterator i (AuxPolicy::WrapperPolicy::adjust(c.i(), c.state()));
     data_iterator j (i);
     for (size_type n (n_); n; --n, std::advance(j,senf::bytes(ElementParser(j,c.state())))) ;
     aux( std::distance(i,j), c.i(), c.state() );
@@ -161,7 +163,7 @@ senf::detail::ListBParser_Policy<ElementParser,AuxPolicy>::container_policy::
 setBegin(container_type const & c, iterator_data & d)
     const
 {
-    return AuxPolicy::adjust(c.i(), c.state());
+    return AuxPolicy::WrapperPolicy::adjust(c.i(), c.state());
 }
 
 template <class ElementParser, class AuxPolicy>
@@ -170,7 +172,7 @@ senf::detail::ListBParser_Policy<ElementParser,AuxPolicy>::container_policy::
 setEnd(container_type const & c, iterator_data & d)
     const
 {
-    return boost::next(AuxPolicy::adjust(c.i(), c.state()),aux(c.i(),c.state()));
+    return boost::next(AuxPolicy::WrapperPolicy::adjust(c.i(), c.state()),aux(c.i(),c.state()));
 }
 
 template <class ElementParser, class AuxPolicy>
index c3c8e2e..a69e6f9 100644 (file)
@@ -88,7 +88,7 @@ namespace detail {
 
         /** \brief Internal: ListBParser container/wrapper policy */
         struct container_policy
-            : public AuxPolicy
+            : public AuxPolicy::WrapperPolicy
         {
             typedef PacketParserBase::data_iterator data_iterator;
             typedef PacketParserBase::state_type state_type;
index c10b375..2cf61fa 100644 (file)
@@ -35,6 +35,12 @@ prefix_ senf::detail::ListNParser_Policy<ElementParser,AuxPolicy>::ListNParser_P
 {}
 
 template <class ElementParser, class AuxPolicy>
+prefix_ senf::detail::ListNParser_Policy<ElementParser,AuxPolicy>::
+ListNParser_Policy(parser_policy const & policy)
+  : AuxPolicy(policy)
+{}
+
+template <class ElementParser, class AuxPolicy>
 template <class Arg>
 prefix_
 senf::detail::ListNParser_Policy<ElementParser,AuxPolicy>::ListNParser_Policy(Arg const & aux)
index b6e2042..20bacec 100644 (file)
@@ -42,17 +42,22 @@ namespace detail {
     struct ListNParser_Policy
         : public AuxPolicy
     {
+        typedef ListNParser_Policy<
+            ElementParser, typename AuxPolicy::ParserPolicy> parser_policy;
+        typedef ListNParser_Policy<
+            ElementParser, typename AuxPolicy::WrapperPolicy> container_policy;
         typedef PacketParserBase::data_iterator data_iterator;
         typedef PacketParserBase::state_type state_type;
         typedef PacketParserBase::size_type size_type;
         typedef ElementParser element_type;
-        typedef ListParser< ListNParser_Policy > parser_type;
-        typedef ListParser_Container< ListNParser_Policy > container_type;
+        typedef ListParser<parser_policy> parser_type;
+        typedef ListParser_Container<container_policy> container_type;
 
         static const size_type init_bytes = AuxPolicy::aux_bytes;
 
         ListNParser_Policy();
         template <class Arg> ListNParser_Policy(Arg const & aux);
+        ListNParser_Policy(parser_policy const & policy);
 
         size_type bytes  (data_iterator i, state_type s) const;
         size_type size   (data_iterator i, state_type s) const;