59 #ifndef HEADER_STACK_H
60 # define HEADER_STACK_H
66 typedef struct stack_st {
71 int (*comp) (
const void *,
const void *);
74 # define M_sk_num(sk) ((sk) ? (sk)->num:-1)
75 # define M_sk_value(sk,n) ((sk) ? (sk)->data[n] : NULL)
77 int sk_num(
const _STACK *);
78 void *sk_value(
const _STACK *,
int);
80 void *sk_set(_STACK *,
int,
void *);
82 _STACK *sk_new(
int (*cmp) (
const void *,
const void *));
83 _STACK *sk_new_null(
void);
84 void sk_free(_STACK *);
85 void sk_pop_free(_STACK *st,
void (*func) (
void *));
86 _STACK *sk_deep_copy(_STACK *,
void *(*)(
void *),
void (*)(
void *));
87 int sk_insert(_STACK *sk,
void *data,
int where);
88 void *sk_delete(_STACK *st,
int loc);
89 void *sk_delete_ptr(_STACK *st,
void *p);
90 int sk_find(_STACK *st,
void *data);
91 int sk_find_ex(_STACK *st,
void *data);
92 int sk_push(_STACK *st,
void *data);
93 int sk_unshift(_STACK *st,
void *data);
94 void *sk_shift(_STACK *st);
95 void *sk_pop(_STACK *st);
96 void sk_zero(_STACK *st);
97 int (*sk_set_cmp_func(_STACK *sk,
int (*c) (
const void *,
const void *)))
98 (
const void *,
const void *);
99 _STACK *sk_dup(_STACK *st);
100 void sk_sort(_STACK *st);
101 int sk_is_sorted(
const _STACK *st);