CppADCodeGen  HEAD
A C++ Algorithmic Differentiation Package with Source Code Generation
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 
18 namespace CppAD {
19 namespace cg {
20 
24 typedef 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  }
36 } FuncArgument;
37 
43 template<class Base>
45 protected:
46  std::vector<FuncArgument> _dependent;
47  std::vector<FuncArgument> _independent;
48  std::vector<FuncArgument> _temporary;
49 public:
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 
216  virtual size_t getIndependentArrayIndex(const OperationNode<Base>& indep,
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 
248  virtual bool isInSameIndependentArray(const OperationNode<Base>& indep1,
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 
275  virtual size_t getTemporaryVarArrayIndex(const OperationNode<Base>& var,
276  size_t id) = 0;
277 
290  virtual bool isConsecutiveInTemporaryVarArray(const OperationNode<Base>& varFirst,
291  size_t idFirst,
292  const OperationNode<Base>& varSecond,
293  size_t idSecond) = 0;
294 
307  virtual bool isInSameTemporaryVarArray(const OperationNode<Base>& var1,
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 const std::vector< FuncArgument > & getTemporary() const
virtual const std::vector< FuncArgument > & getDependent() const
virtual const std::vector< FuncArgument > & getIndependent() const