⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classstr.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                        "\n"                        "    /// Assign a value to "<<i->cName<<" data member.\n"                        "    ///\n"                        "    /// @return\n"                        "    ///   Reference to the data value.\n";                }                setters <<                    "    "<<i->tName<<"& Set"<<i->cName<<"(void);\n";                if ( i->canBeNull ) {                    // we have to init ref before returning                    _ASSERT(!i->haveFlag);                    methods <<                        rType<<"& "<<methodPrefix<<"Set"<<i->cName<<"(void)\n"                        "{\n";                    if ( i->delayed ) {                        methods <<                            "    "DELAY_PREFIX<<i->cName<<".Update();\n";                    }                    methods <<                        "    if ( !"<<i->mName<<" )\n"                        "        "<<i->mName<<".Reset("<<i->type->NewInstance(NcbiEmptyString)<<");\n"                        "    return "<<i->valueName<<";\n"                        "}\n"                        "\n";                }                else {                    // value already not null -> simple inline method                    inlineMethods <<                        "inline\n"<<                        rType<<"& "<<methodPrefix<<"Set"<<i->cName<<"(void)\n"                        "{\n";                    if ( i->delayed ) {                        inlineMethods <<                            "    "DELAY_PREFIX<<i->cName<<".Update();\n";                    }                    if ( i->haveFlag) {                        inlineMethods <<                            "    "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask<<dec<<";\n";                    }                    if (isNullWithAtt) {                        inlineMethods <<                            "    "<<i->mName<<"->Set"<<i->cName<<"();\n";                    }                    inlineMethods <<                        "    return "<<i->valueName<<";\n"                        "}\n"                        "\n";                }                if (i->dataType && !isNullWithAtt) {                    const CDataType* resolved = i->dataType->Resolve();                    if (resolved && resolved != i->dataType) {                        CClassTypeStrings* typeStr = resolved->GetTypeStr();                        if (typeStr) {                            ITERATE ( TMembers, ir, typeStr->m_Members ) {                                if (ir->simple) {                                    string ircType(ir->type->GetCType(                                        code.GetNamespace()));                                    if (CClassCode::GetDoxygenComments()) {                                        setters <<                                            "\n"                                            "    /// Assign a value to "<<i->cName<<" data member.\n"                                            "    ///\n"                                            "    /// @param value\n"                                            "    ///   Reference to value.\n";                                    }                                    setters <<                                        "    void Set"<<i->cName<<"(const "<<                                        ircType<<"& value);\n";                                    methods <<                                        "void "<<methodPrefix<<"Set"<<                                        i->cName<<"(const "<<ircType<<                                        "& value)\n"                                        "{\n";                                    methods <<                                        "    Set" << i->cName <<                                        "() = value;\n"                                        "}\n"                                        "\n";                                }                            }                        }                    }                }            }            else {                if (isNull) {                    if (CClassCode::GetDoxygenComments()) {                        setters <<                            "\n"                            "    /// Set NULL data member (assign \'NULL\' value to "<<i->cName<<" data member).\n";                    }                    setters <<                        "    void Set"<<i->cName<<"(void);\n";                    inlineMethods <<                        "inline\n"<<                        "void "<<methodPrefix<<"Set"<<i->cName<<"(void)\n"                        "{\n";                    inlineMethods <<                        "    "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask<<dec<<";\n";                    inlineMethods <<                        "}\n"                        "\n";                } else {                    if ( i->type->CanBeCopied() ) {                        if (CClassCode::GetDoxygenComments()) {                            setters <<                                "\n"                                "    /// Assign a value to "<<i->cName<<" data member.\n"                                "    ///\n"                                "    /// @param value\n"                                "    ///   Reference to value.\n";                        }                        setters <<                            "    void Set"<<i->cName<<"(const "<<i->tName<<"& value);\n";                        inlineMethods <<                            "inline\n"                            "void "<<methodPrefix<<"Set"<<i->cName<<"(const "<<rType<<"& value)\n"                            "{\n";                        if ( i->delayed ) {                            inlineMethods <<                                "    "DELAY_PREFIX<<i->cName<<".Forget();\n";                        }                        inlineMethods <<                                                    "    "<<i->valueName<<" = value;\n";                        if ( i->haveFlag ) {                            inlineMethods <<                                "    "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask<<dec<<";\n";                        }                        inlineMethods <<                            "}\n"                            "\n";                    }                    if (CClassCode::GetDoxygenComments()) {                        setters <<                            "\n"                            "    /// Assign a value to "<<i->cName<<" data member.\n"                            "    ///\n"                            "    /// @return\n"                            "    ///   Reference to the data value.\n";                    }                    setters <<                        "    "<<i->tName<<"& Set"<<i->cName<<"(void);\n";                    inlineMethods <<                        "inline\n"<<                        rType<<"& "<<methodPrefix<<"Set"<<i->cName<<"(void)\n"                        "{\n";                    if ( i->delayed ) {                        inlineMethods <<                            "    "DELAY_PREFIX<<i->cName<<".Update();\n";                    }                    if ( i->haveFlag ) {                        if ((kind == eKindStd) || (kind == eKindEnum) || (kind == eKindString)) {                            inlineMethods <<                                "#ifdef _DEBUG\n"                                "    if (!IsSet"<<i->cName<<"()) {\n"                                "        ";                            if (kind == eKindString) {                                inlineMethods <<                                    i->valueName << " = ms_UnassignedStr;\n";                            } else {                                inlineMethods <<                                    "memset(&"<<i->valueName<<",ms_UnassignedByte,sizeof("<<i->valueName<<"));\n";                            }                            inlineMethods <<                                "    }\n"                                "#endif\n";                        }                        inlineMethods <<                            "    "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask_maybe<<dec<<";\n";                    }                    inlineMethods <<                        "    return "<<i->valueName<<";\n"                        "}\n"                        "\n";                }            }            // generate conversion operators            if ( i->cName.empty() ) {                if ( i->optional ) {                    NCBI_THROW(CDatatoolException,eInvalidData,                        "the only member of adaptor class is optional");                }                code.ClassPublic() <<                    "    /// Conversion operator to \'const "<<i->tName<<"\' type.\n"                    "    operator const "<<i->tName<<"& (void) const;\n\n"                    "    /// Conversion operator to \'"<<i->tName<<"\' type.\n"                    "    operator "<<i->tName<<"& (void);\n\n";                inlineMethods <<                    "inline\n"<<                    methodPrefix<<"operator const "<<rType<<"& (void) const\n"                    "{\n";                if ( i->delayed ) {                    inlineMethods <<                        "    "DELAY_PREFIX<<i->cName<<".Update();\n";                }                inlineMethods << "    return ";                if ( i->ref )                    inlineMethods << "*";                inlineMethods <<                    i->mName<<";\n"                    "}\n"                    "\n";                inlineMethods <<                    "inline\n"<<                    methodPrefix<<"operator "<<rType<<"& (void)\n"                    "{\n";                if ( i->delayed ) {                    inlineMethods <<                        "    "DELAY_PREFIX<<i->cName<<".Update();\n";                }                if ( i->haveFlag ) {                    if ((kind == eKindStd) || (kind == eKindEnum) || (kind == eKindString)) {                        inlineMethods <<                            "#ifdef _DEBUG\n"                            "    if (!IsSet"<<i->cName<<"()) {\n"                            "        ";                        if (kind == eKindString) {                            inlineMethods <<                                i->valueName << " = ms_UnassignedStr;\n";                        } else {                            inlineMethods <<                                "memset(&"<<i->valueName<<",ms_UnassignedByte,sizeof("<<i->valueName<<"));\n";                        }                        inlineMethods <<                            "    }\n"                            "#endif\n";                    }                    inlineMethods <<                        "    "SET_PREFIX"["<<set_index<<"] |= 0x"<<hex<<set_mask_maybe<<dec<<";\n";                }                inlineMethods << "    return ";                if ( i->ref )                    inlineMethods << "*";                inlineMethods <<                    i->mName<<";\n"                    "}\n"                    "\n";            }            setters <<                "\n";        }    }    // generate member data    {        code.ClassPrivate() <<            "    // Prohibit copy constructor and assignment operator\n" <<            "    " << code.GetClassNameDT() <<            "(const " << code.GetClassNameDT() << "&);\n" <<            "    " << code.GetClassNameDT() << "& operator=(const " <<            code.GetClassNameDT() << "&);\n" <<            "\n";        code.ClassPrivate() <<            "    // data\n";		{	        if (m_Members.size() !=0) {	            code.ClassPrivate() <<                    "    Uint4 "SET_PREFIX<<"["<<                    (2*m_Members.size()-1+8*sizeof(Uint4))/(8*sizeof(Uint4)) <<"];\n";            }        }		{	        ITERATE ( TMembers, i, m_Members ) {		        if ( i->delayed ) {			        code.ClassPrivate() <<				        "    mutable NCBI_NS_NCBI::CDelayBuffer "DELAY_PREFIX<<i->cName<<";\n";				}			}        }		{			ITERATE ( TMembers, i, m_Members ) {                if ( i->ref ) {                    code.ClassPrivate() <<                        "    "<<ncbiNamespace<<"CRef< "<<i->tName<<" > "<<i->mName<<";\n";                }                else {                    if (!x_IsNullType(i)) {                        code.ClassPrivate() <<                            "    "<<i->tName<<" "<<i->mName<<";\n";                    }                }		    }		}    }    // generate member initializers    {        {            ITERATE ( TMembers, i, m_Members ) {                if ( i->ref ) {                    if ( !i->canBeNull ) {                        string init = i->defaultValue;                        if ( init.empty() ) {                            init = i->type->GetInitializer();                        }                        code.AddInitializer(i->mName,                                            i->type->NewInstance(init));                    }                }                else {                    if (!x_IsNullType(i)) {                        string init = i->defaultValue;                        if ( init.empty() )                            init = i->type->GetInitializer();                        if ( !init.empty() )                            code.AddInitializer(i->mName, init);                    }                }            }        }    }    // generate Reset method    code.ClassPublic() <<        "    /// Reset the whole object\n"        "    ";    if ( !wrapperClass ) {        if ( HaveUserClass() )            code.ClassPublic() << "virtual ";        code.ClassPublic() <<            "void Reset(void);\n";        methods <<            "void "<<methodPrefix<<"Reset(void)\n"            "{\n";        ITERATE ( TMembers, i, m_Members ) {            methods <<                "    Reset"<<i->cName<<"();\n";        }        methods <<            "}\n"            "\n";    }    code.ClassPublic() << "\n";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -