Change ruleset constants to globals instead of templates

This commit is contained in:
Madeline Busig 2025-04-29 05:50:11 -07:00
parent e589e83f24
commit 487c5c5a69

View File

@ -9,6 +9,14 @@
namespace fractal { namespace fractal {
constexpr size_t g_max_tokens = 16;
constexpr size_t g_max_groups = 8;
constexpr size_t g_max_wgroups = 4;
constexpr size_t g_max_branch_rules = 8;
constexpr size_t g_max_mark_rules = 4;
constexpr size_t g_max_cgroup_tokens = 16;
constexpr size_t g_max_wgroup_weights = 8;
using token_id_t = uint32_t; using token_id_t = uint32_t;
using group_id_t = uint32_t; using group_id_t = uint32_t;
using weighted_group_id_t = uint32_t; using weighted_group_id_t = uint32_t;
@ -26,10 +34,9 @@ struct token_t {
mtl::fixed m_value; mtl::fixed m_value;
}; };
template <size_t S_MAX_CGROUP_SIZE = 16>
struct group_characteristic_t { struct group_characteristic_t {
uint32_t m_factor; // Number of groups generated in succession uint32_t m_factor; // Number of groups generated in succession
etl::vector<token_id_t, S_MAX_CGROUP_SIZE> m_token_ids; etl::vector<token_id_t, g_max_cgroup_tokens> m_token_ids;
}; };
struct marker_t { struct marker_t {
@ -57,10 +64,9 @@ struct group_t {
etl::vector<marker_t, g_max_child_markers> m_child_markers; etl::vector<marker_t, g_max_child_markers> m_child_markers;
}; };
template <size_t S_MAX_GROUP_WEIGHTS = 8>
struct weighted_group_t { struct weighted_group_t {
etl::vector<group_id_t, S_MAX_GROUP_WEIGHTS> m_groups; etl::vector<group_id_t, g_max_wgroup_weights> m_groups;
etl::vector<uint32_t, S_MAX_GROUP_WEIGHTS> m_weights; etl::vector<uint32_t, g_max_wgroup_weights> m_weights;
uint32_t m_weight_total; // Total needed for random selection uint32_t m_weight_total; // Total needed for random selection
// TODO: Control weight additions so m_weight_total = sum(m_weights) is invariant // TODO: Control weight additions so m_weight_total = sum(m_weights) is invariant
}; };
@ -80,29 +86,20 @@ struct mark_rule_t {
uint32_t m_tag; uint32_t m_tag;
}; };
template <
size_t S_MAX_TOKENS = 8,
size_t S_MAX_CGROUPS = 8,
size_t S_MAX_WGROUPS = 8,
size_t S_MAX_BRANCH_RULES = 4,
size_t S_MAX_MARK_RULES = 4,
size_t S_MAX_CGROUP_TOKENS = 16,
size_t S_MAX_WGROUP_WEIGHTS = 8
>
class ruleset_t { class ruleset_t {
private: private:
etl::vector<token_t, S_MAX_TOKENS> m_tokens; etl::vector<token_t, g_max_tokens> m_tokens;
etl::vector<group_characteristic_t<S_MAX_CGROUP_TOKENS>, S_MAX_CGROUPS> m_group_characteristics; etl::vector<group_characteristic_t, g_max_groups> m_group_characteristics;
etl::vector<weighted_group_t<S_MAX_WGROUP_WEIGHTS>, S_MAX_WGROUPS> m_weighted_groups; etl::vector<weighted_group_t, g_max_wgroups> m_weighted_groups;
etl::vector<branch_rule_t, S_MAX_BRANCH_RULES> m_branch_rules; etl::vector<branch_rule_t, g_max_branch_rules> m_branch_rules;
etl::vector<mark_rule_t, S_MAX_MARK_RULES> m_mark_rules; etl::vector<mark_rule_t, g_max_mark_rules> m_mark_rules;
public: public:
/** /**
* @brief Checks if the maximum number of tokens has been reached * @brief Checks if the maximum number of tokens has been reached
* *
* @ret @c true if the number of tokens in the ruleset equals @c S_MAX_TOKENS, @c false otherwise * @ret @c true if the number of tokens in the ruleset equals @c g_max_tokens, @c false otherwise
*/ */
bool tokens_full() const; bool tokens_full() const;
@ -122,7 +119,7 @@ public:
/** /**
* @brief Checks if the maximum number of group characteristics has been reached * @brief Checks if the maximum number of group characteristics has been reached
* *
* @ret @c true if the number of group characteristics in the ruleset equals @c S_MAX_CGROUPS, @c false otherwise * @ret @c true if the number of group characteristics in the ruleset equals @c g_max_cgroups, @c false otherwise
*/ */
bool group_characteristics_full() const; bool group_characteristics_full() const;
@ -142,7 +139,7 @@ public:
/** /**
* @brief Checks if the maximum number of weighted groups has been reached * @brief Checks if the maximum number of weighted groups has been reached
* *
* @ret @c true if the number of weighted groups in the ruleset equals @c S_MAX_WGROUPS, @c false otherwise * @ret @c true if the number of weighted groups in the ruleset equals @c g_max_wgroups, @c false otherwise
*/ */
bool weighted_groups_full() const; bool weighted_groups_full() const;
@ -165,7 +162,7 @@ public:
/** /**
* @brief Checks if the maximum number of branch rules has been reached * @brief Checks if the maximum number of branch rules has been reached
* *
* @ret @c true if the number of branch rules in the ruleset equals @c S_MAX_BRANCH_RULES, @c false otherwise * @ret @c true if the number of branch rules in the ruleset equals @c g_max_branch_rules, @c false otherwise
*/ */
bool branch_rules_full() const; bool branch_rules_full() const;
@ -204,7 +201,7 @@ public:
/** /**
* @brief Checks if the maximum number of mark rules has been reached * @brief Checks if the maximum number of mark rules has been reached
* *
* @ret @c true if the number of mark rules in the ruleset equals @c S_MAX_MARK_RULES, @c false otherwise * @ret @c true if the number of mark rules in the ruleset equals @c g_max_mark_rules, @c false otherwise
*/ */
bool mark_rules_full() const; bool mark_rules_full() const;