2026-05-10 00:00:31 -04:00
# ifndef _AKSTDLIB_H_
# define _AKSTDLIB_H_
# include <akerror.h>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
2026-06-02 17:11:38 -04:00
# include <stdint.h>
2026-05-10 00:00:31 -04:00
2026-06-02 12:42:21 -04:00
typedef struct aksl_ListNode {
void * data ;
struct aksl_ListNode * next ;
struct aksl_ListNode * prev ;
} aksl_ListNode ;
typedef struct aksl_TreeNode {
struct aksl_TreeNode * parent ;
struct aksl_TreeNode * left ;
struct aksl_TreeNode * right ;
void * leaf ;
} aksl_TreeNode ;
# define AKSL_TREE_SEARCH_BFS 0 /** Breadth-first search mode for tree nodes. Currently unsupported. */
# define AKSL_TREE_SEARCH_BFS_RIGHT 1 /** Right-hand breadth-first search mode for tree nodes. Currentl unsupported. */
# define AKSL_TREE_SEARCH_DFS 2 /** Alias for AKSL_TREE_SEARCH_DFS_PREORDER */
# define AKSL_TREE_SEARCH_DFS_PREORDER 2 /** Depth first pre-order (root, left, right) search mode for tree nodes */
# define AKSL_TREE_SEARCH_DFS_INORDER 3 /** Depth first in-order (left, root, right) search mode for tree nodes. Currently unsupported. */
# define AKSL_TREE_SEARCH_DFS_POSTORDER 4 /** Depth first post-order (left, right, root) search mode for tree nodes. Currently unsupported. */
# define AKSL_TREE_SEARCH_VISIT 5 /** Used when iterating through a tree structure as a control flag: don't traverse the children, just visit the node */
typedef akerr_ErrorContext AKERR_NOIGNORE * ( * aksl_ListNodeIterator ) ( aksl_ListNode * node , void * data ) ;
typedef akerr_ErrorContext AKERR_NOIGNORE * ( * aksl_TreeNodeIterator ) ( aksl_TreeNode * node , void * data ) ;
typedef akerr_ErrorContext AKERR_NOIGNORE * ( * aksl_AllocFunc ) ( size_t size , void * * dest ) ;
typedef akerr_ErrorContext AKERR_NOIGNORE * ( * aksl_FreeFunc ) ( void * ptr ) ;
2026-05-10 00:00:31 -04:00
akerr_ErrorContext AKERR_NOIGNORE * aksl_fopen ( char * pathname , char * mode , FILE * * fp ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_fread ( void * ptr , size_t size , size_t nmemb , FILE * stream ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_fwrite ( void * ptr , size_t size , size_t nmemb , FILE * fp ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_fclose ( FILE * stream ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_malloc ( size_t size , void * * dst ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_memset ( void * s , int c , size_t n ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_memcpy ( void * d , void * s , size_t n ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_free ( void * ptr ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_printf ( int * count , const char * restrict format , . . . ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_fprintf ( int * count , FILE * restrict stream , const char * restrict format , . . . ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_sprintf ( int * count , char * restrict str , const char * restrict format , . . . ) ;
2026-05-24 09:52:24 -04:00
akerr_ErrorContext AKERR_NOIGNORE * aksl_atoi ( const char * nptr , int * dest ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_atol ( const char * nptr , long * dest ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_atoll ( const char * nptr , long long * dest ) ;
2026-05-25 21:29:46 -04:00
akerr_ErrorContext AKERR_NOIGNORE * aksl_atof ( const char * nptr , double * dest ) ;
2026-05-24 09:52:24 -04:00
akerr_ErrorContext AKERR_NOIGNORE * aksl_realpath ( const char * restrict path , char * restrict resolved_path ) ;
2026-05-10 00:00:31 -04:00
2026-06-02 17:11:38 -04:00
akerr_ErrorContext AKERR_NOIGNORE * aksl_strhash_djb2 ( char * str , size_t len , uint32_t * hashval ) ;
2026-06-02 12:42:21 -04:00
// Linked list functions
akerr_ErrorContext AKERR_NOIGNORE * aksl_list_push ( aksl_ListNode * list , aksl_ListNode * obj ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_list_pop ( aksl_ListNode * node ) ;
akerr_ErrorContext AKERR_NOIGNORE * aksl_list_iterate ( aksl_ListNode * list , aksl_ListNodeIterator iter , void * data ) ;
// Tree functions
akerr_ErrorContext AKERR_NOIGNORE * aksl_tree_iterate ( aksl_TreeNode * root , aksl_TreeNodeIterator iter , aksl_AllocFunc lalloc , aksl_FreeFunc lfree , uint8_t searchmode , void * data , aksl_ListNode * queue ) ;
2026-05-10 00:00:31 -04:00
# endif