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

📄 genmatuops.cpp

📁 A C++ class library for scientific computing
💻 CPP
字号:
#include <fstream>#include <iostream>#include <iomanip>#include "optuple2.h"const int ieeeflag = 1, bsdflag = 2;std::ofstream ofs("../matuops.h");void one(const char* fname, int flag=0, const char* apname = 0){    if (apname == 0)        apname = fname;    ofs << "/****************************************************************************" << std::endl        << " * " << fname << std::endl        << " ****************************************************************************/" << std::endl << std::endl;    if (flag == ieeeflag)        ofs << "#ifdef BZ_HAVE_IEEE_MATH" << std::endl;    else if (flag == bsdflag)        ofs << "#ifdef BZ_HAVE_SYSTEM_V_MATH" << std::endl;    OperandTuple2 operands(1);    do {        operands.printTemplates(ofs);        ofs << std::endl << "inline" << std::endl            << "_bz_MatExpr<_bz_MatExprUnaryOp<";        operands.printIterators(ofs);        ofs << "," << std::endl << "    _bz_" << apname << "<";        operands[0].printNumtype(ofs);        ofs << "> > >" << std::endl            << fname << "(";        operands.printArgumentList(ofs);        ofs << ")" << std::endl            << "{" << std::endl            << "    typedef _bz_MatExprUnaryOp<";        operands.printIterators(ofs);        ofs << "," << std::endl << "        _bz_" << apname << "<";        operands[0].printNumtype(ofs);        ofs << "> > T_expr;" << std::endl << std::endl            << "    return _bz_MatExpr<T_expr>(T_expr(";        operands.printInitializationList(ofs);        ofs << "));" << std::endl            << "}" << std::endl << std::endl;    } while (++operands);        if (flag != 0)        ofs << "#endif" << std::endl;    ofs << std::endl;}void two(const char* fname, int flag=0, const char* apname = 0){    if (apname == 0)        apname = fname;    ofs << "/****************************************************************************" << std::endl        << " * " << fname << std::endl        << " ****************************************************************************/" << std::endl << std::endl;    if (flag == ieeeflag)        ofs << "#ifdef BZ_HAVE_IEEE_MATH" << std::endl;    else if (flag == bsdflag)        ofs << "#ifdef BZ_HAVE_SYSTEM_V_MATH" << std::endl;    OperandTuple2 operands(2);    do {        operands.printTemplates(ofs);        ofs << std::endl << "inline" << std::endl            << "_bz_MatExpr<_bz_MatExprOp<";        operands.printIterators(ofs);        ofs << "," << std::endl << "    _bz_" << apname << "<";        operands[0].printNumtype(ofs);        ofs << ",";        operands[1].printNumtype(ofs);        ofs << "> > >" << std::endl            << fname << "(";        operands.printArgumentList(ofs);        ofs << ")" << std::endl            << "{" << std::endl            << "    typedef _bz_MatExprOp<";        operands.printIterators(ofs);        ofs << "," << std::endl << "        _bz_" << apname << "<";        operands[0].printNumtype(ofs);        ofs << ",";        operands[1].printNumtype(ofs);        ofs << "> > T_expr;" << std::endl << std::endl            << "    return _bz_MatExpr<T_expr>(T_expr(";        operands.printInitializationList(ofs);        ofs << "));" << std::endl            << "}" << std::endl << std::endl;    } while (++operands);    if (flag != 0)        ofs << "#endif" << std::endl;    ofs << std::endl;}int main(){    std::cout << "Generating <matuops.h>" << std::endl;    ofs << "// Generated source file.  Do not edit." << std::endl;    ofs << "// Created by: " << __FILE__ << " " << __DATE__         << " " << __TIME__ << std::endl << std::endl;    ofs << "#ifndef BZ_MATUOPS_H" << std::endl        << "#define BZ_MATUOPS_H" << std::endl        << std::endl << "BZ_NAMESPACE(blitz)" << std::endl << std::endl        << "#ifndef BZ_MATEXPR_H" << std::endl        << " #error <blitz/matuops.h> must be included via <blitz/matexpr.h>"         << std::endl << "#endif" << std::endl << std::endl;    one("abs");    one("acos");    one("acosh", ieeeflag);    one("asin");    one("asinh", ieeeflag);    one("atan");    two("atan2");    one("atanh", ieeeflag);    one("_class", bsdflag);    one("cbrt", ieeeflag);    one("ceil");    two("copysign", bsdflag);    one("cos");    one("cosh");    two("drem", bsdflag);    one("exp");    one("expm1", ieeeflag);    one("erf", ieeeflag);    one("erfc", ieeeflag);    one("fabs", 0, "abs");//    one("finite", ieeeflag);    one("floor");    two("fmod");    two("hypot", bsdflag);    one("ilogb", ieeeflag);    one("blitz_isnan", ieeeflag);    one("itrunc", bsdflag);    one("j0", ieeeflag);    one("j1", ieeeflag);    one("lgamma", ieeeflag);    one("log");    one("logb", ieeeflag);    one("log1p", ieeeflag);    one("log10");    one("nearest", bsdflag);    two("nextafter", bsdflag);    two("pow");    two("remainder", bsdflag);    one("rint", ieeeflag);    one("rsqrt", bsdflag);    two("scalb", bsdflag);    one("sin");    one("sinh");    one("sqr");    one("sqrt");    one("tan");    one("tanh");//    one("trunc", ieeeflag);    one("uitrunc", bsdflag);    two("unordered", bsdflag);    one("y0", ieeeflag);    one("y1", ieeeflag);    ofs << std::endl << "BZ_NAMESPACE_END" << std::endl << std::endl        << "#endif // BZ_MATUOPS_H" << std::endl;    return 0;}

⌨️ 快捷键说明

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