Zycore 1.5.2.0
Loading...
Searching...
No Matches
Classes | Macros | Typedefs | Functions
List.h File Reference
#include <Zycore/Allocator.h>
#include <Zycore/Object.h>
#include <Zycore/Status.h>
#include <Zycore/Types.h>
Include dependency graph for List.h:

Go to the source code of this file.

Classes

struct  ZyanListNode_
 
struct  ZyanList_
 

Macros

#define ZYAN_LIST_INITIALIZER
 
#define ZYAN_LIST_GET(type, node)    (*(const type*)ZyanListGetNodeData(node))
 

Typedefs

typedef struct ZyanListNode_ ZyanListNode
 
typedef struct ZyanList_ ZyanList
 

Functions

ZYCORE_EXPORT ZYAN_REQUIRES_LIBC ZyanStatus ZyanListInit (ZyanList *list, ZyanUSize element_size, ZyanMemberProcedure destructor)
 
ZYCORE_EXPORT ZyanStatus ZyanListInitEx (ZyanList *list, ZyanUSize element_size, ZyanMemberProcedure destructor, ZyanAllocator *allocator)
 
ZYCORE_EXPORT ZyanStatus ZyanListInitCustomBuffer (ZyanList *list, ZyanUSize element_size, ZyanMemberProcedure destructor, void *buffer, ZyanUSize capacity)
 
ZYCORE_EXPORT ZyanStatus ZyanListDestroy (ZyanList *list)
 
ZYCORE_EXPORT ZYAN_REQUIRES_LIBC ZyanStatus ZyanListDuplicate (ZyanList *destination, const ZyanList *source)
 
ZYCORE_EXPORT ZyanStatus ZyanListDuplicateEx (ZyanList *destination, const ZyanList *source, ZyanAllocator *allocator)
 
ZYCORE_EXPORT ZyanStatus ZyanListDuplicateCustomBuffer (ZyanList *destination, const ZyanList *source, void *buffer, ZyanUSize capacity)
 
ZYCORE_EXPORT ZyanStatus ZyanListGetHeadNode (const ZyanList *list, const ZyanListNode **node)
 
ZYCORE_EXPORT ZyanStatus ZyanListGetTailNode (const ZyanList *list, const ZyanListNode **node)
 
ZYCORE_EXPORT ZyanStatus ZyanListGetPrevNode (const ZyanListNode **node)
 
ZYCORE_EXPORT ZyanStatus ZyanListGetNextNode (const ZyanListNode **node)
 
ZYCORE_EXPORT const void * ZyanListGetNodeData (const ZyanListNode *node)
 
ZYCORE_EXPORT ZyanStatus ZyanListGetNodeDataEx (const ZyanListNode *node, const void **value)
 
ZYCORE_EXPORT void * ZyanListGetNodeDataMutable (const ZyanListNode *node)
 
ZYCORE_EXPORT ZyanStatus ZyanListGetNodeDataMutableEx (const ZyanListNode *node, void **value)
 
ZYCORE_EXPORT ZyanStatus ZyanListSetNodeData (const ZyanList *list, const ZyanListNode *node, const void *value)
 
ZYCORE_EXPORT ZyanStatus ZyanListPushBack (ZyanList *list, const void *item)
 
ZYCORE_EXPORT ZyanStatus ZyanListPushFront (ZyanList *list, const void *item)
 
ZYCORE_EXPORT ZyanStatus ZyanListEmplaceBack (ZyanList *list, void **item, ZyanMemberFunction constructor)
 
ZYCORE_EXPORT ZyanStatus ZyanListEmplaceFront (ZyanList *list, void **item, ZyanMemberFunction constructor)
 
ZYCORE_EXPORT ZyanStatus ZyanListPopBack (ZyanList *list)
 
ZYCORE_EXPORT ZyanStatus ZyanListPopFront (ZyanList *list)
 
ZYCORE_EXPORT ZyanStatus ZyanListRemove (ZyanList *list, const ZyanListNode *node)
 
ZYCORE_EXPORT ZyanStatus ZyanListRemoveRange (ZyanList *list, const ZyanListNode *first, const ZyanListNode *last)
 
ZYCORE_EXPORT ZyanStatus ZyanListClear (ZyanList *list)
 
ZYCORE_EXPORT ZyanStatus ZyanListResize (ZyanList *list, ZyanUSize size)
 
ZYCORE_EXPORT ZyanStatus ZyanListResizeEx (ZyanList *list, ZyanUSize size, const void *initializer)
 
ZYCORE_EXPORT ZyanStatus ZyanListGetSize (const ZyanList *list, ZyanUSize *size)
 

Detailed Description

Implements a doubly linked list.

Macro Definition Documentation

◆ ZYAN_LIST_GET

#define ZYAN_LIST_GET (   type,
  node 
)     (*(const type*)ZyanListGetNodeData(node))

Returns the data value of the given node.

Parameters
typeThe desired value type.
nodeA pointer to the ZyanListNode struct.
Returns
The data value of the given node.

Note that this function is unsafe and might dereference a null-pointer.

◆ ZYAN_LIST_INITIALIZER

#define ZYAN_LIST_INITIALIZER
Value:
{ \
/* allocator */ ZYAN_NULL, \
/* size */ 0, \
/* element_size */ 0, \
/* head */ ZYAN_NULL, \
/* destructor */ ZYAN_NULL, \
/* tail */ ZYAN_NULL, \
/* buffer */ ZYAN_NULL, \
/* capacity */ 0, \
/* first_unused */ ZYAN_NULL \
}

Defines an uninitialized ZyanList instance.

Typedef Documentation

◆ ZyanList

typedef struct ZyanList_ ZyanList

Defines the ZyanList struct.

All fields in this struct should be considered as "private". Any changes may lead to unexpected behavior.

◆ ZyanListNode

typedef struct ZyanListNode_ ZyanListNode

Defines the ZyanListNode struct.

All fields in this struct should be considered as "private". Any changes may lead to unexpected behavior.

Function Documentation

◆ ZyanListClear()

ZYCORE_EXPORT ZyanStatus ZyanListClear ( ZyanList list)

Erases all elements of the list.

Parameters
listA pointer to the ZyanList instance.
Returns
A zyan status code.

◆ ZyanListDestroy()

ZYCORE_EXPORT ZyanStatus ZyanListDestroy ( ZyanList list)

Destroys the given ZyanList instance.

Parameters
listA pointer to the ZyanList instance.
Returns
A zyan status code.

◆ ZyanListDuplicate()

ZYCORE_EXPORT ZYAN_REQUIRES_LIBC ZyanStatus ZyanListDuplicate ( ZyanList destination,
const ZyanList source 
)

Initializes a new ZyanList instance by duplicating an existing list.

Parameters
destinationA pointer to the (uninitialized) destination ZyanList instance.
sourceA pointer to the source list.
Returns
A zyan status code.

The memory for the list is dynamically allocated by the default allocator.

Finalization with ZyanListDestroy is required for all instances created by this function.

◆ ZyanListDuplicateCustomBuffer()

ZYCORE_EXPORT ZyanStatus ZyanListDuplicateCustomBuffer ( ZyanList destination,
const ZyanList source,
void *  buffer,
ZyanUSize  capacity 
)

Initializes a new ZyanList instance by duplicating an existing list and configures it to use a custom user defined buffer with a fixed size.

Parameters
destinationA pointer to the (uninitialized) destination ZyanList instance.
sourceA pointer to the source list.
bufferA pointer to the buffer that is used as storage for the elements.
capacityThe maximum capacity (number of bytes) of the buffer including the space required for the list-nodes.

This function will fail, if the capacity of the buffer is not sufficient to store all elements of the source list.

Returns
A zyan status code.

The buffer capacity required to store n elements of type T is be calculated by: size = n * sizeof(ZyanListNode) + n * sizeof(T)

Finalization is not required for instances created by this function.

◆ ZyanListDuplicateEx()

ZYCORE_EXPORT ZyanStatus ZyanListDuplicateEx ( Zya