13 void inta_init(inta_ptr a
)
17 a
->item
= malloc(sizeof(int) * a
->max
);
20 void inta_init_n(inta_ptr a
, int n
)
24 a
->item
= malloc(sizeof(int) * a
->max
);
29 inta_ptr res
= malloc(sizeof(inta_t
));
34 void inta_remove_all(inta_ptr a
)
39 a
->item
= malloc(sizeof(int) * a
->max
);
42 int inta_remove_last(inta_ptr a
)
46 return(a
->item
[a
->count
]);
49 void inta_realloc(inta_ptr a
, int size
)
52 a
->item
= realloc(a
->item
, sizeof(int) * a
->max
);
55 void inta_append(inta_ptr a
, int p
)
57 if (a
->count
== a
->max
) {
58 if (!a
->max
) a
->max
= max_init
;
60 a
->item
= realloc(a
->item
, sizeof(int) * a
->max
);
62 a
->item
[a
->count
] = p
;
66 int inta_index_of(inta_ptr a
, int p
)
69 for (i
=0; i
<a
->count
; i
++) {
70 if (a
->item
[i
] == p
) return i
;
75 void inta_clear(inta_t a
)
82 void inta_remove_index(inta_ptr a
, int n
)
84 assert(a
->count
>= n
-1);
86 memmove(a
->item
+ n
, a
->item
+ n
+ 1, sizeof(int) * (a
->count
- n
));
89 void inta_remove(inta_ptr a
, int p
)
92 for (i
=0; i
<a
->count
; i
++) {
93 if (a
->item
[i
] == p
) {
94 inta_remove_index(a
, i
);
101 int inta_index_of_test(inta_ptr a
, int (*test
)(int))
104 for (i
= 0; i
< a
->count
; i
++) if (test(a
->item
[i
])) return i
;
108 int inta_at_test(inta_ptr a
, int (*test
)(int))
111 for (i
= 0; i
< a
->count
; i
++) {
113 if (test(p
)) return p
;
118 void inta_remove_test(inta_ptr a
, int (*test
)(int))
121 while ((i
= inta_index_of_test(a
, test
) >= 0)) {
122 inta_remove_index(a
, i
);
126 void inta_swap(inta_ptr a
, int i
, int j
)
128 int tmp
= a
->item
[j
];
129 a
->item
[j
] = a
->item
[i
];
133 void inta_copy(inta_ptr dst
, inta_ptr src
)
135 inta_realloc(dst
, src
->count
);
136 memcpy(dst
->item
, src
->item
, src
->count
* sizeof(int));
137 dst
->count
= src
->count
;
140 void inta_forall(inta_t a
, void (*func
)(int))
143 const int *end
= item
+ a
->count
;
144 while (item
!= end
) {
150 void inta_qsort(inta_t a
, int (*compar
)(const void *, const void *)) {
151 qsort(a
->item
, a
->count
, sizeof(void *), compar
);