16 Şubat 2018 Cuma

interprocess map Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/interprocess/containers/map.hpp>
Tanımlama
Örnek
Şöyle yaparız.
template <typename K, typename V, typename Cmp = std::less<K> >
 using Map = bip::map<K, V, Cmp, Alloc<std::pair<K const, V> > >;
Örnek
Şöyle yaparız.
using Segment = bip::managed_shared_memory;
using Manager = Segment::segment_manager;

template <typename T> using Alloc 
  = boost::container::scoped_allocator_adaptor<bip::allocator<T, Manager> >;

using String = bip::basic_string<char, std::char_traits<char>, Alloc<char> >;

template <typename K, typename V, typename Cmp = std::less<K> > using Map 
  = bip::map<K, V, Cmp, Alloc<std::pair<K const, V> > >;
Constructor
Örnek
Şöyle yaparız.
Segment smt(bip::open_or_create, "de06c60a", 20ul<<20); // 20 mb
auto& m = *smt.find_or_construct<Map<String, String> >("dict")
  (smt.get_segment_manager());
Örnek
Şöyle yaparız.
Segment smt(bip::open_or_create, "095540a3-ceaa-4431-828d-df21d5e384ae", 65536);

auto& m = *smt.find_or_construct<Map<int, Order>>("MySHMMapName")
  (smt.get_segment_manager());
emplace metodu
Örnek
Şöyle yaparız.
m.emplace("1", "one");
Örnek
std::piecewise_construct ile şöyle yaparız.
auto insert = [&pmap](int i, auto&& s) {
  using namespace std;
  pmap.emplace(piecewise_construct, tie(i), tie(i, s));
};

insert(1, "one");
insert(2, "two");
insert(3, "three");
get_allocator metodu
Şöyle yaparız.
pmap.emplace(1, "one", pmap.get_allocator());
empty metodu
Şöyle yaparız.
if (m.empty()) {
  ...
} 

Hiç yorum yok:

Yorum Gönder