diff --git a/expression_node.h b/expression_node.h index 61e4d2ea0..65aa43e16 100644 --- a/expression_node.h +++ b/expression_node.h @@ -2,12 +2,11 @@ #define EXPRESSION_NODE_H #include "tree_node.h" -#include "tree_pool.h" class ExpressionNode : public TreeNode { public: - ExpressionNode() : TreeNode(Pool()->generateIdentifier()) { - Pool()->registerNode(this); + ExpressionNode() : TreeNode(TreePool::sharedPool()->generateIdentifier()) { + TreePool::sharedPool()->registerNode(this); } // TODO: operator new and delte @@ -15,11 +14,11 @@ public: // Find a way to define it on the TreeNode void * operator new(size_t count) { - return Pool()->alloc(count); + return TreePool::sharedPool()->alloc(count); } void operator delete(void * ptr) { - Pool()->dealloc(ptr); + TreePool::sharedPool()->dealloc(ptr); } virtual float approximate() = 0; diff --git a/expression_reference.h b/expression_reference.h index 9b6e93e24..76776affd 100644 --- a/expression_reference.h +++ b/expression_reference.h @@ -9,7 +9,7 @@ template class ExpressionReference : public TreeReference { public: - ExpressionReference() : TreeReference(ExpressionNode::Pool()) { } + ExpressionReference() : TreeReference() { } /*ExpressionReference(const ExpressionReference & er) { }*/ diff --git a/test.cpp b/test.cpp index f58e54047..4a1015a49 100644 --- a/test.cpp +++ b/test.cpp @@ -3,7 +3,7 @@ #include void poolTest() { - ExpressionNode::Pool()->log(); + TreePool::sharedPool()->log(); FloatNode * f = new FloatNode(); f->setFloat(0.1f); @@ -13,11 +13,11 @@ void poolTest() { AdditionNode * h = new AdditionNode(); - ExpressionNode::Pool()->log(); + TreePool::sharedPool()->log(); delete g; - ExpressionNode::Pool()->log(); + TreePool::sharedPool()->log(); } Expression buildAddition() { @@ -26,7 +26,7 @@ Expression buildAddition() { Addition a(smallFloat, bigFloat); - ExpressionNode::Pool()->log(); + TreePool::sharedPool()->log(); printf("EXITING\n"); printf("smallFloat ref = %d\n", smallFloat.identifier()); printf("bigFloat ref = %d\n", bigFloat.identifier()); @@ -37,7 +37,7 @@ int main() { printf("Hello\n"); Expression a = buildAddition(); printf("HAS RETURNED\n"); - ExpressionNode::Pool()->log(); + TreePool::sharedPool()->log(); diff --git a/tree_node.cpp b/tree_node.cpp index 3b1c4018e..c1b51c59d 100644 --- a/tree_node.cpp +++ b/tree_node.cpp @@ -2,11 +2,6 @@ #include "tree_pool.h" #include "expression_node.h" -TreePool * TreeNode::Pool() { - static TreePool pool; - return &pool; -} - void TreeNode::release() { printf("Releasing of %d(%p)\n", m_identifier, this); m_referenceCounter--; @@ -28,6 +23,6 @@ void TreeNode::release() { printf("DELETE %d(%p)\n", m_identifier, this); int identifier = m_identifier; delete this; - Pool()->freeIdentifier(identifier); + TreePool::sharedPool()->freeIdentifier(identifier); } } diff --git a/tree_node.h b/tree_node.h index c41549453..de27920e4 100644 --- a/tree_node.h +++ b/tree_node.h @@ -15,8 +15,6 @@ * - a reference counter */ -class TreePool; - class TreeNode { //friend class TreeReference; // friend class TreePool; @@ -24,9 +22,6 @@ public: virtual ~TreeNode() { } - // Pool - static TreePool * Pool(); - // Iterators class Iterator { diff --git a/tree_pool.cpp b/tree_pool.cpp index 878c4345b..815e88518 100644 --- a/tree_pool.cpp +++ b/tree_pool.cpp @@ -1,6 +1,11 @@ #include "tree_pool.h" #include +TreePool * TreePool::sharedPool() { + static TreePool pool; + return &pool; +} + void * TreePool::alloc(size_t size) { if (m_cursor >= m_buffer + BufferSize || m_cursor + size > m_buffer + BufferSize) { return nullptr; diff --git a/tree_pool.h b/tree_pool.h index 9f0b4ffaa..6ddb0d0f9 100644 --- a/tree_pool.h +++ b/tree_pool.h @@ -6,7 +6,7 @@ class TreePool { public: - TreePool() : m_cursor(m_buffer) { } + static TreePool * sharedPool(); // Identifiers int generateIdentifier() { @@ -80,6 +80,7 @@ public: #endif private: + TreePool() : m_cursor(m_buffer) { } static inline void insert(char * destination, char * source, size_t length); TreeNode::DepthFirst::Iterator begin() const { return TreeNode::DepthFirst::Iterator(first()); } TreeNode::DepthFirst::Iterator end() const { return TreeNode::DepthFirst::Iterator(last()); } diff --git a/tree_reference.h b/tree_reference.h index 079a60f9c..39455b61c 100644 --- a/tree_reference.h +++ b/tree_reference.h @@ -10,7 +10,6 @@ template class TreeReference { public: TreeReference(const TreeReference & tr) : - m_pool(tr.m_pool), m_identifier(tr.m_identifier) { printf("TreeReference copy of %d\n", m_identifier); @@ -41,42 +40,37 @@ public: } void addChild(TreeReference t) { - //assert(t.m_pool == m_pool); - //t.node()->retain(); - TreeNode * deepCopy = m_pool->deepCopy(t.node()); - m_pool->move( + TreeNode * deepCopy = TreePool::sharedPool()->deepCopy(t.node()); + TreePool::sharedPool()->move( deepCopy, node()->next() ); } void removeChild(TreeReference t) { - m_pool->move( + TreePool::sharedPool()->move( t.node(), - m_pool->last() + TreePool::sharedPool()->last() ); t.node()->release(); } T * node() const { // TODO: Here, assert that the node type is indeed T - return static_cast(m_pool->node(m_identifier)); + return static_cast(TreePool::sharedPool()->node(m_identifier)); } int identifier() const { return m_identifier; } protected: - TreeReference(TreePool * pool) : - m_pool(pool) - { + TreeReference() { TreeNode * node = new T(); m_identifier = node->identifier(); printf("TreeNode orig build of %d\n", m_identifier); } private: - TreeReference(TreePool * pool, TreeNode * node) : - m_pool(pool), + TreeReference(TreeNode * node) : m_identifier(node->identifier()) //m_cachedNode(node) { @@ -84,8 +78,6 @@ private: node->retain(); } - - TreePool * m_pool; int m_identifier; //TreeNode * m_cachedNode; };