1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
/*
* ara.h
* Copyright 2022 EPIC Software Labs
*/
#ifndef __ara_h__
#define __ara_h__
#include "irc.h"
#include "ircaux.h"
typedef union AraItem
{
void * d;
void (*f)(void);
} AraItem;
typedef struct AraStru
{
AraItem *list; /* A bunch of pointers to things */
size_t size; /* How big 'list' is (size >= max) */
int type; /* Whether this is a data ara or func ara */
} ara;
#define ARA_TYPE_DATA 1
#define ARA_TYPE_FUNC 2
void init_ara (ara *a, int ara_type, size_t maximum_location);
void ara_set_item (ara *a, int location, AraItem data, int *errocode);
AraItem ara_get_item (ara *a, int location, int *errcode);
AraItem ara_update_item (ara *a, int location, AraItem data, int *errcode);
AraItem ara_remove_item (ara *a, int location, int *errcode);
int traverse_all_ara_items (ara *a, int *location);
int ara_max (ara *a);
int ara_number (ara *a);
int ara_find_item (ara *a, AraItem item);
int ara_unshift (ara *a, AraItem new_item);
AraItem ara_shift (ara *a);
int ara_push (ara *a, AraItem new_item);
AraItem ara_pop (ara *a);
AraItem ara_pop_item (ara *a, int location);
int ara_insert_item (ara *a, int location, AraItem new_item);
int ara_insert_before_item (ara *a, AraItem existing_item, AraItem new_item);
int ara_insert_after_item (ara *a, AraItem existing_item, AraItem new_item);
int ara_collapse (ara *a);
#endif
|