CppADCodeGen  HEAD
A C++ Algorithmic Differentiation Package with Source Code Generation
llvm_model.hpp
1 #ifndef CPPAD_CG_LLVM_MODEL_INCLUDED
2 #define CPPAD_CG_LLVM_MODEL_INCLUDED
3 /* --------------------------------------------------------------------------
4  * CppADCodeGen: C++ Algorithmic Differentiation with Source Code Generation:
5  * Copyright (C) 2013 Ciengis
6  * Copyright (C) 2018 Joao Leal
7  *
8  * CppADCodeGen is distributed under multiple licenses:
9  *
10  * - Eclipse Public License Version 1.0 (EPL1), and
11  * - GNU General Public License Version 3 (GPL3).
12  *
13  * EPL1 terms and conditions can be found in the file "epl-v10.txt", while
14  * terms and conditions for the GPL3 can be found in the file "gpl3.txt".
15  * ----------------------------------------------------------------------------
16  * Author: Joao Leal
17  */
18 
19 namespace CppAD {
20 namespace cg {
21 
27 template<class Base>
28 class LlvmModel : public FunctorGenericModel<Base> {
29 protected:
32 
33 public:
34 
35  LlvmModel(const LlvmModel&) = delete;
36  LlvmModel& operator=(const LlvmModel&) = delete;
37 
38  virtual ~LlvmModel() {
39  if (_dynLib != nullptr) {
40  _dynLib->destroyed(this);
41  }
42  }
43 
44 protected:
45 
52  const std::string& name) :
53  FunctorGenericModel<Base>(name),
54  _dynLib(dynLib) {
55 
56  CPPADCG_ASSERT_UNKNOWN(_dynLib != nullptr);
57 
58  this->init();
59  }
60 
61  void* loadFunction(const std::string& functionName, bool required = true) override {
62  return _dynLib->loadFunction(functionName, required);
63  }
64 
65  void modelLibraryClosed() override {
66  _dynLib = nullptr;
68  }
69 
70  friend class LlvmModelLibrary<Base>;
71 };
72 
73 } // END cg namespace
74 } // END CppAD namespace
75 
76 #endif
LlvmModelLibrary< Base > * _dynLib
the dynamic library
Definition: llvm_model.hpp:31
LlvmModel(LlvmModelLibrary< Base > *dynLib, const std::string &name)
Definition: llvm_model.hpp:51
virtual void * loadFunction(const std::string &functionName, bool required=true)=0