summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/intrusive/example/doc_any_hook.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/boost/libs/intrusive/example/doc_any_hook.cpp
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/intrusive/example/doc_any_hook.cpp')
-rw-r--r--src/boost/libs/intrusive/example/doc_any_hook.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/boost/libs/intrusive/example/doc_any_hook.cpp b/src/boost/libs/intrusive/example/doc_any_hook.cpp
new file mode 100644
index 00000000..2526f70d
--- /dev/null
+++ b/src/boost/libs/intrusive/example/doc_any_hook.cpp
@@ -0,0 +1,65 @@
+/////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2008-2013
+//
+// 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.
+//
+/////////////////////////////////////////////////////////////////////////////
+//[doc_any_hook
+#include <vector>
+#include <boost/intrusive/any_hook.hpp>
+#include <boost/intrusive/slist.hpp>
+#include <boost/intrusive/list.hpp>
+
+using namespace boost::intrusive;
+
+class MyClass : public any_base_hook<> //Base hook
+{
+ int int_;
+
+ public:
+ any_member_hook<> member_hook_; //Member hook
+
+ MyClass(int i = 0) : int_(i)
+ {}
+ //<-
+ int get_int() const { return int_; }
+ //->
+};
+
+int main()
+{
+ //Define a base hook option that converts any_base_hook to a slist hook
+ typedef any_to_slist_hook < base_hook< any_base_hook<> > > BaseSlistOption;
+ typedef slist<MyClass, BaseSlistOption> BaseSList;
+
+ //Define a member hook option that converts any_member_hook to a list hook
+ typedef any_to_list_hook< member_hook
+ < MyClass, any_member_hook<>, &MyClass::member_hook_> > MemberListOption;
+ typedef list<MyClass, MemberListOption> MemberList;
+
+ //Create several MyClass objects, each one with a different value
+ std::vector<MyClass> values;
+ for(int i = 0; i < 100; ++i){ values.push_back(MyClass(i)); }
+
+ BaseSList base_slist; MemberList member_list;
+
+ //Now insert them in reverse order in the slist and in order in the list
+ for(std::vector<MyClass>::iterator it(values.begin()), itend(values.end()); it != itend; ++it)
+ base_slist.push_front(*it), member_list.push_back(*it);
+
+ //Now test lists
+ BaseSList::iterator bit(base_slist.begin());
+ MemberList::reverse_iterator mrit(member_list.rbegin());
+ std::vector<MyClass>::reverse_iterator rit(values.rbegin()), ritend(values.rend());
+
+ //Test the objects inserted in the base hook list
+ for(; rit != ritend; ++rit, ++bit, ++mrit)
+ if(&*bit != &*rit || &*mrit != &*rit) return 1;
+ return 0;
+}
+//]