cisst-saw
Loading...
Searching...
No Matches
vctDynamicVectorBase.h
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3
4/*
5 Author(s): Ofri Sadowsky, Anton Deguet
6 Created on: 2004-07-01
7
8 (C) Copyright 2004-2018 Johns Hopkins University (JHU), All Rights Reserved.
9
10--- begin cisst license - do not edit ---
11
12This software is provided "as is" under an open source license, with
13no warranty. The complete license can be found in license.txt and
14http://www.cisst.org/cisst/license.txt.
15
16--- end cisst license ---
17*/
18
19#pragma once
20#ifndef _vctDynamicVectorBase_h
21#define _vctDynamicVectorBase_h
22
27
28#include <cstdarg>
29
34
35
36#ifndef DOXYGEN
37// forward declaration of auxiliary function to multiply matrix * vector
38template <class _resultVectorOwnerType, class _matrixOwnerType, class _vectorOwnerType, class _elementType>
39inline
43
44// forward declaration of auxiliary function to multiply matrix * vector
45template <class _resultVectorOwnerType, class _vectorOwnerType, class _matrixOwnerType, class _elementType>
46inline
50#endif // DOXYGEN
51
60template <class _vectorOwnerType, typename _elementType>
61class vctDynamicVectorBase : public vctDynamicConstVectorBase<_vectorOwnerType, _elementType>
62{
63public:
65
67
71
72 typedef _vectorOwnerType VectorOwnerType;
73
74 typedef typename BaseType::iterator iterator;
78
79 typedef typename BaseType::CopyType CopyType;
80 typedef typename BaseType::VectorValueType VectorValueType;
81
82
86
87
88public:
92 return this->Vector.begin();
93 }
94
97 iterator end(void) {
98 return this->Vector.end();
99 }
100
104 return this->Vector.rbegin();
105 }
106
110 return this->Vector.rend();
111 }
112
113 /* documented in base class */
114 const_iterator begin(void) const {
115 return BaseType::begin();
116 }
117
118 /* documented in base class */
119 const_iterator end(void) const {
120 return BaseType::end();
121 }
122
123 /* documented in base class */
125 return BaseType::rbegin();
126 }
127
128 /* documented in base class */
130 return BaseType::rend();
131 }
132
135 reference operator[](index_type index) {
136 return *Pointer(index);
137 }
138
139 /* documented in base class */
140 const_reference operator[](index_type index) const {
141 return BaseType::operator[](index);
142 }
143
144 /* documented in base class */
145 const VectorOwnerType & Owner(void) const {
146 return BaseType::Owner();
147 }
149 return this->Vector;
150 }
151
155 pointer Pointer(index_type index = 0) {
156 return this->Vector.Pointer(index);
157 }
158
159 /* documented in base class */
160 const_pointer Pointer(index_type index = 0) const {
161 return BaseType::Pointer(index);
162 }
163
170 reference at(index_type index) CISST_THROW(std::out_of_range) {
171 this->ThrowUnlessValidIndex(index);
172 return *(Pointer(index));
173 }
174
175 /* documented in base class */
176 const_reference at(index_type index) const CISST_THROW(std::out_of_range) {
177 return BaseType::at(index);
178 }
179
181 inline reference operator() (index_type index) CISST_THROW(std::out_of_range) {
182 return this->at(index);
183 }
184
185 /* documented in base class */
186 inline const_reference operator() (index_type index) const CISST_THROW(std::out_of_range) {
187 return BaseType::operator()(index);
188 }
189
190
195 reference Element(index_type index) {
196 return *(Pointer(index));
197 }
198
199 /* documented in base class */
200 const_reference Element(index_type index) const {
201 return BaseType::Element(index);
202 }
203
204
209 inline value_type SetAll(const value_type value) {
210 vctDynamicVectorLoopEngines::
211 VioSi<typename vctStoreBackBinaryOperations<value_type>::SecondOperand>::
212 Run(*this, value);
213 return value;
214 }
215
216
225 inline bool Zeros(void) {
226 if (this->IsCompact()) {
227 memset(this->Pointer(), 0, this->size() * sizeof(value_type));
228 return true;
229 } else {
230 this->SetAll(static_cast<value_type>(0));
231 return false;
232 }
233 }
234
235
241 template <class __vectorOwnerType>
243 if (this->FastCopyCompatible(other)) {
244 this->FastCopyOf(other, false);
245 } else {
246 vctDynamicVectorLoopEngines::
247 VoVi<typename vctUnaryOperations<value_type,
248 typename __vectorOwnerType::value_type>::Identity>::
249 Run(*this, other);
250 }
251 return *this;
252 }
253
254
262 template <class __vectorOwnerType>
264 size_type length, size_type startPositionThis = 0, size_type startPositionOther = 0) {
265 vctDynamicVectorRef<value_type> thisRef(*this, startPositionThis, length);
266 vctDynamicConstVectorRef<value_type> otherRef(other, startPositionOther, length);
267 thisRef.Assign(otherRef);
268 return *this;
269 }
270
271
278 template <class __vectorOwnerType, typename __elementType>
280 vctDynamicVectorLoopEngines::
281 VoVi<typename vctUnaryOperations<value_type,
282 typename __vectorOwnerType::value_type>::Identity>::
283 Run(*this, other);
284 return *this;
285 }
286
287 template <class __vectorOwnerType, typename __elementType>
289 return this->Assign(other);
290 }
291
292 template <size_type __size, stride_type __stride, class __elementType, class __dataPtrType>
294 & other) {
295 vctDynamicVectorLoopEngines::
296 VoVi<typename vctUnaryOperations<value_type, __elementType>::Identity>::
298 return *this;
299 }
300
301
302
326 template <class __vectorOwnerType, typename __elementType>
328 return this->Assign(other);
329 }
330
331 template <size_type __size, stride_type __stride, class __elementType, class __dataPtrType>
336
337
338
398 template <class __vectorOwnerType>
400 bool performSafetyChecks = true)
401 CISST_THROW(std::runtime_error)
402 {
403 return vctFastCopy::VectorCopy(*this, source, performSafetyChecks);
404 }
405
406 template <size_type __size, stride_type __stride, class __dataPtrType>
408 bool performSafetyChecks = true)
409 CISST_THROW(std::runtime_error)
410 {
411 return vctFastCopy::VectorCopy(*this, source, performSafetyChecks);
412 }
413
414
415
416
429 inline ThisType & Assign(const value_type * elements)
430 {
431 vctDynamicVectorLoopEngines::
432 VoVi< typename vctUnaryOperations<value_type>::Identity >::
433 Run(*this, vctDynamicConstVectorRef<value_type>(this->size(), elements));
434 return *this;
435 }
436
449
450 inline ThisType & Assign(value_type element0, value_type element1, ...) CISST_THROW(std::runtime_error) {
451 const size_type size = this->size();
452 if (size < 2) {
453 cmnThrow(std::runtime_error("vctDynamicVector: Assign from va_list requires size >= 2"));
454 }
455 this->at(0) = element0;
456 this->at(1) = element1;
457 va_list nextArg;
458 va_start(nextArg, element1);
459 for (index_type i = 2; i < size; ++i) {
460 this->at(i) = value_type( va_arg(nextArg, ElementVaArgPromotion) );
461 }
462 va_end(nextArg);
463 return *this;
464 }
465
466
473 template <class __vectorOwnerType, class __elementType>
475 __elementType lastElement) {
476 vctDynamicVectorRef<value_type> firstElements(*this, 0, otherVector.size() - 1);
477 vctDynamicVectorLoopEngines::
478 VoVi<typename vctUnaryOperations<value_type, __elementType>::Identity>::
479 Run(firstElements, otherVector);
480 (*this)[otherVector.size()] = value_type(lastElement);
481 return *this;
482 }
483
484
492
494
497 value_type & X(void) {
498 CMN_ASSERT(this->size() > 0);
499 return *(Pointer(0));
500 }
501
502 // we have to redeclare it here, shadowed
503 const value_type & X(void) const {
504 return BaseType::X();
505 }
506
507
510 value_type & Y(void) {
511 CMN_ASSERT(this->size() > 1);
512 return *(Pointer(1));
513 }
514
515 // we have to redeclare it here, shadowed
516 const value_type & Y(void) const {
517 return BaseType::Y();
518 }
519
520
523 value_type & Z(void) {
524 CMN_ASSERT(this->size() > 2);
525 return *(Pointer(2));
526 }
527
528 // we have to redeclare it here, shadowed
529 const value_type & Z(void) const {
530 return BaseType::Z();
531 }
532
535 value_type & W(void) {
536 CMN_ASSERT(this->size() > 3);
537 return *(Pointer(3));
538 }
539
540 // we have to redeclare it here, shadowed
541 const value_type & W(void) const {
542 return BaseType::W();
543 }
544
550 CMN_ASSERT(this->size() > 1);
551 return vctDynamicVectorRef<_elementType>(2, Pointer(0), this->stride());
552 }
553
557 CMN_ASSERT(this->size() > 2);
558 return vctDynamicVectorRef<_elementType>(2, Pointer(0), 2 * this->stride());
559 }
560
564 CMN_ASSERT(this->size() > 3);
565 return vctDynamicVectorRef<_elementType>(2, Pointer(0), 3 * this->stride());
566 }
567
571 CMN_ASSERT(this->size() > 2);
572 return vctDynamicVectorRef<_elementType>(2, Pointer(1), this->stride());
573 }
574
578 CMN_ASSERT(this->size() > 3);
579 return vctDynamicVectorRef<_elementType>(2, Pointer(1), 2 * this->stride());
580 }
581
585 CMN_ASSERT(this->size() > 3);
586 return vctDynamicVectorRef<_elementType>(2, Pointer(2), this->stride());
587 }
588
589 /* documented in base class */
591 return BaseType::XY();
592 }
593
594 /* documented in base class */
596 return BaseType::XZ();
597 }
598
599 /* documented in base class */
601 return BaseType::XW();
602 }
603
604 /* documented in base class */
606 return BaseType::YZ();
607 }
608
609 /* documented in base class */
611 return BaseType::YW();
612 }
613
614 /* documented in base class */
616 return BaseType::ZW();
617 }
618
625 CMN_ASSERT(this->size() > 2);
626 return vctDynamicVectorRef<_elementType>(3, Pointer(0), this->stride());
627 }
628
632 CMN_ASSERT(this->size() > 3);
633 return vctDynamicVectorRef<_elementType>(3, Pointer(1), this->stride());
634 }
635
636 /* documented in base class */
638 return BaseType::XYZ();
639 }
640
641 /* documented in base class */
643 return BaseType::YZW();
644 }
645
652 CMN_ASSERT(this->size() > 3);
653 return vctDynamicVectorRef<_elementType>(4, Pointer(0), this->stride());
654 }
655
656 /* documented in base class */
658 return BaseType::XYZW();
659 }
660
664 Ref(const size_type size, const size_type startPosition = 0) CISST_THROW(std::out_of_range) {
665 if ((startPosition + size) > this->size()) {
666 cmnThrow(std::out_of_range("vctDynamicConstVectorBase::Ref: reference is out of range"));
667 }
668 return vctDynamicVectorRef<_elementType>(size, Pointer(startPosition), this->stride());
669 }
670
672 Ref(const size_type size, const size_type startPosition = 0) const CISST_THROW(std::out_of_range) {
673 return BaseType::Ref(size, startPosition);
674 }
675
676
682 template <class __inputVectorOwner, class __indexVectorOwner>
689
694 template <class __vectorOwnerType1, class __vectorOwnerType2>
695 inline void CrossProductOf(
698 {
699 CMN_ASSERT(this->size() == 3);
700 CMN_ASSERT(inputVector1.size() == 3);
701 CMN_ASSERT(inputVector2.size() == 3);
702 (*this)[0] = inputVector1[1] * inputVector2[2] - inputVector1[2] * inputVector2[1];
703 (*this)[1] = inputVector1[2] * inputVector2[0] - inputVector1[0] * inputVector2[2];
704 (*this)[2] = inputVector1[0] * inputVector2[1] - inputVector1[1] * inputVector2[0];
705 }
706
708
709
710
714
727 template <class __vectorOwnerType1, class __vectorOwnerType2>
730 vctDynamicVectorLoopEngines::
731 VoViVi< typename vctBinaryOperations<value_type>::Addition >
732 ::Run(*this, vector1, vector2);
733 return *this;
734 }
735
736 /* documented above */
737 template <class __vectorOwnerType1, class __vectorOwnerType2>
740 vctDynamicVectorLoopEngines::
741 VoViVi< typename vctBinaryOperations<value_type>::Subtraction >
742 ::Run(*this, vector1, vector2);
743 return *this;
744 }
745
746 /* documented above */
747 template <class __vectorOwnerType1, class __vectorOwnerType2>
750 vctDynamicVectorLoopEngines::
751 VoViVi< typename vctBinaryOperations<value_type>::Multiplication >
752 ::Run(*this, vector1, vector2);
753 return *this;
754 }
755
756 /* documented above */
757 template <class __vectorOwnerType1, class __vectorOwnerType2>
760 vctDynamicVectorLoopEngines::
761 VoViVi< typename vctBinaryOperations<value_type>::Division >
762 ::Run(*this, vector1, vector2);
763 return *this;
764 }
765
766 /* documented above */
767 template <class __vectorOwnerType1, class __vectorOwnerType2>
770 vctDynamicVectorLoopEngines::
771 VoViVi< typename vctBinaryOperations<value_type>::Minimum >
772 ::Run(*this, vector1, vector2);
773 return *this;
774 }
775
776 /* documented above */
777 template <class __vectorOwnerType1, class __vectorOwnerType2>
780 vctDynamicVectorLoopEngines::
781 VoViVi< typename vctBinaryOperations<value_type>::Maximum >
782 ::Run(*this, vector1, vector2);
783 return *this;
784 }
785
786 /* documented above */
787 template <class __vectorOwnerType1, class __vectorOwnerType2>
790 vctDynamicVectorLoopEngines::
791 VoViVi< typename vctBinaryOperations<value_type>::ClipIn >
792 ::Run(*this, boundVector, vector);
793 return *this;
794 }
795
796
797
798
802
815 template <class __vectorOwnerType>
817 vctDynamicVectorLoopEngines::
818 VioVi<typename vctStoreBackBinaryOperations<value_type>::Addition >::
819 Run(*this, otherVector);
820 return *this;
821 }
822
823 /* documented above */
824 template <class __vectorOwnerType>
826 vctDynamicVectorLoopEngines::
827 VioVi< typename vctStoreBackBinaryOperations<value_type>::Subtraction >::
828 Run(*this, otherVector);
829 return *this;
830 }
831
832 /* documented above */
833 template <class __vectorOwnerType>
835 vctDynamicVectorLoopEngines::
836 VioVi< typename vctStoreBackBinaryOperations<value_type>::Multiplication >::
837 Run(*this, otherVector);
838 return *this;
839 }
840
841 /* documented above */
842 template <class __vectorOwnerType>
844 vctDynamicVectorLoopEngines::
845 VioVi< typename vctStoreBackBinaryOperations<value_type>::Division >::
846 Run(*this, otherVector);
847 return *this;
848 }
849
850 /* documented above */
851 template <class __vectorOwnerType>
853 vctDynamicVectorLoopEngines::
854 VioVi< typename vctStoreBackBinaryOperations<value_type>::Minimum >::
855 Run(*this, otherVector);
856 return *this;
857 }
858
859 /* documented above */
860 template <class __vectorOwnerType>
862 vctDynamicVectorLoopEngines::
863 VioVi< typename vctStoreBackBinaryOperations<value_type>::Maximum >::
864 Run(*this, otherVector);
865 return *this;
866 }
867
868 /* documented above */
869 template <class __vectorOwnerType>
871 vctDynamicVectorLoopEngines::
872 VioVi< typename vctStoreBackBinaryOperations<value_type>::Minimum >::
873 Run(*this, upperBoundVector);
874 return *this;
875 }
876
877 /* documented above */
878 template <class __vectorOwnerType>
880 vctDynamicVectorLoopEngines::
881 VioVi< typename vctStoreBackBinaryOperations<value_type>::Maximum >::
882 Run(*this, lowerBoundVector);
883 return *this;
884 }
885
886 /* documented above */
887 template <class __vectorOwnerType>
889 vctDynamicVectorLoopEngines::
890 VioVi< typename vctStoreBackBinaryOperations<value_type>::ClipIn >::
891 Run(*this, boundVector);
892 return *this;
893 }
894
895 /* documented above */
896 template <class __vectorOwnerType>
898 return this->Add(otherVector);
899 }
900
901 /* documented above */
902 template <class __vectorOwnerType>
904 return this->Subtract(otherVector);
905 }
906
907
908
912
914 template <class __vectorOwnerType>
916 vctDynamicVectorLoopEngines::
917 VioVio<typename vctStoreBackBinaryOperations<value_type>::Swap >::
918 Run(*this, otherVector);
919 return *this;
920 }
921
922
926
938 template <class __vectorOwnerType>
940 const value_type scalar) {
941 vctDynamicVectorLoopEngines::
942 VoViSi< typename vctBinaryOperations<value_type>::Addition >::
943 Run(*this, vector, scalar);
944 return *this;
945 }
946
947 /* documented above */
948 template <class __vectorOwnerType>
950 const value_type scalar) {
951 vctDynamicVectorLoopEngines::
952 VoViSi< typename vctBinaryOperations<value_type>::Subtraction >::
953 Run(*this, vector, scalar);
954 return *this;
955 }
956
957 /* documented above */
958 template <class __vectorOwnerType>
960 const value_type scalar) {
961 vctDynamicVectorLoopEngines::
962 VoViSi< typename vctBinaryOperations<value_type>::Multiplication >::
963 Run(*this, vector, scalar);
964 return *this;
965 }
966
967 /* documented above */
968 template <class __vectorOwnerType>
970 const value_type scalar) {
971 vctDynamicVectorLoopEngines::
972 VoViSi< typename vctBinaryOperations<value_type>::Division >::
973 Run(*this, vector, scalar);
974 return *this;
975 }
976
977 /* documented above */
978 template <class __vectorOwnerType>
980 const value_type upperBound) {
981 vctDynamicVectorLoopEngines::
982 VoViSi<typename vctBinaryOperations<value_type>::Minimum>::
983 Run(*this, vector, upperBound);
984 return *this;
985 }
986
987 /* documented above */
988 template <class __vectorOwnerType>
990 const value_type lowerBound) {
991 vctDynamicVectorLoopEngines::
992 VoViSi< typename vctBinaryOperations<value_type>::Maximum >::
993 Run(*this, vector, lowerBound);
994 return *this;
995 }
996
997 /* documented above */
998 template <class __vectorOwnerType>
1000 const value_type bound) {
1001 vctDynamicVectorLoopEngines::
1002 VoViSi< typename vctBinaryOperations<value_type>::ClipIn >::
1003 Run(*this, vector, bound);
1004 return *this;
1005 }
1006
1007
1008
1009
1013
1025 template <class __vectorOwnerType>
1026 inline ThisType & SumOf(const value_type scalar,
1028 vctDynamicVectorLoopEngines::
1029 VoSiVi< typename vctBinaryOperations<value_type>::Addition >::
1030 Run(*this, scalar, vector);
1031 return *this;
1032 }
1033
1034 /* documented above */
1035 template <class __vectorOwnerType>
1036 inline ThisType & DifferenceOf(const value_type scalar,
1038 vctDynamicVectorLoopEngines::
1039 VoSiVi< typename vctBinaryOperations<value_type>::Subtraction >::
1040 Run(*this, scalar, vector);
1041 return *this;
1042 }
1043
1044 /* documented above */
1045 template <class __vectorOwnerType>
1046 inline ThisType & ProductOf(const value_type scalar,
1048 vctDynamicVectorLoopEngines::
1049 VoSiVi< typename vctBinaryOperations<value_type>::Multiplication >::
1050 Run(*this, scalar, vector);
1051 return *this;
1052 }
1053
1054 /* documented above */
1055 template <class __vectorOwnerType>
1056 inline ThisType & RatioOf(const value_type scalar,
1058 vctDynamicVectorLoopEngines::
1059 VoSiVi< typename vctBinaryOperations<value_type>::Division >::
1060 Run(*this, scalar, vector);
1061 return *this;
1062 }
1063
1064 /* documented above */
1065 template <class __vectorOwnerType>
1066 inline ThisType & ClippedAboveOf(const value_type upperBound,
1068 vctDynamicVectorLoopEngines::
1069 VoSiVi< typename vctBinaryOperations<value_type>::Minimum >::
1070 Run(*this, upperBound, vector);
1071 return *this;
1072 }
1073
1074 /* documented above */
1075 template <class __vectorOwnerType>
1076 inline ThisType & ClippedBelowOf(const value_type lowerBound,
1078 vctDynamicVectorLoopEngines::
1079 VoSiVi< typename vctBinaryOperations<value_type>::Maximum >::
1080 Run(*this, lowerBound, vector);
1081 return *this;
1082 }
1083
1084 /* documented above */
1085 template <class __vectorOwnerType>
1086 inline ThisType & ClippedInOf(const value_type bound,
1088 vctDynamicVectorLoopEngines::
1089 VoSiVi< typename vctBinaryOperations<value_type>::ClipIn >::
1090 Run(*this, bound, vector);
1091 return *this;
1092 }
1093
1094
1095
1096
1100
1112 inline ThisType & Add(const value_type scalar) {
1113 vctDynamicVectorLoopEngines::
1114 VioSi< typename vctStoreBackBinaryOperations<value_type>::Addition >::
1115 Run(*this, scalar);
1116 return *this;
1117 }
1118
1119 /* documented above */
1120 inline ThisType & Subtract(const value_type scalar) {
1121 vctDynamicVectorLoopEngines::
1122 VioSi< typename vctStoreBackBinaryOperations<value_type>::Subtraction >::
1123 Run(*this, scalar);
1124 return *this;
1125 }
1126
1127 /* documented above */
1128 inline ThisType & Multiply(const value_type scalar) {
1129 vctDynamicVectorLoopEngines::
1130 VioSi< typename vctStoreBackBinaryOperations<value_type>::Multiplication >::
1131 Run(*this, scalar);
1132 return *this;
1133 }
1134
1135 /* documented above */
1136 inline ThisType & Divide(const value_type scalar) {
1137 vctDynamicVectorLoopEngines::
1138 VioSi< typename vctStoreBackBinaryOperations<value_type>::Division >::
1139 Run(*this, scalar);
1140 return *this;
1141 }
1142
1143 /* documented above */
1144 inline ThisType & ClipAbove(const value_type upperBound) {
1145 vctDynamicVectorLoopEngines::
1146 VioSi< typename vctStoreBackBinaryOperations<value_type>::Minimum >::
1147 Run(*this, upperBound);
1148 return *this;
1149 }
1150
1151 /* documented above */
1152 inline ThisType & ClipBelow(const value_type lowerBound) {
1153 vctDynamicVectorLoopEngines::
1154 VioSi< typename vctStoreBackBinaryOperations<value_type>::Maximum >::
1155 Run(*this, lowerBound);
1156 return *this;
1157 }
1158
1159 /* documented above */
1160 inline ThisType & ClipIn(const value_type bound) {
1161 vctDynamicVectorLoopEngines::
1162 VioSi< typename vctStoreBackBinaryOperations<value_type>::ClipIn >::
1163 Run(*this, bound);
1164 return *this;
1165 }
1166
1167 /* documented above */
1168 inline ThisType & operator += (const value_type scalar) {
1169 return this->Add(scalar);
1170 }
1171
1172 /* documented above */
1173 inline ThisType & operator -= (const value_type scalar) {
1174 return this->Subtract(scalar);
1175 }
1176
1177 /* documented above */
1178 inline ThisType & operator *= (const value_type scalar) {
1179 return this->Multiply(scalar);
1180 }
1181
1182 /* documented above */
1183 inline ThisType & operator /= (const value_type scalar) {
1184 return this->Divide(scalar);
1185 }
1186
1187
1188 template <class __vectorOwnerType>
1189 inline ThisType & AddProductOf(const value_type scalar,
1191 {
1192 vctDynamicVectorLoopEngines::
1193 VioSiVi<
1196 Run(*this, scalar, otherVector);
1197 return *this;
1198 }
1199
1200 template <class __vectorOwnerType1, class __vectorOwnerType2>
1203 {
1204 vctDynamicVectorLoopEngines::
1205 VioViVi<
1208 Run(*this, vector1, vector2);
1209 return *this;
1210 }
1211
1212
1213
1218
1228 template <class __matrixOwnerType, class __vectorOwnerType>
1231 vctMultiplyMatrixVector(*this, inputMatrix, inputVector);
1232 return *this;
1233 }
1234
1235
1245 template <class __vectorOwnerType, class __matrixOwnerType>
1248 vctMultiplyVectorMatrix(*this, inputVector, inputMatrix);
1249 return *this;
1250 }
1251
1253
1254
1272#ifndef SWIG
1274 {
1275 public:
1277 };
1278#endif
1279
1283
1293 template <class __vectorOwnerType>
1295 vctDynamicVectorLoopEngines::
1296 VoVi<typename vctUnaryOperations<value_type>::AbsValue>::
1297 Run(*this, otherVector);
1298 return *this;
1299 }
1300
1301 /* documented above */
1302 template <class __vectorOwnerType>
1304 vctDynamicVectorLoopEngines::
1305 VoVi<typename vctUnaryOperations<value_type>::Negation>::
1306 Run(*this, otherVector);
1307 return *this;
1308 }
1309
1310 /* documented above */
1311 template <class __vectorOwnerType>
1313 vctDynamicVectorLoopEngines::
1314 VoVi<typename vctUnaryOperations<value_type>::Floor>::
1315 Run(*this, otherVector);
1316 return *this;
1317 }
1318
1319 /* documented above */
1320 template <class __vectorOwnerType>
1322 vctDynamicVectorLoopEngines::
1323 VoVi<typename vctUnaryOperations<value_type>::Ceil>::
1324 Run(*this, otherVector);
1325 return *this;
1326 }
1327
1328 /* documented above */
1329 template <class __vectorOwnerType>
1331 *this = otherVector;
1332 this->NormalizedSelf();
1333 return *this;
1334 }
1335
1336
1340
1348 inline ThisType & AbsSelf(void) {
1349 vctDynamicVectorLoopEngines::
1350 Vio<typename vctStoreBackUnaryOperations<value_type>::MakeAbs>::
1351 Run(*this);
1352 return *this;
1353 }
1354
1355 /* documented above */
1356 inline ThisType & NegationSelf(void) {
1357 vctDynamicVectorLoopEngines::
1358 Vio<typename vctStoreBackUnaryOperations<value_type>::MakeNegation>::
1359 Run(*this);
1360 return *this;
1361 }
1362
1363 /* documented above */
1364 inline ThisType & FloorSelf(void) {
1365 vctDynamicVectorLoopEngines::
1366 Vio<typename vctStoreBackUnaryOperations<value_type>::MakeFloor>::
1367 Run(*this);
1368 return *this;
1369 }
1370
1371 /* documented above */
1372 inline ThisType & CeilSelf(void) {
1373 vctDynamicVectorLoopEngines::
1374 Vio<typename vctStoreBackUnaryOperations<value_type>::MakeCeil>::
1375 Run(*this);
1376 return *this;
1377 }
1378
1379 inline ThisType & NormalizedSelf(void) CISST_THROW(std::runtime_error) {
1380 value_type norm = value_type(this->Norm());
1381 if (norm >= TypeTraits::Tolerance()) {
1382 this->Divide(norm);
1383 } else {
1384 cmnThrow(std::runtime_error("Division by quasi zero detected in vctDynamicVector NormalizedSelf()"));
1385 }
1386 return *this;
1387 }
1388
1389
1390
1391};
1392
1393
1394#endif // _vctDynamicVectorBase_h
A collection of useful information about the C++ basic types, represented in a generic programming wa...
Definition cmnTypeTraits.h:155
cmnVaArgPromotion< value_type >::Type VaArgPromotion
Definition cmnTypeTraits.h:167
static Type Tolerance(void)
Definition cmnTypeTraits.h:170
_elementType value_type
Definition mtsGenericObjectProxy.h:329
Returns the product of the two InputType object.
Definition vctBinaryOperations.h:116
Definition vctForwardDeclarations.h:145
Definition vctForwardDeclarations.h:119
Dynamic vector referencing existing memory (const).
Definition vctDynamicConstVectorRef.h:79
const OwnerType & Owner(void) const
Definition vctDynamicNArrayBase.h:143
SliceRefType operator[](size_type index)
Definition vctDynamicNArrayBase.h:320
OwnerType::reverse_iterator reverse_iterator
Definition vctDynamicNArrayBase.h:62
OwnerType::const_reverse_iterator const_reverse_iterator
Definition vctDynamicNArrayBase.h:63
reference at(size_type metaIndex) CISST_THROW(std
Definition vctDynamicNArrayBase.h:184
reference Element(const nsize_type &coordinates)
Definition vctDynamicNArrayBase.h:239
reference operator()(const nsize_type &coordinates) CISST_THROW(std
Definition vctDynamicNArrayBase.h:220
Definition vctDynamicVectorBase.h:1274
vctDynamicVectorRef< value_type > Type
Definition vctDynamicVectorBase.h:1276
Definition vctDynamicVectorBase.h:62
ThisType & ElementwiseDivide(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:843
VCT_CONTAINER_TRAITS_TYPEDEFS(_elementType)
ThisType & ForceAssign(const vctFixedSizeConstVectorBase< __size, __stride, __elementType, __dataPtrType > &other)
Definition vctDynamicVectorBase.h:332
pointer Pointer(index_type index=0)
Definition vctDynamicVectorBase.h:155
ThisType & AddElementwiseProductOf(const vctDynamicConstVectorBase< __vectorOwnerType1, _elementType > &vector1, const vctDynamicConstVectorBase< __vectorOwnerType2, _elementType > &vector2)
Definition vctDynamicVectorBase.h:1201
vctDynamicVectorRef< _elementType > XY(void)
Definition vctDynamicVectorBase.h:549
reverse_iterator rbegin(void)
Definition vctDynamicVectorBase.h:103
ThisType & SumOf(const vctDynamicConstVectorBase< __vectorOwnerType1, _elementType > &vector1, const vctDynamicConstVectorBase< __vectorOwnerType2, _elementType > &vector2)
Definition vctDynamicVectorBase.h:728
value_type SetAll(const value_type value)
Definition vctDynamicVectorBase.h:209
ThisType & SumOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector, const value_type scalar)
Definition vctDynamicVectorBase.h:939
ThisType & SwapElementsWith(vctDynamicVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:915
iterator end(void)
Definition vctDynamicVectorBase.h:97
ThisType & RatioOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector, const value_type scalar)
Definition vctDynamicVectorBase.h:969
value_type & X(void)
Definition vctDynamicVectorBase.h:497
ThisType & CeilSelf(void)
Definition vctDynamicVectorBase.h:1372
BaseType::const_reverse_iterator const_reverse_iterator
Definition vctDynamicVectorBase.h:77
ThisType & DifferenceOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector, const value_type scalar)
Definition vctDynamicVectorBase.h:949
ThisType & ConcatenationOf(const vctDynamicConstVectorBase< __vectorOwnerType, __elementType > &otherVector, __elementType lastElement)
Definition vctDynamicVectorBase.h:474
ThisType & AbsOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:1294
ThisType & DifferenceOf(const value_type scalar, const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector)
Definition vctDynamicVectorBase.h:1036
ThisType & SumOf(const value_type scalar, const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector)
Definition vctDynamicVectorBase.h:1026
ThisType & operator*=(const value_type scalar)
Definition vctDynamicVectorBase.h:1178
ThisType & NegationSelf(void)
Definition vctDynamicVectorBase.h:1356
vctDynamicVectorRef< _elementType > XZ(void)
Definition vctDynamicVectorBase.h:556
ThisType & operator-=(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:903
VectorOwnerType & Owner(void)
Definition vctDynamicVectorBase.h:148
bool Zeros(void)
Definition vctDynamicVectorBase.h:225
vctDynamicVectorRef< _elementType > XYZ(void)
Definition vctDynamicVectorBase.h:624
ThisType & Assign(const value_type *elements)
Definition vctDynamicVectorBase.h:429
ThisType & FloorSelf(void)
Definition vctDynamicVectorBase.h:1364
reference operator[](index_type index)
Definition vctDynamicVectorBase.h:135
ThisType & ProductOf(const value_type scalar, const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector)
Definition vctDynamicVectorBase.h:1046
ThisType & operator/=(const value_type scalar)
Definition vctDynamicVectorBase.h:1183
ThisType & ElementwiseMin(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:852
ThisType & NegationOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:1303
bool FastCopyOf(const vctDynamicConstVectorBase< __vectorOwnerType, value_type > &source, bool performSafetyChecks=true) CISST_THROW(std
Definition vctDynamicVectorBase.h:399
const_pointer Pointer(index_type index=0) const
Definition vctDynamicVectorBase.h:160
ThisType & Assign(value_type element0, value_type element1,...) CISST_THROW(std
Definition vctDynamicVectorBase.h:450
ThisType & Multiply(const value_type scalar)
Definition vctDynamicVectorBase.h:1128
vctDynamicConstVectorRef< _elementType > XW(void) const
Definition vctDynamicVectorBase.h:600
const_reference Element(index_type index) const
Definition vctDynamicVectorBase.h:200
_vectorOwnerType VectorOwnerType
Definition vctDynamicVectorBase.h:72
reference at(index_type index) CISST_THROW(std
Definition vctDynamicVectorBase.h:170
vctDynamicConstVectorRef< _elementType > XZ(void) const
Definition vctDynamicVectorBase.h:595
const VectorOwnerType & Owner(void) const
Definition vctDynamicVectorBase.h:145
ThisType & ClippedAboveOf(const value_type upperBound, const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector)
Definition vctDynamicVectorBase.h:1066
void SelectFrom(const vctDynamicConstVectorBase< __inputVectorOwner, _elementType > &input, const vctDynamicConstVectorBase< __indexVectorOwner, index_type > &index)
Definition vctDynamicVectorBase.h:683
BaseType::iterator iterator
Definition vctDynamicVectorBase.h:74
ThisType & DifferenceOf(const vctDynamicConstVectorBase< __vectorOwnerType1, _elementType > &vector1, const vctDynamicConstVectorBase< __vectorOwnerType2, _elementType > &vector2)
Definition vctDynamicVectorBase.h:738
ThisType & ClipAbove(const value_type upperBound)
Definition vctDynamicVectorBase.h:1144
BaseType::CopyType CopyType
Definition vctDynamicVectorBase.h:79
ThisType & Subtract(const value_type scalar)
Definition vctDynamicVectorBase.h:1120
vctDynamicConstVectorRef< _elementType > ZW(void) const
Definition vctDynamicVectorBase.h:615
vctDynamicConstVectorRef< _elementType > Ref(const size_type size, const size_type startPosition=0) const CISST_THROW(std
Definition vctDynamicVectorBase.h:672
ThisType & ElementwiseMultiply(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:834
ThisType & ClippedAboveOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector, const value_type upperBound)
Definition vctDynamicVectorBase.h:979
ThisType & ClipIn(const value_type bound)
Definition vctDynamicVectorBase.h:1160
void CrossProductOf(const vctDynamicConstVectorBase< __vectorOwnerType1, _elementType > &inputVector1, const vctDynamicConstVectorBase< __vectorOwnerType2, _elementType > &inputVector2)
Definition vctDynamicVectorBase.h:695
TypeTraits::VaArgPromotion ElementVaArgPromotion
Definition vctDynamicVectorBase.h:85
vctDynamicConstVectorBase< _vectorOwnerType, _elementType > BaseType
Definition vctDynamicVectorBase.h:70
ThisType & ClipBelow(const value_type lowerBound)
Definition vctDynamicVectorBase.h:1152
vctDynamicConstVectorRef< _elementType > YW(void) const
Definition vctDynamicVectorBase.h:610
vctDynamicVectorRef< _elementType > Ref(const size_type size, const size_type startPosition=0) CISST_THROW(std
Definition vctDynamicVectorBase.h:664
const_reference operator[](index_type index) const
Definition vctDynamicVectorBase.h:140
ThisType & NormalizedSelf(void) CISST_THROW(std
Definition vctDynamicVectorBase.h:1379
const_iterator end(void) const
Definition vctDynamicVectorBase.h:119
value_type & W(void)
Definition vctDynamicVectorBase.h:535
vctDynamicConstVectorRef< _elementType > YZ(void) const
Definition vctDynamicVectorBase.h:605
reference Element(index_type index)
Definition vctDynamicVectorBase.h:195
ThisType & ElementwiseClipAbove(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &upperBoundVector)
Definition vctDynamicVectorBase.h:870
ThisType & FloorOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:1312
ThisType & ElementwiseMinOf(const vctDynamicConstVectorBase< __vectorOwnerType1, _elementType > &vector1, const vctDynamicConstVectorBase< __vectorOwnerType2, _elementType > &vector2)
Definition vctDynamicVectorBase.h:768
ThisType & ClippedBelowOf(const value_type lowerBound, const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector)
Definition vctDynamicVectorBase.h:1076
const_iterator begin(void) const
Definition vctDynamicVectorBase.h:114
ThisType & Assign(const vctDynamicConstVectorBase< __vectorOwnerType, value_type > &other)
Definition vctDynamicVectorBase.h:242
ThisType & ClippedInOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector, const value_type bound)
Definition vctDynamicVectorBase.h:999
ThisType & ProductOf(const vctDynamicConstMatrixBase< __matrixOwnerType, _elementType > &inputMatrix, const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &inputVector)
Definition vctDynamicVectorBase.h:1229
ThisType & AddProductOf(const value_type scalar, const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:1189
const value_type & Z(void) const
Definition vctDynamicVectorBase.h:529
const value_type & Y(void) const
Definition vctDynamicVectorBase.h:516
ThisType & Divide(const value_type scalar)
Definition vctDynamicVectorBase.h:1136
value_type & Y(void)
Definition vctDynamicVectorBase.h:510
ThisType & ElementwiseClippedInOf(const vctDynamicConstVectorBase< __vectorOwnerType1, _elementType > &boundVector, const vctDynamicConstVectorBase< __vectorOwnerType2, _elementType > &vector)
Definition vctDynamicVectorBase.h:788
ThisType & ProductOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector, const value_type scalar)
Definition vctDynamicVectorBase.h:959
bool FastCopyOf(const vctFixedSizeConstVectorBase< __size, __stride, value_type, __dataPtrType > &source, bool performSafetyChecks=true) CISST_THROW(std
Definition vctDynamicVectorBase.h:407
const_reverse_iterator rend(void) const
Definition vctDynamicVectorBase.h:129
ThisType & ElementwiseRatioOf(const vctDynamicConstVectorBase< __vectorOwnerType1, _elementType > &vector1, const vctDynamicConstVectorBase< __vectorOwnerType2, _elementType > &vector2)
Definition vctDynamicVectorBase.h:758
vctDynamicConstVectorRef< _elementType > XY(void) const
Definition vctDynamicVectorBase.h:590
ThisType & ProductOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &inputVector, const vctDynamicConstMatrixBase< __matrixOwnerType, _elementType > &inputMatrix)
Definition vctDynamicVectorBase.h:1246
iterator begin(void)
Definition vctDynamicVectorBase.h:91
reverse_iterator rend(void)
Definition vctDynamicVectorBase.h:109
ThisType & ClippedBelowOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector, const value_type lowerBound)
Definition vctDynamicVectorBase.h:989
ThisType & ElementwiseProductOf(const vctDynamicConstVectorBase< __vectorOwnerType1, _elementType > &vector1, const vctDynamicConstVectorBase< __vectorOwnerType2, _elementType > &vector2)
Definition vctDynamicVectorBase.h:748
ThisType & AbsSelf(void)
Definition vctDynamicVectorBase.h:1348
ThisType & ElementwiseClipIn(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &boundVector)
Definition vctDynamicVectorBase.h:888
const value_type & X(void) const
Definition vctDynamicVectorBase.h:503
ThisType & ElementwiseClipBelow(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &lowerBoundVector)
Definition vctDynamicVectorBase.h:879
ThisType & ForceAssign(const vctDynamicConstVectorBase< __vectorOwnerType, __elementType > &other)
Definition vctDynamicVectorBase.h:327
ThisType & ClippedInOf(const value_type bound, const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector)
Definition vctDynamicVectorBase.h:1086
const value_type & W(void) const
Definition vctDynamicVectorBase.h:541
ThisType & ElementwiseMaxOf(const vctDynamicConstVectorBase< __vectorOwnerType1, _elementType > &vector1, const vctDynamicConstVectorBase< __vectorOwnerType2, _elementType > &vector2)
Definition vctDynamicVectorBase.h:778
vctDynamicVectorRef< _elementType > YZ(void)
Definition vctDynamicVectorBase.h:570
vctDynamicVectorRef< _elementType > XW(void)
Definition vctDynamicVectorBase.h:563
ThisType & Add(const value_type scalar)
Definition vctDynamicVectorBase.h:1112
ThisType & RatioOf(const value_type scalar, const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &vector)
Definition vctDynamicVectorBase.h:1056
ThisType & Assign(const vctFixedSizeConstVectorBase< __size, __stride, __elementType, __dataPtrType > &other)
Definition vctDynamicVectorBase.h:293
vctDynamicVectorRef< _elementType > ZW(void)
Definition vctDynamicVectorBase.h:584
ThisType & operator+=(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:897
vctDynamicVectorRef< _elementType > XYZW(void)
Definition vctDynamicVectorBase.h:651
vctDynamicConstVectorRef< _elementType > XYZW(void) const
Definition vctDynamicVectorBase.h:657
BaseType::VectorValueType VectorValueType
Definition vctDynamicVectorBase.h:80
ThisType & Assign(const vctDynamicConstVectorBase< __vectorOwnerType, __elementType > &other)
Definition vctDynamicVectorBase.h:279
BaseType::reverse_iterator reverse_iterator
Definition vctDynamicVectorBase.h:75
ThisType & Assign(const vctDynamicConstVectorBase< __vectorOwnerType, value_type > &other, size_type length, size_type startPositionThis=0, size_type startPositionOther=0)
Definition vctDynamicVectorBase.h:263
vctDynamicVectorRef< _elementType > YW(void)
Definition vctDynamicVectorBase.h:577
value_type & Z(void)
Definition vctDynamicVectorBase.h:523
BaseType::const_iterator const_iterator
Definition vctDynamicVectorBase.h:76
vctDynamicVectorRef< _elementType > YZW(void)
Definition vctDynamicVectorBase.h:631
vctDynamicVectorBase ThisType
Definition vctDynamicVectorBase.h:68
class cmnTypeTraits< value_type > TypeTraits
Definition vctDynamicVectorBase.h:84
vctDynamicConstVectorRef< _elementType > YZW(void) const
Definition vctDynamicVectorBase.h:642
ThisType & Add(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:816
reference operator()(index_type index) CISST_THROW(std
Definition vctDynamicVectorBase.h:181
vctDynamicConstVectorRef< _elementType > XYZ(void) const
Definition vctDynamicVectorBase.h:637
const_reference at(index_type index) const CISST_THROW(std
Definition vctDynamicVectorBase.h:176
const_reverse_iterator rbegin(void) const
Definition vctDynamicVectorBase.h:124
friend class vctDynamicVectorLoopEngines
Definition vctDynamicVectorBase.h:64
ThisType & CeilOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:1321
ThisType & ElementwiseMax(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:861
ThisType & Subtract(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector)
Definition vctDynamicVectorBase.h:825
ThisType & NormalizedOf(const vctDynamicConstVectorBase< __vectorOwnerType, _elementType > &otherVector) CISST_THROW(std
Definition vctDynamicVectorBase.h:1330
ThisType & operator=(const vctDynamicConstVectorBase< __vectorOwnerType, __elementType > &other)
Definition vctDynamicVectorBase.h:288
static void Run(_outputVectorType &output, const _inputVectorType &input, const _indexVectorType &index)
Definition vctDynamicVectorLoopEngines.h:1092
Dynamic vector referencing existing memory.
Definition vctDynamicVectorRef.h:78
vctDynamicVectorRef()
Definition vctDynamicVectorRef.h:91
static bool VectorCopy(_destinationVectorType &destination, const _sourceVectorType &source, bool performSafetyChecks)
Definition vctFastCopy.h:161
A template for a fixed length vector with fixed spacing in memory.
Definition vctFixedSizeConstVectorBase.h:108
Returns the sum of the two InputType object.
Definition vctStoreBackBinaryOperations.h:76
Define unary operations on an object as classes.
Definition vctUnaryOperations.h:56
#define CMN_ASSERT(expr)
Definition cmnAssert.h:97
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
STL namespace.
size_type size(void) const
Definition vctDynamicConstMatrixBase.h:228
bool IsCompact(void) const
Definition vctDynamicConstMatrixBase.h:641
NormType Norm(void) const
Definition vctDynamicConstMatrixBase.h:467
void ThrowUnlessValidIndex(size_type index) const CISST_THROW(std
Definition vctDynamicConstMatrixBase.h:171
bool FastCopyCompatible(const vctDynamicConstMatrixBase< __matrixOwnerType, value_type > &source) const
Definition vctDynamicConstMatrixBase.h:677
difference_type stride(dimension_type dimension) const
Definition vctDynamicConstNArrayBase.h:325
Declaration of vctDynamicConstVectorBase.
OwnerType Vector
Definition vctDynamicConstVectorBase.h:126
Declaration of vctDynamicConstVectorRef.
void vctMultiplyMatrixVector(vctDynamicVectorBase< _resultVectorOwnerType, _elementType > &result, const vctDynamicConstMatrixBase< _matrixOwnerType, _elementType > &matrix, const vctDynamicConstVectorBase< _vectorOwnerType, _elementType > &vector)
Definition vctDynamicMatrixRef.h:394
void vctMultiplyVectorMatrix(vctDynamicVectorBase< _resultVectorOwnerType, _elementType > &result, const vctDynamicConstVectorBase< _vectorOwnerType, _elementType > &vector, const vctDynamicConstMatrixBase< _matrixOwnerType, _elementType > &matrix)
Definition vctDynamicMatrixRef.h:409
Declaration of vctStoreBackBinaryOperations.
Declaration of vctStoreBackUnaryOperations.