Blender V4.3
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, const 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)
 
void * BLI_linklist_pop (LinkNode **listp)
 
void * BLI_linklist_pop_pool (LinkNode **listp, 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, 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 308 of file BLI_linklist.c.

◆ SORT_IMPL_FUNC [2/2]

#define SORT_IMPL_FUNC   linklist_sort_fn_r

Definition at line 308 of file BLI_linklist.c.

◆ SORT_IMPL_LINKTYPE

#define SORT_IMPL_LINKTYPE   LinkNode

Definition at line 304 of file BLI_linklist.c.

◆ SORT_IMPL_LINKTYPE_DATA

#define SORT_IMPL_LINKTYPE_DATA   link

Definition at line 305 of file BLI_linklist.c.

◆ SORT_IMPL_USE_THUNK

#define SORT_IMPL_USE_THUNK

Definition at line 313 of file BLI_linklist.c.

Referenced by list_sort_do().

Function Documentation

◆ BLI_linklist_append()

◆ BLI_linklist_append_arena()

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

Definition at line 202 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 208 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 295 of file BLI_linklist.c.

◆ BLI_linklist_count()

int BLI_linklist_count ( const LinkNode * list)

Definition at line 24 of file BLI_linklist.c.

References len.

Referenced by bm_uidwalk_pass_add(), collada_export(), and filelist_readjob_list_lib().

◆ BLI_linklist_find()

LinkNode * BLI_linklist_find ( LinkNode * list,
int index )

Definition at line 48 of file BLI_linklist.c.

References NULL.

◆ BLI_linklist_find_last()

LinkNode * BLI_linklist_find_last ( LinkNode * list)

Definition at line 61 of file BLI_linklist.c.

References LinkNode::next.

◆ BLI_linklist_free()

◆ BLI_linklist_free_pool()

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

◆ BLI_linklist_freeN()

◆ BLI_linklist_index()

◆ BLI_linklist_insert_after()

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

Definition at line 238 of file BLI_linklist.c.

References LinkNode::link, MEM_mallocN, LinkNode::next, 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 87 of file BLI_linklist.c.

References LinkNode::next, and NULL.

Referenced by bookmark_move_exec().

◆ BLI_linklist_pop()

void * BLI_linklist_pop ( LinkNode ** listp)

◆ BLI_linklist_pop_pool()

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

Definition at line 226 of file BLI_linklist.c.

References BLI_mempool_free(), LinkNode::link, and next.

◆ BLI_linklist_prepend()

◆ BLI_linklist_prepend_arena()

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

Definition at line 167 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 173 of file BLI_linklist.c.

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

◆ BLI_linklist_reverse()

void BLI_linklist_reverse ( LinkNode ** listp)

◆ BLI_linklist_sort()

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

Definition at line 322 of file BLI_linklist.c.

Referenced by bm_mesh_loops_calc_normals_for_vert_with_clnors().

◆ BLI_linklist_sort_r()

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

Definition at line 330 of file BLI_linklist.c.