From 817511fcf797d2fbf2183188fe33293057e0efef Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Fri, 10 Aug 2018 10:52:15 +0200 Subject: [PATCH] [poincare] Use POINCARE_TREE_LOG --- poincare/include/poincare/infinity.h | 6 +++-- poincare/include/poincare/tree_node.h | 24 +++++++++++++++++++ poincare/include/poincare/tree_pool.h | 9 ++++++-- poincare/src/tree_pool.cpp | 33 ++++++++++++++++----------- 4 files changed, 55 insertions(+), 17 deletions(-) diff --git a/poincare/include/poincare/infinity.h b/poincare/include/poincare/infinity.h index 635531052..9ed773f12 100644 --- a/poincare/include/poincare/infinity.h +++ b/poincare/include/poincare/infinity.h @@ -16,8 +16,10 @@ public: // TreeNode size_t size() const override { return sizeof(InfinityNode); } -#if TREE_LOG - const char * description() const override { return "Infinity"; } +#if POINCARE_TREE_LOG + virtual void logNodeName(std::ostream stream) { + stream << "Infinity"; + } #endif // Properties diff --git a/poincare/include/poincare/tree_node.h b/poincare/include/poincare/tree_node.h index 0581ae85d..4b7a4c44e 100644 --- a/poincare/include/poincare/tree_node.h +++ b/poincare/include/poincare/tree_node.h @@ -152,6 +152,30 @@ public: return node; } +#if POINCARE_TREE_LOG + virtual void logNodeName(std::ostream stream) = 0; + virtual void logAttributes(std::ostream stream) { + } + + void log(std::ostream stream, bool recursive = true) { + stream << "<"; + logNodeName(stream); + stream << " id=\"" << m_identifier << "\""; + stream << " refCount=\"" << m_referenceCounter << "\""; + stream << " size=\"" << size() << "\""; + logAttributes(stream); + stream << ">"; + if (recursive) { + for (TreeNode * child : node->depthFirstChildren()) { + t->log(stream, recursive); + } + } + stream << "" + } +#endif + protected: TreeNode(); diff --git a/poincare/include/poincare/tree_pool.h b/poincare/include/poincare/tree_pool.h index 9dc7c3af1..ac4b19dd3 100644 --- a/poincare/include/poincare/tree_pool.h +++ b/poincare/include/poincare/tree_pool.h @@ -5,6 +5,9 @@ #include #include #include +#if POINCARE_TREE_LOG +#include +#endif namespace Poincare { @@ -94,8 +97,10 @@ void TreeByReference::buildGhostChildren() { return identifierOfStaticNodeAtIndex(nodeID); } - // Debug - void log(); +#if POINCARE_TREE_LOG + void flatLog(std::ostream stream); + void treeLog(std::ostream stream); +#endif int numberOfNodes() const { int count = 0; diff --git a/poincare/src/tree_pool.cpp b/poincare/src/tree_pool.cpp index 9d9244237..7cca0e7a4 100644 --- a/poincare/src/tree_pool.cpp +++ b/poincare/src/tree_pool.cpp @@ -2,6 +2,10 @@ #include #include +#if POINCARE_TREE_LOG +#include +#endif + namespace Poincare { TreePool * TreePool::sharedPool() { @@ -94,22 +98,25 @@ void TreePool::moveNodes(TreeNode * destination, TreeNode * source, size_t moveS } } - - -#include - -void TreePool::log() { -#if TREE_LOG - printf("POOL:"); - for (TreeNode * node : *this) { - printf("|(%03d|%s|%03d|%p)\n", node->m_identifier, node->description(), node->retainCount(), node); +#if POINCARE_TREE_LOG +void TreePool::flatLog(std::ostream stream) { + size_t size static_cast(m_cursor) - static_cast(m_buffer); + stream << ""; + for (TreeNode * node : allNodes()) { + node->log(stream, false); } - printf("|\n"); - - //logNodeForIdentifierArray(); -#endif + stream << ""; } +void TreePool::treeLog() { + stream << ""; + for (TreeNode * node : roots()) { + node->log(stream, true); + } + stream << ""; +} +#endif + void * TreePool::alloc(size_t size) { if (m_cursor >= m_buffer + BufferSize || m_cursor + size > m_buffer + BufferSize) { return nullptr;