Simbody
3.5
|
This is a fixed-length row vector designed for no-overhead inline computation. More...
Classes | |
struct | EltResult |
struct | Result |
struct | Substitute |
Public Types | |
enum | { NRows = 1, NCols = N, NPackedElements = N, NActualElements = N * STRIDE, NActualScalars = CNT<E>::NActualScalars * NActualElements, RowSpacing = NActualElements, ColSpacing = STRIDE, ImagOffset = NTraits<ENumber>::ImagOffset, RealStrideFactor = 1, ArgDepth, IsScalar = 0, IsULessScalar = 0, IsNumber = 0, IsStdNumber = 0, IsPrecision = 0, SignInterpretation = CNT<E>::SignInterpretation } |
typedef Row< N, E, STRIDE > | T |
typedef Row< N, ENeg, STRIDE > | TNeg |
typedef Row< N, EWithoutNegator, STRIDE > | TWithoutNegator |
typedef Row< N, EReal, STRIDE *CNT< E >::RealStrideFactor > | TReal |
typedef Row< N, EImag, STRIDE *CNT< E >::RealStrideFactor > | TImag |
typedef Row< N, EComplex, STRIDE > | TComplex |
typedef Vec< N, EHerm, STRIDE > | THerm |
typedef Vec< N, E, STRIDE > | TPosTrans |
typedef E | TElement |
typedef Row | TRow |
typedef E | TCol |
typedef Vec< N, ESqrt, 1 > | TSqrt |
typedef Row< N, EAbs, 1 > | TAbs |
typedef Row< N, EStandard, 1 > | TStandard |
typedef Vec< N, EInvert, 1 > | TInvert |
typedef Row< N, ENormalize, 1 > | TNormalize |
typedef SymMat< N, ESqHermT > | TSqHermT |
typedef EScalarNormSq | TSqTHerm |
typedef EScalar | Scalar |
typedef EULessScalar | ULessScalar |
typedef ENumber | Number |
typedef EStdNumber | StdNumber |
typedef EPrecision | Precision |
typedef EScalarNormSq | ScalarNormSq |
Public Member Functions | |
ScalarNormSq | scalarNormSqr () const |
TSqrt | sqrt () const |
TAbs | abs () const |
TStandard | standardize () const |
EStandard | sum () const |
Row () | |
Row (const Row &src) | |
Row & | operator= (const Row &src) |
template<int SS> | |
Row (const Row< N, E, SS > &src) | |
template<int SS> | |
Row (const Row< N, ENeg, SS > &src) | |
template<class EE , int SS> | |
Row (const Row< N, EE, SS > &vv) | |
Row (const E &e) | |
Row (const ENeg &ne) | |
Row (int i) | |
Row (const E &e0, const E &e1) | |
Row (const E &e0, const E &e1, const E &e2) | |
Row (const E &e0, const E &e1, const E &e2, const E &e3) | |
Row (const E &e0, const E &e1, const E &e2, const E &e3, const E &e4) | |
Row (const E &e0, const E &e1, const E &e2, const E &e3, const E &e4, const E &e5) | |
Row (const E &e0, const E &e1, const E &e2, const E &e3, const E &e4, const E &e5, const E &e6) | |
Row (const E &e0, const E &e1, const E &e2, const E &e3, const E &e4, const E &e5, const E &e6, const E &e7) | |
Row (const E &e0, const E &e1, const E &e2, const E &e3, const E &e4, const E &e5, const E &e6, const E &e7, const E &e8) | |
template<class EE > | |
Row (const EE *p) | |
template<class EE > | |
Row & | operator= (const EE *p) |
template<class EE , int SS> | |
Row & | operator= (const Row< N, EE, SS > &vv) |
template<class EE , int SS> | |
Row & | operator+= (const Row< N, EE, SS > &r) |
template<class EE , int SS> | |
Row & | operator+= (const Row< N, negator< EE >, SS > &r) |
template<class EE , int SS> | |
Row & | operator-= (const Row< N, EE, SS > &r) |
template<class EE , int SS> | |
Row & | operator-= (const Row< N, negator< EE >, SS > &r) |
template<class EE , int SS> | |
Row< N, typename CNT< E > ::template Result< EE >::Add > | conformingAdd (const Row< N, EE, SS > &r) const |
Vector addition – use operator+ instead. More... | |
template<class EE , int SS> | |
Row< N, typename CNT< E > ::template Result< EE >::Sub > | conformingSubtract (const Row< N, EE, SS > &r) const |
Vector subtraction – use operator- instead. More... | |
template<class EE , int SS> | |
CNT< E >::template Result< EE > ::Mul | conformingMultiply (const Vec< N, EE, SS > &r) const |
Same as dot product (s = row*col) – use operator* or dot() instead. More... | |
template<int MatNCol, class EE , int CS, int RS> | |
Row< MatNCol, typename CNT< E > ::template Result< EE >::Mul > | conformingMultiply (const Mat< N, MatNCol, EE, CS, RS > &m) const |
Row times a conforming matrix, row=row*mat – use operator* instead. More... | |
template<class EE , int SS> | |
Row< N, typename CNT< E > ::template Result< EE >::Mul > | elementwiseMultiply (const Row< N, EE, SS > &r) const |
Elementwise multiply (Matlab . More... | |
template<class EE , int SS> | |
Row< N, typename CNT< E > ::template Result< EE >::Dvd > | elementwiseDivide (const Row< N, EE, SS > &r) const |
Elementwise divide (Matlab . More... | |
const E & | operator[] (int i) const |
E & | operator[] (int i) |
const E & | operator() (int i) const |
E & | operator() (int i) |
ScalarNormSq | normSqr () const |
CNT< ScalarNormSq >::TSqrt | norm () const |
TNormalize | normalize () const |
TInvert | invert () const |
const Row & | operator+ () const |
const TNeg & | operator- () const |
TNeg & | operator- () |
const THerm & | operator~ () const |
THerm & | operator~ () |
const TNeg & | negate () const |
TNeg & | updNegate () |
const THerm & | transpose () const |
THerm & | updTranspose () |
const TPosTrans & | positionalTranspose () const |
TPosTrans & | updPositionalTranspose () |
const TReal & | real () const |
TReal & | real () |
const TImag & | imag () const |
TImag & | imag () |
const TWithoutNegator & | castAwayNegatorIfAny () const |
TWithoutNegator & | updCastAwayNegatorIfAny () |
template<class EE > | |
Row< N, typename CNT< E > ::template Result< EE >::Mul > | scalarMultiply (const EE &e) const |
template<class EE > | |
Row< N, typename CNT< EE > ::template Result< E >::Mul > | scalarMultiplyFromLeft (const EE &e) const |
template<class EE > | |
Row< N, typename CNT< E > ::template Result< EE >::Dvd > | scalarDivide (const EE &e) const |
template<class EE > | |
Row< N, typename CNT< EE > ::template Result< E >::Dvd > | scalarDivideFromLeft (const EE &e) const |
template<class EE > | |
Row< N, typename CNT< E > ::template Result< EE >::Add > | scalarAdd (const EE &e) const |
template<class EE > | |
Row< N, typename CNT< E > ::template Result< EE >::Sub > | scalarSubtract (const EE &e) const |
template<class EE > | |
Row< N, typename CNT< EE > ::template Result< E >::Sub > | scalarSubtractFromLeft (const EE &e) const |
template<class EE > | |
Row & | operator= (const EE &e) |
template<class EE > | |
Row & | operator+= (const EE &e) |
template<class EE > | |
Row & | operator-= (const EE &e) |
template<class EE > | |
Row & | operator*= (const EE &e) |
template<class EE > | |
Row & | operator/= (const EE &e) |
template<class EE > | |
Row & | scalarEq (const EE &ee) |
template<class EE > | |
Row & | scalarPlusEq (const EE &ee) |
template<class EE > | |
Row & | scalarMinusEq (const EE &ee) |
template<class EE > | |
Row & | scalarMinusEqFromLeft (const EE &ee) |
template<class EE > | |
Row & | scalarTimesEq (const EE &ee) |
template<class EE > | |
Row & | scalarTimesEqFromLeft (const EE &ee) |
template<class EE > | |
Row & | scalarDivideEq (const EE &ee) |
template<class EE > | |
Row & | scalarDivideEqFromLeft (const EE &ee) |
Row & | scalarEq (int ee) |
Row & | scalarPlusEq (int ee) |
Row & | scalarMinusEq (int ee) |
Row & | scalarTimesEq (int ee) |
Row & | scalarDivideEq (int ee) |
Row & | scalarMinusEqFromLeft (int ee) |
Row & | scalarTimesEqFromLeft (int ee) |
Row & | scalarDivideEqFromLeft (int ee) |
void | setToNaN () |
Set every scalar in this Row to NaN; this is the default initial value in Debug builds, but not in Release. More... | |
void | setToZero () |
Set every scalar in this Row to zero. More... | |
template<int NN> | |
const Row< NN, ELT, STRIDE > & | getSubRow (int j) const |
Extract a const reference to a sub-Row with size known at compile time. More... | |
template<int NN> | |
Row< NN, ELT, STRIDE > & | updSubRow (int j) |
Extract a writable reference to a sub-Row with size known at compile time. More... | |
Row< N-1, ELT, 1 > | drop1 (int p) const |
Return a row one smaller than this one by dropping the element at the indicated position p. More... | |
template<class EE > | |
Row< N+1, ELT, 1 > | append1 (const EE &v) const |
Return a row one larger than this one by adding an element to the end. More... | |
template<class EE > | |
Row< N+1, ELT, 1 > | insert1 (int p, const EE &v) const |
Return a row one larger than this one by inserting an element before the indicated one. More... | |
bool | isNaN () const |
Return true if any element of this Row contains a NaN anywhere. More... | |
bool | isInf () const |
Return true if any element of this Row contains a +Infinity or -Infinity somewhere but no element contains a NaN anywhere. More... | |
bool | isFinite () const |
Return true if no element of this Row contains an Infinity or a NaN anywhere. More... | |
template<class E2 , int CS2> | |
bool | isNumericallyEqual (const Row< N, E2, CS2 > &r, double tol) const |
Test whether this row is numerically equal to some other row with the same shape, using a specified tolerance. More... | |
template<class E2 , int CS2> | |
bool | isNumericallyEqual (const Row< N, E2, CS2 > &r) const |
Test whether this row vector is numerically equal to some other row with the same shape, using a default tolerance which is the looser of the default tolerances of the two objects being compared. More... | |
bool | isNumericallyEqual (const ELT &e, double tol=getDefaultTolerance()) const |
Test whether every element of this row vector is numerically equal to the given element, using either a specified tolerance or the row's default tolerance (which is always the same or looser than the default tolerance for one of its elements). More... | |
Static Public Member Functions | |
static int | size () |
static int | nrow () |
static int | ncol () |
template<int NN> | |
static const Row & | getSubRow (const Row< NN, ELT, STRIDE > &r, int j) |
Extract a subvector of type Row from a longer one that has the same element type and stride, and return a const reference to the selected subsequence. More... | |
template<int NN> | |
static Row & | updSubRow (Row< NN, ELT, STRIDE > &r, int j) |
Extract a subvector of type Row from a longer one that has the same element type and stride, and return a writable reference to the selected subsequence. More... | |
static const Row & | getAs (const ELT *p) |
Recast an ordinary C++ array E[] to a const Row<N,E,S>; assumes compatible length, stride, and packing. More... | |
static Row & | updAs (ELT *p) |
Recast a writable ordinary C++ array E[] to a writable Row<N,E,S>; assumes compatible length, stride, and packing. More... | |
static Row< N, ELT, 1 > | getNaN () |
Return a Row of the same length and element type as this one but with all elements set to NaN. More... | |
static double | getDefaultTolerance () |
For approximate comparisions, the default tolerance to use for a vector is the same as its elements' default tolerance. More... | |
Related Functions | |
(Note that these are not member functions.) | |
template<int N, class E , int S> | |
void | writeUnformatted (std::ostream &o, const Row< N, E, S > &v) |
Specialize for Row<N,E,S> to delegate to element type E, with spaces separating the elements; raw output is same as Vec. More... | |
template<int N, class E , int S> | |
bool | readUnformatted (std::istream &in, Row< N, E, S > &v) |
Specialize for Row<N,E,S> to delegate to element type E, with spaces separating the elements; format is same as Vec. More... | |
This is a fixed-length row vector designed for no-overhead inline computation.
The Row type is not commonly used in Simbody user programs; the column vector class Vec is much more common. Typically Row objects arise either from transposing a Vec or selecting rows from a Mat.
N | The number of columns in the row vector. |
ELT | The element type. Must be a composite numerical type (CNT). The default is ELT=Real. |
STRIDE | The spacing from one element to the next in memory, as an integer number of elements of type ELT. The default is STRIDE=1. |
typedef Row<N,E,STRIDE> SimTK::Row< N, ELT, STRIDE >::T |
typedef Row<N,ENeg,STRIDE> SimTK::Row< N, ELT, STRIDE >::TNeg |
typedef Row<N,EWithoutNegator,STRIDE> SimTK::Row< N, ELT, STRIDE >::TWithoutNegator |
typedef Row<N,EReal,STRIDE*CNT<E>::RealStrideFactor> SimTK::Row< N, ELT, STRIDE >::TReal |
typedef Row<N,EImag,STRIDE*CNT<E>::RealStrideFactor> SimTK::Row< N, ELT, STRIDE >::TImag |
typedef Row<N,EComplex,STRIDE> SimTK::Row< N, ELT, STRIDE >::TComplex |
typedef Vec<N,EHerm,STRIDE> SimTK::Row< N, ELT, STRIDE >::THerm |
typedef Vec<N,E,STRIDE> SimTK::Row< N, ELT, STRIDE >::TPosTrans |
typedef E SimTK::Row< N, ELT, STRIDE >::TElement |
typedef Row SimTK::Row< N, ELT, STRIDE >::TRow |
typedef E SimTK::Row< N, ELT, STRIDE >::TCol |
typedef Vec<N,ESqrt,1> SimTK::Row< N, ELT, STRIDE >::TSqrt |
typedef Row<N,EAbs,1> SimTK::Row< N, ELT, STRIDE >::TAbs |
typedef Row<N,EStandard,1> SimTK::Row< N, ELT, STRIDE >::TStandard |
typedef Vec<N,EInvert,1> SimTK::Row< N, ELT, STRIDE >::TInvert |
typedef Row<N,ENormalize,1> SimTK::Row< N, ELT, STRIDE >::TNormalize |
typedef SymMat<N,ESqHermT> SimTK::Row< N, ELT, STRIDE >::TSqHermT |
typedef EScalarNormSq SimTK::Row< N, ELT, STRIDE >::TSqTHerm |
typedef EScalar SimTK::Row< N, ELT, STRIDE >::Scalar |
typedef EULessScalar SimTK::Row< N, ELT, STRIDE >::ULessScalar |
typedef ENumber SimTK::Row< N, ELT, STRIDE >::Number |
typedef EStdNumber SimTK::Row< N, ELT, STRIDE >::StdNumber |
typedef EPrecision SimTK::Row< N, ELT, STRIDE >::Precision |
typedef EScalarNormSq SimTK::Row< N, ELT, STRIDE >::ScalarNormSq |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineexplicit |
|
inlineexplicit |
|
inlineexplicit |
|
inlineexplicit |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlineexplicit |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Vector addition – use operator+ instead.
|
inline |
Vector subtraction – use operator- instead.
|
inline |
Same as dot product (s = row*col) – use operator* or dot() instead.
|
inline |
Row times a conforming matrix, row=row*mat – use operator* instead.
|
inline |
Elementwise multiply (Matlab .
* operator).
|
inline |
Elementwise divide (Matlab .
/ operator).
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Set every scalar in this Row to NaN; this is the default initial value in Debug builds, but not in Release.
|
inline |
Set every scalar in this Row to zero.
|
inline |
Extract a const reference to a sub-Row with size known at compile time.
This must be called with an explicit template argument for the size, for example, getSubRow<3>(j). This is only a recast; no copying or computation is performed. The size and index are range checked in Debug builds but not in Release builds.
|
inline |
Extract a writable reference to a sub-Row with size known at compile time.
This must be called with an explicit template argument for the size, for example, updSubRow<3>(j). This is only a recast; no copying or computation is performed. The size and index are range checked in Debug builds but not in Release builds.
|
inlinestatic |
Extract a subvector of type Row from a longer one that has the same element type and stride, and return a const reference to the selected subsequence.
|
inlinestatic |
Extract a subvector of type Row from a longer one that has the same element type and stride, and return a writable reference to the selected subsequence.
|
inline |
Return a row one smaller than this one by dropping the element at the indicated position p.
The result is a packed copy with the same element type as this one.
|
inline |
Return a row one larger than this one by adding an element to the end.
The result is a packed copy with the same element type as this one. Works for any assignment compatible element.
|
inline |
Return a row one larger than this one by inserting an element before the indicated one.
The result is a packed copy with the same element type as this one. Works for any assignment compatible element. The index can be one greater than normally allowed in which case the element is appended (but use append1() if you know you're appending).
|
inlinestatic |
Recast an ordinary C++ array E[] to a const Row<N,E,S>; assumes compatible length, stride, and packing.
|
inlinestatic |
Recast a writable ordinary C++ array E[] to a writable Row<N,E,S>; assumes compatible length, stride, and packing.
|
inlinestatic |
Return a Row of the same length and element type as this one but with all elements set to NaN.
The result is packed (stride==1) regardless of the stride of this Row.
|
inline |
Return true if any element of this Row contains a NaN anywhere.
|
inline |
Return true if any element of this Row contains a +Infinity or -Infinity somewhere but no element contains a NaN anywhere.
|
inline |
Return true if no element of this Row contains an Infinity or a NaN anywhere.
|
inlinestatic |
For approximate comparisions, the default tolerance to use for a vector is the same as its elements' default tolerance.
|
inline |
Test whether this row is numerically equal to some other row with the same shape, using a specified tolerance.
|
inline |
Test whether this row vector is numerically equal to some other row with the same shape, using a default tolerance which is the looser of the default tolerances of the two objects being compared.
|
inline |
Test whether every element of this row vector is numerically equal to the given element, using either a specified tolerance or the row's default tolerance (which is always the same or looser than the default tolerance for one of its elements).