Simbody  3.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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;
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_