Simbody  3.5
RowVector_.h
Go to the documentation of this file.
1 #ifndef SimTK_SIMMATRIX_ROWVECTOR_H_
2 #define SimTK_SIMMATRIX_ROWVECTOR_H_
3 
4 /* -------------------------------------------------------------------------- *
5  * Simbody(tm): SimTKcommon *
6  * -------------------------------------------------------------------------- *
7  * This is part of the SimTK biosimulation toolkit originating from *
8  * Simbios, the NIH National Center for Physics-Based Simulation of *
9  * Biological Structures at Stanford, funded under the NIH Roadmap for *
10  * Medical Research, grant U54 GM072970. See https://simtk.org/home/simbody. *
11  * *
12  * Portions copyright (c) 2005-13 Stanford University and the Authors. *
13  * Authors: Michael Sherman *
14  * Contributors: *
15  * *
16  * Licensed under the Apache License, Version 2.0 (the "License"); you may *
17  * not use this file except in compliance with the License. You may obtain a *
18  * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
19  * *
20  * Unless required by applicable law or agreed to in writing, software *
21  * distributed under the License is distributed on an "AS IS" BASIS, *
22  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
23  * See the License for the specific language governing permissions and *
24  * limitations under the License. *
25  * -------------------------------------------------------------------------- */
26 
31 namespace SimTK {
32 
33 //==============================================================================
34 // ROW VECTOR
35 //==============================================================================
52 template <class ELT> class RowVector_ : public RowVectorBase<ELT> {
53  typedef typename CNT<ELT>::Scalar S;
54  typedef typename CNT<ELT>::Number Number;
55  typedef typename CNT<ELT>::StdNumber StdNumber;
56  typedef typename CNT<ELT>::TNeg ENeg;
57 
58  typedef RowVectorBase<ELT> Base;
59  typedef RowVectorBase<ENeg> BaseNeg;
60 public:
61  RowVector_() : Base() {} // 1x0 reallocatable
62  // Uses default destructor.
63 
64  // Copy constructor is deep.
65  RowVector_(const RowVector_& src) : Base(src) {}
66 
67  // Implicit conversions.
68  RowVector_(const Base& src) : Base(src) {} // e.g., RowVectorView
69  RowVector_(const BaseNeg& src) : Base(src) {}
70 
71  // Copy assignment is deep and can be reallocating if this RowVector
72  // has no View.
74  Base::operator=(src); return*this;
75  }
76 
77 
78  explicit RowVector_(int n) : Base(n) { }
79  RowVector_(int n, const ELT* cppInitialValues) : Base(n, cppInitialValues) {}
80  RowVector_(int n, const ELT& initialValue) : Base(n, initialValue) {}
81 
86  RowVector_(int n, const S* cppData, bool): Base(n, Base::CppNScalarsPerElement, cppData) {}
87  RowVector_(int n, S* cppData, bool): Base(n, Base::CppNScalarsPerElement, cppData) {}
88 
92  RowVector_(int n, int stride, const S* data, bool) : Base(n, stride, data) {}
93  RowVector_(int n, int stride, S* data, bool) : Base(n, stride, data) {}
94 
96  template <int M>
97  explicit RowVector_(const Row<M,ELT>& v) : Base(M) {
98  for (int i = 0; i < M; ++i)
99  this->updElt(0, i) = v(i);
100  }
101 
102  RowVector_& operator=(const ELT& v) { Base::operator=(v); return *this; }
103 
104  template <class EE> RowVector_& operator=(const RowVectorBase<EE>& b)
105  { Base::operator=(b); return*this; }
106  template <class EE> RowVector_& operator+=(const RowVectorBase<EE>& b)
107  { Base::operator+=(b); return*this; }
108  template <class EE> RowVector_& operator-=(const RowVectorBase<EE>& b)
109  { Base::operator-=(b); return*this; }
110 
111  RowVector_& operator*=(const StdNumber& t) { Base::operator*=(t); return *this; }
112  RowVector_& operator/=(const StdNumber& t) { Base::operator/=(t); return *this; }
113  RowVector_& operator+=(const ELT& b) { this->elementwiseAddScalarInPlace(b); return *this; }
114  RowVector_& operator-=(const ELT& b) { this->elementwiseSubtractScalarInPlace(b); return *this; }
115 
116 private:
117  // NO DATA MEMBERS ALLOWED
118 };
119 
120 } //namespace SimTK
121 
122 #endif // SimTK_SIMMATRIX_ROWVECTOR_H_
RowVector_(const Row< M, ELT > &v)
Convert a Row to a RowVector_.
Definition: RowVector_.h:97
RowVector_(int n)
Definition: RowVector_.h:78
RowVector_(const RowVector_ &src)
Definition: RowVector_.h:65
This is a dataless rehash of the MatrixBase class to specialize it for RowVectors.
Definition: BigMatrix.h:165
RowVector_ & operator=(const RowVector_ &src)
Definition: RowVector_.h:73
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition: Assembler.h:37
MatrixBase & elementwiseSubtractScalarInPlace(const S &s)
Set M(i,j)-=s for every element of M and some value s.
K::Scalar Scalar
Definition: CompositeNumericalTypes.h:160
ELT & updElt(int i, int j)
Definition: MatrixBase.h:657
RowVector_(int n, int stride, const S *data, bool)
Borrowed-space construction with explicit stride supplied as "number of scalars between elements"...
Definition: RowVector_.h:92
RowVectorBase & operator-=(const RowVectorBase &r)
Definition: RowVectorBase.h:145
RowVector_(int n, S *cppData, bool)
Definition: RowVector_.h:87
RowVectorBase & operator+=(const RowVectorBase &r)
Definition: RowVectorBase.h:144
RowVector_(int n, const S *cppData, bool)
Construct a Vector which uses borrowed space with assumed element-to-element stride equal to the C++ ...
Definition: RowVector_.h:86
RowVector_ & operator*=(const StdNumber &t)
Definition: RowVector_.h:111
RowVector_(int n, const ELT *cppInitialValues)
Definition: RowVector_.h:79
RowVector_ & operator/=(const StdNumber &t)
Definition: RowVector_.h:112
RowVector_(int n, const ELT &initialValue)
Definition: RowVector_.h:80
RowVectorBase & operator/=(const StdNumber &t)
Definition: RowVectorBase.h:143
Definition: MatrixBase.h:155
RowVectorBase & operator=(const RowVectorBase &b)
Copy assignment is deep copy but behavior depends on type of lhs: if view, rhs must match...
Definition: RowVectorBase.h:136
MatrixBase & elementwiseAddScalarInPlace(const S &s)
Set M(i,j)+=s for every element of M and some value s.
K::StdNumber StdNumber
Definition: CompositeNumericalTypes.h:163
RowVector_()
Definition: RowVector_.h:61
This is a fixed-length row vector designed for no-overhead inline computation.
Definition: SimTKcommon/include/SimTKcommon/internal/common.h:606
K::TNeg TNeg
Definition: CompositeNumericalTypes.h:139
Represents a variable size row vector; much less common than the column vector type Vector_...
Definition: BigMatrix.h:174
RowVector_ & operator-=(const ELT &b)
Definition: RowVector_.h:114
K::Number Number
Definition: CompositeNumericalTypes.h:162
RowVector_ & operator=(const RowVectorBase< EE > &b)
Definition: RowVector_.h:104
RowVectorBase & operator*=(const StdNumber &t)
Definition: RowVectorBase.h:142
RowVector_ & operator+=(const RowVectorBase< EE > &b)
Definition: RowVector_.h:106
RowVector_ & operator-=(const RowVectorBase< EE > &b)
Definition: RowVector_.h:108
RowVector_(int n, int stride, S *data, bool)
Definition: RowVector_.h:93
RowVector_(const Base &src)
Definition: RowVector_.h:68
RowVector_ & operator=(const ELT &v)
Definition: RowVector_.h:102
RowVector_ & operator+=(const ELT &b)
Definition: RowVector_.h:113
RowVector_(const BaseNeg &src)
Definition: RowVector_.h:69