FD.io VPP  v19.08.2-294-g37e99c22d
Vector Packet Processing
vec_bootstrap.h File Reference

Vector bootstrap header file. More...

+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  vec_header_t
 vector header structure More...
 

Macros

#define vec_len(v)   ((v) ? _vec_len(v) : 0)
 Number of elements in vector (rvalue-only, NULL tolerant) More...
 
#define vec_bytes(v)   (vec_len (v) * sizeof (v[0]))
 Number of data bytes in vector. More...
 
#define vec_capacity(v, b)
 Total number of bytes that can fit in vector with current allocation. More...
 
#define vec_max_len(v)   (vec_capacity(v,0) / sizeof (v[0]))
 Total number of elements that can fit into vector. More...
 
#define vec_set_len(v, l)
 Set vector length to a user-defined value. More...
 
#define vec_reset_length(v)   do { if (v) vec_set_len (v, 0); } while (0)
 Reset vector length to zero NULL-pointer tolerant. More...
 
#define vec_end(v)   ((v) + vec_len (v))
 End (last data address) of vector. More...
 
#define vec_is_member(v, e)   ((e) >= (v) && (e) < vec_end (v))
 True if given pointer is within given vector. More...
 
#define vec_elt_at_index(v, i)
 Get vector value at index i checking that i is in bounds. More...
 
#define vec_elt(v, i)   (vec_elt_at_index(v,i))[0]
 Get vector value at index i. More...
 
#define vec_foreach(var, vec)   for (var = (vec); var < vec_end (vec); var++)
 Vector iterator. More...
 
#define vec_foreach_backwards(var, vec)   for (var = vec_end (vec) - 1; var >= (vec); var--)
 Vector iterator (reverse) More...
 
#define vec_foreach_index(var, v)   for ((var) = 0; (var) < vec_len (v); (var)++)
 Iterate over vector indices. More...
 
#define vec_foreach_index_backwards(var, v)   for ((var) = vec_len((v)) - 1; (var) >= 0; (var)--)
 Iterate over vector indices (reverse). More...
 

Functions

static uword vec_header_bytes (uword header_bytes)
 
static void * vec_header (void *v, uword header_bytes)
 Find a user vector header. More...
 
static void * vec_header_end (void *v, uword header_bytes)
 Find the end of user vector header. More...
 
static uword vec_aligned_header_bytes (uword header_bytes, uword align)
 
static void * vec_aligned_header (void *v, uword header_bytes, uword align)
 
static void * vec_aligned_header_end (void *v, uword header_bytes, uword align)
 

Detailed Description

Vector bootstrap header file.

Definition in file vec_bootstrap.h.

Macro Definition Documentation

◆ vec_bytes

#define vec_bytes (   v)    (vec_len (v) * sizeof (v[0]))

Number of data bytes in vector.

Definition at line 147 of file vec_bootstrap.h.

◆ vec_capacity

#define vec_capacity (   v,
 
)
Value:
({ \
void * _vec_capacity_v = (void *) (v); \
uword _vec_capacity_b = (b); \
_vec_capacity_b = sizeof (vec_header_t) + _vec_round_size (_vec_capacity_b); \
_vec_capacity_v ? clib_mem_size (_vec_capacity_v - _vec_capacity_b) : 0; \
})
static uword clib_mem_size(void *p)
Definition: mem.h:263
vector header structure
Definition: vec_bootstrap.h:55

Total number of bytes that can fit in vector with current allocation.

Definition at line 151 of file vec_bootstrap.h.

◆ vec_elt

#define vec_elt (   v,
  i 
)    (vec_elt_at_index(v,i))[0]

Get vector value at index i.

Definition at line 194 of file vec_bootstrap.h.

◆ vec_elt_at_index

#define vec_elt_at_index (   v,
  i 
)
Value:
({ \
ASSERT ((i) < vec_len (v)); \
(v) + (i); \
})
int i
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)

Get vector value at index i checking that i is in bounds.

Definition at line 187 of file vec_bootstrap.h.

◆ vec_end

#define vec_end (   v)    ((v) + vec_len (v))

End (last data address) of vector.

Definition at line 181 of file vec_bootstrap.h.

◆ vec_foreach

#define vec_foreach (   var,
  vec 
)    for (var = (vec); var < vec_end (vec); var++)

Vector iterator.

Definition at line 197 of file vec_bootstrap.h.

◆ vec_foreach_backwards

#define vec_foreach_backwards (   var,
  vec 
)    for (var = vec_end (vec) - 1; var >= (vec); var--)

Vector iterator (reverse)

Definition at line 200 of file vec_bootstrap.h.

◆ vec_foreach_index

#define vec_foreach_index (   var,
 
)    for ((var) = 0; (var) < vec_len (v); (var)++)

Iterate over vector indices.

Definition at line 204 of file vec_bootstrap.h.

◆ vec_foreach_index_backwards

#define vec_foreach_index_backwards (   var,
 
)    for ((var) = vec_len((v)) - 1; (var) >= 0; (var)--)

Iterate over vector indices (reverse).

Definition at line 207 of file vec_bootstrap.h.

◆ vec_is_member

#define vec_is_member (   v,
 
)    ((e) >= (v) && (e) < vec_end (v))

True if given pointer is within given vector.

Definition at line 184 of file vec_bootstrap.h.

◆ vec_len

#define vec_len (   v)    ((v) ? _vec_len(v) : 0)

Number of elements in vector (rvalue-only, NULL tolerant)

vec_len (v) checks for NULL, but cannot be used as an lvalue. If in doubt, use vec_len...

Definition at line 143 of file vec_bootstrap.h.

◆ vec_max_len

#define vec_max_len (   v)    (vec_capacity(v,0) / sizeof (v[0]))

Total number of elements that can fit into vector.

Definition at line 160 of file vec_bootstrap.h.

◆ vec_reset_length

#define vec_reset_length (   v)    do { if (v) vec_set_len (v, 0); } while (0)

Reset vector length to zero NULL-pointer tolerant.

Definition at line 178 of file vec_bootstrap.h.

◆ vec_set_len

#define vec_set_len (   v,
 
)
Value:
do { \
ASSERT(v); \
ASSERT((l) <= vec_max_len(v)); \
_vec_len(v) = (l); \
} while (0)
#define vec_max_len(v)
Total number of elements that can fit into vector.

Set vector length to a user-defined value.

Definition at line 164 of file vec_bootstrap.h.

Function Documentation

◆ vec_aligned_header()

static void* vec_aligned_header ( void *  v,
uword  header_bytes,
uword  align 
)
inlinestatic

Definition at line 117 of file vec_bootstrap.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vec_aligned_header_bytes()

static uword vec_aligned_header_bytes ( uword  header_bytes,
uword  align 
)
inlinestatic

Definition at line 111 of file vec_bootstrap.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vec_aligned_header_end()

static void* vec_aligned_header_end ( void *  v,
uword  header_bytes,
uword  align 
)
inlinestatic

Definition at line 123 of file vec_bootstrap.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vec_header()

static void* vec_header ( void *  v,
uword  header_bytes 
)
inlinestatic

Find a user vector header.

Finds the user header of a vector with unspecified alignment given the user pointer to the vector.

Definition at line 93 of file vec_bootstrap.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vec_header_bytes()

static uword vec_header_bytes ( uword  header_bytes)
inlinestatic

Definition at line 80 of file vec_bootstrap.h.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ vec_header_end()

static void* vec_header_end ( void *  v,
uword  header_bytes 
)
inlinestatic

Find the end of user vector header.

Finds the end of the user header of a vector with unspecified alignment given the user pointer to the vector.

Definition at line 105 of file vec_bootstrap.h.

+ Here is the call graph for this function: