Beispiel #1
0
int main()
{
    Rtree<int> rt;
    Rec<int> a(1,3);
    Rec<int> b(2,5);
    Rec<int> c(5,9);
    Rec<int> d(8,2);
    Rec<int> e(11,1);
    Rec<int> f(4,6);
    Rec<int> g(3,4);
    Rec<int> h(6,6);
    Rec<int> i(9,3);
    Rec<int> j(6,1);
    Rec<int> k(10,2);
    Rec<int> l(2,9);
    Rec<int> n(3,8);

    rt.insert(a);
    rt.insert(b);
    rt.insert(c);
    rt.insert(d);
    rt.insert(e);
    rt.insert(f);
    rt.insert(g);
    rt.insert(h);
    rt.insert(i);
    rt.insert(j);
    rt.insert(k);
    rt.insert(l);
    //rt.insert(n);
    rt.print();

    return 0;
}
Beispiel #2
0
template <typename Rtree> inline
bool are_counts_ok(Rtree const& tree)
{
    typedef utilities::view<Rtree> RTV;
    RTV rtv(tree);

    visitors::are_counts_ok<
        typename RTV::value_type,
        typename RTV::options_type,
        typename RTV::box_type,
        typename RTV::allocators_type
    > v(tree.parameters());
    
    rtv.apply_visitor(v);

    return v.result;
}
Beispiel #3
0
//For parent process argc == 1, for child process argc > 1
int main(int argc, char *argv[])
{
    using namespace boost::interprocess;
    namespace bg = boost::geometry;
    namespace bgm = bg::model;
    namespace bgi = bg::index;

    typedef bgm::point<float, 2, bg::cs::cartesian> P;
    typedef bgm::box<P> B;

    typedef bgi::linear<32, 8> Par;
    typedef bgi::indexable<B> I;
    typedef bgi::equal_to<B> E;
    typedef allocator<B, managed_shared_memory::segment_manager> Alloc;
    typedef bgi::rtree<B, Par, I, E, Alloc> Rtree;

    //Parent process
    if ( argc == 1 )
    {
        struct shm_remove
        {
            shm_remove() { shared_memory_object::remove("MySharedMemory"); }
            ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
        } remover;

        managed_shared_memory segment(create_only, "MySharedMemory", 65536);

        std::cout << "Parent: Constructing container\n";

        Rtree * tree = segment.construct<Rtree>("Rtree")(Par(), I(), E(), Alloc(segment.get_segment_manager()));

        std::cout << "Parent: Filling container with 100 boxes\n";

        for ( float i = 0 ; i < 100 ; i += 1 )
            tree->insert(B(P(i, i), P(i+0.5f, i+0.5f)));

        std::cout << "Parent: Tree content\n";
        Rtree::bounds_type bb = tree->bounds();
        std::cout << "[(" << bg::get<0>(bb.min_corner()) << ", " << bg::get<1>(bb.min_corner())
                  << ")(" << bg::get<0>(bb.max_corner()) << ", " << bg::get<1>(bb.max_corner()) << ")]\n";

        std::cout << "Parent: Running child process\n";

        std::string s(argv[0]); s += " child ";
        if ( 0 != std::system(s.c_str()) )
            return 1;

        if ( segment.find<Rtree>("Rtree").first )
            return 1;

        std::cout << "Parent: Container was properly destroyed by the child process\n";
   }
   //Child process
   else
   {
      managed_shared_memory segment(open_only, "MySharedMemory");

      std::cout << "Child: Searching of the container in shared memory\n";

      Rtree * tree = segment.find<Rtree>("Rtree").first;

      std::cout << "Child: Querying for objects intersecting box = [(45, 45)(55, 55)]\n";

      std::vector<B> result;
      unsigned k = tree->query(bgi::intersects(B(P(45, 45), P(55, 55))), std::back_inserter(result));

      std::cout << "Child: Found objects:\n";
      std::cout << k << "\n";
      BOOST_FOREACH(B const& b, result)
      {
        std::cout << "[(" << bg::get<0>(b.min_corner()) << ", " << bg::get<1>(b.min_corner())
                  << ")(" << bg::get<0>(b.max_corner()) << ", " << bg::get<1>(b.max_corner()) << ")]\n";
      }
      std::cout << "\n";

      std::cout << "Child: Destroying container\n";

      segment.destroy<Rtree>("Rtree");
   }