blob: c72316bd6376442097440c78a3b379f990943783 [file] [log] [blame]
/////////////////////////////////////////////////////////////////////////////
//
// (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;
}