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 class Variable:
00039 """
00040 Represents the C++ data member/variable in the object form.
00041
00042 Class attributes:
00043 _XMLTAG -- constant string with the xml tag description
00044 """
00045 _XMLTAG = 'var'
00046
00047 def __init__(self, xmlnode = None):
00048 """
00049 Populates the variable from a XML node info.
00050 When the XML node is not defined, does nothing.
00051
00052 xmlnode -- the XML node with the member definition
00053
00054 Instance attributes:
00055 vname -- name of the variable
00056 vtype -- type name of the variable
00057 vdefault -- the default value of the variable
00058 vcond -- if the variable has a conditional attached
00059 vbits -- if the variable has a bit field value
00060 """
00061 self.vname = 'unnamed'
00062 self.vtype = 'void'
00063 self.vdefault = None
00064 self.vcond = None
00065 self.vbits = None
00066
00067 if xmlnode != None: self.from_xml(xmlnode)
00068
00069 def from_xml(self, xmlnode):
00070 """
00071 Extracts the variable attributes from the XML node.
00072
00073 xmlnode -- the XML node with the member definition
00074 """
00075
00076 if xmlnode.tag != self._XMLTAG:
00077 raise NameError(self.__class__.__name__ +
00078 ' expected XML tag: "' +
00079 self._XMLTAG +
00080 '"')
00081
00082 self.vname = xmlnode.get('name',self.vname)
00083 self.vtype = xmlnode.get('type',self.vtype)
00084 self.default = xmlnode.get('default', self.vdefault)
00085 self.vcond = xmlnode.get('if', self.vcond)
00086 self.vbits = xmlnode.get('bits', self.vbits)
00087
00088 def gen_code(self, bindent = '', indent = ' '):
00089 """
00090 Generates the full member definition C++ code and
00091 returns it as a string
00092
00093 bindent -- the current indent in the document
00094 indent -- the usual minimum indentation
00095 """
00096 code = bindent + indent + self.vtype + ' ' + self.vname
00097 if self.vbits != None:
00098 code = code + ': ' + self.vbits
00099
00100 return code + ';'
00101
00102 def __str__(self):
00103 """
00104 Overriden string specifier returns the C++ code snippet
00105 without indentation.
00106 """
00107 return self.gen_code(indent = '')
00108
00109
00110