| ///////////////////////////////////////////////////////////////////////////// |
| // |
| // (C) Copyright Ion Gaztanaga 2007-2010 |
| // |
| // Distributed under the Boost Software License, Version 1.0. |
| // (See accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| // |
| // See http://www.boost.org/libs/intrusive for documentation. |
| // |
| ///////////////////////////////////////////////////////////////////////////// |
| #include <boost/intrusive/list.hpp> |
| #include <boost/intrusive/slist.hpp> |
| #include <boost/intrusive/set.hpp> |
| #include <boost/intrusive/unordered_set.hpp> |
| #include <boost/intrusive/avl_set.hpp> |
| #include <boost/intrusive/sg_set.hpp> |
| #include <boost/intrusive/splay_set.hpp> |
| #include <boost/intrusive/treap_set.hpp> |
| #include <cassert> |
| |
| using namespace boost::intrusive; |
| |
| typedef list_base_hook<> ListBaseHook; |
| typedef slist_base_hook<> SListBaseHook; |
| typedef set_base_hook<> SetBaseHook; |
| typedef unordered_set_base_hook<> USetBaseHook; |
| |
| class Foo; |
| typedef unordered_set<Foo, base_hook<USetBaseHook> > USet; |
| |
| class Foo : public ListBaseHook, public SListBaseHook, public SetBaseHook, public USetBaseHook |
| { |
| USet::bucket_type buckets[1]; |
| Foo(const Foo &); |
| Foo & operator=(const Foo &); |
| |
| public: |
| Foo() : uset_children(USet::bucket_traits(buckets, 1)) |
| {} |
| list <Foo, base_hook<ListBaseHook> > list_children; |
| slist<Foo, base_hook<SListBaseHook> > slist_children; |
| set <Foo, base_hook<SetBaseHook> > set_children; |
| USet uset_children; |
| }; |
| |
| void instantiate() |
| { |
| list< Foo, base_hook<ListBaseHook> > list_; list_.clear(); |
| slist< Foo, base_hook<SListBaseHook> > slist_; slist_.clear(); |
| set< Foo, base_hook<SetBaseHook> > set_; set_.clear(); |
| |
| USet::bucket_type buckets[1]; |
| USet unordered_set_(USet::bucket_traits(buckets, 1)); unordered_set_.clear(); |
| } |
| int main() |
| { |
| instantiate(); |
| |
| //A small test with list |
| { |
| Foo f, f2; |
| list< Foo, base_hook<ListBaseHook> > l; |
| l.insert(l.begin(), f); |
| l.begin()->list_children.insert(l.begin()->list_children.begin(), f2); |
| assert(l.size() == l.begin()->list_children.size()); |
| l.begin()->list_children.clear(); |
| l.clear(); |
| } |
| return 0; |
| } |