Blender  V3.3
Macros | Functions
BLI_linklist.c File Reference
#include <stdlib.h>
#include "MEM_guardedalloc.h"
#include "BLI_linklist.h"
#include "BLI_memarena.h"
#include "BLI_mempool.h"
#include "BLI_utildefines.h"
#include "BLI_strict_flags.h"
#include "list_sort_impl.h"

Go to the source code of this file.

Macros

#define SORT_IMPL_LINKTYPE   LinkNode
 
#define SORT_IMPL_LINKTYPE_DATA   link
 
#define SORT_IMPL_FUNC   linklist_sort_fn
 
#define SORT_IMPL_USE_THUNK
 
#define SORT_IMPL_FUNC   linklist_sort_fn_r
 

Functions

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

Detailed Description

Routines for working with single linked lists of 'links' - pointers to other data.

For double linked lists see 'BLI_listbase.h'.

Definition in file BLI_linklist.c.

Macro Definition Documentation

◆ SORT_IMPL_FUNC [1/2]

#define SORT_IMPL_FUNC   linklist_sort_fn

Definition at line 313 of file BLI_linklist.c.

◆ SORT_IMPL_FUNC [2/2]

#define SORT_IMPL_FUNC   linklist_sort_fn_r

Definition at line 313 of file BLI_linklist.c.

◆ SORT_IMPL_LINKTYPE

#define SORT_IMPL_LINKTYPE   LinkNode

Definition at line 303 of file BLI_linklist.c.

◆ SORT_IMPL_LINKTYPE_DATA

#define SORT_IMPL_LINKTYPE_DATA   link

Definition at line 304 of file BLI_linklist.c.

◆ SORT_IMPL_USE_THUNK

#define SORT_IMPL_USE_THUNK

Definition at line 312 of file BLI_linklist.c.

Function Documentation

◆ BLI_linklist_append()

void BLI_linklist_append ( LinkNodePair list_pair,
void ptr 
)

◆ BLI_linklist_append_arena()

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

Definition at line 201 of file BLI_linklist.c.

References BLI_linklist_append_nlink(), BLI_memarena_alloc(), and ptr.

◆ BLI_linklist_append_nlink()

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

◆ BLI_linklist_append_pool()

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

Definition at line 207 of file BLI_linklist.c.

References BLI_linklist_append_nlink(), BLI_mempool_alloc(), and ptr.

◆ 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 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* BLI_linklist_pop ( struct LinkNode **  listp)

◆ BLI_linklist_pop_pool()

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

Definition at line 225 of file BLI_linklist.c.

References BLI_mempool_free(), and next.

◆ BLI_linklist_prepend()

void BLI_linklist_prepend ( LinkNode **  listp,
void ptr 
)

◆ BLI_linklist_prepend_arena()

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

Definition at line 166 of file BLI_linklist.c.

References BLI_linklist_prepend_nlink(), BLI_memarena_alloc(), and ptr.

◆ BLI_linklist_prepend_nlink()

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

◆ BLI_linklist_prepend_pool()

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

Definition at line 172 of file BLI_linklist.c.

References BLI_linklist_prepend_nlink(), BLI_mempool_alloc(), and ptr.

◆ 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.