43 lines
1.0 KiB
C++
43 lines
1.0 KiB
C++
#include "string.h"
|
|
#include <stack>
|
|
#include <vector>
|
|
|
|
static std::stack<int> scopes_start;
|
|
static std::vector<std::string> strings;
|
|
static std::vector<std::string> 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;
|
|
}
|