Blender  V3.3
Classes | Macros | Typedefs | Functions
BLI_linklist.h File Reference
#include "BLI_compiler_attrs.h"

Go to the source code of this file.

Classes

struct  LinkNode
 
struct  LinkNodePair
 

Macros

#define BLI_linklist_prepend_alloca(listp, ptr)    BLI_linklist_prepend_nlink(listp, ptr, alloca(sizeof(LinkNode)))
 
#define BLI_linklist_append_alloca(list_pair, ptr)    BLI_linklist_append_nlink(list_pair, ptr, alloca(sizeof(LinkNode)))
 

Typedefs

typedef void(* LinkNodeFreeFP) (void *link)
 
typedef void(* LinkNodeApplyFP) (void *link, void *userdata)
 
typedef struct LinkNode LinkNode
 
typedef struct LinkNodePair LinkNodePair
 

Functions

int BLI_linklist_count (const LinkNode *list) ATTR_WARN_UNUSED_RESULT
 
int BLI_linklist_index (const LinkNode *list, void *ptr) ATTR_WARN_UNUSED_RESULT
 
LinkNodeBLI_linklist_find (LinkNode *list, int index) ATTR_WARN_UNUSED_RESULT
 
LinkNodeBLI_linklist_find_last (LinkNode *list) ATTR_WARN_UNUSED_RESULT
 
void BLI_linklist_reverse (LinkNode **listp) ATTR_NONNULL(1)
 
void BLI_linklist_move_item (LinkNode **listp, int curr_index, int new_index) ATTR_NONNULL(1)
 
void BLI_linklist_prepend_nlink (LinkNode **listp, void *ptr, LinkNode *nlink) ATTR_NONNULL(1
 
void void BLI_linklist_prepend (LinkNode **listp, void *ptr) ATTR_NONNULL(1)
 
void BLI_linklist_prepend_arena (LinkNode **listp, void *ptr, struct MemArena *ma) ATTR_NONNULL(1
 
void void BLI_linklist_prepend_pool (LinkNode **listp, void *ptr, struct BLI_mempool *mempool) ATTR_NONNULL(1
 
void void void BLI_linklist_append_nlink (LinkNodePair *list_pair, void *ptr, LinkNode *nlink) ATTR_NONNULL(1
 
void void void void BLI_linklist_append (LinkNodePair *list_pair, void *ptr) ATTR_NONNULL(1)
 
void BLI_linklist_append_arena (LinkNodePair *list_pair, void *ptr, struct MemArena *ma) ATTR_NONNULL(1
 
void void BLI_linklist_append_pool (LinkNodePair *list_pair, void *ptr, struct BLI_mempool *mempool) ATTR_NONNULL(1
 
void void voidBLI_linklist_pop (LinkNode **listp) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
 
voidBLI_linklist_pop_pool (LinkNode **listp, struct BLI_mempool *mempool) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
 
void void BLI_linklist_insert_after (LinkNode **listp, void *ptr) ATTR_NONNULL(1)
 
void BLI_linklist_free (LinkNode *list, LinkNodeFreeFP freefunc)
 
void BLI_linklist_freeN (LinkNode *list)
 
void BLI_linklist_free_pool (LinkNode *list, LinkNodeFreeFP freefunc, struct BLI_mempool *mempool)
 
void BLI_linklist_apply (LinkNode *list, LinkNodeApplyFP applyfunc, void *userdata)
 
LinkNodeBLI_linklist_sort (LinkNode *list, int(*cmp)(const void *, const void *)) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
 
LinkNodeBLI_linklist_sort_r (LinkNode *list, int(*cmp)(void *, const void *, const void *), void *thunk) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
 

Macro Definition Documentation

◆ BLI_linklist_append_alloca

#define BLI_linklist_append_alloca (   list_pair,
  ptr 
)     BLI_linklist_append_nlink(list_pair, ptr, alloca(sizeof(LinkNode)))

Definition at line 92 of file BLI_linklist.h.

◆ BLI_linklist_prepend_alloca

#define BLI_linklist_prepend_alloca (   listp,
  ptr 
)     BLI_linklist_prepend_nlink(listp, ptr, alloca(sizeof(LinkNode)))

Definition at line 90 of file BLI_linklist.h.

Typedef Documentation

◆ LinkNode

typedef struct LinkNode LinkNode

◆ LinkNodeApplyFP

typedef void(* LinkNodeApplyFP) (void *link, void *userdata)

Definition at line 20 of file BLI_linklist.h.

◆ LinkNodeFreeFP

typedef void(* LinkNodeFreeFP) (void *link)

Definition at line 19 of file BLI_linklist.h.

◆ LinkNodePair

typedef struct LinkNodePair LinkNodePair

Use for append (single linked list, storing the last element).

Note
list manipulation functions don't operate on this struct. This is only to be used while appending.

Function Documentation

◆ BLI_linklist_append()

void void void void BLI_linklist_append ( LinkNodePair list_pair,
void ptr 
)

◆ BLI_linklist_append_arena()

void BLI_linklist_append_arena ( LinkNodePair list_pair,
void ptr,
struct MemArena ma 
)

◆ BLI_linklist_append_nlink()

void void void BLI_linklist_append_nlink ( LinkNodePair list_pair,
void ptr,
LinkNode nlink 
)

A version of append that takes the allocated link.

◆ BLI_linklist_append_pool()

void void BLI_linklist_append_pool ( LinkNodePair list_pair,
void ptr,
struct BLI_mempool mempool 
)

◆ BLI_linklist_apply()

void BLI_linklist_apply ( LinkNode list,
LinkNodeApplyFP  applyfunc,
void userdata 
)

Definition at line 294 of file BLI_linklist.c.

References LinkNode::link, and LinkNode::next.

◆ BLI_linklist_count()

int BLI_linklist_count ( const LinkNode list)

◆ BLI_linklist_find()

LinkNode* BLI_linklist_find ( LinkNode list,
int  index 
)

Definition at line 47 of file BLI_linklist.c.

References LinkNode::next, and NULL.

Referenced by BKE_blendfile_link_append_context_item_idtypes_from_library_add().

◆ BLI_linklist_find_last()

LinkNode* BLI_linklist_find_last ( LinkNode list)

Definition at line 60 of file BLI_linklist.c.

References LinkNode::next.

◆ BLI_linklist_free()

void BLI_linklist_free ( LinkNode list,
LinkNodeFreeFP  freefunc 
)

◆ BLI_linklist_free_pool()

void BLI_linklist_free_pool ( LinkNode list,
LinkNodeFreeFP  freefunc,
struct BLI_mempool mempool 
)

◆ BLI_linklist_freeN()

void BLI_linklist_freeN ( LinkNode list)

◆ BLI_linklist_index()

int BLI_linklist_index ( const LinkNode list,
void ptr 
)

◆ BLI_linklist_insert_after()

void void BLI_linklist_insert_after ( LinkNode **  listp,
void ptr 
)

Definition at line 237 of file BLI_linklist.c.

References LinkNode::link, MEM_mallocN, LinkNode::next, node, NULL, and ptr.

◆ BLI_linklist_move_item()

void BLI_linklist_move_item ( LinkNode **  listp,
int  curr_index,
int  new_index 
)

Move an item from its current position to a new one inside a single-linked list.

Note
*listp may be modified.

Definition at line 86 of file BLI_linklist.c.

References LinkNode::next, and NULL.

Referenced by bookmark_move_exec().

◆ BLI_linklist_pop()

void void void* BLI_linklist_pop ( LinkNode **  listp)

◆ BLI_linklist_pop_pool()

void* BLI_linklist_pop_pool ( LinkNode **  listp,
struct BLI_mempool mempool 
)

◆ BLI_linklist_prepend()

void void BLI_linklist_prepend ( LinkNode **  listp,
void ptr 
)

◆ BLI_linklist_prepend_arena()

void BLI_linklist_prepend_arena ( LinkNode **  listp,
void ptr,
struct MemArena ma 
)

◆ BLI_linklist_prepend_nlink()

void BLI_linklist_prepend_nlink ( LinkNode **  listp,
void ptr,
LinkNode nlink 
)

◆ BLI_linklist_prepend_pool()

void void BLI_linklist_prepend_pool ( LinkNode **  listp,
void ptr,
struct BLI_mempool mempool 
)

◆ BLI_linklist_reverse()

void BLI_linklist_reverse ( LinkNode **  listp)

Definition at line 70 of file BLI_linklist.c.

References next, and NULL.

Referenced by BKE_modifier_calc_data_masks(), bm_edgenet_path_calc(), and DRW_pass_sort_shgroup_reverse().

◆ BLI_linklist_sort()

LinkNode* BLI_linklist_sort ( LinkNode list,
int(*)(const void *, const void *)  cmp 
)

Definition at line 321 of file BLI_linklist.c.

References LinkNode::next.

Referenced by bm_mesh_loops_calc_normals_for_vert_with_clnors().

◆ BLI_linklist_sort_r()

LinkNode* BLI_linklist_sort_r ( LinkNode list,
int(*)(void *, const void *, const void *)  cmp,
void thunk 
)

Definition at line 329 of file BLI_linklist.c.

References LinkNode::next.