1 # ifndef CPPAD_CORE_COMPARE_HPP
2 # define CPPAD_CORE_COMPARE_HPP
126 template <
class Base>
128 bool operator < (const AD<Base> &left ,
const AD<Base> &right)
129 {
bool result = (left.value_ < right.value_);
135 { tape = left.tape_this();
139 tape->
Rec_.PutArg(left.taddr_, right.taddr_);
143 tape->
Rec_.PutArg(right.taddr_, left.taddr_);
147 {
addr_t arg1 = tape->
Rec_.PutPar(right.value_);
150 tape->
Rec_.PutArg(left.taddr_, arg1);
154 tape->
Rec_.PutArg(arg1, left.taddr_);
158 else if ( var_right )
159 { tape = right.tape_this();
163 tape->
Rec_.PutArg(arg0, right.taddr_);
167 tape->
Rec_.PutArg(right.taddr_, arg0);
177 template <class Base>
179 bool operator <= (const
AD<Base> &left , const
AD<Base> &right)
180 {
bool result = (left.value_ <= right.value_);
186 { tape = left.tape_this();
190 tape->
Rec_.PutArg(left.taddr_, right.taddr_);
194 tape->
Rec_.PutArg(right.taddr_, left.taddr_);
198 {
addr_t arg1 = tape->
Rec_.PutPar(right.value_);
201 tape->
Rec_.PutArg(left.taddr_, arg1);
205 tape->
Rec_.PutArg(arg1, left.taddr_);
209 else if ( var_right )
210 { tape = right.tape_this();
214 tape->
Rec_.PutArg(arg0, right.taddr_);
218 tape->
Rec_.PutArg(right.taddr_, arg0);
228 template <class Base>
230 bool operator > (const
AD<Base> &left , const
AD<Base> &right)
231 {
bool result = (left.value_ > right.value_);
237 { tape = left.tape_this();
241 tape->
Rec_.PutArg(right.taddr_, left.taddr_);
245 tape->
Rec_.PutArg(left.taddr_, right.taddr_);
249 {
addr_t arg1 = tape->
Rec_.PutPar(right.value_);
252 tape->
Rec_.PutArg(arg1, left.taddr_);
256 tape->
Rec_.PutArg(left.taddr_, arg1);
260 else if ( var_right )
261 { tape = right.tape_this();
265 tape->
Rec_.PutArg(right.taddr_, arg0);
269 tape->
Rec_.PutArg(arg0, right.taddr_);
279 template <class Base>
281 bool operator >= (const
AD<Base> &left , const
AD<Base> &right)
282 {
bool result = (left.value_ >= right.value_);
288 { tape = left.tape_this();
292 tape->
Rec_.PutArg(right.taddr_, left.taddr_);
296 tape->
Rec_.PutArg(left.taddr_, right.taddr_);
300 {
addr_t arg1 = tape->
Rec_.PutPar(right.value_);
303 tape->
Rec_.PutArg(arg1, left.taddr_);
307 tape->
Rec_.PutArg(left.taddr_, arg1);
311 else if ( var_right )
312 { tape = right.tape_this();
316 tape->
Rec_.PutArg(right.taddr_, arg0);
320 tape->
Rec_.PutArg(arg0, right.taddr_);
330 template <class Base>
332 bool operator == (const
AD<Base> &left , const
AD<Base> &right)
333 {
bool result = (left.value_ == right.value_);
339 { tape = left.tape_this();
341 { tape->
Rec_.PutArg(left.taddr_, right.taddr_);
348 {
addr_t arg1 = tape->
Rec_.PutPar(right.value_);
349 tape->
Rec_.PutArg(arg1, left.taddr_);
356 else if ( var_right )
357 { tape = right.tape_this();
359 tape->
Rec_.PutArg(arg0, right.taddr_);
372 template <class Base>
374 bool operator != (const
AD<Base> &left , const
AD<Base> &right)
375 {
bool result = (left.value_ != right.value_);
381 { tape = left.tape_this();
383 { tape->
Rec_.PutArg(left.taddr_, right.taddr_);
390 {
addr_t arg1 = tape->
Rec_.PutPar(right.value_);
391 tape->
Rec_.PutArg(arg1, left.taddr_);
398 else if ( var_right )
399 { tape = right.tape_this();
401 tape->
Rec_.PutArg(arg0, right.taddr_);
CPPAD_TAPE_ADDR_TYPE addr_t
#define CPPAD_FOLD_BOOL_VALUED_BINARY_OPERATOR(Op)
Declares automatic coercion for certain binary operations with bool result.
#define CPPAD_INLINE_FRIEND_TEMPLATE_FUNCTION
A version of the inline command that works with MC compiler.
CPPAD_INLINE_FRIEND_TEMPLATE_FUNCTION bool Variable(const AD< Base > &x)
local::recorder< Base > Rec_
This is where the information is recorded.
Class used to hold tape that records AD<Base> operations.