cb2256 | 1995-10-11 | Fredrik Hübinette (Hubbe) | | |
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | ||| This file a part of Pike, and is copyright by Fredrik Hubinette
||| Pike is distributed as GPL (General Public License)
|
cb2256 | 1995-10-11 | Fredrik Hübinette (Hubbe) | | ||| See the files COPYING and DISCLAIMER for more information.
\*/
|
24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
63540d | 2000-08-15 | Henrik Grubbström (Grubba) | | * $Id: array.h,v 1.26 2000/08/15 11:09:37 grubba Exp $
|
24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | | */
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #ifndef ARRAY_H
#define ARRAY_H
#include "las.h"
struct array
{
|
6e21a5 | 2000-08-09 | Henrik Grubbström (Grubba) | | INT32 refs;
|
7e97c3 | 1999-01-21 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_SECURITY
struct object *prot;
#endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct array *next;
struct array *prev;
INT32 size;
INT32 malloced_size;
TYPE_FIELD type_field;
|
fc3345 | 1997-10-02 | Fredrik Hübinette (Hubbe) | | INT16 flags;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct svalue item[1];
};
|
5f0624 | 1999-04-11 | Fredrik Hübinette (Hubbe) | | #define ARRAY_WEAK_FLAG 1
#define ARRAY_CYCLIC 2
#define ARRAY_LVALUE 4
#define ARRAY_WEAK_SHRINK 8
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
c94c37 | 1996-03-28 | Fredrik Hübinette (Hubbe) | | extern struct array empty_array;
|
e2d9e6 | 2000-06-10 | Martin Stjernholm | | extern struct array *gc_internal_array;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #if defined(DEBUG_MALLOC) && defined(PIKE_DEBUG)
|
aa366d | 1998-04-16 | Fredrik Hübinette (Hubbe) | | #define ITEM(X) (((struct array *)(debug_malloc_pass((X))))->item)
#else
|
fc7695 | 1996-02-17 | Fredrik Hübinette (Hubbe) | | #define ITEM(X) ((X)->item)
|
aa366d | 1998-04-16 | Fredrik Hübinette (Hubbe) | | #endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
e2d9e6 | 2000-06-10 | Martin Stjernholm | | #define LINK_ARRAY(a) do { \
(a)->prev = &empty_array; \
(a)->next = empty_array.next; \
empty_array.next = (a); \
(a)->next->prev = (a); \
} while (0)
#define UNLINK_ARRAY(a) do { \
struct array *next = (a)->next, *prev = (a)->prev; \
prev->next = next; \
next->prev = prev; \
} while (0)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #define PIKE_ARRAY_OP_A 1
#define PIKE_ARRAY_OP_SKIP_A 2
#define PIKE_ARRAY_OP_TAKE_A 3
#define PIKE_ARRAY_OP_B 4
#define PIKE_ARRAY_OP_SKIP_B 8
#define PIKE_ARRAY_OP_TAKE_B 12
#define PIKE_MINTERM(X,Y,Z) (((X)<<8)+((Y)<<4)+(Z))
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #define PIKE_ARRAY_OP_AND PIKE_MINTERM(PIKE_ARRAY_OP_SKIP_A,PIKE_ARRAY_OP_SKIP_A | PIKE_ARRAY_OP_TAKE_B,PIKE_ARRAY_OP_SKIP_B)
|
f4dbbb | 1999-10-03 | Fredrik Hübinette (Hubbe) | | #define PIKE_ARRAY_OP_AND_LEFT PIKE_MINTERM(PIKE_ARRAY_OP_SKIP_A,PIKE_ARRAY_OP_SKIP_B | PIKE_ARRAY_OP_TAKE_A,PIKE_ARRAY_OP_SKIP_B)
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #define PIKE_ARRAY_OP_OR PIKE_MINTERM(PIKE_ARRAY_OP_TAKE_A,PIKE_ARRAY_OP_SKIP_A | PIKE_ARRAY_OP_TAKE_B,PIKE_ARRAY_OP_TAKE_B)
|
f4dbbb | 1999-10-03 | Fredrik Hübinette (Hubbe) | | #define PIKE_ARRAY_OP_OR_LEFT PIKE_MINTERM(PIKE_ARRAY_OP_TAKE_A,PIKE_ARRAY_OP_SKIP_B | PIKE_ARRAY_OP_TAKE_A,PIKE_ARRAY_OP_TAKE_B)
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #define PIKE_ARRAY_OP_XOR PIKE_MINTERM(PIKE_ARRAY_OP_TAKE_A,PIKE_ARRAY_OP_SKIP_A | PIKE_ARRAY_OP_SKIP_B,PIKE_ARRAY_OP_TAKE_B)
#define PIKE_ARRAY_OP_ADD PIKE_MINTERM(PIKE_ARRAY_OP_TAKE_A,PIKE_ARRAY_OP_TAKE_A | PIKE_ARRAY_OP_TAKE_B ,PIKE_ARRAY_OP_TAKE_B)
#define PIKE_ARRAY_OP_SUB PIKE_MINTERM(PIKE_ARRAY_OP_TAKE_A,PIKE_ARRAY_OP_SKIP_A ,PIKE_ARRAY_OP_SKIP_B)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
a3c6ad | 1998-01-29 | Fredrik Hübinette (Hubbe) | | #define free_array(V) do{ struct array *v_=(V); debug_malloc_touch(v_); if(!--v_->refs) really_free_array(v_); }while(0)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
2a129b | 1996-03-24 | Fredrik Hübinette (Hubbe) | | #define allocate_array(X) low_allocate_array((X),0)
#define allocate_array_no_init(X,Y) low_allocate_array((X),(Y))
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
typedef int (*cmpfun)(struct svalue *,struct svalue *);
typedef int (*short_cmpfun)(union anything *, union anything *);
typedef short_cmpfun (*cmpfun_getter)(TYPE_T);
|
080b1a | 2000-08-10 | Henrik Grubbström (Grubba) | | PMOD_EXPORT struct array *low_allocate_array(ptrdiff_t size, ptrdiff_t extra_space);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | void really_free_array(struct array *v);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void do_free_array(struct array *a);
PMOD_EXPORT void array_index_no_free(struct svalue *s,struct array *v,INT32 index);
PMOD_EXPORT void array_index(struct svalue *s,struct array *v,INT32 index);
PMOD_EXPORT void simple_array_index_no_free(struct svalue *s,
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | struct array *a,struct svalue *ind);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void array_free_index(struct array *v,INT32 index);
PMOD_EXPORT void array_set_index(struct array *v,INT32 index, struct svalue *s);
PMOD_EXPORT void simple_set_index(struct array *a,struct svalue *ind,struct svalue *s);
PMOD_EXPORT struct array *array_insert(struct array *v,struct svalue *s,INT32 index);
PMOD_EXPORT struct array *resize_array(struct array *a, INT32 size);
PMOD_EXPORT struct array *array_shrink(struct array *v,INT32 size);
PMOD_EXPORT struct array *array_remove(struct array *v,INT32 index);
|
63540d | 2000-08-15 | Henrik Grubbström (Grubba) | | PMOD_EXPORT ptrdiff_t array_search(struct array *v, struct svalue *s,
ptrdiff_t start);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct array *slice_array(struct array *v,INT32 start,INT32 end);
PMOD_EXPORT struct array *friendly_slice_array(struct array *v,INT32 start,INT32 end);
PMOD_EXPORT struct array *copy_array(struct array *v);
PMOD_EXPORT void check_array_for_destruct(struct array *v);
PMOD_EXPORT INT32 array_find_destructed_object(struct array *v);
|
99946c | 1996-02-17 | Fredrik Hübinette (Hubbe) | | INT32 *get_order(struct array *v, cmpfun fun);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void sort_array_destructively(struct array *v);
PMOD_EXPORT INT32 *get_set_order(struct array *a);
PMOD_EXPORT INT32 *get_switch_order(struct array *a);
PMOD_EXPORT INT32 *get_alpha_order(struct array *a);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | INT32 set_lookup(struct array *a, struct svalue *s);
INT32 switch_lookup(struct array *a, struct svalue *s);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct array *order_array(struct array *v, INT32 *order);
PMOD_EXPORT struct array *reorder_and_copy_array(struct array *v, INT32 *order);
PMOD_EXPORT void array_fix_type_field(struct array *v);
|
e3c6e1 | 1996-05-16 | Fredrik Hübinette (Hubbe) | | void array_check_type_field(struct array *v);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct array *compact_array(struct array *v);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | union anything *low_array_get_item_ptr(struct array *a,
INT32 ind,
TYPE_T t);
union anything *array_get_item_ptr(struct array *a,
struct svalue *ind,
TYPE_T t);
INT32 * merge(struct array *a,struct array *b,INT32 opcode);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct array *array_zip(struct array *a, struct array *b,INT32 *zipper);
PMOD_EXPORT struct array *add_arrays(struct svalue *argp, INT32 args);
PMOD_EXPORT int array_equal_p(struct array *a, struct array *b, struct processing *p);
PMOD_EXPORT struct array *merge_array_with_order(struct array *a, struct array *b,INT32 op);
PMOD_EXPORT struct array *merge_array_without_order2(struct array *a, struct array *b,INT32 op);
PMOD_EXPORT struct array *merge_array_without_order(struct array *a,
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct array *b,
INT32 op);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct array *subtract_arrays(struct array *a, struct array *b);
PMOD_EXPORT struct array *and_arrays(struct array *a, struct array *b);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | int check_that_array_is_constant(struct array *a);
node *make_node_from_array(struct array *a);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void push_array_items(struct array *a);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | void describe_array_low(struct array *a, struct processing *p, int indent);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void simple_describe_array(struct array *a);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | void describe_index(struct array *a,
int e,
struct processing *p,
int indent);
void describe_array(struct array *a,struct processing *p,int indent);
|
99946c | 1996-02-17 | Fredrik Hübinette (Hubbe) | | struct array *aggregate_array(INT32 args);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct array *append_array(struct array *a, struct svalue *s);
PMOD_EXPORT struct array *explode(struct pike_string *str,
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | struct pike_string *del);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct pike_string *implode(struct array *a,struct pike_string *del);
PMOD_EXPORT struct array *copy_array_recursively(struct array *a,struct processing *p);
PMOD_EXPORT void apply_array(struct array *a, INT32 args);
PMOD_EXPORT struct array *reverse_array(struct array *a);
PMOD_EXPORT void array_replace(struct array *a,
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct svalue *from,
struct svalue *to);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void check_array(struct array *a);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void check_all_arrays(void);
|
c94c37 | 1996-03-28 | Fredrik Hübinette (Hubbe) | | void gc_mark_array_as_referenced(struct array *a);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | void real_gc_cycle_check_array(struct array *a, int weak);
|
e2d9e6 | 2000-06-10 | Martin Stjernholm | | unsigned gc_touch_all_arrays(void);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void gc_check_all_arrays(void);
void gc_mark_all_arrays(void);
|
e2d9e6 | 2000-06-10 | Martin Stjernholm | | void gc_cycle_check_all_arrays(void);
|
45d87e | 2000-07-18 | Martin Stjernholm | | void gc_zap_ext_weak_refs_in_arrays(void);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void gc_free_all_unreferenced_arrays(void);
|
c3c703 | 1996-12-04 | Fredrik Hübinette (Hubbe) | | void debug_dump_type_field(TYPE_FIELD t);
void debug_dump_array(struct array *a);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void zap_all_arrays(void);
|
c3c703 | 1996-12-04 | Fredrik Hübinette (Hubbe) | | void count_memory_in_arrays(INT32 *num_, INT32 *size_);
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct array *explode_array(struct array *a, struct array *b);
PMOD_EXPORT struct array *implode_array(struct array *a, struct array *b);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
45d87e | 2000-07-18 | Martin Stjernholm | | #define gc_cycle_check_array(X, WEAK) \
gc_cycle_enqueue((gc_cycle_check_cb *) real_gc_cycle_check_array, (X), (WEAK))
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
e2d9e6 | 2000-06-10 | Martin Stjernholm | | #endif /* ARRAY_H */
|