diff options
author | Nick Bofferding <bofferdn@us.ibm.com> | 2013-10-11 20:39:35 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-10-14 14:18:35 -0500 |
commit | b25e9ea38a25fa0de1339e1eeec15071ba332c04 (patch) | |
tree | 0fec60690196dbc149c72cc84913e96c749eff6d /src/include/usr/targeting/common/iterators | |
parent | aefee3fd76899e3ef3b69a5cc9d2b02d1bd2dd08 (diff) | |
download | talos-hostboot-b25e9ea38a25fa0de1339e1eeec15071ba332c04.tar.gz talos-hostboot-b25e9ea38a25fa0de1339e1eeec15071ba332c04.zip |
Fix multinode rawiterator and CDIMM RID numbering issue
- Fixed improper rawiterator derivation from regular iterator
- Added CDIMM RID multiplier to MRW parser
Change-Id: I37cbc939eebe52da683f5a82eff1e789653afadf
RTC: 63940
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6662
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/include/usr/targeting/common/iterators')
-rw-r--r-- | src/include/usr/targeting/common/iterators/rawtargetiterator.H | 59 | ||||
-rw-r--r-- | src/include/usr/targeting/common/iterators/targetiterator.H | 2 |
2 files changed, 57 insertions, 4 deletions
diff --git a/src/include/usr/targeting/common/iterators/rawtargetiterator.H b/src/include/usr/targeting/common/iterators/rawtargetiterator.H index f7e9f192e..67b1ce536 100644 --- a/src/include/usr/targeting/common/iterators/rawtargetiterator.H +++ b/src/include/usr/targeting/common/iterators/rawtargetiterator.H @@ -87,7 +87,7 @@ class _TargetRawIterator : public _TargetIterator<T> */ ALWAYS_INLINE _TargetRawIterator() - : iv_pCurrent(NULL) + : _TargetIterator<T>(NULL) { } @@ -99,11 +99,30 @@ class _TargetRawIterator : public _TargetIterator<T> */ ALWAYS_INLINE explicit _TargetRawIterator(T i_pTarget) - : iv_pCurrent(i_pTarget) + : _TargetIterator<T>(i_pTarget) { } /** + * @brief Pre-increment the iterator + * + * @return The reference to the same iterator after advancing it + */ + ALWAYS_INLINE + _TargetRawIterator& operator++(); + + /** + * @brief Post-increment the iterator + * + * @param[in] UNNAMED Dummy parameter used to distinguish + * this interface from pre-increment + * + * @return Copy of the original iterator before it advanced + */ + ALWAYS_INLINE + _TargetRawIterator operator++(int); + + /** * @brief Destroy an iterator to a (const/non-const) target handle * * @note Iterator does not own any resources to destroy @@ -113,6 +132,17 @@ class _TargetRawIterator : public _TargetIterator<T> { } + /** + * @brief Copy constructor; assign iterator to a new iterator (such + * that they logically point to same entity) + * + * @param[in] i_rhs The iterator to assign + */ + ALWAYS_INLINE + _TargetRawIterator(const _TargetRawIterator& i_rhs) + : _TargetIterator<T>(i_rhs) + { + } private: @@ -121,8 +151,6 @@ class _TargetRawIterator : public _TargetIterator<T> * the target service (or end() if end of list) */ void advance(); - - T iv_pCurrent; // Pointer to current target }; /** @@ -131,6 +159,29 @@ class _TargetRawIterator : public _TargetIterator<T> typedef _TargetRawIterator<Target*> TargetRawIterator; typedef _TargetRawIterator<const Target*> ConstTargetRawIterator; +//****************************************************************************** +// _TargetRawIterator::operator++ (postincrement) +//****************************************************************************** + +template<typename T> +_TargetRawIterator<T> _TargetRawIterator<T>::operator++(int) +{ + _TargetRawIterator l_originalIterator(*this); + advance(); + return l_originalIterator; +} + +//****************************************************************************** +// _TargetRawIterator::operator++ (preincrement) +//****************************************************************************** + +template<typename T> +_TargetRawIterator<T>& _TargetRawIterator<T>::operator++() +{ + advance(); + return *this; +} + #undef TARG_CLASS #undef TARG_NAMESPACE diff --git a/src/include/usr/targeting/common/iterators/targetiterator.H b/src/include/usr/targeting/common/iterators/targetiterator.H index 65e80b8b5..772a95769 100644 --- a/src/include/usr/targeting/common/iterators/targetiterator.H +++ b/src/include/usr/targeting/common/iterators/targetiterator.H @@ -241,6 +241,8 @@ class _TargetIterator */ void advance(); + protected: + T iv_pCurrent; // Pointer to current target }; |