Only runs standard stack test cases
[libcds.git] / benchmark-drivers / segmentedqueue_driver.cpp
1 #include <cds/gc/dhp.h>
2 #include <cds/gc/hp.h>
3 #include <cds/init.h>
4 #include <cds/intrusive/segmented_queue.h>
5 #include <iostream>
6 #include <string>
7
8 using namespace std;
9
10 namespace ci = cds::intrusive;
11 typedef cds::gc::HP hp_gc;
12
13 struct Foo {
14   Foo(int x) : x(x) {}
15   int x;
16 };
17
18 // Declare traits for the queue
19 struct MyTraits : public cds::intrusive::segmented_queue::traits {
20   typedef cds::intrusive::segmented_queue::stat<> stat;
21   typedef cds::atomicity::item_counter item_counter;
22 };
23
24 // The queue stores the pointers to enqueued items so no special node hooks are
25 // needed.
26 // At least, declare the queue type
27 typedef ci::SegmentedQueue<hp_gc, Foo, MyTraits> MyQueue;
28
29 int main() {
30   cds::Initialize();
31
32   {
33     // Initialize Hazard Pointer singleton
34     cds::gc::HP hpGC(128, 8, 128);
35     // If main thread uses lock-free containers
36     // the main thread should be attached to libcds infrastructure
37     cds::threading::Manager::attachThread();
38
39     MyQueue q(1024);
40     Foo *f = new Foo(1);
41     q.enqueue(*f);
42     Foo *res = q.dequeue();
43     if (res) {
44       cout << "Dequeued " << res->x << "\n";
45     } else {
46       cout << "Dequeued none\n";
47     }
48   }
49
50   cds::Terminate();
51   return 0;
52 }