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

📄 filecode.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            " * ATTENTION:\n"            " *   Don't edit or commit this file into CVS as this file will\n"            " *   be overridden (by DATATOOL) without warning!\n"            " * ===========================================================================\n"            " */\n";    }    return out;}CNcbiOstream& CFileCode::WriteUserCopyright(CNcbiOstream& out, bool header) const{    if (header) {        WriteCopyrightHeader(out)            << " */\n\n"            << "/// @" << CDirEntry(GetUserHPPName()).GetName() << "\n"            << "/// User-defined methods of the data storage class.\n"            << "///\n"            << "/// This file was originally generated by application DATATOOL\n"            << "/// using the following specifications:\n";        string name = CDirEntry(GetBaseHPPName()).GetName();        WriteSpecRefs(out) <<            "///\n"            "/// New methods or data members can be added to it if needed.\n";        if (CClassCode::GetDocRootURL().empty()) {            out << "/// See also: " << name << "\n\n";        } else {            out << "/// See also: <a href=\"" << name << "\">" << name << "</a>\n\n";        }    } else {        WriteCopyrightHeader(out) <<            " * Author:  .......\n"            " *\n"            " * File Description:\n"            " *   .......\n"            " *\n"            " * Remark:\n"            " *   This code was originally generated by application DATATOOL\n"            " *   using the following specifications:\n"            " *   ";        WriteSourceFile(out) << ".\n"            " */\n";    }    return out;}CNcbiOstream& CFileCode::WriteLogKeyword(CNcbiOstream& out){    out << "\n"        "/*\n"        "* ===========================================================================\n"        "*\n"        "* $""Log$\n"        "*\n"        "* ===========================================================================\n"        "*/\n";    return out;}void CFileCode::GenerateHPP(const string& path, string& fileName) const{    fileName = Path(path, GetBaseHPPName());    CreateFileFolder(fileName);    CDelayedOfstream header(fileName);    if ( !header ) {        ERR_POST(Fatal << "Cannot create file: " << fileName);        return;    }    string hppDefine = GetBaseHPPDefine();    WriteCopyright(header, true) <<        "\n"        "#ifndef " << hppDefine << "\n"        "#define " << hppDefine << "\n"        "\n"        "// standard includes\n"        "#include <serial/serialbase.hpp>\n";    if ( !m_HPPIncludes.empty() ) {        header <<            "\n"            "// generated includes\n";        ITERATE ( TIncludes, i, m_HPPIncludes ) {            header <<                "#include " << Include(*i, true) << "\n";        }        header <<            '\n';    }    CNamespace ns;    if ( !m_ForwardDeclarations.empty() ) {        bool begin = false;        ITERATE ( TForwards, i, m_ForwardDeclarations ) {            ns.Set(i->second, header);            if ( !begin ) {                header <<                    "\n"                    "// forward declarations\n";                begin = true;            }            header <<                "class " << i->first << ";\n";        }        if ( begin )            header << '\n';    }        if ( !m_Classes.empty() ) {        bool begin = false;        ITERATE ( TClasses, i, m_Classes ) {            if ( !i->hppCode.empty() ) {                ns.Set(i->ns, header);                if ( !begin ) {                    header <<                        "\n"                        "// generated classes\n"                        "\n";                    if (CClassCode::GetDoxygenComments()) {                        header                            << "\n"                            << "/** @addtogroup ";                        if (!CClassCode::GetDoxygenGroup().empty()) {                            header << CClassCode::GetDoxygenGroup();                        } else {                            header << "dataspec_" << i->code->GetModuleName();                        }                        header                            << "\n *\n"                            << " * @{\n"                            << " */\n\n";                    }                    begin = true;                }                header << i->hppCode;            }        }        if ( begin ) {            if (CClassCode::GetDoxygenComments()) {                header << "\n/* @} */";            }            header << "\n";        }    }    if ( !m_Classes.empty() ) {        bool begin = false;        ITERATE ( TClasses, i, m_Classes ) {            if ( !i->inlCode.empty() ) {                ns.Set(i->ns, header, false);                if ( !begin ) {                    // have inline methods                    header <<                        "\n"                        "\n"                        "\n"                        "\n"                        "\n"                        "///////////////////////////////////////////////////////////\n"                        "///////////////////// inline methods //////////////////////\n"                        "///////////////////////////////////////////////////////////\n";                    begin = true;                }                header << i->inlCode;            }        }        if ( begin ) {            header <<                "///////////////////////////////////////////////////////////\n"                "////////////////// end of inline methods //////////////////\n"                "///////////////////////////////////////////////////////////\n"                "\n"                "\n"                "\n"                "\n"                "\n";        }    }    ns.Reset(header);    header <<        "\n"        "#endif // " << hppDefine << "\n";    header.close();    if ( !header )        ERR_POST(Fatal << "Error writing file " << fileName);}void CFileCode::GenerateCPP(const string& path, string& fileName) const{    fileName = Path(path, GetBaseCPPName());    CreateFileFolder(fileName);    CDelayedOfstream code(fileName);    if ( !code ) {        ERR_POST(Fatal << "Cannot create file: " << fileName);        return;    }    WriteCopyright(code, false) <<        "\n"        "// standard includes\n";    if (!m_PchHeader.empty()) {        code <<            "#include <" << m_PchHeader << ">\n";    }    code <<        "#include <serial/serialimpl.hpp>\n"        "\n"        "// generated includes\n"        "#include " << Include(GetUserHPPName()) << "\n";    if ( !m_CPPIncludes.empty() ) {        ITERATE ( TIncludes, i, m_CPPIncludes ) {            code <<                "#include " <<                Include(m_CodeGenerator->ResolveFileName(*i), true) <<                "\n";        }    }    CNamespace ns;    if ( !m_Classes.empty() ) {        bool begin = false;        ITERATE ( TClasses, i, m_Classes ) {            if ( !i->cppCode.empty() ) {                ns.Set(i->ns, code, false);                if ( !begin ) {                    code <<                        "\n"                        "// generated classes\n"                        "\n";                    begin = true;                }                code << i->cppCode;            }        }        if ( begin )            code << '\n';    }    ns.Reset(code);    code.close();    if ( !code )        ERR_POST(Fatal << "Error writing file " << fileName);}bool CFileCode::GenerateUserHPP(const string& path, string& fileName) const{    return WriteUserFile(path, GetUserHPPName(), fileName,                         &CFileCode::GenerateUserHPPCode);}bool CFileCode::GenerateUserCPP(const string& path, string& fileName) const{    return WriteUserFile(path, GetUserCPPName(), fileName,                         &CFileCode::GenerateUserCPPCode);}bool CFileCode::ModifiedByUser(const string& fileName,                               const list<string>& newLines) const{    // first check if file exists    CNcbiIfstream in(fileName.c_str());    if ( !in ) {        // file doesn't exist -> was not modified by user        return false;    }    CChecksum checksum;    bool haveChecksum = false;    bool equal = true;        list<string>::const_iterator newLinesI = newLines.begin();    SIZE_TYPE lineOffset = 0;    while ( in ) {        char buffer[1024]; // buffer must be as big as checksum line        in.getline(buffer, sizeof(buffer), '\n');        SIZE_TYPE count = in.gcount();        if ( count == 0 ) {            // end of file            break;        }        if ( haveChecksum || in.eof() ) {            // text after checksum -> modified by user            //    OR            // partial last line -> modified by user            ERR_POST(Info <<                     "Will not overwrite modified user file: "<<fileName);            return true;        }        bool eol;        // check where EOL was read        if ( in.fail() ) {            // very long line            // reset fail flag            in.clear(in.rdstate() & ~in.failbit);            eol = false;        }        else {            // full line was read            --count; // do not include EOL symbol            eol = true;        }        // check for checksum line        if ( lineOffset == 0 && eol ) {            haveChecksum = checksum.ValidChecksumLine(buffer, count);            if ( haveChecksum )                continue;        }        // update checksum        checksum.AddChars(buffer, count);        // update equal flag        if ( equal ) {            if ( newLinesI == newLines.end() )                equal = false;            else if ( newLinesI->size() < lineOffset + count )                equal = false;            else {                const char* ptr = newLinesI->data() + lineOffset;                equal = memcmp(ptr, buffer, count) == 0;            }        }        lineOffset += count;        if ( eol ) {            checksum.NextLine();            if ( equal ) {                // check for end of line in newLines                equal = newLinesI->size() == lineOffset;                ++newLinesI;            }            lineOffset = 0;        }    }    if ( haveChecksum ) {        // file contains valid checksum -> it was not modified by user        return false;    }    // file doesn't have checksum    // we assume it modified if its content different from newLines    return !equal  ||  newLinesI != newLines.end();

⌨️ 快捷键说明

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