binary_operator.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ACADO Toolkit.
3  *
4  * ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
5  * Copyright (C) 2008-2014 by Boris Houska, Hans Joachim Ferreau,
6  * Milan Vukov, Rien Quirynen, KU Leuven.
7  * Developed within the Optimization in Engineering Center (OPTEC)
8  * under supervision of Moritz Diehl. All rights reserved.
9  *
10  * ACADO Toolkit is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 3 of the License, or (at your option) any later version.
14  *
15  * ACADO Toolkit is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with ACADO Toolkit; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  *
24  */
25 
26 
27 
37 
38 
40 
41 
43 {
44  nCount = 0;
45 }
46 
48 {
49  argument1 = _argument1 ;
50  argument2 = _argument2 ;
51  dargument1 = NULL ;
52  dargument2 = NULL ;
53  argument1_result = (double*)calloc(1,sizeof(double));
54  argument2_result = (double*)calloc(1,sizeof(double));
55  dargument1_result = (double*)calloc(1,sizeof(double));
56  dargument2_result = (double*)calloc(1,sizeof(double));
57  bufferSize = 1 ;
60 
61  nCount = 0;
62 }
63 
64 
66 
67  argument1 = arg.argument1->clone();
68  argument2 = arg.argument2->clone();
69  copy( arg );
70 }
71 
72 
74 
75  deleteAll();
76 }
77 
78 
80 
81  if( this != &arg ){
82  deleteAll();
83  copy( arg );
84  }
85  return *this;
86 }
87 
88 
90 
92 
93  if( argument1->isDependingOn(var) == BT_FALSE &&
95  return BT_FALSE;
96 
97  return BT_TRUE;
98 }
99 
100 
102  VariableType *varType,
103  int *component,
104  BooleanType *implicit_dep ){
105 
106  if( argument1->isDependingOn( dim, varType, component, implicit_dep ) == BT_TRUE ||
107  argument2->isDependingOn( dim, varType, component, implicit_dep ) == BT_TRUE ){
108  return BT_TRUE;
109  }
110 
111  return BT_FALSE;
112 }
113 
114 
116 
117  monotonicity = monotonicity_;
118  return SUCCESSFUL_RETURN;
119 }
120 
121 
123 
124  curvature = curvature_;
125  return SUCCESSFUL_RETURN;
126 }
127 
128 
130 
131  if( bufferSize > 1 ){
132  bufferSize = 1;
133  argument1_result = (double*)realloc( argument1_result,bufferSize*sizeof(double));
134  argument2_result = (double*)realloc( argument2_result,bufferSize*sizeof(double));
135  dargument1_result = (double*)realloc(dargument1_result,bufferSize*sizeof(double));
136  dargument2_result = (double*)realloc(dargument2_result,bufferSize*sizeof(double));
137  }
138 
139  return SUCCESSFUL_RETURN;
140 }
141 
142 
143 
145 
146  returnValue returnvalue;
147  returnvalue = argument1->enumerateVariables( indexList );
148  if( returnvalue != SUCCESSFUL_RETURN ){
149  return returnvalue;
150  }
151 
152  return argument2->enumerateVariables( indexList );
153 }
154 
155 
156 BooleanType BinaryOperator::isVariable( VariableType &varType, int &component ) const{
157 
158  return BT_FALSE;
159 }
160 
161 
163 
164  returnValue returnvalue;
165 
166  returnvalue = argument1->loadIndices( indexList );
167 
168  if( returnvalue != SUCCESSFUL_RETURN ){
169  return returnvalue;
170  }
171 
172  return argument2->loadIndices( indexList );
173 }
174 
175 
177 
178  if( argument1->isSymbolic() == BT_FALSE ) return BT_FALSE;
179  if( argument2->isSymbolic() == BT_FALSE ) return BT_FALSE;
180 
181  return BT_TRUE;
182 }
183 
184 
185 
186 // //
187 // // PROTECTED MEMBER FUNCTIONS:
188 // // ---------------------------
189 
190 
192 
193  int run1;
194 
195  bufferSize = arg.bufferSize;
196 
197  if( arg.dargument1 == NULL ){
198  dargument1 = NULL;
199  }
200  else{
201  dargument1 = arg.dargument1->clone();
202  }
203 
204  if( arg.dargument2 == NULL ){
205  dargument2 = NULL;
206  }
207  else{
208  dargument2 = arg.dargument2->clone();
209  }
210 
211  argument1_result = (double*)calloc(bufferSize,sizeof(double));
212  argument2_result = (double*)calloc(bufferSize,sizeof(double));
213  dargument1_result = (double*)calloc(bufferSize,sizeof(double));
214  dargument2_result = (double*)calloc(bufferSize,sizeof(double));
215 
216  for( run1 = 0; run1 < bufferSize; run1++ ){
217 
218  argument1_result[run1] = arg.argument1_result[run1];
219  argument2_result[run1] = arg.argument2_result[run1];
220  dargument1_result[run1] = arg.dargument1_result[run1];
221  dargument2_result[run1] = arg.dargument2_result[run1];
222 
223  }
224  curvature = arg.curvature ;
226 
227  nCount = 0;
228 }
229 
230 
232 
233  if( argument1 != 0 ) delete argument1;
234  if( argument2 != 0 ) delete argument2;
235 
236  if( dargument1 != NULL ){
237  delete dargument1;
238  }
239  if( dargument2 != NULL ){
240  delete dargument2;
241  }
242 
243  free( argument1_result );
244  free( argument2_result );
245  free( dargument1_result );
246  free( dargument2_result );
247 }
248 
250  const std::vector< std::string >& _name
251  )
252 {
253  argument1->setVariableExportName(_type, _name);
254  argument2->setVariableExportName(_type, _name);
255 
256  return Operator::setVariableExportName(_type, _name);
257 }
258 
259 
261 
262  if( !initialized ) {
265  return argument2->initDerivative();
266  }
267  else {
268  return SUCCESSFUL_RETURN;
269  }
270 }
271 
273 
274 // end of file.
Operator * dargument1
virtual NeutralElement isOneOrZero() const
Operator * dargument2
virtual returnValue setVariableExportName(const VariableType &_type, const std::vector< std::string > &_name)
Abstract base class for all scalar-valued binary operators within the symbolic operators family...
Abstract base class for all scalar-valued symbolic operators.
Definition: operator.hpp:60
virtual BooleanType isDependingOn(VariableType var) const =0
CurvatureType curvature
double * argument1_result
virtual BooleanType isSymbolic() const
Allows to pass back messages to the calling function.
virtual returnValue loadIndices(SymbolicIndexList *indexList)=0
virtual returnValue loadIndices(SymbolicIndexList *indexList)
virtual Operator * clone() const =0
virtual returnValue enumerateVariables(SymbolicIndexList *indexList)
virtual returnValue initDerivative()
virtual returnValue setVariableExportName(const VariableType &_type, const std::vector< std::string > &_name)
Definition: operator.cpp:223
virtual returnValue setMonotonicity(MonotonicityType monotonicity_)
Operator * argument2
virtual BooleanType isDependingOn(VariableType var) const
#define CLOSE_NAMESPACE_ACADO
virtual BooleanType isSymbolic() const =0
Manages the indices of SymbolicVariables.
VariableType
Definition: acado_types.hpp:95
virtual returnValue setCurvature(CurvatureType curvature_)
BooleanType initialized
Definition: operator.hpp:642
double * dargument2_result
virtual ~BinaryOperator()
virtual returnValue enumerateVariables(SymbolicIndexList *indexList)=0
Operator * argument1
MonotonicityType monotonicity
double * argument2_result
double * dargument1_result
virtual returnValue initDerivative()
Definition: operator.cpp:519
#define BT_TRUE
Definition: acado_types.hpp:47
NeutralElement
Definition: acado_types.hpp:64
Abstract base class for all scalar-valued symbolic operators.
MonotonicityType
CurvatureType
void copy(const BinaryOperator &arg)
BinaryOperator & operator=(const BinaryOperator &arg)
#define BEGIN_NAMESPACE_ACADO
#define BT_FALSE
Definition: acado_types.hpp:49
virtual BooleanType isVariable(VariableType &varType, int &component) const
virtual returnValue clearBuffer()


acado
Author(s): Milan Vukov, Rien Quirynen
autogenerated on Mon Jun 10 2019 12:34:28