summaryrefslogtreecommitdiffstats
path: root/src/include/usr/targeting/common/iterators
diff options
context:
space:
mode:
authorNick Bofferding <bofferdn@us.ibm.com>2013-10-11 20:39:35 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-10-14 14:18:35 -0500
commitb25e9ea38a25fa0de1339e1eeec15071ba332c04 (patch)
tree0fec60690196dbc149c72cc84913e96c749eff6d /src/include/usr/targeting/common/iterators
parentaefee3fd76899e3ef3b69a5cc9d2b02d1bd2dd08 (diff)
downloadtalos-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.H59
-rw-r--r--src/include/usr/targeting/common/iterators/targetiterator.H2
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
};
OpenPOWER on IntegriCloud