Go to the documentation of this file.00001 """
00002 Created on Nov 22, 2014
00003
00004 Software License Agreement (BSD License)
00005 Copyright (c) 2014, LABUST, UNIZG-FER
00006 All rights reserved.
00007
00008 Redistribution and use in source and binary forms, with or without
00009 modification, are permitted provided that the following conditions
00010 are met:
00011
00012 * Redistributions of source code must retain the above copyright
00013 notice, this list of conditions and the following disclaimer.
00014 * Redistributions in binary form must reproduce the above
00015 copyright notice, this list of conditions and the following
00016 disclaimer in the documentation and/or other materials provided
00017 with the distribution.
00018 * Neither the name of the LABUST nor the names of its
00019 contributors may be used to endorse or promote products derived
00020 from this software without specific prior written permission.
00021
00022 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00023 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00024 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00025 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00026 COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00027 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00028 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00029 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00030 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00031 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00032 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00033 POSSIBILITY OF SUCH DAMAGE.
00034
00035 @author: Dula Nad
00036 """
00037
00038 from .variable import Variable
00039 from .enum import Enum
00040
00041 class Structure:
00042 """
00043 Represents the C++ data structure in the object form.
00044
00045 Class attributes:
00046 _XMLTAG -- constant string with the xml tag description
00047 """
00048 _XMLTAG = 'struct'
00049
00050 def __init__(self, xmlnode = None):
00051 """
00052 Populates the structure from a XML node info.
00053 When the XML node is not defined, does nothing.
00054
00055 xmlnode -- the XML node with the member definition
00056
00057 Required attributes:
00058 name -- name of the structure
00059 Optional attributes:
00060 inherit -- the class that is inherited
00061 assert_size -- add size assertion in bytes (useful for bitfields)
00062 serialization -- the type of serialization (defaults to object serializable)
00063 bitfield -- marks the structure as a bit-field
00064 """
00065 self.name = 'Unnamed'
00066 self.inherit = None
00067 self.assert_size = None
00068 self.serialization = 'object_serializable'
00069 self.bitfield = False
00070
00071 self.variables = []
00072 self.methods = []
00073 self.enums = []
00074 self.typedefs = []
00075
00076 if xmlnode != None: self.from_xml(xmlnode)
00077
00078 def from_xml(self, xmlnode):
00079 """
00080 Extracts the structure attributes from the XML node.
00081 Memeber variables and functions are extracted from the
00082 child nodes as well.
00083
00084 xmlnode -- the XML node with the member definition
00085 """
00086
00087 if xmlnode.tag != self._XMLTAG:
00088 raise NameError(self.__class__.__name__ +
00089 ' expected XML tag: "' +
00090 self._XMLTAG +
00091 '"')
00092
00093 self.name = xmlnode.get('name', self.name)
00094 self.inherit = xmlnode.get('inherit', self.inherit)
00095 self.assert_size = xmlnode.get('assert_size', self.assert_size)
00096 self.serialization = xmlnode.get('serialization', self.serialization)
00097 bitfield = xmlnode.get('bitfield', '')
00098 self.bitfield = (bitfield == "1") or (bitfield.upper() == "TRUE")
00099
00100 for node in xmlnode.findall('.//'+Variable._XMLTAG):
00101 self.variables.append(Variable(node))
00102
00103 for node in xmlnode.findall(Enum._XMLTAG):
00104 self.enums.append(Enum(node))
00105
00106