From d73ecff38a9894c226c5de63a1b3ff2b4f1a9f2d Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Fri, 26 Jul 2024 02:38:02 +0100 Subject: Made header file for a separate numerics file Separates the (basically) completed cw_tree implementation in a separate module so we can spend time implementing graphics in main. NOTE: nodes are now generated from a node allocator, which just wraps around the vector. We also take an allocator and queue by reference in the iterate procedure now. --- src/numerics.hpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/numerics.hpp (limited to 'src') diff --git a/src/numerics.hpp b/src/numerics.hpp new file mode 100644 index 0000000..be9d3db --- /dev/null +++ b/src/numerics.hpp @@ -0,0 +1,61 @@ +/* Copyright (C) 2024 Aryadev Chavali + + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License Version 2 for + * details. + + * You may distribute and modify this code under the terms of the GNU General + * Public License Version 2, which you should have received a copy of along with + * this program. If not, please go to . + + * Created: 2024-07-26 + * Author: Aryadev Chavali + * Description: Computation necessary for generating the tree + */ + +#ifndef NUMERICS_HPP +#define NUMERICS_HPP + +#include + +#include +#include +#include + +#define MIN(A, B) ((A) < (B) ? (A) : (B)) +#define MAX(A, B) ((A) > (B) ? (A) : (B)) +typedef uint64_t word_t; + +struct Fraction +{ + word_t numerator, denominator; + + Fraction(word_t numerator = 0, word_t denominator = 1); + bool operator<(const Fraction other); + bool operator==(const Fraction &other); +}; + +struct Node +{ + Fraction value; + int64_t left, right; + + Node(Fraction val, int64_t left = -1, int64_t right = -1); +}; + +struct NodeAllocator +{ + std::vector vec; + + NodeAllocator(word_t capacity); + word_t alloc_node(Node n); +}; + +word_t gcd(word_t a, word_t b); +void iterate(std::queue queue, NodeAllocator &allocator); + +std::string to_string(const Fraction &); +std::string to_string(const Node &, int depth = 1); + +#endif -- cgit v1.2.3-13-gbd6f