1212#include < array>
1313#include < vector>
1414
15- #include < boost/circular_buffer.hpp>
16-
1715/* **************************************/ REACT_IMPL_BEGIN /* *************************************/
1816
1917// /////////////////////////////////////////////////////////////////////////////////////////////////
@@ -50,58 +48,10 @@ class NodeVector
5048};
5149
5250// /////////////////////////////////////////////////////////////////////////////////////////////////
53- // / NodeStack
51+ // / NodeBuffer
5452// /////////////////////////////////////////////////////////////////////////////////////////////////
5553struct SplitTag {};
5654
57- template <typename T, int N>
58- class NodeStack
59- {
60- public:
61- using DataT = std::array<T*,N>;
62- using iterator = typename DataT::iterator;
63- using const_iterator = typename DataT::const_iterator;
64-
65- static const int split_size = N / 2 ;
66-
67- NodeStack () :
68- cursor_{ nodes_.begin () }
69- {}
70-
71- template <typename TInput>
72- NodeStack (TInput srcBegin, TInput srcEnd) :
73- cursor_{ nodes_.begin () + std::distance (srcBegin, srcEnd) }
74- {
75- std::copy (srcBegin, srcEnd, nodes_.begin ());
76- }
77-
78- // Other must be full
79- NodeStack (NodeStack& other, SplitTag) :
80- cursor_{ nodes_.begin () + split_size }
81- {
82- std::copy (other.nodes_ .begin () + split_size, other.nodes_ .end (), nodes_.begin ());
83- other.cursor_ = other.nodes_ .begin () + split_size;
84- }
85-
86- void Push (T* e) { *cursor_ = e; ++cursor_; }
87- T* Pop () { --cursor_; return *cursor_; }
88-
89- bool IsFull () const { return cursor_ == nodes_.end (); }
90- bool IsEmpty () const { return cursor_ == nodes_.begin (); }
91-
92- iterator begin () { return nodes_.begin (); }
93- const_iterator begin () const { return nodes_.begin (); }
94- iterator end () { return cursor_; }
95- const_iterator end () const { return cursor_; }
96-
97- private:
98- DataT nodes_;
99- iterator cursor_;
100- };
101-
102- // /////////////////////////////////////////////////////////////////////////////////////////////////
103- // / NodeBuffer
104- // /////////////////////////////////////////////////////////////////////////////////////////////////
10555template <typename T, int N>
10656class NodeBuffer
10757{
@@ -118,11 +68,19 @@ class NodeBuffer
11868 back_{ nodes_.begin () }
11969 {}
12070
71+ NodeBuffer (T* node) :
72+ size_{ 1 },
73+ front_{ nodes_.begin () },
74+ back_{ nodes_.begin () + 1 }
75+ {
76+ nodes_[0 ] = node;
77+ }
78+
12179 template <typename TInput>
12280 NodeBuffer (TInput srcBegin, TInput srcEnd) :
12381 size_{ std::distance (srcBegin, srcEnd) },
12482 front_{ nodes_.begin () },
125- back_{ nodes_.begin () + size_}
83+ back_{ size_ != N ? nodes_.begin () + size_ : nodes_. begin () }
12684 {
12785 std::copy (srcBegin, srcEnd, front_);
12886 }
0 commit comments