Skip to content

Commit 19d27cb

Browse files
Fix some todos and inconsistencies
1 parent 6d301d7 commit 19d27cb

File tree

3 files changed

+37
-12
lines changed

3 files changed

+37
-12
lines changed

Source/buildbindingccpp.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1513,14 +1513,14 @@ func buildCppHeader(component ComponentDefinition, w LanguageWriter, NameSpace s
15131513
}
15141514

15151515
w.Writeln(" ")
1516-
w.Writeln(" inline void C%sWrapper::CheckErrorSafely(%sResult nResult)", NameSpace, NameSpace)
1516+
w.Writeln(" inline void %s%sWrapper::CheckErrorSafely(%sResult nResult)", cppClassPrefix, ClassIdentifier, NameSpace)
15171517
w.Writeln(" {")
15181518
w.Writeln(" if (nResult != 0) {")
15191519
w.Writeln(" throw E%sException(nResult, \"\");", NameSpace)
15201520
w.Writeln(" }")
15211521
w.Writeln(" }")
15221522
w.Writeln(" ")
1523-
w.Writeln(" inline void C%sWrapper::CheckError(%sResult nResult)", NameSpace, NameSpace)
1523+
w.Writeln(" inline void %s%sWrapper::CheckError(%sResult nResult)", cppClassPrefix, ClassIdentifier, NameSpace)
15241524
w.Writeln(" {")
15251525
w.Writeln(" if (nResult != 0) {")
15261526
w.Writeln(" std::string sErrorMessage;")
@@ -1687,6 +1687,7 @@ func BuildBindingCppExplicit(component ComponentDefinition, outputFolder string,
16871687

16881688

16891689
func buildDynamicCppExample(componentdefinition ComponentDefinition, w LanguageWriter, outputFolder string, ClassIdentifier string, ExplicitLinking bool) error {
1690+
cppClassPrefix := "C"
16901691
NameSpace := componentdefinition.NameSpace
16911692
BaseName := componentdefinition.BaseName
16921693

@@ -1706,9 +1707,9 @@ func buildDynamicCppExample(componentdefinition ComponentDefinition, w LanguageW
17061707
w.Writeln(" {")
17071708
if (ExplicitLinking) {
17081709
w.Writeln(" std::string libpath = (\"\"); // TODO: put the location of the %s-library file here.", NameSpace)
1709-
w.Writeln(" auto wrapper = %s::C%sWrapper::loadLibrary(libpath + \"/%s.\"); // TODO: add correct suffix of the library", NameSpace, ClassIdentifier, BaseName,)
1710+
w.Writeln(" auto wrapper = %s::%s%sWrapper::loadLibrary(libpath + \"/%s.\"); // TODO: add correct suffix of the library", NameSpace, cppClassPrefix, ClassIdentifier, BaseName,)
17101711
} else {
1711-
w.Writeln(" auto wrapper = %s::C%sWrapper::loadLibrary();", NameSpace, ClassIdentifier)
1712+
w.Writeln(" auto wrapper = %s::%s%sWrapper::loadLibrary();", NameSpace, cppClassPrefix, ClassIdentifier)
17121713
}
17131714
w.Writeln(" %s_uint32 nMajor, nMinor, nMicro;", NameSpace)
17141715
w.Writeln(" wrapper->%s(nMajor, nMinor, nMicro);", componentdefinition.Global.VersionMethod)

Source/buildimplementationcpp.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1527,15 +1527,15 @@ func buildCPPInterfaceMethodDeclaration(component ComponentDefinition, method Co
15271527
} else {
15281528
if (paramNameSpace == NameSpace) {
15291529
if len(paramNameSpaceCPP) > 0 {
1530-
// TODO: ClassIdentifier is incorrect! get via // component.ImportedComponentDefinitions[paramNameSpace].Bindings
1531-
parameters = parameters + fmt.Sprintf("%sP%s%s p%s", paramNameSpaceCPP, ClassIdentifier, paramClassNameCPP, param.ParamName)
1530+
thisClassIdentifier := component.BindingDefinitions["CppDynamic"].ClassIdentifier
1531+
parameters = parameters + fmt.Sprintf("%sP%s%s p%s", paramNameSpaceCPP, thisClassIdentifier, paramClassNameCPP, param.ParamName)
15321532
} else {
15331533
parameters = parameters + fmt.Sprintf("I%s%s* p%s", ClassIdentifier, class.ClassName, param.ParamName)
15341534
}
15351535
} else {
15361536
if len(paramNameSpaceCPP) > 0 {
1537-
// TODO: ClassIdentifier is incorrect! get via // component.ImportedComponentDefinitions[paramNameSpace].Bindings
1538-
parameters = parameters + fmt.Sprintf("%sP%s%s p%s", paramNameSpaceCPP, ClassIdentifier, paramClassNameCPP, param.ParamName)
1537+
thisClassIdentifier := component.ImportedComponentDefinitions[paramNameSpace].BindingDefinitions["CppDynamic"].ClassIdentifier
1538+
parameters = parameters + fmt.Sprintf("%sP%s%s p%s", paramNameSpaceCPP, thisClassIdentifier, paramClassNameCPP, param.ParamName)
15391539
} else {
15401540
parameters = parameters + fmt.Sprintf("I%s%s* p%s", ClassIdentifier, param.ParamClass, param.ParamName)
15411541
}
@@ -1616,8 +1616,13 @@ func buildCPPInterfaceMethodDeclaration(component ComponentDefinition, method Co
16161616
case "class", "optionalclass":
16171617
commentcode = commentcode + fmt.Sprintf(indentString + "* @param[out] p%s - %s\n", param.ParamName, param.ParamDescription)
16181618
if len(paramNameSpaceCPP) > 0 {
1619-
// TODO: ClassIdentifier is incorrect! get via // component.ImportedComponentDefinitions[paramNameSpace].Bindings
1620-
parameters = parameters + fmt.Sprintf("%sP%s%s p%s", paramNameSpaceCPP, ClassIdentifier, paramClassNameCPP, param.ParamName)
1619+
thisClassIdentifier := ClassIdentifier
1620+
if (paramNameSpace == NameSpace) {
1621+
thisClassIdentifier = component.BindingDefinitions["CppDynamic"].ClassIdentifier
1622+
} else {
1623+
thisClassIdentifier = component.ImportedComponentDefinitions[paramNameSpace].BindingDefinitions["CppDynamic"].ClassIdentifier
1624+
}
1625+
parameters = parameters + fmt.Sprintf("%sP%s%s p%s", paramNameSpaceCPP, thisClassIdentifier, paramClassNameCPP, param.ParamName)
16211626
} else {
16221627
parameters = parameters + fmt.Sprintf("I%s%s*& p%s", ClassIdentifier, param.ParamClass, param.ParamName)
16231628
}
@@ -1637,8 +1642,13 @@ func buildCPPInterfaceMethodDeclaration(component ComponentDefinition, method Co
16371642
case "class", "optionalclass":
16381643
commentcode = commentcode + fmt.Sprintf(indentString + "* @return %s\n", param.ParamDescription)
16391644
if len(paramNameSpaceCPP) > 0 {
1640-
// TODO: ClassIdentifier is incorrect! get via // component.ImportedComponentDefinitions[paramNameSpace].Bindings
1641-
returntype = fmt.Sprintf("%sP%s%s", paramNameSpaceCPP, ClassIdentifier, paramClassNameCPP)
1645+
thisClassIdentifier := ClassIdentifier
1646+
if (paramNameSpace == NameSpace) {
1647+
thisClassIdentifier = component.BindingDefinitions["CppDynamic"].ClassIdentifier
1648+
} else {
1649+
thisClassIdentifier = component.ImportedComponentDefinitions[paramNameSpace].BindingDefinitions["CppDynamic"].ClassIdentifier
1650+
}
1651+
returntype = fmt.Sprintf("%sP%s%s", paramNameSpaceCPP, thisClassIdentifier, paramClassNameCPP)
16421652
} else {
16431653
_, class, _ := component.getClassByName(param.ParamClass)
16441654
if (class.IsAbstract()) {

Source/componentdefinition.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ type ComponentDefinition struct {
251251
ImportComponents []ComponentDefinitionImportComponent `xml:"importcomponent"`
252252

253253
ImportedComponentDefinitions map[string]ComponentDefinition
254+
BindingDefinitions map[string]ComponentDefinitionBinding
254255
NameMapsLookup NameMaps
255256
}
256257

@@ -308,6 +309,7 @@ func (param *ComponentDefinitionParam) Normalize() {
308309
func ReadComponentDefinition(FileName string, ACTVersion string) (ComponentDefinition, error) {
309310
var component ComponentDefinition
310311
component.ImportedComponentDefinitions = make(map[string]ComponentDefinition, 0)
312+
component.BindingDefinitions = make(map[string]ComponentDefinitionBinding, 0)
311313
component.NameMapsLookup = NameMaps{
312314
enumMap : make(map[string]bool, 0),
313315
structMap : make(map[string]bool, 0),
@@ -337,6 +339,11 @@ func ReadComponentDefinition(FileName string, ACTVersion string) (ComponentDefin
337339
return component, err
338340
}
339341

342+
for i := 0; i < len(component.BindingList.Bindings); i++ {
343+
binding := component.BindingList.Bindings[i]
344+
component.BindingDefinitions[binding.Language] = binding
345+
}
346+
340347
for i := 0; i < len(component.ImportComponents); i++ {
341348
importComponent := component.ImportComponents[i]
342349
subFileName := filepath.Join(directory, importComponent.URI)
@@ -393,6 +400,12 @@ func (component *ComponentDefinition) checkImplementations() error {
393400
return fmt.Errorf ("Invalid StubIdentifier in implementation \"%s\"", implementation.Language);
394401
}
395402
}
403+
404+
if (component.ContainsAnAbstractClass() && implementation.Language == "Cpp") {
405+
if _, ok:= component.BindingDefinitions["CppDynamic"]; !ok {
406+
return fmt.Errorf ("A %s-Implementation of a component with an abstract class requires the CppDynamic-bindings of the same component to be generated", implementation.Language);
407+
}
408+
}
396409
}
397410
return nil
398411
}
@@ -1086,6 +1099,7 @@ func (component *ComponentDefinition) CheckComponentDefinition() (error) {
10861099
return err
10871100
}
10881101

1102+
10891103
err = component.checkImplementations()
10901104
if err != nil {
10911105
return err

0 commit comments

Comments
 (0)