|
Boost : |
Subject: Re: [boost] [interprocess] [bimap] Using raw pointers
From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2013-01-25 15:30:35
El 25/01/2013 20:05, Matias Capeletto escribió:
> Hello,
>
> Currently Boost.Bimap does not work with interprocess allocators
> because it uses references to connect the views and the core. I want
> to change this but avoid any performance hit and I am wondering what
> is the best way to do it.
> It will be easy if Bimap interface will use .left() and .right()
> functions to access the map views (then I could just init the views at
> each call like Boost.MultiIndex get() index function does) but I am
> stuck with the left and right members (and I actually like them).
> So, what I want to be able to do is the following:
>
> template<class Bimap>
> class left_type {
> Bimap* core;
> public:
> left_type(Bimap* c) : core(c) {};
> ...
> };
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;
and use it
template<class Bimap>
class left_type {
typedef boost::pointer_to_other
<typename Bimap::pointer, Bimap>::type bimap_ptr;
bimap_ptr core;
public:
left_type(const bimap_ptr &c) : core(c) {};
};
Best,
Ion
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk