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

📄 choiceptrstr.cpp

📁 ncbi源码
💻 CPP
字号:
/* * =========================================================================== * PRODUCTION $Log: choiceptrstr.cpp,v $ * PRODUCTION Revision 1000.1  2004/06/01 19:42:24  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7 * PRODUCTION * =========================================================================== *//*  $Id: choiceptrstr.cpp,v 1000.1 2004/06/01 19:42:24 gouriano Exp $* ===========================================================================**                            PUBLIC DOMAIN NOTICE*               National Center for Biotechnology Information**  This software/database is a "United States Government Work" under the*  terms of the United States Copyright Act.  It was written as part of*  the author's official duties as a United States Government employee and*  thus cannot be copyrighted.  This software/database is freely available*  to the public for use. The National Library of Medicine and the U.S.*  Government have not placed any restriction on its use or reproduction.**  Although all reasonable efforts have been taken to ensure the accuracy*  and reliability of the software and data, the NLM and the U.S.*  Government do not and cannot warrant the performance or results that*  may be obtained by using this software or data. The NLM and the U.S.*  Government disclaim all warranties, express or implied, including*  warranties of performance, merchantability or fitness for any particular*  purpose.**  Please cite the author in any work or product based on this material.** ===========================================================================** Author: Eugene Vasilchenko** File Description:*   !!! PUT YOUR DESCRIPTION HERE !!!** ---------------------------------------------------------------------------* $Log: choiceptrstr.cpp,v $* Revision 1000.1  2004/06/01 19:42:24  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7** Revision 1.7  2004/05/17 21:03:13  gorelenk* Added include of PCH ncbi_pch.hpp** Revision 1.6  2003/03/11 20:06:47  kuznets* iterate -> ITERATE** Revision 1.5  2002/08/14 17:14:25  grichenk* Fixed function name conflict on Win32: renamed* GetClassName() -> GetClassNameDT()** Revision 1.4  2002/07/01 15:42:08  grichenk* Fixed 'unused variable' warnings, removed commented code.** Revision 1.3  2001/05/17 15:07:11  lavr* Typos corrected** Revision 1.2  2000/11/29 17:42:42  vasilche* Added CComment class for storing/printing ASN.1/XML module comments.* Added srcutil.hpp file to reduce file dependency.** Revision 1.1  2000/09/26 17:38:25  vasilche* Fixed incomplete choiceptr implementation.* Removed temporary comments.** ===========================================================================*/#include <ncbi_pch.hpp>#include <corelib/ncbistd.hpp>#include <serial/serialdef.hpp>#include <serial/datatool/choiceptrstr.hpp>#include <serial/datatool/code.hpp>#include <serial/datatool/namespace.hpp>#include <serial/datatool/srcutil.hpp>BEGIN_NCBI_SCOPE#define STATE_ENUM "E_Choice"#define STATE_PREFIX "e_"#define STATE_NOT_SET "e_not_set"#define REFCHOICE_TYPE_METHOD "GetRefChoiceTypeInfo"CChoicePtrTypeStrings::CChoicePtrTypeStrings(const string& externalName,                                             const string& className)    : CParent(externalName, className){}void CChoicePtrTypeStrings::AddVariant(const string& name,                                       AutoPtr<CTypeStrings> type){    m_Variants.push_back(SVariantInfo(name, type));}CChoicePtrTypeStrings::SVariantInfo::SVariantInfo(const string& n,                                                  AutoPtr<CTypeStrings> t)    : externalName(n), cName(Identifier(n)), type(t){}void CChoicePtrTypeStrings::GenerateClassCode(CClassCode& code,                                              CNcbiOstream& /*setters*/,                                              const string& methodPrefix,                                              bool haveUserClass,                                              const string& classPrefix) const{    string codeClassName = GetClassNameDT();    if ( haveUserClass )        codeClassName += "_Base";    // generate variants code    {        ITERATE ( TVariants, i, m_Variants ) {            i->type->GeneratePointerTypeCode(code);        }    }    string stdNamespace =         code.GetNamespace().GetNamespaceRef(CNamespace::KSTDNamespace);    string ncbiNamespace =        code.GetNamespace().GetNamespaceRef(CNamespace::KNCBINamespace);    code.ClassPublic() <<        "    static const "<<ncbiNamespace<<"CTypeInfo* "REFCHOICE_TYPE_METHOD"(void);\n"        "\n";    // generated choice enum    {        code.ClassPublic() <<            "    // choice state enum\n"            "    enum "STATE_ENUM" {\n"            "        "STATE_NOT_SET" = "<<kEmptyChoice;        ITERATE ( TVariants, i, m_Variants ) {            code.ClassPublic() << ",\n"                "        "STATE_PREFIX<<i->cName;        }        code.ClassPublic() << "\n"            "    };\n"            "\n";    }    // generate choice methods    code.ClassPublic() <<        "    // return selection name (for diagnostic purposes)\n"        "    static "<<stdNamespace<<"string SelectionName("STATE_ENUM" index);\n"        "\n";    // generate choice variants names    code.ClassPrivate() <<        "    static const char* const sm_SelectionNames[];\n";    {        code.Methods() <<            "const char* const "<<methodPrefix<<"sm_SelectionNames[] = {\n"            "    \"not set\"";        ITERATE ( TVariants, i, m_Variants ) {            code.Methods() << ",\n"                "    \""<<i->externalName<<"\"";        }        code.Methods() << "\n"            "};\n"            "\n"            "NCBI_NS_STD::string "<<methodPrefix<<"SelectionName("STATE_ENUM" index)\n"            "{\n"            "    return NCBI_NS_NCBI::CInvalidChoiceSelection::GetName(index, sm_SelectionNames, sizeof(sm_SelectionNames)/sizeof(sm_SelectionNames[0]));\n"            "}\n"            "\n";    }    // generate variant types    {        code.ClassPublic() <<            "    // variants' types\n";        ITERATE ( TVariants, i, m_Variants ) {            code.ClassPublic() <<                "    typedef "<<i->type->GetCType(code.GetNamespace())<<" T"<<i->cName<<";\n";        }        code.ClassPublic() <<             "\n";    }    // generate type info    code.Methods() <<        "// type info\n";    if ( haveUserClass )        code.Methods() << "BEGIN_NAMED_ABSTRACT_BASE_CLASS_INFO";    else        code.Methods() << "BEGIN_NAMED_ABSTRACT_CLASS_INFO";    code.Methods() <<        "(\""<<GetExternalName()<<"\", "<<classPrefix<<GetClassNameDT()<<")\n"        "{\n";    {        ITERATE ( TVariants, i, m_Variants ) {            code.Methods() <<                "    ADD_NAMED_SUB_CLASS(\""<<i->externalName<<"\", "<<i->type->GetCType(code.GetNamespace())<<");\n";        }    }    code.Methods() <<        "}\n"        "END_CLASS_INFO\n"        "\n";    // generate ref type info    code.Methods() <<        "const NCBI_NS_NCBI::CTypeInfo* "<<methodPrefix<<REFCHOICE_TYPE_METHOD"(void)\n"        "{\n"        "    return NCBI_NS_NCBI::CChoicePointerTypeInfo::GetTypeInfo(NCBI_NS_NCBI::CRefTypeInfo<"<<        classPrefix<<GetClassNameDT()<<">::GetTypeInfo("<<classPrefix<<GetClassNameDT()<<        "::GetTypeInfo()));\n"        "}\n"        "\n";}CChoicePtrRefTypeStrings::CChoicePtrRefTypeStrings(CTypeStrings* type)    : CParent(type){}CChoicePtrRefTypeStrings::CChoicePtrRefTypeStrings(AutoPtr<CTypeStrings> type)    : CParent(type){}string CChoicePtrRefTypeStrings::GetRef(const CNamespace& ns) const{    return "CHOICE, ("+CParent::GetRef(ns)+')';}END_NCBI_SCOPE

⌨️ 快捷键说明

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