summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2023-11-29 11:24:19 +0100
committerClaudius "keldu" Holeksa <mail@keldu.de>2023-11-29 11:24:19 +0100
commit031ec5a012d43854a581263d84a8d90bb26896c2 (patch)
tree76b15fa51d30fe2b173ebb1c9cc97edf3249c1a5
parentaa2ecacd2e477eb5748f060d33138e0c12c0634f (diff)
tools: Thinking about generating json schema info for jinja2 use
-rw-r--r--c++/tools/c_gen_iface.hpp76
1 files changed, 43 insertions, 33 deletions
diff --git a/c++/tools/c_gen_iface.hpp b/c++/tools/c_gen_iface.hpp
index 68c8779..42f694f 100644
--- a/c++/tools/c_gen_iface.hpp
+++ b/c++/tools/c_gen_iface.hpp
@@ -23,18 +23,11 @@ struct c_types {
bool is_primitive;
};
- struct c_param {
- std::string key;
- std::string name;
- bool is_primitive;
- };
-
struct c_struct {
- std::string def;
+ std::string kind;
+ std::string type;
std::string cpp_schema;
- std::vector<c_member> member_keys;
- std::string translate_to_c_source;
- std::string translate_to_cpp_source;
+ std::vector<c_member> members;
};
struct c_response {
@@ -43,12 +36,10 @@ struct c_types {
};
struct c_func {
- std::string def;
std::string cpp_schema;
- c_response response;
- std::vector<c_param> requests;
- std::string source;
std::string cpp_name;
+ c_response response;
+ std::vector<c_member> requests;
};
using c_struct_map = std::map<std::string, c_struct>;
@@ -59,10 +50,37 @@ struct c_types {
c_struct_map struct_map;
c_func_map func_map;
std::string prefix;
+ std::string postfix;
std::string encoding;
};
};
+namespace schema {
+using namespace saw::schema;
+
+using StructBindingSchema = Struct<
+ Member<String, "kind">,
+ Member<String, "key">,
+ Member<String, "cpp_schema">,
+ Member<Array<String>, "members">
+>;
+
+using FunctionBindingSchema = Struct<
+ Member<String, "cpp_schema">,
+ Member<String, "name">,
+ Member<String, "foo">
+>;
+
+using BindingSchema = Struct<
+ Member<String, "interface_schema">,
+ Member<String, "prefix">,
+ Member<String, "postfix">,
+ Member<String, "encoding">,
+ Member<Array<StructBindingSchema>, "structs">,
+ Member<Array<FunctionBindingSchema>, "functions">
+>;
+}
+
/**
* Helper to determine if we are dealing with primitive types
*/
@@ -154,8 +172,7 @@ struct c_data_translater<schema::Array<T,Dim>> {
using StructMap = typename c_types::c_struct_map;
static error_or<void> generate(c_types::state& c_state, std::string& type_str){
- type_str = c_state.prefix + "_";
- type_str += "array_";
+ type_str = "array_";
std::string inner_type_str;
auto eov = impl::c_data_translater<T>::generate(c_state, inner_type_str);
@@ -185,30 +202,23 @@ struct c_data_translater<schema::Array<T,Dim>> {
return make_error<err::critical>();
}
- str.translate_to_c_source = "int translate_";
- str.translate_to_c_source += type_str;
- str.translate_to_c_source += "(const saw::data<";
- str.translate_to_c_source += str.cpp_schema;
- str.translate_to_c_source += ",";
- str.translate_to_c_source += c_state.encoding;
- str.translate_to_c_source += ">& cpp_data, struct ";
- str.translate_to_c_source += type_str;
- str.translate_to_c_source += "* c_data";
-
-
- str.translate_to_c_source += "int translate_";
- str.translate_to_c_source += inner_type_str;
- str.translate_to_c_source += "(;
-
-
+ /**
+ * Adding heap alloc data ptr
+ */
{
c_types::c_member memb;
memb.key = inner_type_str;
memb.name = "data";
memb.is_primitive = c_is_primitive<T>::value;
// fn.members.emplace_back(std::move(memb));
+
str.members.emplace_back(std::move(memb));
}
+ {
+ c_types::c_member memb;
+ memb.key
+ }
+
str.def = "struct ";
str.def += type_str;
@@ -314,7 +324,7 @@ struct c_iface_translater<schema::Function<schema::Struct<schema::Member<Request
// Check necessary pointers
fn.source += "\tassert(ctx);\n";
fn.source += "\tif(!ctx){return -1;}\n\n";
- fn.source += "\tauto rmt = reinterpret_cast<interface<IfaceSchema, "
+ fn.source += "\tauto rmt = reinterpret_cast<interface<IfaceSchema, ";
fn.source += c_state.encoding;
fn.source += ">*>(ctx);\n";