aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2024-07-26 03:13:24 +0100
committerAryadev Chavali <aryadev@aryadevchavali.com>2024-07-26 03:13:24 +0100
commit4cc1af94f67a0a7427fc0f42fbb97a091b859141 (patch)
treecca380e5295c18393265757bc0480125ce612d7b
parent84c07870e461ecd1761797304b4ee0aca5bb231e (diff)
downloadcw_tree-4cc1af94f67a0a7427fc0f42fbb97a091b859141.tar.gz
cw_tree-4cc1af94f67a0a7427fc0f42fbb97a091b859141.tar.bz2
cw_tree-4cc1af94f67a0a7427fc0f42fbb97a091b859141.zip
`iterate` now computes highest value fraction it generated.
Not very useful, but isn't a massive performance waster (I think) and it will be useful when thinking about colour schemes in graphics.
-rw-r--r--src/numerics.cpp8
-rw-r--r--src/numerics.hpp2
2 files changed, 7 insertions, 3 deletions
diff --git a/src/numerics.cpp b/src/numerics.cpp
index 833ac5f..f992873 100644
--- a/src/numerics.cpp
+++ b/src/numerics.cpp
@@ -69,10 +69,10 @@ word_t gcd(word_t a, word_t b)
return a;
}
-void iterate(std::queue<word_t> &queue, NodeAllocator &allocator)
+Fraction iterate(std::queue<word_t> &queue, NodeAllocator &allocator)
{
if (queue.empty())
- return;
+ return {};
word_t index = queue.front();
Node node = allocator.vec[index];
if (node.left == -1)
@@ -88,6 +88,10 @@ void iterate(std::queue<word_t> &queue, NodeAllocator &allocator)
queue.pop();
queue.push(allocator.vec[index].left);
queue.push(allocator.vec[index].right);
+ node = allocator.vec[index];
+ Fraction best = MAX(node.value, allocator.vec[node.left].value);
+ best = MAX(best, allocator.vec[node.right].value);
+ return best;
}
std::string to_string(const Fraction &f)
diff --git a/src/numerics.hpp b/src/numerics.hpp
index f095368..9fdaf56 100644
--- a/src/numerics.hpp
+++ b/src/numerics.hpp
@@ -54,7 +54,7 @@ struct NodeAllocator
};
word_t gcd(word_t a, word_t b);
-void iterate(std::queue<word_t> &queue, NodeAllocator &allocator);
+Fraction iterate(std::queue<word_t> &queue, NodeAllocator &allocator);
std::string to_string(const Fraction &);
std::string to_string(const NodeAllocator &, const word_t, int depth = 1);