45 bool push(T value);
46 bool pop(T& value);
47
48 ZStack<T, S>* next() const;
49 ZStack<T, S>** next_addr();
50 };
51
52 template <typename T>
53 class ZStackList {
54 private:
55 T* volatile _head;
56
57 T* encode_versioned_pointer(const T* stack, uint32_t version) const;
58 void decode_versioned_pointer(const T* vstack, T** stack, uint32_t* version) const;
59
60 public:
61 ZStackList();
62
63 bool is_empty() const;
64
65 void push_atomic(T* stack);
66 T* pop_atomic();
67 };
68
69 typedef ZStack<ZMarkStackEntry, ZMarkStackSlots> ZMarkStack;
70 typedef ZStackList<ZMarkStack> ZMarkStackList;
71 typedef ZStack<ZMarkStack*, ZMarkStackMagazineSlots> ZMarkStackMagazine;
72 typedef ZStackList<ZMarkStackMagazine> ZMarkStackMagazineList;
73
74 class ZMarkStripe {
75 private:
76 ZCACHE_ALIGNED ZMarkStackList _published;
77 ZCACHE_ALIGNED ZMarkStackList _overflowed;
78
79 public:
80 ZMarkStripe();
81
82 bool is_empty() const;
83
84 void publish_stack(ZMarkStack* stack, bool publish = true);
85 ZMarkStack* steal_stack();
86 };
|
45 bool push(T value);
46 bool pop(T& value);
47
48 ZStack<T, S>* next() const;
49 ZStack<T, S>** next_addr();
50 };
51
52 template <typename T>
53 class ZStackList {
54 private:
55 T* volatile _head;
56
57 T* encode_versioned_pointer(const T* stack, uint32_t version) const;
58 void decode_versioned_pointer(const T* vstack, T** stack, uint32_t* version) const;
59
60 public:
61 ZStackList();
62
63 bool is_empty() const;
64
65 void push(T* stack);
66 T* pop();
67 };
68
69 typedef ZStack<ZMarkStackEntry, ZMarkStackSlots> ZMarkStack;
70 typedef ZStackList<ZMarkStack> ZMarkStackList;
71 typedef ZStack<ZMarkStack*, ZMarkStackMagazineSlots> ZMarkStackMagazine;
72 typedef ZStackList<ZMarkStackMagazine> ZMarkStackMagazineList;
73
74 class ZMarkStripe {
75 private:
76 ZCACHE_ALIGNED ZMarkStackList _published;
77 ZCACHE_ALIGNED ZMarkStackList _overflowed;
78
79 public:
80 ZMarkStripe();
81
82 bool is_empty() const;
83
84 void publish_stack(ZMarkStack* stack, bool publish = true);
85 ZMarkStack* steal_stack();
86 };
|