summaryrefslogtreecommitdiff
path: root/include/iprt/list.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/iprt/list.h')
-rw-r--r--include/iprt/list.h47
1 files changed, 46 insertions, 1 deletions
diff --git a/include/iprt/list.h b/include/iprt/list.h
index 1a4a4bc0..929b3180 100644
--- a/include/iprt/list.h
+++ b/include/iprt/list.h
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2010-2011 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -183,6 +183,9 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
*/
#define RTListNodeIsDummy(pList, pNode, Type, Member) \
( (pNode) == RT_FROM_MEMBER((pList), Type, Member) )
+/** @copydoc RTListNodeIsDummy */
+#define RTListNodeIsDummyCpp(pList, pNode, Type, Member) \
+ ( (pNode) == RT_FROM_CPP_MEMBER((pList), Type, Member) )
/**
* Checks if a list is empty.
@@ -205,6 +208,9 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
*/
#define RTListNodeGetNext(pCurNode, Type, Member) \
RT_FROM_MEMBER((pCurNode)->pNext, Type, Member)
+/** @copydoc RTListNodeGetNext */
+#define RTListNodeGetNextCpp(pCurNode, Type, Member) \
+ RT_FROM_CPP_MEMBER((pCurNode)->pNext, Type, Member)
/**
* Returns the previous node in the list.
@@ -217,6 +223,9 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
*/
#define RTListNodeGetPrev(pCurNode, Type, Member) \
RT_FROM_MEMBER((pCurNode)->pPrev, Type, Member)
+/** @copydoc RTListNodeGetPrev */
+#define RTListNodeGetPrevCpp(pCurNode, Type, Member) \
+ RT_FROM_CPP_MEMBER((pCurNode)->pPrev, Type, Member)
/**
* Returns the first element in the list (checks for empty list).
@@ -230,6 +239,9 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
*/
#define RTListGetFirst(pList, Type, Member) \
(!RTListIsEmpty(pList) ? RTListNodeGetNext(pList, Type, Member) : NULL)
+/** @copydoc RTListGetFirst */
+#define RTListGetFirstCpp(pList, Type, Member) \
+ (!RTListIsEmpty(pList) ? RTListNodeGetNextCpp(pList, Type, Member) : NULL)
/**
* Returns the last element in the list (checks for empty list).
@@ -243,6 +255,9 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
*/
#define RTListGetLast(pList, Type, Member) \
(!RTListIsEmpty(pList) ? RTListNodeGetPrev(pList, Type, Member) : NULL)
+/** @copydoc RTListGetLast */
+#define RTListGetLastCpp(pList, Type, Member) \
+ (!RTListIsEmpty(pList) ? RTListNodeGetPrevCpp(pList, Type, Member) : NULL)
/**
* Returns the next node in the list or NULL if the end has been reached.
@@ -256,6 +271,9 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
*/
#define RTListGetNext(pList, pCurNode, Type, Member) \
( (pCurNode)->Member.pNext != (pList) ? RT_FROM_MEMBER((pCurNode)->Member.pNext, Type, Member) : NULL )
+/** @copydoc RTListGetNext */
+#define RTListGetNextCpp(pList, pCurNode, Type, Member) \
+ ( (pCurNode)->Member.pNext != (pList) ? RT_FROM_CPP_MEMBER((pCurNode)->Member.pNext, Type, Member) : NULL )
/**
* Returns the previous node in the list or NULL if the start has been reached.
@@ -269,6 +287,9 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
*/
#define RTListGetPrev(pList, pCurNode, Type, Member) \
( (pCurNode)->Member.pPrev != (pList) ? RT_FROM_MEMBER((pCurNode)->Member.pPrev, Type, Member) : NULL )
+/** @copydoc RTListGetPrev */
+#define RTListGetPrevCpp(pList, pCurNode, Type, Member) \
+ ( (pCurNode)->Member.pPrev != (pList) ? RT_FROM_CPP_MEMBER((pCurNode)->Member.pPrev, Type, Member) : NULL )
/**
* Enumerate the list in head to tail order.
@@ -282,6 +303,11 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
for (pIterator = RTListNodeGetNext(pList, Type, Member); \
!RTListNodeIsDummy(pList, pIterator, Type, Member); \
pIterator = RT_FROM_MEMBER((pIterator)->Member.pNext, Type, Member) )
+/** @copydoc RTListForEach */
+#define RTListForEachCpp(pList, pIterator, Type, Member) \
+ for (pIterator = RTListNodeGetNextCpp(pList, Type, Member); \
+ !RTListNodeIsDummyCpp(pList, pIterator, Type, Member); \
+ pIterator = RT_FROM_CPP_MEMBER((pIterator)->Member.pNext, Type, Member) )
/**
@@ -301,6 +327,13 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
!RTListNodeIsDummy(pList, pIterator, Type, Member); \
pIterator = pIterNext, \
pIterNext = RT_FROM_MEMBER((pIterator)->Member.pNext, Type, Member) )
+/** @copydoc RTListForEachSafe */
+#define RTListForEachSafeCpp(pList, pIterator, pIterNext, Type, Member) \
+ for (pIterator = RTListNodeGetNextCpp(pList, Type, Member), \
+ pIterNext = RT_FROM_CPP_MEMBER((pIterator)->Member.pNext, Type, Member); \
+ !RTListNodeIsDummyCpp(pList, pIterator, Type, Member); \
+ pIterator = pIterNext, \
+ pIterNext = RT_FROM_CPP_MEMBER((pIterator)->Member.pNext, Type, Member) )
/**
@@ -315,6 +348,11 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
for (pIterator = RTListNodeGetPrev(pList, Type, Member); \
!RTListNodeIsDummy(pList, pIterator, Type, Member); \
pIterator = RT_FROM_MEMBER((pIterator)->Member.pPrev, Type, Member) )
+/** @copydoc RTListForEachReverse */
+#define RTListForEachReverseCpp(pList, pIterator, Type, Member) \
+ for (pIterator = RTListNodeGetPrevCpp(pList, Type, Member); \
+ !RTListNodeIsDummyCpp(pList, pIterator, Type, Member); \
+ pIterator = RT_FROM_CPP_MEMBER((pIterator)->Member.pPrev, Type, Member) )
/**
@@ -333,6 +371,13 @@ DECLINLINE(void) RTListNodeRemove(PRTLISTNODE pNode)
!RTListNodeIsDummy(pList, pIterator, Type, Member); \
pIterator = pIterPrev, \
pIterPrev = RT_FROM_MEMBER((pIterator)->Member.pPrev, Type, Member) )
+/** @copydoc RTListForEachReverseSafe */
+#define RTListForEachReverseSafeCpp(pList, pIterator, pIterPrev, Type, Member) \
+ for (pIterator = RTListNodeGetPrevCpp(pList, Type, Member), \
+ pIterPrev = RT_FROM_CPP_MEMBER((pIterator)->Member.pPrev, Type, Member); \
+ !RTListNodeIsDummyCpp(pList, pIterator, Type, Member); \
+ pIterator = pIterPrev, \
+ pIterPrev = RT_FROM_CPP_MEMBER((pIterator)->Member.pPrev, Type, Member) )
/**