2024-09-08 21:04:31 -04:00
|
|
|
#ifndef STORM_LIST_H
|
|
|
|
|
#define STORM_LIST_H
|
|
|
|
|
|
|
|
|
|
#include "system/types.h"
|
|
|
|
|
|
|
|
|
|
// TSLink<T>
|
|
|
|
|
#define STORM_TS_LINK(T) typedef struct TSLink_##T TSLink_##T; \
|
|
|
|
|
struct TSLink_##T { \
|
|
|
|
|
TSLink_##T* m_prevlink; \
|
|
|
|
|
T* m_next; \
|
2024-09-30 17:19:28 -04:00
|
|
|
}
|
2024-09-08 21:04:31 -04:00
|
|
|
|
|
|
|
|
// TSList<T>
|
|
|
|
|
// TSExplicitList<T>
|
|
|
|
|
// TSLinkedNode<T>
|
|
|
|
|
#define STORM_TS_LIST(T) \
|
2024-09-30 17:19:28 -04:00
|
|
|
STORM_TS_LINK(T); \
|
2024-09-08 21:04:31 -04:00
|
|
|
typedef struct TSList_##T TSList_##T; \
|
|
|
|
|
typedef struct TSList_##T TSExplicitList_##T; \
|
|
|
|
|
typedef struct TSLinkedNode_##T TSLinkedNode_##T; \
|
|
|
|
|
struct TSList_##T { \
|
|
|
|
|
ptrdiff_t m_linkoffset; \
|
|
|
|
|
TSLink_##T m_terminator; \
|
|
|
|
|
}; \
|
|
|
|
|
struct TSLinkedNode_##T { \
|
|
|
|
|
TSLink_##T m_link; \
|
2024-09-30 17:19:28 -04:00
|
|
|
}; \
|
|
|
|
|
typedef TSList_##T TSExplicitList_##T
|
2024-09-08 21:04:31 -04:00
|
|
|
|
|
|
|
|
#endif
|