summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2018-08-04 17:23:16 -0400
committerJackLivio <jack@livio.io>2018-08-04 17:23:16 -0400
commit4a5afcf8cac695c88635f4bf791f03fa8bc98bc0 (patch)
tree40782fea706b5563a72a1ad208a62946ef7d19f6
parentfd7f61fae6e83a81449399080ae18efde16d6ccc (diff)
downloadsdl_core-4a5afcf8cac695c88635f4bf791f03fa8bc98bc0.tar.gz
Fixes for parsing enum history elements
-rw-r--r--src/components/smart_objects/include/smart_objects/enum_schema_item.h10
-rwxr-xr-xtools/InterfaceGenerator/generator/generators/SmartFactoryBase.py52
2 files changed, 47 insertions, 15 deletions
diff --git a/src/components/smart_objects/include/smart_objects/enum_schema_item.h b/src/components/smart_objects/include/smart_objects/enum_schema_item.h
index f6b7bdff92..b0fd0ca418 100644
--- a/src/components/smart_objects/include/smart_objects/enum_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/enum_schema_item.h
@@ -104,7 +104,7 @@ class TEnumSchemaItem : public CDefaultSchemaItem<EnumType> {
**/
static std::shared_ptr<TEnumSchemaItem> createWithSignatures(
const std::set<EnumType>& AllowedElements,
- const std::set<ElementSignature>& ElementSignatures,
+ const std::map<EnumType, std::vector<ElementSignature>>& ElementSignatures,
const TSchemaItemParameter<EnumType>& DefaultValue =
TSchemaItemParameter<EnumType>());
/**
@@ -160,14 +160,14 @@ class TEnumSchemaItem : public CDefaultSchemaItem<EnumType> {
TEnumSchemaItem(const std::set<EnumType>& AllowedElements,
const TSchemaItemParameter<EnumType>& DefaultValue,
- const std::set<ElementSignature>& ElementSignatures);
+ const std::map<EnumType, std::vector<ElementSignature>>& ElementSignatures);
SmartType getSmartType() const OVERRIDE;
EnumType getDefaultValue() const OVERRIDE;
/**
* @brief Set of allowed enumeration elements.
**/
const std::set<EnumType> mAllowedElements;
- const std::set<ElementSignature> mElementSignatures;
+ const std::map<EnumType, std::vector<ElementSignature>> mElementSignatures;
/**
* @brief Default value.
**/
@@ -276,7 +276,7 @@ std::shared_ptr<TEnumSchemaItem<EnumType> > TEnumSchemaItem<EnumType>::create(
template <typename EnumType>
std::shared_ptr<TEnumSchemaItem<EnumType> > TEnumSchemaItem<EnumType>::createWithSignatures(
const std::set<EnumType>& AllowedElements,
- const std::set<ElementSignature>& ElementSignatures,
+ const std::map<EnumType, std::vector<ElementSignature>>& ElementSignatures,
const TSchemaItemParameter<EnumType>& DefaultValue ) {
return std::shared_ptr<TEnumSchemaItem<EnumType> >(
new TEnumSchemaItem<EnumType>(AllowedElements, DefaultValue, ElementSignatures));
@@ -363,7 +363,7 @@ template <typename EnumType>
TEnumSchemaItem<EnumType>::TEnumSchemaItem(
const std::set<EnumType>& AllowedElements,
const TSchemaItemParameter<EnumType>& DefaultValue,
- const std::set<ElementSignature>& ElementSignatures)
+ const std::map<EnumType, std::vector<ElementSignature>>& ElementSignatures)
: CDefaultSchemaItem<EnumType>(DefaultValue)
, mAllowedElements(AllowedElements)
, mElementSignatures(mElementSignatures) {}
diff --git a/tools/InterfaceGenerator/generator/generators/SmartFactoryBase.py b/tools/InterfaceGenerator/generator/generators/SmartFactoryBase.py
index 2f643edb3a..47a2e92c79 100755
--- a/tools/InterfaceGenerator/generator/generators/SmartFactoryBase.py
+++ b/tools/InterfaceGenerator/generator/generators/SmartFactoryBase.py
@@ -544,6 +544,18 @@ class CodeGenerator(object):
return True
return False
+ def _enum_param_type_has_history_present(self, param_type):
+ '''
+ Check if any elements in an enum has history signature
+ '''
+ for element in param_type.elements.values():
+ if ( element.history is not None or
+ element.since is not None or
+ element.until is not None or
+ element.removed is not None ):
+ return True
+ return False
+
def _gen_schema_loc_decls(self, members, processed_enums):
"""Generate local declarations of variables for schema.
@@ -794,16 +806,30 @@ class CodeGenerator(object):
code = self._impl_code_struct_item_template.substitute(
name=param.name)
elif type(param) is Model.Enum:
- code = self._impl_code_enum_item_template.substitute(
- type=param.name,
- params=u"".join(
- [self._gen_schema_loc_emum_var_name(param),
- u", ",
- self._gen_schema_item_param_values(
- [[u"".join([param.name, u"::eType"]),
- u"".join([param.name, u"::",
- default_value.primary_name]) if
- default_value is not None else None]])]))
+ if self._enum_param_type_has_history_present(param):
+ code = self._impl_code_enum_item_with_history_template.substitute(
+ type=param.name,
+ params=u"".join(
+ [self._gen_schema_loc_emum_var_name(param),
+ u", ",
+ self._impl_gen_schema_enum_history_map_template.substitute(name=param.name),
+ u", ",
+ self._gen_schema_item_param_values(
+ [[u"".join([param.name, u"::eType"]),
+ u"".join([param.name, u"::",
+ default_value.primary_name]) if
+ default_value is not None else None]])]))
+ else:
+ code = self._impl_code_enum_item_template.substitute(
+ type=param.name,
+ params=u"".join(
+ [self._gen_schema_loc_emum_var_name(param),
+ u", ",
+ self._gen_schema_item_param_values(
+ [[u"".join([param.name, u"::eType"]),
+ u"".join([param.name, u"::",
+ default_value.primary_name]) if
+ default_value is not None else None]])]))
elif type(param) is Model.EnumSubset:
code = self._impl_code_enum_item_template.substitute(
type=param.enum.name,
@@ -1670,6 +1696,9 @@ class CodeGenerator(object):
_impl_code_loc_decl_enum_history_set_insert_template = string.Template(
u'''${enum}_element_signatures[${enum}::${value}].push_back(ElementSignature("${since}", "${until}", ${removed}));''')
+ _impl_gen_schema_enum_history_map_template = string.Template(
+ u'''${name}_element_signatures''')
+
_impl_code_item_decl_temlate = string.Template(
u'''${comment}'''
u'''std::shared_ptr<ISchemaItem> ${var_name} = ${item_decl};''')
@@ -1699,6 +1728,9 @@ class CodeGenerator(object):
_impl_code_enum_item_template = string.Template(
u'''TEnumSchemaItem<${type}::eType>::create(${params})''')
+ _impl_code_enum_item_with_history_template = string.Template(
+ u'''TEnumSchemaItem<${type}::eType>::createWithSignatures(${params})''')
+
_impl_code_item_param_value_template = string.Template(
u'''TSchemaItemParameter<$type>($value)''')