1 # ifndef CPPAD_CORE_VEC_AD_HPP
2 # define CPPAD_CORE_VEC_AD_HPP
321 # define CPPAD_VEC_AD_COMPUTED_ASSIGNMENT(op, name) \
322 VecAD_reference& operator op (const VecAD_reference<Base> &right) \
323 { CPPAD_ASSERT_KNOWN( \
325 "Cannot use a ADVec element on left side of" name \
329 VecAD_reference& operator op (const AD<Base> &right) \
330 { CPPAD_ASSERT_KNOWN( \
332 "Cannot use a ADVec element on left side of" name \
336 VecAD_reference& operator op (const Base &right) \
337 { CPPAD_ASSERT_KNOWN( \
339 "Cannot use a ADVec element on left side of" name \
351 template <
class Base>
353 friend bool Parameter<Base> (
const VecAD<Base> &vec);
354 friend bool Variable<Base> (
const VecAD<Base> &vec);
413 size_t load_op_index = tape->
Rec_.num_load_op_rec();
439 else ind_taddr =
ind_.taddr_;
461 template <
class Base>
463 friend bool Parameter<Base> (
const VecAD<Base> &vec);
464 friend bool Variable<Base> (
const VecAD<Base> &vec);
468 friend std::ostream& operator << <Base>
530 "VecAD: cannot use size_t indexing because this"
531 " VecAD vector is a variable."
535 "VecAD: element index is >= vector length"
553 "VecAD: element index is less than zero"
557 "VecAD: element index is >= vector length"
566 "VecAD: vector and index are variables for"
595 template <
class Base>
607 "VecAD assignment: vector and new element value are variables"
608 "\nfor different tapes."
615 vec_->offset_ = tape->
AddVec(vec_->length_, vec_->data_);
627 size_t i =
static_cast<size_t>(
Integer(ind_) );
631 vec_->data_[i] = y.
value_;
665 template <
class Base>
668 size_t i =
static_cast<size_t>(
Integer(ind_) );
702 tape->
Rec_.PutArg((
addr_t) vec_->offset_, ind_.taddr_, p);
718 template <
class Base>
732 template <
class Base>
740 # undef CPPAD_VEC_AD_COMPUTED_ASSIGNMENT
local::pod_vector< Base > data_
elements of this vector
addr_t RecordParOp(const Base &x)
Place a parameter in the tape.
void operator=(const VecAD_reference< Base > &right)
Taped setting of element to a value.
#define CPPAD_ASSERT_KNOWN(exp, msg)
Check that exp is true, if not print msg and terminate execution.
VecAD_reference< Base > operator[](const AD< Base > &x)
delayed taped elemement access
size_t extend(size_t n)
Increase the number of elements the end of this vector (existing elements are always preserved)...
friend bool Variable(const VecAD< Base > &vec)
friend bool Parameter(const VecAD< Base > &vec)
friend bool Parameter(const VecAD< Base > &vec)
CPPAD_TAPE_ADDR_TYPE addr_t
#define CPPAD_VEC_AD_COMPUTED_ASSIGNMENT(op, name)
Prints an error message if the correspinding compound assignment is used.
size_t NumArg(OpCode op)
Number of arguments for a specified operator.
VecAD(size_t n)
sizing constructor initialize tape_id_ same as for parameters; see ad_copy.hpp
size_t offset_
offset in cummulate vector corresponding to this object
size_t NumRes(OpCode op)
Number of variables resulting from the specified operation.
File used to define pod_vector class.
bool IdenticalPar(const std::complex< double > &x)
VecAD< Base > * vec_
pointer to vecad vector that this is a element of
AD< Base > ADBase(void) const
Conversion from VecAD_reference to AD<Base>. puts the correspond vecad load instruction in the tape...
static local::ADTape< Base > * tape_ptr(void)
Pointer for the tape for this AD<Base> class and the current thread.
CPPAD_INLINE_FRIEND_TEMPLATE_FUNCTION bool Variable(const AD< Base > &x)
Base & operator[](size_t i)
element access (not taped)
tape_id_t tape_id_
tape id corresponding to the offset
const size_t length_
size of this VecAD vector
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution.
VecAD_reference(VecAD< Base > *vec, const AD< Base > &ind)
consructor
VecAD(void)
default constructor initialize tape_id_ same as for default constructor; see default.hpp
size_t size(void)
number of elements in the vector
size_t AddVec(size_t length, const pod_vector< Base > &data)
Put initialization for a VecAD<Base> object in the tape.
local::recorder< Base > Rec_
This is where the information is recorded.
int Integer(const std::complex< double > &x)
AD< Base > ind_
index in vecad vector that this element corresponds to
Class used to hold a reference to an element of a VecAD object.
Class used to hold tape that records AD<Base> operations.
Vector of AD objects that tracks indexing operations on the tape.
CPPAD_INLINE_FRIEND_TEMPLATE_FUNCTION bool Parameter(const AD< Base > &x)
tape_id_t id_
Unique identifier for this tape.
VecAD_reference< Base > reference
declare the user's view of this type here
CPPAD_TAPE_ID_TYPE tape_id_t