AmpGen 2.1
Loading...
Searching...
No Matches
CompilerWrapper.h
Go to the documentation of this file.
1#ifndef AMPGEN_COMPILERWRAPPER_H
2#define AMPGEN_COMPILERWRAPPER_H
3
4#include <stdlib.h>
5#include <fstream>
6#include <iostream>
7#include <string>
8#include <vector>
9#include <map>
10
11namespace AmpGen
12{
14
15
17 {
18 public:
19 explicit CompilerWrapper( const bool& verbose=false);
20 void generateSource( const CompiledExpressionBase& expression, const std::string& fname);
21 bool compile( CompiledExpressionBase& expression, const std::string& fname="");
22 bool compile( std::vector<CompiledExpressionBase*>& expression,
23 const std::string& fname="",
24 const std::map<std::string, std::string>& metadata_functions = {} );
25 void compileSource(const std::string& fname, const std::string& oname );
26 void setVerbose() { m_verbose = true ; }
27 void preamble(std::ostream& os ) const ;
28 void addHeader(const std::string& include ) { m_includes.push_back(include); }
29 void addPythonBindings(){ m_includePythonBindings = true ; }
30 private:
31 std::vector<std::string> m_includes = {"complex", "cmath", "vector"};
32 bool m_verbose;
33 bool m_includePythonBindings {true};
34 std::string m_cxx;
35 std::string generateFilename();
36 bool isClang() const;
37 std::string m_extension{"so"};
38
39 class Cleaner {
40 static Cleaner instance;
41 Cleaner(Cleaner const&) = delete; // Copy construct
42 Cleaner(Cleaner&&) = delete; // Move construct
43 Cleaner& operator=(Cleaner const&) = delete; // Copy assign
44 Cleaner& operator=(Cleaner &&) = delete; // Move assign
45 ~Cleaner(){
46 std::cout << "Cleaning up objects..." << std::endl;
47 }
48 };
49 };
50} // namespace AmpGen
51#endif
Base class for compiled expressions, i.e.
bool compile(CompiledExpressionBase &expression, const std::string &fname="")
bool compile(std::vector< CompiledExpressionBase * > &expression, const std::string &fname="", const std::map< std::string, std::string > &metadata_functions={})
void compileSource(const std::string &fname, const std::string &oname)
void generateSource(const CompiledExpressionBase &expression, const std::string &fname)
void addHeader(const std::string &include)
void preamble(std::ostream &os) const
CompilerWrapper(const bool &verbose=false)