$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [multi-index] Changing hash_index_node.hpp to	doublelinked list
From: joaquin_at_[hidden]
Date: 2009-04-29 05:09:43
brad higgins escribió:
> Hi Joaquín,
>    Thanks for the quick response.  I have attached
>    the files I edited.
>
> Thank you very much for the help,
> Brad
>   
Hi Brad,
There were one more change to do in boost/multi_index/hashed_index.hpp,
please find attached a .diff file. I also updated the invariant_() 
member function
to check the new doubly linked internal structure.
Moreover, your modified hashed_index retains forward iterators from the
original, but I guess you can trivially implement them as bidirectional 
(clue: see
how this is done at sequenced_index.hpp).
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
Index: hashed_index.hpp
===================================================================
--- hashed_index.hpp	(revision 52074)
+++ hashed_index.hpp	(working copy)
@@ -679,10 +679,12 @@
             map.find(
               static_cast<final_node_type*>(
                 node_type::from_impl(next_org))))->impl();
+        cpy->next()->prev()=cpy;
         next_org=next_org->next();
         cpy=cpy->next();
       }
       cpy->next()=begin_cpy;
+      begin_cpy->prev()=cpy;
     }
 
     super::copy_(x,map);
@@ -938,7 +940,12 @@
     }
     else{
       size_type s0=0;
-      for(const_iterator it=begin(),it_end=end();it!=it_end;++it,++s0){}
+      for(const_iterator it=begin(),it_end=end();it!=it_end;++it,++s0){
+        if(it.get_node()->impl()->next()->prev()!=it.get_node()->impl())
+          return false;
+        if(it.get_node()->impl()->prev()->next()!=it.get_node()->impl())
+          return false;
+      }
       if(s0!=size())return false;
 
       size_type s1=0;