recursive_test.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // (C) Copyright Ion Gaztanaga 2007-2013
  4. //
  5. // Distributed under the Boost Software License, Version 1.0.
  6. // (See accompanying file LICENSE_1_0.txt or copy at
  7. // http://www.boost.org/LICENSE_1_0.txt)
  8. //
  9. // See http://www.boost.org/libs/intrusive for documentation.
  10. //
  11. /////////////////////////////////////////////////////////////////////////////
  12. #include <boost/intrusive/list.hpp>
  13. #include <boost/intrusive/slist.hpp>
  14. #include <boost/intrusive/set.hpp>
  15. #include <boost/intrusive/unordered_set.hpp>
  16. #include <boost/intrusive/avl_set.hpp>
  17. #include <boost/intrusive/sg_set.hpp>
  18. #include <boost/intrusive/splay_set.hpp>
  19. #include <boost/intrusive/treap_set.hpp>
  20. #include <cassert>
  21. using namespace boost::intrusive;
  22. typedef list_base_hook<> ListBaseHook;
  23. typedef slist_base_hook<> SListBaseHook;
  24. typedef set_base_hook<> SetBaseHook;
  25. typedef unordered_set_base_hook<> USetBaseHook;
  26. class Foo;
  27. typedef unordered_set<Foo, base_hook<USetBaseHook> > USet;
  28. class Foo : public ListBaseHook, public SListBaseHook, public SetBaseHook, public USetBaseHook
  29. {
  30. USet::bucket_type buckets[1];
  31. Foo(const Foo &);
  32. Foo & operator=(const Foo &);
  33. public:
  34. Foo() : uset_children(USet::bucket_traits(buckets, 1))
  35. {}
  36. list <Foo, base_hook<ListBaseHook> > list_children;
  37. slist<Foo, base_hook<SListBaseHook> > slist_children;
  38. set <Foo, base_hook<SetBaseHook> > set_children;
  39. USet uset_children;
  40. };
  41. void instantiate()
  42. {
  43. list< Foo, base_hook<ListBaseHook> > list_; list_.clear();
  44. slist< Foo, base_hook<SListBaseHook> > slist_; slist_.clear();
  45. set< Foo, base_hook<SetBaseHook> > set_; set_.clear();
  46. USet::bucket_type buckets[1];
  47. USet unordered_set_(USet::bucket_traits(buckets, 1)); unordered_set_.clear();
  48. }
  49. int main()
  50. {
  51. instantiate();
  52. //A small test with list
  53. {
  54. Foo f, f2;
  55. list< Foo, base_hook<ListBaseHook> > l;
  56. l.insert(l.begin(), f);
  57. l.begin()->list_children.insert(l.begin()->list_children.begin(), f2);
  58. assert(l.size() == l.begin()->list_children.size());
  59. l.begin()->list_children.clear();
  60. l.clear();
  61. }
  62. return 0;
  63. }