*/
/*
- * GiNaC Copyright (C) 1999-2007 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2016 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "excompiler.h"
-#include <stdexcept>
-#include <ios>
-#include <fstream>
-#include <sstream>
-#include <string>
-#include <vector>
-
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#ifdef HAVE_LIBDL
-#include <dlfcn.h>
-#endif // def HAVE_LIBDL
-
#include "ex.h"
#include "lst.h"
#include "operators.h"
#include "relational.h"
#include "symbol.h"
+#ifdef HAVE_LIBDL
+#include <dlfcn.h>
+#endif // def HAVE_LIBDL
+#include <fstream>
+#include <ios>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+#include <vector>
+
namespace GiNaC {
#ifdef HAVE_LIBDL
std::vector<filedesc> filelist; /**< List of all opened modules */
public:
/**
- * Complete clean-up of opend modules is done on destruction.
+ * Complete clean-up of opened modules is done on destruction.
*/
~excompiler()
{
- for (std::vector<filedesc>::const_iterator it = filelist.begin(); it != filelist.end(); ++it) {
+ for (auto it = filelist.begin(); it != filelist.end(); ++it) {
clean_up(it);
}
}
char* new_filename = new char[strlen(filename_pattern)+1];
strcpy(new_filename, filename_pattern);
if (!mktemp(new_filename)) {
- delete new_filename;
+ delete[] new_filename;
throw std::runtime_error("mktemp failed");
}
filename = std::string(new_filename);
ofs.open(new_filename, std::ios::out);
- delete new_filename;
+ delete[] new_filename;
} else {
// use parameter as filename
ofs.open(filename.c_str(), std::ios::out);
*/
void* link_so_file(const std::string filename, bool clean_up)
{
- void* module = NULL;
+ void* module = nullptr;
module = dlopen(filename.c_str(), RTLD_NOW);
- if (module == NULL) {
+ if (module == nullptr) {
throw std::runtime_error("excompiler::link_so_file: could not open compiled module!");
}
*/
void unlink(const std::string filename)
{
- for (std::vector<filedesc>::iterator it = filelist.begin(); it != filelist.end();) {
+ for (auto it = filelist.begin(); it != filelist.end();) {
if (it->name == filename) {
clean_up(it);
- filelist.erase(it);
+ it = filelist.erase(it);
} else {
++it;
}
};
/**
- * This static object manages the modules opened by the complile_ex and link_ex
+ * This static object manages the modules opened by the compile_ex and link_ex
* functions. On program termination its dtor is called and all open modules
* are closed. The associated source and so-files are eventually deleted then
* as well.
void compile_ex(const ex& expr, const symbol& sym, FUNCP_1P& fp, const std::string filename)
{
symbol x("x");
- ex expr_with_x = expr.subs(lst(sym==x));
+ ex expr_with_x = expr.subs(lst{sym==x});
std::ofstream ofs;
std::string unique_filename = filename;
void compile_ex(const ex& expr, const symbol& sym1, const symbol& sym2, FUNCP_2P& fp, const std::string filename)
{
symbol x("x"), y("y");
- ex expr_with_xy = expr.subs(lst(sym1==x, sym2==y));
+ ex expr_with_xy = expr.subs(lst{sym1==x, sym2==y});
std::ofstream ofs;
std::string unique_filename = filename;
void compile_ex(const lst& exprs, const lst& syms, FUNCP_CUBA& fp, const std::string filename)
{
lst replacements;
- for (int count=0; count<syms.nops(); ++count) {
+ for (std::size_t count=0; count<syms.nops(); ++count) {
std::ostringstream s;
s << "a[" << count << "]";
replacements.append(syms.op(count) == symbol(s.str()));
}
std::vector<ex> expr_with_cname;
- for (int count=0; count<exprs.nops(); ++count) {
+ for (std::size_t count=0; count<exprs.nops(); ++count) {
expr_with_cname.push_back(exprs.op(count).subs(replacements));
}
ofs << "void compiled_ex(const int* an, const double a[], const int* fn, double f[])" << std::endl;
ofs << "{" << std::endl;
- for (int count=0; count<exprs.nops(); ++count) {
+ for (std::size_t count=0; count<exprs.nops(); ++count) {
ofs << "f[" << count << "] = ";
expr_with_cname[count].print(GiNaC::print_csrc_double(ofs));
ofs << ";" << std::endl;