CppADCodeGen 2.4.3
A C++ Algorithmic Differentiation Package with Source Code Generation
Loading...
Searching...
No Matches
variable_name_generator.hpp
1#ifndef CPPAD_CG_VARIABLE_NAME_GENERATOR_INCLUDED
2#define CPPAD_CG_VARIABLE_NAME_GENERATOR_INCLUDED
3/* --------------------------------------------------------------------------
4 * CppADCodeGen: C++ Algorithmic Differentiation with Source Code Generation:
5 * Copyright (C) 2012 Ciengis
6 *
7 * CppADCodeGen is distributed under multiple licenses:
8 *
9 * - Eclipse Public License Version 1.0 (EPL1), and
10 * - GNU General Public License Version 3 (GPL3).
11 *
12 * EPL1 terms and conditions can be found in the file "epl-v10.txt", while
13 * terms and conditions for the GPL3 can be found in the file "gpl3.txt".
14 * ----------------------------------------------------------------------------
15 * Author: Joao Leal
16 */
17
18namespace CppAD {
19namespace cg {
20
24typedef struct FuncArgument {
25 std::string name;
26 bool array;
27
28 inline FuncArgument() :
29 array(false) {
30 }
31
32 inline FuncArgument(const std::string& nam, bool a = true) :
33 name(nam),
34 array(a) {
35 }
37
43template<class Base>
45protected:
46 std::vector<FuncArgument> _dependent;
47 std::vector<FuncArgument> _independent;
48 std::vector<FuncArgument> _temporary;
49public:
50
56 virtual const std::vector<FuncArgument>& getDependent() const {
57 return _dependent;
58 }
59
65 virtual const std::vector<FuncArgument>& getIndependent() const {
66 return _independent;
67 }
68
74 virtual const std::vector<FuncArgument>& getTemporary() const {
75 return _temporary;
76 }
77
81 virtual size_t getMinTemporaryVariableID() const = 0;
82
86 virtual size_t getMaxTemporaryVariableID() const = 0;
87
91 virtual size_t getMaxTemporaryArrayVariableID() const = 0;
92
96 virtual size_t getMaxTemporarySparseArrayVariableID() const = 0;
97
104 virtual std::string generateDependent(size_t index) = 0;
105
114 virtual std::string generateIndependent(const OperationNode<Base>& variable,
115 size_t id) = 0;
116
125 virtual std::string generateTemporary(const OperationNode<Base>& variable,
126 size_t id) = 0;
127
136 virtual std::string generateTemporaryArray(const OperationNode<Base>& variable,
137 size_t id) = 0;
138
147 virtual std::string generateTemporarySparseArray(const OperationNode<Base>& variable,
148 size_t id) = 0;
149
160 virtual std::string generateIndexedDependent(const OperationNode<Base>& var,
161 size_t id,
162 const IndexPattern& ip) = 0;
163
174 virtual std::string generateIndexedIndependent(const OperationNode<Base>& var,
175 size_t id,
176 const IndexPattern& ip) = 0;
177
188 virtual void setTemporaryVariableID(size_t minTempID,
189 size_t maxTempID,
190 size_t maxTempArrayID,
191 size_t maxTempSparseArrayID) = 0;
192
203 virtual const std::string& getIndependentArrayName(const OperationNode<Base>& indep,
204 size_t id) = 0;
205
217 size_t id) = 0;
218
231 virtual bool isConsecutiveInIndepArray(const OperationNode<Base>& indepFirst,
232 size_t idFirst,
233 const OperationNode<Base>& indepSecond,
234 size_t idSecond) = 0;
235
249 size_t id1,
250 const OperationNode<Base>& indep2,
251 size_t id2) = 0;
252
262 virtual const std::string& getTemporaryVarArrayName(const OperationNode<Base>& var,
263 size_t id) = 0;
264
276 size_t id) = 0;
277
291 size_t idFirst,
292 const OperationNode<Base>& varSecond,
293 size_t idSecond) = 0;
294
308 size_t id1,
309 const OperationNode<Base>& var2,
310 size_t id2) = 0;
311
312 virtual void customFunctionVariableDeclarations(std::ostream& out) {
313 }
314
315 virtual void prepareCustomFunctionVariables(std::ostream& out) {
316 }
317
318 virtual void finalizeCustomFunctionVariables(std::ostream& out) {
319 }
320
321 inline virtual ~VariableNameGenerator() {
322 }
323};
324
325} // END cg namespace
326} // END CppAD namespace
327
328#endif
virtual std::string generateTemporary(const OperationNode< Base > &variable, size_t id)=0
virtual const std::vector< FuncArgument > & getDependent() const
virtual size_t getMaxTemporarySparseArrayVariableID() const =0
virtual std::string generateIndexedIndependent(const OperationNode< Base > &var, size_t id, const IndexPattern &ip)=0
virtual std::string generateTemporaryArray(const OperationNode< Base > &variable, size_t id)=0
virtual const std::vector< FuncArgument > & getIndependent() const
virtual bool isConsecutiveInIndepArray(const OperationNode< Base > &indepFirst, size_t idFirst, const OperationNode< Base > &indepSecond, size_t idSecond)=0
virtual size_t getTemporaryVarArrayIndex(const OperationNode< Base > &var, size_t id)=0
virtual const std::vector< FuncArgument > & getTemporary() const
virtual std::string generateTemporarySparseArray(const OperationNode< Base > &variable, size_t id)=0
virtual size_t getIndependentArrayIndex(const OperationNode< Base > &indep, size_t id)=0
virtual void setTemporaryVariableID(size_t minTempID, size_t maxTempID, size_t maxTempArrayID, size_t maxTempSparseArrayID)=0
virtual std::string generateIndependent(const OperationNode< Base > &variable, size_t id)=0
virtual bool isInSameTemporaryVarArray(const OperationNode< Base > &var1, size_t id1, const OperationNode< Base > &var2, size_t id2)=0
virtual size_t getMinTemporaryVariableID() const =0
virtual bool isConsecutiveInTemporaryVarArray(const OperationNode< Base > &varFirst, size_t idFirst, const OperationNode< Base > &varSecond, size_t idSecond)=0
virtual bool isInSameIndependentArray(const OperationNode< Base > &indep1, size_t id1, const OperationNode< Base > &indep2, size_t id2)=0
virtual std::string generateIndexedDependent(const OperationNode< Base > &var, size_t id, const IndexPattern &ip)=0
virtual size_t getMaxTemporaryArrayVariableID() const =0
virtual std::string generateDependent(size_t index)=0
virtual size_t getMaxTemporaryVariableID() const =0
virtual const std::string & getTemporaryVarArrayName(const OperationNode< Base > &var, size_t id)=0
virtual const std::string & getIndependentArrayName(const OperationNode< Base > &indep, size_t id)=0