#ifndef ARRAY_H
#define ARRAY_H
#include "interpret.h"
struct vector
{
int ref;
int size;
int malloced_size;
short flags;
short types;
#ifdef DEBUG
int extra_ref;
struct vector *next;
#endif
struct svalue item[1];
};
struct vector *resize_array(struct vector *,int);
void order_alist(struct vector *);
struct vector *shrink_array(struct vector *, int);
int check_for_circularity(struct vector *,struct vector *);
void donk_alist_item(struct vector *,int);
void check_vector_for_destruct(struct vector *);
void check_alist_for_destruct(struct vector *);
struct vector *allocate_n_array(struct svalue *,int);
int search_alist(struct svalue *key,struct vector * keylist);
struct vector *insert_alist(
struct svalue *key,
struct svalue *key_data,
struct vector *list);
struct vector *map_array (struct vector *,struct svalue *,struct svalue *,int);
int search_array (struct vector *,struct svalue *,struct svalue *,int);
struct vector *make_unique PROT((struct vector *arr,char *func,
struct svalue *skipnum));
struct vector *filter (struct vector *,struct svalue *,struct svalue *,
int);
struct vector *deep_inventory PROT((struct object *, int));
struct vector *add_array PROT((struct vector *, struct vector *));
struct vector *all_inventory PROT((struct object *));
char *implode_string PROT((struct vector *, char *));
struct vector *slice_array PROT((struct vector *,int,int));
struct vector *allocate_array_no_init PROT((int,int));
struct vector *allocate_array PROT((int));
struct vector *match_regexp PROT((struct vector *v, struct regexp *reg));
struct vector *file_stat(char *file,int raw);
struct vector *explode(struct svalue *str,struct svalue *del);
void implode(struct svalue *to,struct vector *v,struct svalue *del);
int assoc(struct svalue *key,struct vector * list);
INLINE int alist_cmp(struct svalue *p1,struct svalue *p2);
#ifndef DEBUG
void real_free_vector PROT((struct vector *));
#define free_vector(v) { if(!(v)->ref--) real_free_vector(v); }
#else
void free_vector PROT((struct vector *));
#endif
#endif