#include <b2IntrusiveList.h>
Public Member Functions | |
| b2IntrusiveListNode () | |
| Initialize the node. | |
| ~b2IntrusiveListNode () | |
| If the node is in a list, remove it from the list. | |
| void | InsertAfter (b2IntrusiveListNode *const node) |
| Insert this node after the specified node. | |
| void | InsertBefore (b2IntrusiveListNode *const node) |
| Insert this node before the specified node. | |
| const b2IntrusiveListNode * | GetTerminator () const |
| Get the terminator of the list. | |
| b2IntrusiveListNode * | Remove () |
| Remove this node from the list it's currently in. | |
| bool | IsEmpty () const |
| Determine whether this list is empty or the node isn't in a list. | |
| bool | InList () const |
| Determine whether this node is in a list or the list contains nodes. | |
| uint32 | GetLength () const |
| Calculate the length of the list. | |
| b2IntrusiveListNode * | GetNext () const |
| Get the next node in the list. | |
| b2IntrusiveListNode * | GetPrevious () const |
| Get the previous node in the list. | |
| bool | ValidateList () const |
| bool | FindNodeInList (b2IntrusiveListNode *const nodeToFind) const |
| Determine whether the specified node is present in this list. | |
b2IntrusiveListNode is used to implement an intrusive doubly-linked list.
For example:
class MyClass { public: MyClass(const char <em>msg) : m_msg(msg) {} const char GetMessage() const { return m_msg; } B2_INTRUSIVE_LIST_GET_NODE(m_node); B2_INTRUSIVE_LIST_NODE_GET_CLASS(MyClass, m_node); private: b2IntrusiveListNode m_node; const char *m_msg; };
int main(int argc, char <em>argv[]) { b2IntrusiveListNode list; // NOTE: type is NOT MyClass MyClass a("this"); MyClass b("is"); MyClass c("a"); MyClass d("test"); list.InsertBefore(a.GetListNode()); list.InsertBefore(b.GetListNode()); list.InsertBefore(c.GetListNode()); list.InsertBefore(d.GetListNode()); for (b2IntrusiveListNode node = list.GetNext(); node != list.GetTerminator(); node = node->GetNext()) { MyClass *cls = MyClass::GetInstanceFromListNode(node); printf("%s\n", cls->GetMessage()); } return 0; }
|
inline |
If B2_INTRUSIVE_LIST_VALIDATE is 1 perform a very rough validation of all nodes in the list.