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 __init__(self, mod_prefix, yinNode): yinNode.cpp_type = 'ch_' + iutil.namingConvert_Luc(yinNode.identifier) ormClass.__init__(self, mod_prefix, yinNode, yinNode.cpp_type) self.cases = {} self.mf_getElementType.impBody = [] self.mf_getElementType.impBody.append('return E_Element_Choice;') self.mv_curCase = simple_syntax.variable(yin_common.tString, 'm_curCase') self.pri_memb.append(self.mv_curCase) self.mf_getCurCase = simple_syntax.function(yin_common.tString, 'getCurCase', []) self.mf_getCurCase.impBody = [] self.mf_getCurCase.impBody.append('return %s;' % self.mv_curCase.identifier) self.pub_func.append(self.mf_getCurCase) params = [simple_syntax.var_param(yin_common.tString, 'strCase', False, True, False, False, False)] self.mf_setCurCase = simple_syntax.function('bool', 'setCurCase', params) self.pub_func.append(self.mf_setCurCase)
def __init__(self, mod_prefix, yinNode, cpp_ident): #print(yinNode.getKeyPath()) code_templates.class_template.__init__(self, cpp_ident, 'ConfDDataObject') #TODO: The rule to identify namespace and tag is based on ConfD, which is not guarunteed self.mod_prefix = mod_prefix self.yinNode = yinNode self.KeyList = [] self.keyName = None self.keyNode = None self.subLeafVars = [] self.enums = [] self.typedefs = [] # Common public member functions self.mf_getNumAttrs = simple_syntax.function(yin_common.uint32_t, 'getNumAttrs', []) self.mf_getNumAttrs.inline = True self.mf_getNumAttrs.impBody.append('return numAttrs_c;') self.mf_getNumTags = simple_syntax.function(yin_common.uint8_t, 'getNumTags', []) self.mf_getNumTags.inline = True self.mf_getNumTags.impBody.append('return numTags_c;') self.mf_getNumAttrsDmsDataType = simple_syntax.function(yin_common.uint32_t, 'getNumAttrsDmsDataType', []) self.mf_getNumAttrsDmsDataType.inline = True self.mf_getNumAttrsDmsDataType.impBody.append('return numAttrsDmsDataType_c;') self.mf_getNumAttrsForDmsTagDataType = simple_syntax.function(yin_common.uint32_t, 'getNumAttrsForDmsTagDataType', []) self.mf_getNumAttrsForDmsTagDataType.inline = True self.mf_getNumAttrsForDmsTagDataType.impBody.append('return numAttrsDmsTagDataType_c;') self.mf_setDefVal = simple_syntax.function('void', 'setDefaultValues', []) self.mf_copy = simple_syntax.function('DataObject*', 'copy', []) self.mf_copy.virtual = True self.mf_copy.impBody.append('%s *dataObjCopy = new %s();' % (cpp_ident, cpp_ident)) self.mf_copy.impBody.append('*dataObjCopy = *this;') self.mf_copy.impBody.append('return dataObjCopy;') self.mf_resetSpecifiedAllAttrs = simple_syntax.function('void', 'resetSpecifiedAllAttrs', []) params = [simple_syntax.var_param('bool', 'rhs')] self.mf_updateAllAttr = simple_syntax.function('void', 'updateAllAttr', params) # Common public operators params = [simple_syntax.var_param('DmsDataType', 'attr', False, False, True, False, False)] self.op_leftShift = simple_syntax.function(yin_common.uint32_t, 'operator<<', params) params = [simple_syntax.var_param('DmsDataType', 'attr', False, True, False, True, False)] self.op_rightShift = simple_syntax.function(yin_common.uint32_t, 'operator>>', params) params = [simple_syntax.var_param('DmsTagDataType', 'attr', False, False, True, False, False)] self.op_leftShiftWithTag = simple_syntax.function(yin_common.uint32_t, 'operator<<', params) params = [simple_syntax.var_param('DmsTagDataType', 'attr', False, True, False, True, False)] self.op_rightShiftWithTag = simple_syntax.function(yin_common.uint32_t, 'operator>>', params) # Common protected functions self.mf_getDataType = simple_syntax.function(yin_common.uint8_t, 'getDataType', []) self.mf_getDataType.inline = True self.mf_getElementType = simple_syntax.function(yin_common.uint8_t, 'getElementType', []) self.mf_getElementType.inline = True #self.mf_getElementType.impBody.append('return %s;' % self.elemType) self.mf_getKeyReg = simple_syntax.function('bool', 'getKeyReq', []) self.mf_getKeyReg.inline = True self.mf_getKeyReg.virtual = True self.mf_getKeyReg.impBody.append('return true;') self.mf_getNameSpace = simple_syntax.function(yin_common.uint32_t, 'getNameSpace', []) self.mf_getNameSpace.inline = True self.mf_getNameSpace.impBody.append('return %s__ns;' % iutil.taggingConvert(self.mod_prefix)) #self.mf_getNameSpace.impBody.append('return 0;') self.mf_getTag = simple_syntax.function(yin_common.uint32_t, 'getTag', []) self.mf_getTag.inline = True self.mf_getTag.impBody.append('return %s_%s;' % (iutil.taggingConvert(self.mod_prefix), iutil.taggingConvert(self.yinNode.identifier)))