#include "types.h" #include "variables.h" #include struct t_struct { std::string name; int size; std::vector members; }; static std::vector types; void types_init() { types.clear(); const t_struct type_number {"number", 4}; types.push_back(type_number); const t_struct type_string {"string", 4}; types.push_back(type_string); } const int types_add(const std::string name) { for (auto t : types) if (t.name == name) return -1; t_struct new_type; new_type.name = name; types.push_back(new_type); return types.size()-1; } const int types_exist(const std::string name) { for (int i = 0; i < types.size(); i++) if (types[i].name == name) return i; return -1; } const int types_get_length(const uint32_t type) { if (type >= types.size()) return -1; // ERROR INTERN: No deuria donar-se mai return types[type].size; } const int types_add_member(const uint32_t type, const std::string name, const uint32_t var_type, const uint32_t length) { if (type >= types.size()) return -1; // ERROR INTERN: No deuria donar-se mai for (auto m : types[type].members) if (m.name == name) return -1; const t_variable new_var {name, var_type, length}; types[type].members.push_back(new_var); types[type].size += types_get_length(var_type) + length; return types[type].members.size()-1; } const int types_member_exists(const uint32_t type, const std::string name) { if (type >= types.size()) return -1; // ERROR INTERN: No deuria donar-se mai for (int i = 0; i < types[type].members.size(); i++) if (types[type].members[i].name == name) return i; return -1; } const int types_get_member_type(const uint32_t type, const uint32_t member) { if (type >= types.size()) return -1; // ERROR INTERN: No deuria donar-se mai if (member >= types[type].members.size()) return -1; // ERROR INTERN: No deuria donar-se mai return types[type].members[member].type; } const int types_get_member_length(const uint32_t type, const uint32_t member) { if (type >= types.size()) return -1; // ERROR INTERN: No deuria donar-se mai if (member >= types[type].members.size()) return -1; // ERROR INTERN: No deuria donar-se mai return types[type].members[member].length; }