1 #ifndef CPPAD_CG_LANG_C_DEFAULT_HESSIAN_VAR_NAME_GEN_INCLUDED 2 #define CPPAD_CG_LANG_C_DEFAULT_HESSIAN_VAR_NAME_GEN_INCLUDED 35 const size_t _minMultiplierID;
37 const std::string _multName;
39 std::stringstream _ss;
45 _minMultiplierID(n + 1),
48 CPPADCG_ASSERT_KNOWN(_nameGen !=
nullptr,
"The name generator must not be NULL")
57 _minMultiplierID(n + 1),
58 _multName(std::move(multName)) {
60 CPPADCG_ASSERT_KNOWN(_nameGen !=
nullptr,
"The name generator must not be null")
61 CPPADCG_ASSERT_KNOWN(_multName.size() > 0,
"The name for the multipliers must not be empty")
98 if (
id < _minMultiplierID) {
104 _ss << _multName <<
"[" << (
id - _minMultiplierID) <<
"]";
109 size_t id)
override {
114 size_t id)
override {
119 size_t id)
override {
132 bool isX = indexedIndep.
getInfo()[0] == 0;
139 CPPADCG_ASSERT_KNOWN(indexedIndep.
getOperationType() == CGOpCode::LoopIndexedIndep,
"Invalid node type")
140 CPPADCG_ASSERT_KNOWN(nIndex > 0,
"Invalid number of arguments")
142 std::vector<const OperationNode<Base>*> indices(nIndex);
143 for (
size_t i = 0; i < nIndex; ++i) {
144 CPPADCG_ASSERT_KNOWN(indexedIndep.
getArguments()[i].getOperation() !=
nullptr,
"Invalid argument")
145 CPPADCG_ASSERT_KNOWN(indexedIndep.
getArguments()[i].getOperation()->getOperationType() == CGOpCode::Index,
"Invalid argument")
157 size_t id)
override {
158 if (
id < _minMultiplierID)
165 size_t id)
override {
166 if (
id < _minMultiplierID)
169 return id - _minMultiplierID;
175 size_t id2)
override {
176 if ((id1 < _minMultiplierID) != (id2 < _minMultiplierID))
179 if (id1 < _minMultiplierID && id2 < _minMultiplierID)
182 return id1 + 1 == id2;
188 size_t id2)
override {
191 l1 = id1 < _minMultiplierID ? 0 : 1;
198 l2 = id2 < _minMultiplierID ? 0 : 1;
208 size_t maxTempArrayID,
209 size_t maxTempSparseArrayID)
override {
214 size_t id)
override {
219 size_t id)
override {
226 size_t idSecond)
override {
233 size_t id2)
override {
239 inline void initialize() {
virtual std::string generateTemporary(const OperationNode< Base > &variable, size_t id)=0
virtual std::string generateIndexedDependent(const OperationNode< Base > &var, size_t id, const IndexPattern &ip)=0
std::string generateIndependent(const OperationNode< Base > &independent, size_t id) override
virtual size_t getMaxTemporaryArrayVariableID() const =0
virtual const std::string & getTemporaryVarArrayName(const OperationNode< Base > &var, size_t id)=0
size_t getMaxTemporaryVariableID() const override
virtual std::string generateIndexedIndependent(const OperationNode< Base > &var, size_t id, const IndexPattern &ip)=0
const std::string & getTemporaryVarArrayName(const OperationNode< Base > &var, size_t id) override
virtual bool isConsecutiveInTemporaryVarArray(const OperationNode< Base > &varFirst, size_t idFirst, const OperationNode< Base > &varSecond, size_t idSecond)=0
const std::vector< Argument< Base > > & getArguments() const
virtual const std::vector< FuncArgument > & getTemporary() const
std::string generateTemporarySparseArray(const OperationNode< Base > &variable, size_t id) override
virtual size_t getIndependentArrayIndex(const OperationNode< Base > &indep, size_t id)=0
virtual size_t getMinTemporaryVariableID() const =0
const std::vector< FuncArgument > & getDependent() const override
bool isInSameIndependentArray(const OperationNode< Base > &indep1, size_t id1, const OperationNode< Base > &indep2, size_t id2) override
virtual std::string generateDependent(size_t index)=0
virtual bool isConsecutiveInIndepArray(const OperationNode< Base > &indepFirst, size_t idFirst, const OperationNode< Base > &indepSecond, size_t idSecond)=0
size_t getMaxTemporaryArrayVariableID() const override
size_t getMaxTemporarySparseArrayVariableID() const override
size_t getTemporaryVarArrayIndex(const OperationNode< Base > &var, size_t id) override
bool isConsecutiveInTemporaryVarArray(const OperationNode< Base > &varFirst, size_t idFirst, const OperationNode< Base > &varSecond, size_t idSecond) override
CGOpCode getOperationType() const
virtual void setTemporaryVariableID(size_t minTempID, size_t maxTempID, size_t maxTempArrayID, size_t maxTempSparseArrayID)=0
virtual size_t getTemporaryVarArrayIndex(const OperationNode< Base > &var, size_t id)=0
std::string generateTemporaryArray(const OperationNode< Base > &variable, size_t id) override
void setTemporaryVariableID(size_t minTempID, size_t maxTempID, size_t maxTempArrayID, size_t maxTempSparseArrayID) override
const std::vector< FuncArgument > & getTemporary() const override
bool isConsecutiveInIndepArray(const OperationNode< Base > &indepFirst, size_t id1, const OperationNode< Base > &indepSecond, size_t id2) override
size_t getMinTemporaryVariableID() const override
virtual std::string generateTemporaryArray(const OperationNode< Base > &variable, size_t id)=0
size_t getIndependentArrayIndex(const OperationNode< Base > &indep, size_t id) override
virtual size_t getMaxTemporarySparseArrayVariableID() const =0
std::string generateIndexedDependent(const OperationNode< Base > &var, size_t id, const IndexPattern &ip) override
virtual const std::vector< FuncArgument > & getDependent() const
virtual std::string generateTemporarySparseArray(const OperationNode< Base > &variable, size_t id)=0
virtual const std::vector< FuncArgument > & getIndependent() const
virtual std::string generateIndependent(const OperationNode< Base > &variable, size_t id)=0
bool isInSameTemporaryVarArray(const OperationNode< Base > &var1, size_t id1, const OperationNode< Base > &var2, size_t id2) override
std::string generateDependent(size_t index) override
virtual size_t getMaxTemporaryVariableID() const =0
std::string generateIndexedIndependent(const OperationNode< Base > &indexedIndep, size_t id, const IndexPattern &ip) override
const std::string & getIndependentArrayName(const OperationNode< Base > &indep, size_t id) override
virtual bool isInSameTemporaryVarArray(const OperationNode< Base > &var1, size_t id1, const OperationNode< Base > &var2, size_t id2)=0
std::string generateTemporary(const OperationNode< Base > &variable, size_t id) override
const std::vector< size_t > & getInfo() const
virtual const std::string & getIndependentArrayName(const OperationNode< Base > &indep, size_t id)=0