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

📄 genpromote.cpp

📁 A C++ class library for scientific computing
💻 CPP
字号:
#include <iostream>#include <fstream>struct TypePromotions {    int priority;    int promotion;    const char* name;};TypePromotions types[] = {    { 9,  4, "char" },    { 9,  4, "unsigned char" },    { 9,  4, "short int" },    { 9,  5, "short unsigned int" },    { 9, -1, "int" },                 /* 4 */    { 8, -1, "unsigned int" },        /* 5 */    { 7, -1, "long" },    { 6, -1, "unsigned long" },    { 5, -1, "float" },    { 4, -1, "double" },    { 3, -1, "long double" },    { 2, -1, "complex<float> " },    { 1, -1, "complex<double> " },    { 0, -1, "complex<long double> " }};int nTypes = 14;const char *className = "promote_trait";const char *typeName = "T_promote";void generate(){    std::cout << "Generating <promote-old.h>" << std::endl;    std::ofstream ofs("../promote-old.h");    ofs << "/***********************************************************************\n"" * promote.h   Arithmetic type promotion trait class\n"" * Author: Todd Veldhuizen         (tveldhui@oonumerics.org)\n"" *\n"" * Copyright (C) 1997-2001 Todd Veldhuizen <tveldhui@oonumerics.org>\n"" *\n"" * This program is free software; you can redistribute it and/or\n"" * modify it under the terms of the GNU General Public License\n"" * as published by the Free Software Foundation; either version 2\n"" * of the License, or (at your option) any later version.\n"" *\n"" * This program is distributed in the hope that it will be useful,\n"" * but WITHOUT ANY WARRANTY; without even the implied warranty of\n"" * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"" * GNU General Public License for more details.\n"" *\n"" * Suggestions:          blitz-dev@oonumerics.org\n"" * Bugs:                 blitz-bugs@oonumerics.org\n"" *\n"" * For more information, please see the Blitz++ Home Page:\n"" *    http://oonumerics.org/blitz/\n"" *\n"" ***************************************************************************\n"" */\n""\n"        << "// Generated: " << __FILE__ << " " << __DATE__ << " " << __TIME__ << std::endl;ofs <<"template<typename A, typename B>\n""class promote_trait {\n""public:\n""        typedef A   T_promote;\n""};\n\n\n";    for (int i=0; i < nTypes; ++i)    {        for (int j=0; j < nTypes; ++j)        {            int promote;            if ((i > 7) || (j > 7))            {                // One of them is float                if (types[i].priority < types[j].priority)                    promote = i;                else                    promote = j;            }            else {                int ni = i, nj = j;                if (types[i].promotion != -1)                    ni = types[i].promotion;                if (types[j].promotion != -1)                    nj = types[j].promotion;                if (types[ni].priority < types[nj].priority)                    promote = ni;                else                    promote = nj;            }            if ((i >= 11) || (j >= 11))                ofs << "#ifdef BZ_HAVE_COMPLEX" << std::endl;            ofs << "template<>" << std::endl                << "class " << className << "<" << types[i].name << ", "                << types[j].name << "> {\npublic:\n"                << "\ttypedef " << types[promote].name << " "                << typeName << ";\n};\n";            if ((i >= 11) || (j >= 11))                ofs << "#endif" << std::endl;            ofs << std::endl;        }    }}int main(){    generate();    return 0;}

⌨️ 快捷键说明

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