Simbody 3.7
Loading...
Searching...
No Matches
VectorIterator.h
Go to the documentation of this file.
1#ifndef SimTK_SIMMATRIX_VECTORITERATOR_H_
2#define SimTK_SIMMATRIX_VECTORITERATOR_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-15 Stanford University and the Authors. *
13 * Authors: Peter Eastman *
14 * Contributors: Michael Sherman *
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#include <cstddef>
32
33namespace SimTK {
34
35//==============================================================================
36// VECTOR ITERATOR
37//==============================================================================
51template <class ELT, class VECTOR_CLASS>
53public:
54 typedef ELT value_type;
55 typedef ptrdiff_t difference_type;
56 typedef ELT& reference;
57 typedef ELT* pointer;
58 typedef std::random_access_iterator_tag iterator_category;
59
62 VectorIterator(VECTOR_CLASS& vector, ptrdiff_t index)
63 : vectorp(&vector), index(index) {}
64
66 VectorIterator() = delete;
67
70 VectorIterator(const VectorIterator& source) = default;
71
74 VectorIterator& operator=(const VectorIterator& source) = default;
75
76 ELT& operator*() {
77 assert (index >= 0 && index < vectorp->size());
78 return (*vectorp)[(int)index];
79 }
80 ELT& operator[](ptrdiff_t i) {
81 assert (i >= 0 && i < vectorp->size());
82 return (*vectorp)[(int)i];
83 }
85 assert (index < vectorp->size());
86 ++index;
87 return *this;
88 }
90 assert (index < vectorp->size());
91 VectorIterator current = *this;
92 ++index;
93 return current;
94 }
96 assert (index > 0);
97 --index;
98 return *this;
99 }
101 assert (index > 0);
102 VectorIterator current = *this;
103 --index;
104 return current;
105 }
107 assert (0 <= index+n && index+n <= vectorp->size());
108 index += n;
109 return *this;
110 }
112 assert (0 <= index-n && index-n <= vectorp->size());
113 index -= n;
114 return *this;
115 }
116 bool operator<(const VectorIterator& iter) const {
117 return (index < iter.index);
118 }
119 bool operator>(const VectorIterator& iter) const {
120 return (index > iter.index);
121 }
122 bool operator<=(const VectorIterator& iter) const {
123 return (index <= iter.index);
124 }
125 bool operator>=(const VectorIterator& iter) const {
126 return (index >= iter.index);
127 }
128 ptrdiff_t operator-(const VectorIterator& iter) const {
129 return (index - iter.index);
130 }
131 VectorIterator operator-(ptrdiff_t n) const {
132 return VectorIterator(*vectorp, index-n);
133 }
134 VectorIterator operator+(ptrdiff_t n) const {
135 return VectorIterator(*vectorp, index+n);
136 }
137 bool operator==(const VectorIterator& iter) const {
138 return (index == iter.index);
139 }
140 bool operator!=(const VectorIterator& iter) const {
141 return (index != iter.index);
142 }
143private:
144 VECTOR_CLASS* vectorp;
145 ptrdiff_t index;
146};
147
148} //namespace SimTK
149
150#endif // SimTK_SIMMATRIX_VECTORITERATOR_H_
This is an iterator for iterating over the elements of a Vector_ or Vec object.
Definition VectorIterator.h:52
VectorIterator & operator+=(ptrdiff_t n)
Definition VectorIterator.h:106
VectorIterator operator--(int)
Definition VectorIterator.h:100
VectorIterator operator++(int)
Definition VectorIterator.h:89
ELT & operator*()
Definition VectorIterator.h:76
bool operator!=(const VectorIterator &iter) const
Definition VectorIterator.h:140
VectorIterator & operator++()
Definition VectorIterator.h:84
VectorIterator(const VectorIterator &source)=default
Copy constructor creates a new iterator referring to the same element of the same vector as the sourc...
VectorIterator()=delete
No default constructor.
ptrdiff_t operator-(const VectorIterator &iter) const
Definition VectorIterator.h:128
ELT & operator[](ptrdiff_t i)
Definition VectorIterator.h:80
VectorIterator operator+(ptrdiff_t n) const
Definition VectorIterator.h:134
VectorIterator(VECTOR_CLASS &vector, ptrdiff_t index)
Create an iterator for the supplied vector and set it to refer to the element at index.
Definition VectorIterator.h:62
bool operator==(const VectorIterator &iter) const
Definition VectorIterator.h:137
ELT value_type
Definition VectorIterator.h:54
bool operator>(const VectorIterator &iter) const
Definition VectorIterator.h:119
VectorIterator & operator--()
Definition VectorIterator.h:95
VectorIterator & operator-=(ptrdiff_t n)
Definition VectorIterator.h:111
ptrdiff_t difference_type
Definition VectorIterator.h:55
ELT * pointer
Definition VectorIterator.h:57
bool operator<(const VectorIterator &iter) const
Definition VectorIterator.h:116
bool operator<=(const VectorIterator &iter) const
Definition VectorIterator.h:122
bool operator>=(const VectorIterator &iter) const
Definition VectorIterator.h:125
VectorIterator & operator=(const VectorIterator &source)=default
Copy assignment makes this iterator refer to the same element of the same vector as the source iterat...
std::random_access_iterator_tag iterator_category
Definition VectorIterator.h:58
VectorIterator operator-(ptrdiff_t n) const
Definition VectorIterator.h:131
ELT & reference
Definition VectorIterator.h:56
This is the top-level SimTK namespace into which all SimTK names are placed to avoid collision with o...
Definition Assembler.h:37