@@ -36,15 +36,15 @@ var CppBindingTemplate = template.Must(template.New("binding-cpp").Funcs(funcMap
3636#include <cmath>
3737{{end -}}
3838{{range $entity := .Model.EntitiesWithMeta}}
39- {{- range $property := $entity.Properties}}
39+ {{- range $property := $entity.Properties}}
4040const
41- {{- if $property.RelationTarget}} obx::RelationProperty<{{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}, {{$property.Meta.CppNameRelationTarget}}>
42- {{- else}} obx::Property<{{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}, OBXPropertyType_{{PropTypeName $property.Type}}>
43- {{- end}} {{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}_::{{$property.Meta.CppName}}({{$property.Id.GetId}});
44- {{- end}}
45- {{- range $relation := $entity.Relations}}
41+ {{- if $property.RelationTarget}} obx::RelationProperty<{{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}, {{$property.Meta.CppNameRelationTarget}}>
42+ {{- else}} obx::Property<{{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}, OBXPropertyType_{{PropTypeName $property.Type}}>
43+ {{- end}} {{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}_::{{$property.Meta.CppName}}({{$property.Id.GetId}});
44+ {{- end}}
45+ {{- range $relation := $entity.Relations}}
4646const obx::RelationStandalone<{{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}, {{$relation.Target.Meta.CppNamespacePrefix}}{{$relation.Target.Meta.CppName}}> {{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}_::{{$relation.Meta.CppName}}({{$relation.Id.GetId}});
47- {{- end}}
47+ {{- end}}
4848
4949void {{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}::_OBX_MetaInfo::toFlatBuffer(flatbuffers::FlatBufferBuilder& fbb, const {{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}& object) {
5050 fbb.Clear();
@@ -86,38 +86,78 @@ std::unique_ptr<{{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}> {{$
8686void {{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}::_OBX_MetaInfo::fromFlatBuffer(const void* data, size_t, {{$entity.Meta.CppNamespacePrefix}}{{$entity.Meta.CppName}}& outObject) {
8787 const auto* table = flatbuffers::GetRoot<flatbuffers::Table>(data);
8888 assert(table);
89- {{range $property := $entity.Properties}}
90- {{- if $property.Meta.Optional}}if (table->CheckField({{$property.FbvTableOffset}})) {{end}}
91- {{- if eq "std::vector<std::string>" $property.Meta.CppType}}{
89+ {{- range $property := $entity.Properties}}
90+ {{- if eq "std::string" $property.Meta.CppType}}
91+ {
92+ auto* ptr = table->GetPointer<const flatbuffers::String*>({{$property.FbvTableOffset}});
93+ if (ptr) {
94+ outObject.{{$property.Meta.CppName}}
95+ {{- if $property.Meta.Optional}}
96+ {{- if IsOptionalPtr $.Optional -}}
97+ .reset(new std::string(ptr->c_str(), ptr->size()));
98+ {{- else -}}
99+ .emplace(ptr->c_str(), ptr->size());
100+ {{- end}}
101+ {{- else -}}
102+ .assign(ptr->c_str(), ptr->size());
103+ {{- end}}
104+ } else {
105+ outObject.{{$property.Meta.CppName}}
106+ {{- if $property.Meta.Optional -}}
107+ .reset();
108+ {{- else -}}
109+ .clear();
110+ {{- end}}
111+ }
112+ }
113+ {{- else if eq "std::vector<std::string>" $property.Meta.CppType}}
114+ {
92115 auto* ptr = table->GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>*>({{$property.FbvTableOffset}});
93116 if (ptr) {
94117 {{- if $property.Meta.Optional}}
95- outObject.{{$property.Meta.CppName}}{{if IsOptionalPtr $property.Meta.Optional}}.reset(new {{$property.Meta.CppType}}({{else}} = {{$property.Meta.CppType}}(){{end}}{{template "field-value-assign-post" $property.Meta}};{{end}}
118+ outObject.{{$property.Meta.CppName}}{{if IsOptionalPtr $property.Meta.Optional}}.reset(new {{$property.Meta.CppType}}({{else}} = {{$property.Meta.CppType}}(){{end}}{{template "field-value-assign-post" $property.Meta}};
119+ {{- end}}
96120 outObject.{{$property.Meta.CppName}}{{$property.Meta.CppValOp}}reserve(ptr->size());
97121 for (flatbuffers::uoffset_t i = 0; i < ptr->size(); i++) {
98122 auto* itemPtr = ptr->Get(i);
99123 if (itemPtr) outObject.{{$property.Meta.CppName}}{{$property.Meta.CppValOp}}emplace_back(itemPtr->c_str());
100124 }
125+ } else {
126+ outObject.{{$property.Meta.CppName}}
127+ {{- if $property.Meta.Optional -}}
128+ .reset();
129+ {{- else -}}
130+ .clear();
131+ {{- end}}
101132 }
102- }{{else if eq "std::string" $property.Meta.CppType}}{
103- auto* ptr = table->GetPointer<const flatbuffers::String*>({{$property.FbvTableOffset}});
104- if (ptr) outObject.{{$property.Meta.CppName}}
105- {{- if $property.Meta.Optional}}{{template "field-value-assign-pre" $property.Meta}}ptr->c_str(){{template "field-value-assign-post" $property.Meta}}
106- {{- else}}.assign(ptr->c_str())
107- {{- end}};
108- }{{else if $property.Meta.FbIsVector}}{
133+ }
134+ {{- else if $property.Meta.FbIsVector}}
135+ {
109136 auto* ptr = table->GetPointer<const {{$property.Meta.FbOffsetType}}*>({{$property.FbvTableOffset}});
110137 if (ptr) outObject.{{$property.Meta.CppName}}
111138 {{- if IsOptionalPtr $property.Meta.Optional}}{{template "field-value-assign-pre" $property.Meta}}ptr->begin(), ptr->end(){{template "field-value-assign-post" $property.Meta}}
112139 {{- else if $property.Meta.Optional}} = {{$property.Meta.CppType}}(ptr->begin(), ptr->end())
113140 {{- else}}.assign(ptr->begin(), ptr->end())
114141 {{- end}};
115- }{{- else}}outObject.{{$property.Meta.CppName}}
116- {{- template "field-value-assign-pre" $property.Meta -}}
142+ else {
143+ outObject.{{$property.Meta.CppName}}
144+ {{- if $property.Meta.Optional -}}
145+ .reset();
146+ {{- else -}}
147+ .clear();
148+ {{- end}}
149+ }
150+ }
151+ {{- else }}
152+ {{ if $property.Meta.Optional -}}
153+ if (table->CheckField({{$property.FbvTableOffset}})) {{end -}}
154+ outObject.{{$property.Meta.CppName}}
155+ {{- template "field-value-assign-pre" $property.Meta -}}
117156 table->GetField<{{$property.Meta.CppFbType}}>({{- $property.FbvTableOffset}}, {{$property.Meta.FbDefaultValue}}){{if eq "bool" $property.Meta.CppType}} != 0{{end}}
118- {{- template "field-value-assign-post" $property.Meta}};
157+ {{- template "field-value-assign-post" $property.Meta}};
158+ {{- if $property.Meta.Optional}} else outObject.{{$property.Meta.CppName}}.reset();{{- end}}
159+ {{- end }}
119160 {{- end}}
120- {{end}}
121161}
122162{{end}}
123163` ))
0 commit comments