32 #ifndef CFDP_CLIST_HPP 33 #define CFDP_CLIST_HPP 78 template <
typename Container,
typename Member>
79 constexpr Container*
container_of_cpp(Member* member_ptr, Member Container::* member) {
81 return reinterpret_cast<Container*
>(
reinterpret_cast<U8*
>(member_ptr) -
82 reinterpret_cast<std::ptrdiff_t>(&(reinterpret_cast<Container*>(0)->*member)));
struct CListNode * prev
Pointer to previous node.
CListTraverseStatus
Traverse status for circular list operations.
void CfdpCListInsertAfter(CListNode **head, CListNode *start, CListNode *after)
Insert the given node into the last after the given start node.
constexpr U8 CFDP_CLIST_EXIT
Constant indicating to stop traversal.
Continue traversing the list.
CListTraverseStatus(*)(CListNode *, void *) CListTraverseCallback
Callback type for list traversal.
struct CListNode * next
Pointer to next node.
Stop traversing the list.
void CfdpCListInsertFront(CListNode **head, CListNode *node)
Insert the given node into the front of a list.
CListTraverseStatus(*)(CListNode *, void *) CListFunc
Callback function type for use with CfdpCListTraverse()
void CfdpCListTraverse(CListNode *start, CListFunc fn, void *context)
Traverse the entire list, calling the given function on all nodes.
CListNode * CfdpCListPop(CListNode **head)
Remove the first node from a list and return it.
void CfdpCListInsertBack(CListNode **head, CListNode *node)
Insert the given node into the back of a list.
uint8_t U8
8-bit unsigned integer
constexpr U8 CFDP_CLIST_CONT
Constant indicating to continue traversal.
static bool CfdpCListTraverseStatusIsContinue(CListTraverseStatus stat)
constexpr Container * container_of_cpp(Member *member_ptr, Member Container::*member)
Obtains a pointer to the parent structure.
void CfdpCListRemove(CListNode **head, CListNode *node)
Remove the given node from the list.
C++ header for working with basic fprime types.
Circular linked list node structure.
RateGroupDivider component implementation.
void CfdpCListTraverseR(CListNode *end, CListFunc fn, void *context)
Reverse list traversal, starting from end, calling given function on all nodes.
void CfdpCListInitNode(CListNode *node)
Initialize a clist node.