 |
P4C
The P4 Compiler
|
Loading...
Searching...
No Matches
18#ifndef BACKENDS_TOFINO_BF_ASM_VECTOR_H_
19#define BACKENDS_TOFINO_BF_ASM_VECTOR_H_
25#define VECTOR(NAME) CAT(NAME, _VECTOR)
26#define DECLARE_VECTOR(TYPE, ...) \
27 typedef struct CAT(TYPE, _VECTOR) { \
32#define DECLARE_VECTOR2(NAME, ELTYPE, ...) \
33 typedef struct CAT(NAME, _VECTOR) { \
57#define VECTOR_init(vec, ...) init_raw_vector(&(vec), sizeof((vec).data[0]), RAW(__VA_ARGS__ + 0))
59#define VECTOR_initcopy(vec, from) \
60 (init_raw_vector(&(vec), sizeof((vec).data[0]), (from).size) \
62 : (memcpy((vec).data, (from).data, ((vec).size = (from).size) * sizeof((vec).data[0])), \
65#define VECTOR_init1(vec, v1) \
66 (init_raw_vector(&(vec), sizeof((vec).data[0]), 1) \
68 : ((vec).size = 1, (vec).data[0] = (v1), 0))
69#define VECTOR_init2(vec, v1, v2) \
70 (init_raw_vector(&(vec), sizeof((vec).data[0]), 2) \
72 : ((vec).size = 2, (vec).data[0] = (v1), (vec).data[1] = (v2), 0))
73#define VECTOR_init3(vec, v1, v2, v3) \
74 (init_raw_vector(&(vec), sizeof((vec).data[0]), 3) \
76 : ((vec).size = 3, (vec).data[0] = (v1), (vec).data[1] = (v2), (vec).data[2] = (v3), 0))
77#define VECTOR_init4(vec, v1, v2, v3, v4) \
78 (init_raw_vector(&(vec), sizeof((vec).data[0]), 4) \
80 : ((vec).size = 3, (vec).data[0] = (v1), (vec).data[1] = (v2), (vec).data[2] = (v3), \
81 (vec).data[3] = (v4), 0))
82#define VECTOR_init5(vec, v1, v2, v3, v4, v5) \
83 (init_raw_vector(&(vec), sizeof((vec).data[0]), 5) \
85 : ((vec).size = 3, (vec).data[0] = (v1), (vec).data[1] = (v2), (vec).data[2] = (v3), \
86 (vec).data[3] = (v4), (vec).data[4] = (v5), 0))
88#define EMPTY_VECTOR_INIT {0, 0, 0}
95#define VECTOR_fini(vec) free((vec).data)
111#define VECTOR_add(vec, val) \
112 (((vec).size == (vec).capacity && expand_raw_vector(&(vec), sizeof((vec).data[0]))) \
114 : ((vec).data[(vec).size++] = (val), 0))
115#define VECTOR_addcopy(vec, ptr, n) \
116 (VECTOR_reserve(vec, (vec).size + (n)) \
118 : (memcpy((vec).data + (vec).size, (ptr), (n) * sizeof((vec).data[0])), \
119 (vec).size += (n), 0))
120#define VECTOR_copy(vec, from) \
121 (VECTOR_reserve(vec, (from).size) \
123 : (memcpy((vec).data, (from).data, (from).size * sizeof((vec).data[0])), \
124 (vec).size = (from).size, 0))
126#define VECTOR_begin(vec) ((vec).data)
127#define VECTOR_end(vec) ((vec).data + (vec).size)
128#define VECTOR_empty(vec) ((vec).size == 0)
138#define VECTOR_erase(vec, idx, ...) \
139 erase_raw_vector(&(vec), sizeof((vec).data[0]), idx, RAW(__VA_ARGS__ + 0))
147#define VECTOR_expand(vec) expand_raw_vector(&(vec), sizeof((vec).data[0]))
153#define VECTOR_foreach(vec, apply) \
155 for (int i_ = 0; i_ < (vec).size; i_++) { \
156 apply((&(vec).data[i_])); \
168#define VECTOR_insert(vec, idx, ...) \
169 insert_raw_vector(&(vec), sizeof((vec).data[0]), idx, RAW(__VA_ARGS__ + 0))
171#define VECTOR_pop(vec) ((vec).data[--(vec).size])
172#define VECTOR_push(vec, val) VECTOR_add(vec, val)
181#define VECTOR_reserve(vec, size, ...) \
182 reserve_raw_vector(&(vec), sizeof((vec).data[0]), size, RAW(__VA_ARGS__ + 0))
191#define VECTOR_resize(vec, sz, ...) \
192 (VECTOR_reserve(vec, sz, __VA_ARGS__) ? -1 : ((vec).size = (sz), 0))
200#define VECTOR_shrink_to_fit(vec) shrink_raw_vector(&(vec), sizeof((vec).data[0]))
209#define VECTOR_terminate(vec, val) \
210 (((vec).size == (vec).capacity && expand_raw_vector(&(vec), sizeof((vec).data[0]))) \
212 : ((vec).data[(vec).size] = (val), 0))
213#define VECTOR_top(vec) ((vec).data[(vec).size - 1])
218extern int erase_raw_vector(
void *vec,
size_t elsize,
int idx,
unsigned cnt);
219extern int expand_raw_vector(
void *vec,
size_t elsize);
220extern int init_raw_vector(
void *vec,
size_t elsize,
int mincap);
221extern int insert_raw_vector(
void *vec,
size_t elsize,
int idx,
unsigned cnt);
222extern int reserve_raw_vector(
void *vec,
size_t elsize,
int size,
int shrink);
223extern int shrink_raw_vector(
void *vec,
size_t elsize);