API
4.5
For C++ developers
|
Class used to iterate over subcomponents of a specific type (by default, any Component). More...
Public Member Functions | |
template<typename OtherT > | |
bool | operator== (const ComponentListIterator< OtherT > &other) const |
Check that the component under the current iterator is the same (has same address) as the right-hand iterator. More... | |
template<typename OtherT > | |
bool | operator!= (const ComponentListIterator< OtherT > &other) const |
Check for inequality using same convention as operator==. More... | |
T & | operator* () const |
Dereference the iterator to get a reference to Component of proper type (matching Filter if specified). More... | |
T & | deref () const |
T * | operator-> () const |
Another dereferencing operator that returns a pointer. More... | |
ComponentListIterator & | operator++ () |
Prefix increment operator to get the next item in the ComponentList. More... | |
ComponentListIterator | operator++ (int) |
Postfix increment operator to get the next item in the ComponentList. More... | |
ComponentListIterator & | next () |
Method equivalent to pre-increment operator for operator-deficient languages. More... | |
template<typename FromT > | |
ComponentListIterator (const ComponentListIterator< FromT > &source, typename std::enable_if< std::is_convertible< FromT *, T *>::value >::type *=0) | |
Allow converting from non-const iterator to const_iterator. More... | |
bool | equals (const ComponentListIterator &other) const |
@ Comparison operators for scripting These variants accept only an iterator with the same template parameter. More... | |
bool | operator== (const ComponentListIterator &other) const |
bool | operator!= (const ComponentListIterator &other) const |
Friends | |
class | ComponentList< T > |
class | ComponentList< NonConstT > |
class | ComponentListIterator< ConstT > |
class | ComponentListIterator< NonConstT > |
Class used to iterate over subcomponents of a specific type (by default, any Component).
This iterator is can either be a const_iterator or non-const iterator, depending on how you got it. If this is a const_iterator, it returns only a const reference to a component. If this is a non-const iterator, then it returns a non-const reference to a component, and thus you can modify the component.
If you got this iterator from something like a ComponentList<const Body>, then it is necessarily a const_iterator. If you got this iterator from something like ComponentList<Body>, then this may be either a const_iterator (e.g., from ComponentList<Body>::cbegin()) or non-const iterator (e.g., from ComponentList<Body>::begin()).
If you have a non-const iterator, you should not add (sub)components to any components.
This iterator works only in the forward direction (not bidirectional).
Here is an example of using this iterator with a range for loop (const_iterator):
Here is a similar example, but where you can modify the components:
|
inline |
Allow converting from non-const iterator to const_iterator.
This helps with iterating through the list in a const way, even if you have a non-const list. This allows the following code:
This constructor does not allow converting from a const_iterator to a non-const iterator (through the enable_if).
|
inline |
|
inline |
@ Comparison operators for scripting These variants accept only an iterator with the same template parameter.
Check for (non)equality using a normal method rather than an operator.
|
inline |
Method equivalent to pre-increment operator for operator-deficient languages.
Referenced by OpenSim::ComponentListIterator< T >::operator++().
|
inline |
Check for inequality using same convention as operator==.
|
inline |
|
inline |
Dereference the iterator to get a reference to Component of proper type (matching Filter if specified).
If you have a const iterator, then this returns a const reference; otherwise, this returns a non-const reference.
References OpenSim::ComponentListIterator< T >::operator->().
ComponentListIterator< T > & OpenSim::ComponentListIterator< T >::operator++ | ( | ) |
Prefix increment operator to get the next item in the ComponentList.
ComponentListIterator<T> pre-increment operator, advances the iterator to the next valid entry.
Prefer to use ++iter and not iter++.
|
inline |
Postfix increment operator to get the next item in the ComponentList.
To enable usage as iter++, although ++iter is more efficient.
References OpenSim::ComponentListIterator< T >::next().
|
inline |
Another dereferencing operator that returns a pointer.
Referenced by OpenSim::ComponentListIterator< T >::deref(), and OpenSim::ComponentListIterator< T >::operator*().
|
inline |
Check that the component under the current iterator is the same (has same address) as the right-hand iterator.
|
inline |
|
friend |
This is required to allow ComponentList<non-const T>::begin() to construct a ComponentListIterator<const T>
(that is, const_iterator).
|
friend |
Allow ComponentList to use the private constructor of this class.
|
friend |
ComponentListIterator<const T> needs access to the members of ComponentListIterator<T> for the templated constructor above.
|
friend |
Comparison operators for ComponentListIterator<T> need access to members of ComponentListIterator<const T> (e.g., when invoking operator==() with a ComponentListIterator<T> as the left operand and a ComponentListIterator<const T> as the right operand).