summaryrefslogtreecommitdiff
path: root/tools/InterfaceGenerator/generator/Model.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/InterfaceGenerator/generator/Model.py')
-rwxr-xr-xtools/InterfaceGenerator/generator/Model.py326
1 files changed, 326 insertions, 0 deletions
diff --git a/tools/InterfaceGenerator/generator/Model.py b/tools/InterfaceGenerator/generator/Model.py
new file mode 100755
index 000000000..ee458d934
--- /dev/null
+++ b/tools/InterfaceGenerator/generator/Model.py
@@ -0,0 +1,326 @@
+"""Interface model.
+
+Interface model is represented by Interface class.
+Parser must provide an instance of this model as a result of parsing
+interface definition file.
+Generator must take an instance of this model as input for generating
+output files.
+"""
+
+# In this module there are classes that are used as data container
+# pylint: disable=R0903
+
+import collections
+
+
+class Boolean(object):
+
+ """Boolean type.
+
+ default_value -- default value
+
+ """
+
+ def __init__(self, default_value=None):
+ self.default_value = default_value
+
+
+class Integer(object):
+
+ """Integer type.
+
+ Instance variables:
+ min_value -- minimum allowed value
+ max_value -- maximum allowed value
+ default_value -- default value
+
+ """
+
+ def __init__(self, min_value=None, max_value=None, default_value=None):
+ self.min_value = min_value
+ self.max_value = max_value
+ self.default_value = default_value
+
+
+class Double(object):
+
+ """Floating-point type.
+
+ Instance variables:
+ min_value -- minimum allowed value
+ max_value -- maximum allowed value
+ default_value -- default value
+
+ """
+
+ def __init__(self, min_value=None, max_value=None, default_value=None):
+ self.min_value = min_value
+ self.max_value = max_value
+ self.default_value = default_value
+
+class String(object):
+
+ """String type.
+
+ Instance variables:
+ min_length -- minimum string length
+ max_length -- maximum string length
+ default_value -- default value
+
+ """
+
+ def __init__(self, min_length=None, max_length=None, default_value=None):
+ self.min_length = min_length
+ self.max_length = max_length
+ self.default_value = default_value
+
+
+class Array(object):
+
+ """Array type.
+
+ Instance variables:
+ min_size -- minimum array size
+ max_size -- maximum array size
+ element_type -- type of array element
+
+ """
+
+ def __init__(self, min_size=None, max_size=None, element_type=None):
+ self.min_size = min_size
+ self.max_size = max_size
+ self.element_type = element_type
+
+
+class Issue(object):
+
+ """Issue.
+
+ Instance variables:
+ creator -- issue creator
+ value -- issue text
+
+ """
+
+ def __init__(self, creator=None, value=None):
+ self.creator = creator
+ self.value = value
+
+
+class InterfaceItemBase(object):
+
+ """Base class for interface item.
+
+ Instance variables:
+ name -- item name
+ description -- list of string description elements
+ design_description -- list of string design description elements
+ issues -- list of issues
+ todos -- list of string todo elements
+ platform -- optional platform (string or None)
+ default_value -- default value
+ scope -- optional scope: internal, partner or none (none by defaul, means public)
+
+ """
+
+ def __init__(self, name, description=None, design_description=None,
+ issues=None, todos=None, platform=None, default_value=None, scope=None):
+ self.name = name
+ self.description = description if description is not None else []
+ self.design_description = \
+ design_description if design_description is not None else []
+ self.issues = issues if issues is not None else []
+ self.todos = todos if todos is not None else []
+ self.platform = platform
+ self.default_value = default_value
+ self.scope = scope
+
+
+class EnumElement(InterfaceItemBase):
+
+ """Element of enumeration.
+
+ Instance variables:
+ internal_name -- internal name of an element must be used by a
+ generator if it is provided (not None)
+ value -- optional element value
+
+ """
+
+ def __init__(self, name, description=None, design_description=None,
+ issues=None, todos=None, platform=None, internal_name=None,
+ value=None):
+ super(EnumElement, self).__init__(
+ name, description=description,
+ design_description=design_description, issues=issues, todos=todos,
+ platform=platform)
+ self.internal_name = internal_name
+ self.value = value
+
+ @property
+ def primary_name(self):
+ """Primary name of the EnumElement.
+
+ Return the 'internal_name' property if presented or 'name' property
+ otherwise.
+
+ """
+ return self.name if self.internal_name is None else self.internal_name
+
+
+class Enum(InterfaceItemBase):
+
+ """Enumeration.
+
+ Instance variables:
+ internal_scope -- optional internal scope
+ elements -- enumeration elements
+
+ """
+
+ def __init__(self, name, description=None, design_description=None,
+ issues=None, todos=None, platform=None, internal_scope=None,
+ elements=None, scope=None):
+ super(Enum, self).__init__(
+ name, description=description,
+ design_description=design_description, issues=issues, todos=todos,
+ platform=platform, scope=scope)
+
+ self.internal_scope = internal_scope
+ self.elements = \
+ elements if elements is not None else collections.OrderedDict()
+
+
+class EnumSubset(InterfaceItemBase):
+
+ """Enumeration subset.
+
+ Instance variables:
+ enum -- enumeration
+ allowed_elements -- dictionary of elements of enumeration
+ which are allowed in this subset
+
+ """
+
+ def __init__(self, name, enum, description=None, design_description=None,
+ issues=None, todos=None, platform=None,
+ allowed_elements=None):
+ super(EnumSubset, self).__init__(
+ name, description=description,
+ design_description=design_description, issues=issues, todos=todos,
+ platform=platform)
+
+ self.enum = enum
+ self.allowed_elements = \
+ allowed_elements if allowed_elements is not None else {}
+
+
+class Param(InterfaceItemBase):
+
+ """Parameter.
+
+ Instance variables:
+ is_mandatory -- boolean value indicating whether
+ this parameter is mandatory
+ param_type -- parameter type
+ default_value -- default value
+
+ """
+
+ def __init__(self, name, param_type, description=None,
+ design_description=None, issues=None, todos=None,
+ platform=None, is_mandatory=True, default_value=None, scope=None):
+ super(Param, self).__init__(
+ name, description=description,
+ design_description=design_description, issues=issues, todos=todos,
+ platform=platform, default_value=default_value, scope=scope)
+
+ self.is_mandatory = is_mandatory
+ self.param_type = param_type
+ self.default_value = default_value
+
+
+class FunctionParam(Param):
+
+ """Function parameter.
+
+ Instance variables:
+ default_value -- optional default value of this parameter
+
+ """
+
+ def __init__(self, name, param_type, description=None,
+ design_description=None, issues=None, todos=None,
+ platform=None, is_mandatory=True, default_value=None, scope=None):
+ super(FunctionParam, self).__init__(
+ name, param_type=param_type, description=description,
+ design_description=design_description, issues=issues, todos=todos,
+ platform=platform, is_mandatory=is_mandatory, default_value=default_value, scope=scope)
+
+ self.default_value = default_value
+
+
+class Struct(InterfaceItemBase):
+
+ """Structure.
+
+ Instance variables:
+ members -- dictionary of structure members (instances of Param class)
+
+ """
+
+ def __init__(self, name, description=None, design_description=None,
+ issues=None, todos=None, platform=None, members=None, scope=None):
+ super(Struct, self).__init__(
+ name, description=description,
+ design_description=design_description, issues=issues, todos=todos,
+ platform=platform, scope=scope)
+
+ self.members = \
+ members if members is not None else collections.OrderedDict()
+
+
+class Function(InterfaceItemBase):
+
+ """Function.
+
+ Instance variables:
+ function_id -- function identifier (EnumElement from Enum "FunctionID")
+ message_type -- message type (EnumElement from Enum "messageType")
+ params -- function parameters
+
+ """
+
+ def __init__(self, name, function_id, message_type, description=None,
+ design_description=None, issues=None, todos=None,
+ platform=None, params=None, scope=None):
+ super(Function, self).__init__(
+ name, description=description,
+ design_description=design_description, issues=issues, todos=todos,
+ platform=platform, scope=scope)
+
+ self.function_id = function_id
+ self.message_type = message_type
+ self.params = \
+ params if params is not None else collections.OrderedDict()
+
+
+class Interface(object):
+
+ """Interface.
+
+ Instance variables:
+ enums -- dictionary of enumerations
+ structs -- dictionary of structures
+ functions -- dictionary of functions
+ params -- dictionary of interface parameters (name, version, etc.)
+
+ """
+
+ def __init__(self, enums=None, structs=None, functions=None, params=None):
+ self.enums = enums if enums is not None else collections.OrderedDict()
+ self.structs = \
+ structs if structs is not None else collections.OrderedDict()
+ self.functions = \
+ functions if functions is not None else collections.OrderedDict()
+ self.params = params if params is not None else {}