diff options
author | Claudius "keldu" Holeksa <mail@keldu.de> | 2023-11-29 11:24:19 +0100 |
---|---|---|
committer | Claudius "keldu" Holeksa <mail@keldu.de> | 2023-11-29 11:24:19 +0100 |
commit | 031ec5a012d43854a581263d84a8d90bb26896c2 (patch) | |
tree | 76b15fa51d30fe2b173ebb1c9cc97edf3249c1a5 /c++ | |
parent | aa2ecacd2e477eb5748f060d33138e0c12c0634f (diff) |
tools: Thinking about generating json schema info for jinja2 use
Diffstat (limited to 'c++')
-rw-r--r-- | c++/tools/c_gen_iface.hpp | 76 |
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"; |