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
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;')
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 = []