
On Fri, Jan 25, 2013 at 9:30 PM, Ion GaztaƱaga <igaztanaga@gmail.com> wrote:
If Bimap exports a pointer type (say Bimap::pointer or similar) that can be offset_ptr or raw pointer (I think multiindex exports it), then you just need to use:
typedef boost::pointer_to_other <typename Bimap::pointer, Bimap>::type bimap_ptr;
typedef boost::intrusive::pointer_traits <typename Bimap::pointer>:: rebind_pointer<Bimap>::type bimap_ptr;
Thanks for the answer Ion. Ok, so doing this I will only pay for the offset_ptr in case the allocator needs it. That is good. But still when users will select an interprocess allocator they will be paying for every call to the views: left_type& left = bm.left; left.size(); // needs to use offset_ptr What MultiIndex is doing is creating the index views with a pointer to (this) every time the user ask them. I could do the same if I deprecate .left and .right and include get_left() and get_right() functions. But as I said I will like to keep the current interface... is something like the rewire extension impossible? (I am afraid it is if you are pointing to read only memory). Or maybe some another trick to point the members to the core. Best Matias