fbmuck-6.01/contrib/jresolver/
fbmuck-6.01/contrib/jresolver/org/
fbmuck-6.01/contrib/jresolver/org/fuzzball/
fbmuck-6.01/docs/devel/
fbmuck-6.01/game/
fbmuck-6.01/game/logs/
fbmuck-6.01/game/muf/
fbmuck-6.01/scripts/
fbmuck-6.01/src_docs/
/* Array/Dictionary Package */

#ifndef MUFARRAY_H
#define MUFARRAY_H

#define ARRAY_UNDEFINED		0
#define ARRAY_PACKED		1
#define ARRAY_DICTIONARY	2

typedef struct inst array_iter;
typedef struct inst array_data;

typedef struct array_tree_t {
	struct array_tree_t *left;
	struct array_tree_t *right;
	array_iter key;
	array_data data;
	short height;
} array_tree;

typedef struct stk_array_t {
	int links;					/* number of pointers  to array */
	int items;					/* number of items in array */
	short type;					/* type of array */
	short pinned;				/* if pinned, don't dup array on changes */
	union {
		array_data *packed;		/* pointer to packed array */
		array_tree *dict;		/* pointer to dictionary AVL tree */
	} data;
} stk_array;

stk_array *new_array_dictionary(void);
stk_array *new_array_packed(int size);
void array_free(stk_array * arr);
stk_array *array_promote(stk_array * arr);
stk_array *array_decouple(stk_array * arr);
void array_set_pinned(stk_array * arr, int pinned);

int array_count(stk_array * arr);
int array_idxcmp(array_iter * a, array_iter * b);
int array_idxcmp_case(array_iter * a, array_iter * b, int case_sens);

 /**/ int array_keys_homogenous(stk_array * arr);
 /**/ int array_vals_homogenous(stk_array * arr);
int array_contains_key(stk_array * arr, array_iter * item);
int array_contains_value(stk_array * arr, array_data * item);

int array_first(stk_array * arr, array_iter * item);
int array_last(stk_array * arr, array_iter * item);
int array_prev(stk_array * arr, array_iter * item);
int array_next(stk_array * arr, array_iter * item);

array_data *array_getitem(stk_array * arr, array_iter * idx);
int array_setitem(stk_array ** arr, array_iter * idx, array_data * item);
int array_insertitem(stk_array ** arr, array_iter * idx, array_data * item);
int array_appenditem(stk_array ** arr, array_data * item);

stk_array *array_getrange(stk_array * arr, array_iter * start, array_iter * end);
int array_setrange(stk_array ** arr, array_iter * start, stk_array * inarr);
int array_insertrange(stk_array ** arr, array_iter * start, stk_array * inarr);

stk_array *array_demote_only(stk_array * arr, int threshold);
void array_mash(stk_array * arr_in, stk_array ** mash, int value);

int array_is_homogenous(stk_array * arr, int typ);

int array_set_strkey(stk_array ** harr, const char *key, struct inst *val);

int array_set_strkey_intval(stk_array ** arr, const char *key, int val);
int array_set_strkey_fltval(stk_array ** arr, const char *key, double val);
int array_set_strkey_refval(stk_array ** harr, const char *key, dbref val);
int array_set_strkey_strval(stk_array ** harr, const char *key, const char *val);
int array_set_strkey_arrval(stk_array ** harr, const char *key, stk_array* val);

int array_set_intkey(stk_array ** harr, int key, struct inst *val);

int array_set_intkey_intval(stk_array ** harr, int key, int val);
int array_set_intkey_fltval(stk_array ** harr, int key, double val);
int array_set_intkey_refval(stk_array ** harr, int key, dbref val);
int array_set_intkey_strval(stk_array ** harr, int key, const char *val);
int array_set_intkey_arrval(stk_array ** harr, int key, stk_array* val);

char* array_get_intkey_strval(stk_array * arr, int key);

int array_set_intval(stk_array ** harr, struct inst* key, int val);
int array_set_fltval(stk_array ** harr, struct inst* key, double val);
int array_set_refval(stk_array ** harr, struct inst* key, dbref val);
int array_set_strval(stk_array ** harr, struct inst* key, const char *val);
int array_set_arrval(stk_array ** harr, struct inst* key, stk_array* val);

#endif							/* MUFARRAY_H */