From fd53606ffc37852308b6099980f7c8f5d1028260 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Wed, 28 Apr 2021 22:25:57 +0200 Subject: [PATCH] started working with the string module --- string.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ string.h | 11 +++++++++++ 2 files changed, 53 insertions(+) create mode 100644 string.cpp create mode 100644 string.h diff --git a/string.cpp b/string.cpp new file mode 100644 index 0000000..05b1205 --- /dev/null +++ b/string.cpp @@ -0,0 +1,42 @@ +#include "string.h" +#include +#include + +static std::stack scopes_start; +static std::vector strings; +static std::vector string_constants; +static int num_strings = 0; +static int max_strings = 0; + +void string_scope_start() { + scopes_start.push(num_strings); +} + +void string_scope_end() { + num_strings = scopes_start.top(); + scopes_start.pop(); +} + +const uint32_t string_add_variable() { + num_strings++; + if (max_strings < num_strings) max_strings = num_strings; + return num_strings-1; +} + +void string_init() { + for (int i = 0; i < max_strings; i++) strings.push_back(""); +} + +void string_set_variable(const uint32_t id, const std::string str) { + strings[id] = str; +} + +const std::string string_get_variable(const uint32_t id) { + return strings[id]; +} + +const uint32_t string_get_constant(const std::string str) { + for (int i = 0; i < string_constants.size(); i++) { if (string_constants[i] == str) return i; } + string_constants.push_back(str); + return string_constants.size()-1; +} diff --git a/string.h b/string.h new file mode 100644 index 0000000..9fe254a --- /dev/null +++ b/string.h @@ -0,0 +1,11 @@ +#pragma once +#include +#include + +void string_init(); +void string_scope_start(); +void string_scope_end(); +const uint32_t string_get_constant(const std::string str); +const uint32_t string_add_variable(); +void string_set_variable(const uint32_t id, const std::string str); +const std::string string_get_variable(const uint32_t id);