Example #1
0
 def genCppStructCodes(self, offset):
     structTemplate = """\
     {{StructName}}::{{StructName}}()
     {{InitCode}}
     {
     }
 """
     structsCodes = []
     for astruct in self.desc.structs:
         str = structTemplate
         initCode = u",\n".join(
             [
                 u"%s(%s)"
                 % (
                     item.name,
                     u"utils::getInvalidValue<%s>()" % item.type.getTypeName()
                     if len(item.default) == 0
                     else item.default,
                 )
                 for item in astruct.items
                 if item.type.isNeedInit() or len(item.default) > 0
             ]
         )
         if len(initCode) > 0:
             initCode = ":" + initCode
         str = replace(str, "{{InitCode}}", initCode)
         str = replace(str, "{{StructName}}", astruct.name)
         str = replace(str, "ttservice::", "")
         structsCodes.append(str)
     return "\n".join(structsCodes)
Example #2
0
    def genHStructCodes(self, offset):
        structTemplate = """\
    struct XT_API_EXPORT {{StructName}}
    {
        {{StructName}}();
        {{FieldCodes}}
    };
"""
        structsCodes = []
        for astruct in self.desc.structs:
            str = structTemplate
            lines = []
            for item in astruct.items:
                typeName = item.type.getTypeName()
                if typeName.endswith("Ptr"):
                    typeName = typeName[0:-3]
                if typeName.find("bson::bo") != -1:
                    typeName = u"std::string"
                line = u"%s %s;" % (typeName, item.name)
                if len(item.comment) > 0:
                    line += u" //" + item.comment
                lines.append(line)
            strContent = u"\n".join(lines)
            str = replace(str, "{{FieldCodes}}", strContent)
            str = replace(str, "{{StructName}}", astruct.name)
            str = replace(str, "{{Namespace}}::", "")
            str = replace(str, "Ptr", "")
            structsCodes.append(str)
        return "\n".join(structsCodes)
Example #3
0
    def genHCodes(self):
        ret = """\
/********************************************************************
    company:    北京睿智融科控股有限公司
    fileName:	XtStructs.h
    author:		xujun
    created:	8:11:2013   15:14
    purpose:	结构定义
*********************************************************************/
#ifndef XtStructs_2013_11_8_H
#define XtStructs_2013_11_8_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "XtDef.h"
#include "XtDataType.h"

namespace xti
{
{{StructCodes}}
}

#endif
"""
        ret = replace(ret, u"{{StructCodes}}", self.genHStructCodes(0))
        return ret
Example #4
0
    def genCppCodes(self):
        strTemplate = """\
#include "XtStructs.h"
#include "utils/commonFunc.h"

namespace xti
{
{{StructCodes}}
}
    """
        ret = strTemplate
        ret = replace(ret, u"{{StructCodes}}", self.genCppStructCodes(0))
        return ret
Example #5
0
    def genTranslatorHCodes(self, offset):
        template = """\
/********************************************************************
	company:    北京睿智融科控股有限公司
	fileName:	Translator.cpp
	author:		xujun
	created:	11:11:2013   13:47
	purpose:	结构翻译
*********************************************************************/
#ifndef Translator_2013_11_11_H
#define Translator_2013_11_11_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "Protocol/rpc_Structs.h"
#include "Protocol/rpc_StockCommon.h"
#include "Protocol/rpc_ClientTraderCommon.h"
#include "XtStructs.h"

namespace xti
{
    {{StructCodes}}
}

#endif
        """
        codes = []
        for astruct in NEED_STRUCTS:
            code = """\
// {{StructName}}
void to_ttservice_struct(const {{StructName}}& raw, ttservice::{{StructName}}& ret);
void to_xti_struct(const ttservice::{{StructName}}& raw, {{StructName}}& ret);
void to_xti_struct(const ttservice::IDataPtr& raw, {{StructName}}& ret);
            """
            code = code.replace("{{StructName}}", astruct)
            codes.append(code)
        strCode = "\n".join(codes)
        ret = template
        ret = replace(ret, "{{StructCodes}}", strCode)
        return ret
Example #6
0
    def genTranslatorCppCodes(self, offset):
        template = u"""
#include "implement/Translator.h"
#include "bson/src/util/json.h"

namespace xti
{
    {{StructCodes}}
}
        """
        codes = []
        for structName in NEED_STRUCTS:
            code = u"""\
// {{StructName}}
void to_ttservice_struct(const {{StructName}}& raw, ttservice::{{StructName}}& ret)
{
{{ToTTCodes}}
}
void to_xti_struct(const ttservice::{{StructName}}& raw, {{StructName}}& ret)
{
{{ToXtiCodes}}
}

void to_xti_struct(const ttservice::IDataPtr& raw, {{StructName}}& ret)
{
    boost::shared_ptr<ttservice::{{StructName}}> ptrRaw = boost::shared_dynamic_cast<ttservice::{{StructName}}>(raw);
    if (NULL != ptrRaw) to_xti_struct(*ptrRaw, ret);
}
            """
            astruct = self.getStruct(structName)
            if astruct == None:
                continue

            toTTItems = []
            toXtiItems = []
            for item in astruct.items:
                enumType = ""
                typeName = item.type.getTypeName()
                str1 = u""
                str2 = u""
                if typeName.startswith("std::vector") and typeName.find("{{Namespace}}::") != -1:
                    pos = typeName.find("{{Namespace}}::") + 15
                    structType = item.type.getTypeName()
                    if typeName.find("Ptr") != -1:
                        str1 = (
                            vectorToTTserviceTemplatePtr.replace("{{FIELD_NAME}}", item.name)
                            .replace("{{TTSTRUCT_NAME}}", typeName[pos:-2])
                            .replace("{{NO_PTR}}", typeName[pos:-5])
                        )
                        str2 = vectorToXtiTemplatePtr.replace("{{FIELD_NAME}}", item.name).replace(
                            "{{XTI_NAME}}", typeName[pos:-5]
                        )
                    else:
                        str1 = vectorToTTserviceTemplate.replace("{{FIELD_NAME}}", item.name).replace(
                            "{{TTSTRUCT_NAME}}", typeName[pos:-2]
                        )
                        str2 = vectorToXtiTemplate.replace("{{FIELD_NAME}}", item.name).replace(
                            "{{XTI_NAME}}", typeName[pos:-2]
                        )
                #                    if typeName.find("Ptr") != -1:
                #                        str1 = str1.replace("{{*}}", "*")
                #                        str2 = str2.replace("{{*}}", "*")
                #                    else:
                #                        str1 = str1.replace("{{*}}", "")
                #                        str2 = str2.replace("{{*}}", "")
                elif typeName.find("bson::bo") != -1:
                    str1 = u"    ret.%s = bson::fromjson(raw.%s);" % (item.name, item.name)
                    str2 = u"    ret.%s = raw.%s.toString{{}};" % (item.name, item.name)
                elif typeName.startswith("std::map") and typeName.find("{{Namespace}}::") != -1:
                    # pass
                    pos = typeName.find("{{Namespace}}::") + 15
                    str1 = (
                        mapToTTserviceTemplate.replace("{{TYPE_NAME}}", typeName.replace("{{Namespace}}::", ""))
                        .replace("{{FIELD_NAME}}", item.name)
                        .replace("{{TTSTRUCT_NAME}}", typeName[pos:-2])
                    )
                    str2 = (
                        mapToXtiTemplate.replace("{{TYPE_NAME}}", typeName.replace("{{Namespace}}::", "ttservice::"))
                        .replace("{{FIELD_NAME}}", item.name)
                        .replace("{{XTI_NAME}}", typeName[pos:-2])
                    )
                else:
                    if typeName.startswith("{{Namespace}}::"):
                        if typeName.endswith("Ptr"):
                            str1 = u"    ret.%s = %s(new %s); to_ttservice_struct(raw.%s, *ret.%s);" % (
                                item.name,
                                typeName,
                                typeName[0:-3],
                                item.name,
                                item.name,
                            )
                            str2 = u"    if (NULL != raw.%s) to_xti_struct(*raw.%s, ret.%s);" % (
                                item.name,
                                item.name,
                                item.name,
                            )
                        else:
                            rawTypeName = typeName[len("{{Namespace}}::") :]
                            if rawTypeName.startswith("E"):
                                enumType = item.type.getTypeName()
                                str1 = u"    ret.%s = (%s)raw.%s;" % (item.name, enumType, item.name)
                                str2 = u"    ret.%s = (%s)raw.%s;" % (item.name, enumType, item.name)
                            else:
                                str1 = u"    to_ttservice_struct(raw.%s, ret.%s);" % (item.name, item.name)
                                str2 = u"    to_xti_struct(raw.%s, ret.%s);" % (item.name, item.name)
                    else:
                        str1 = u"    ret.%s = (%s)raw.%s;" % (item.name, enumType, item.name)
                        str2 = u"    ret.%s = (%s)raw.%s;" % (item.name, enumType, item.name)

                str1 = str1.replace("{{Namespace}}", "ttservice")
                str2 = str2.replace("{{Namespace}}", "xti")
                toTTItems.append(str1)
                toXtiItems.append(str2)
            strToTTCodes = "\n".join(toTTItems)
            strToTxiCodes = "\n".join(toXtiItems)
            code = code.replace("{{ToTTCodes}}", strToTTCodes)
            code = code.replace("{{ToXtiCodes}}", strToTxiCodes)
            code = code.replace("{{StructName}}", structName)
            code = code.replace("()", "")
            code = code.replace("{{}}", "()")
            codes.append(code)
        strCode = "\n".join(codes)
        ret = template
        ret = replace(ret, "{{StructCodes}}", strCode)
        return ret