ComIn 0.5.1
ICON Community Interface
Loading...
Searching...
No Matches
comin_metadata.cpp
Go to the documentation of this file.
1// @authors 10/2025 :: ICON Community Interface <comin@icon-model.org>
2//
3// SPDX-License-Identifier: BSD-3-Clause
4//
5// See LICENSES for license information.
6// Where software is supplied by third parties, it is indicated in the
7// headers of the routines.
8
9#include <limits>
10
11#include "comin_keyval.hpp"
12#include "comin_state.hpp"
13#include "comin_variable.hpp"
14
16 comin::keyval::Map::iterator it;
17};
18
19template <class T>
20void comin_metadata_host_set(t_comin_var_descriptor descriptor, const char* key,
21 T val) {
22 t_comin_var_item* var_item = comin_var_get_from_exposed(descriptor);
23 if (var_item == nullptr) {
24 comin_error_set(COMIN_ERROR_VAR_ITEM_NOT_ASSOCIATED);
25 return;
26 }
27 auto it = var_item->metadata->find(key);
28 if (it != var_item->metadata->end() &&
29 !std::holds_alternative<T>(std::get<1>(*it))) {
30 comin_error_set(COMIN_ERROR_VAR_METADATA_INCONSISTENT_TYPE);
31 return;
32 }
33 (*var_item->metadata)[key] = val;
34}
35
36template <class T>
38 const char* key) {
39 t_comin_var_item* var_item = comin_var_get_from_exposed(descriptor);
41 comin_error_set(COMIN_ERROR_METADATA_GET_INSIDE_PRIMARYCONSTRUCTOR);
42 return nullptr;
43 }
44 if (var_item == nullptr) {
45 comin_error_set(COMIN_ERROR_VAR_ITEM_NOT_ASSOCIATED);
46 return nullptr;
47 }
48 auto it = var_item->metadata->find(key);
49 if (it == var_item->metadata->end()) {
50 comin_error_set(COMIN_ERROR_METADATA_KEY_NOT_FOUND);
51 return nullptr;
52 }
53 auto& value = std::get<1>(*it);
54 if (!std::holds_alternative<T>(value)) {
55 comin_error_set(COMIN_ERROR_VAR_METADATA_INCONSISTENT_TYPE);
56 return nullptr;
57 }
58 return &std::get<T>(value);
59}
60
61extern "C" {
63 const char* key, int val) {
64 comin_metadata_host_set(descriptor, key, val);
65 }
66
68 const char* key, bool val) {
69 comin_metadata_host_set(descriptor, key, val);
70 }
71
73 const char* key, double val) {
74 comin_metadata_host_set(descriptor, key, val);
75 }
76
78 const char* key, const char* val) {
79 comin_metadata_host_set(descriptor, key, std::string(val));
80 }
81
83 const char* key) {
84 const int* ptr = comin_metadata_get<int>(descriptor, key);
85 return ptr ? *ptr : 0;
86 }
87
89 const char* key) {
90 const bool* ptr = comin_metadata_get<bool>(descriptor, key);
91 return ptr ? *ptr : 0;
92 }
93
95 const char* key) {
96 const double* ptr = comin_metadata_get<double>(descriptor, key);
97 return ptr ? *ptr : 0;
98 }
99
101 const char* key) {
102 const std::string* ptr = comin_metadata_get<std::string>(descriptor, key);
103 return ptr ? ptr->c_str() : 0;
104 }
105
108 const char* key) {
109 t_comin_var_item* var_item = comin_var_get_from_exposed(var_descriptor);
110 if (var_item == nullptr) {
111 comin_error_set(COMIN_ERROR_VAR_ITEM_NOT_ASSOCIATED);
112 return (t_comin_metadata_typeid)-2;
113 }
114 auto it = var_item->metadata->find(key);
115 if (it == var_item->metadata->end()) {
116 return (t_comin_metadata_typeid)-1;
117 }
118 return (t_comin_metadata_typeid)it->second.index();
119 }
120
123 t_comin_var_item* var_item = comin_var_get_from_exposed(var_descriptor);
124 if (var_item == nullptr) {
125 comin_error_set(COMIN_ERROR_VAR_ITEM_NOT_ASSOCIATED);
126 return nullptr;
127 }
128 return new t_comin_metadata_iterator{var_item->metadata->begin()};
129 }
130
133 t_comin_var_item* var_item = comin_var_get_from_exposed(var_descriptor);
134 if (var_item == nullptr) {
135 comin_error_set(COMIN_ERROR_VAR_ITEM_NOT_ASSOCIATED);
136 return nullptr;
137 }
138 return new t_comin_metadata_iterator{var_item->metadata->end()};
139 }
140
142 auto& a = it->it;
143 return a->first.c_str();
144 }
145
148 return it1->it == it2->it;
149 }
150
152
156}
void comin_error_set(t_comin_error_code error_code)
bool comin_metadata_get_bool(t_comin_var_descriptor descriptor, const char *key)
int comin_metadata_get_int(t_comin_var_descriptor descriptor, const char *key)
t_comin_metadata_iterator * comin_metadata_get_iterator_end(t_comin_var_descriptor var_descriptor)
const T * comin_metadata_get(t_comin_var_descriptor descriptor, const char *key)
void comin_metadata_host_set_double(t_comin_var_descriptor descriptor, const char *key, double val)
void comin_metadata_iterator_next(t_comin_metadata_iterator *it)
t_comin_metadata_typeid comin_metadata_get_typeid(t_comin_var_descriptor var_descriptor, const char *key)
const char * comin_metadata_get_string(t_comin_var_descriptor descriptor, const char *key)
void comin_metadata_host_set_int(t_comin_var_descriptor descriptor, const char *key, int val)
double comin_metadata_get_double(t_comin_var_descriptor descriptor, const char *key)
void comin_metadata_host_set_string(t_comin_var_descriptor descriptor, const char *key, const char *val)
void comin_metadata_host_set(t_comin_var_descriptor descriptor, const char *key, T val)
void comin_metadata_host_set_bool(t_comin_var_descriptor descriptor, const char *key, bool val)
const char * comin_metadata_iterator_get_key(t_comin_metadata_iterator *it)
void comin_metadata_iterator_delete(t_comin_metadata_iterator *it)
t_comin_metadata_iterator * comin_metadata_get_iterator_begin(t_comin_var_descriptor var_descriptor)
comin::keyval::Map::iterator it
bool comin_metadata_iterator_compare(t_comin_metadata_iterator *it1, t_comin_metadata_iterator *it2)
bool comin_state_is_primary_done()
t_comin_metadata_typeid
Definition comin.h:159