Esempio n. 1
0
    def handle_leaf(self, yinNode):   
        cpp_type, default = None, None
        for subN in yinNode.subNodes:
            if subN.match('type'):
                cpp_type = subN.cpp_type
                if cpp_type == 'tEnumeration':
                    e = dict()
                    for ex_subN in subN.subNodes:
                        if ex_subN.match('enum'):
                            e_id = yinNode.mod_name + '_' + yinNode.identifier + '_' + ex_subN.identifier
                            e_val = None
                            for ex2_subN in ex_subN.subNodes:
                                if ex2_subN.match('value'):
                                    e_val = ex2_subN.value
                            e[e_id] = e_val
                    em = simple_syntax.enumeration(yinNode.mod_name + '_' + yinNode.identifier, e)
                    self.enums.append(em)
            elif subN.match('default'):
                default = subN.default
        if not cpp_type:
            iutil.ERROR('leaf<%s> under node<%s> has no cpp_type!' % (yinNode.identifier, self.tag))
        yinNode.cpp_type, yinNode.default = cpp_type, default
        
        if (yinNode.identifier == self.keyName):
            self.keyNode = yinNode
        if yinNode.parNode != self.yinNode:
            yinNode.identifier = yinNode.mod_name + '_' + yinNode.identifier
        mv = leafVariable(yinNode)
        if yinNode.default:
            #TODO: Handle default statements
            if yin_common.isOrmStringType(yinNode.cpp_type):
                yinNode.default = '\"%s\"' % yinNode.default
            elif yinNode.cpp_type == yin_common.tUnion:
                yinNode.default = None
            elif yinNode.cpp_type == yin_common.tEnumeration:
                yinNode.default = None
            elif yinNode.cpp_type == yin_common.tInstanceIdentifier:
                yinNode.default = None
            elif yinNode.cpp_type == yin_common.tIdentityref:
                yinNode.default = None
            elif yinNode.cpp_type == yin_common.tBits:
                yinNode.default = None
            mv.default = yinNode.default

        # Get & Set
        pre = 'const ' if yin_common.isOrmStringType(yinNode.cpp_type) else iutil.nullStr
        getter = simple_syntax.function(pre + yinNode.cpp_type, iutil.namingConvert('get_'+yinNode.identifier), [])
        getter.inline = True
        getter.impBody.append('return %s.getValue();' % mv.identifier)
        mv.getter = getter
        param = simple_syntax.var_param(pre + yinNode.cpp_type, 'rhs')
        setter = simple_syntax.function('void', iutil.namingConvert('set_'+yinNode.identifier), [param])
        setter.inline = True
        setter.impBody.append('%s.set(%s);' % (mv.identifier, param.identifier))
        mv.setter = setter
        self.subLeafVars.append(mv)
        return mv
Esempio n. 2
0
 def fill_common_func(self):
     code_templates.class_template.fill_common_func(self)
 
     self.mf_getDataType.impBody.append('return %s;' % ('E_ConfigData' if not self.yinNode.operational else 'E_OperationalData'))
     
     # Construc and destroy
     self.construct_func.impBody.append('setDefaultValues();')
     
     self.op_leftShift.impBody.append('unsigned int count = 0;')
     self.op_rightShift.impBody.append('unsigned int count = 0;')
     #self.op_leftShiftWithTag.impBody.append('unsigned int count = 0;')
     #self.op_rightShiftWithTag.impBody.append('unsigned int count = 0;')
     
     self.op_leftShift.impBody.append('xml_tag xmlTag = {getTag(), getNameSpace()};')
     self.op_leftShift.impBody.append('attr[count] << xmlTag; count++;')
     #self.op_leftShiftWithTag.impBody.append('xml_tag xmlTag = {getTag(), getNameSpace()};')
     #self.op_leftShiftWithTag.impBody.append('attr[count] << xmlTag; count++;')
     for var in self.subLeafVars:
         if var.complex:
             self.mf_setDefVal.impBody.append("%s.setDefaultValues();" % var.identifier)
             self.op_leftShift.impBody.append('count += %s.operator <<(&(attr[count]));' % var.identifier)
             self.op_rightShift.impBody.append('count++; count += %s.operator >>(&(attr[count]));' % var.identifier)
             #self.op_leftShiftWithTag.impBody.append('count += %s.operator <<(&(attr[count]));' % var.identifier)
             #self.op_rightShiftWithTag.impBody.append('count++; count += %s.operator >>(&(attr[count]));' % var.identifier)
         else:
             if var.default:
                 if yin_common.isOrmStringType(var.cpp_type):
                     self.mf_setDefVal.impBody.append("%s = %s;" % (var.identifier, var.default))
                 else:
                     self.mf_setDefVal.impBody.append("%s = %s(%s);" % (var.identifier, var.cpp_type, var.default))
             self.op_leftShift.impBody.append('attr[count] << %s; count++;' % var.identifier)
             self.op_rightShift.impBody.append('attr[count] >> %s; count++;' % var.identifier)
             #self.op_leftShiftWithTag.impBody.append('attr[count] << %s; count++;' % var.identifier)
             #self.op_rightShiftWithTag.impBody.append('attr[count] >> %s; count++;' % var.identifier)
             
     self.op_leftShift.impBody.append('return getNumAttrsDmsDataType();')
     self.op_rightShift.impBody.append('return getNumAttrs();')
     self.op_leftShiftWithTag.impBody.append('return 0;')
     self.op_rightShiftWithTag.impBody.append('return 0;')
Esempio n. 3
0
    def pre_load(self):
        ormClass.pre_load(self) # Do not call this!

        for node in self.yinNode.subNodes:
            # Record key
            if node.token == "type":
                self.leafType = node.cpp_type
                if yin_common.isOrmStringType(self.leafType):
                    self.itemName = 'L_chars'
                else:
                    self.itemName = 'L_' + iutil.taggingConvert(self.leafType)
                    
        #type defines
        self.typedefs.append('typedef Data<%s> %s;' % (self.leafType, self.itemName))
        self.typedefs.append('typedef std::vector<%s> %s;' % (self.itemName, self.itemName + 's'))
        #self.externs.append('typedef std::vector<%s>::iterator %s;' % (self.leafType, self.itemName, self.itemIter))
                
        #The only one member variable fo std::map list, remove it first
        self.subLeafVars = []
        mv = simple_syntax.variable(self.itemName, 'leaflist_m')
        mv.complex = False
        self.subLeafVars.append(mv)
        
        self.enums = []