FD.io VPP  v17.07.01-10-g3be13f0
Vector Packet Processing
vec_bootstrap.h File Reference

Vector bootsrap 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_reset_length(v)   do { if (v) _vec_len (v) = 0; } while (0)
 Reset vector length to zero NULL-pointer 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_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...
 

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 bootsrap header file.

Definition in file vec_bootstrap.h.

Macro Definition Documentation

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

Number of data bytes in vector.

Definition at line 152 of file vec_bootstrap.h.

#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; \
})
#define v
Definition: acl.c:320
static uword clib_mem_size(void *p)
Definition: mem.h:209
vector header structure
Definition: vec_bootstrap.h:55
u64 uword
Definition: types.h:112

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

Definition at line 156 of file vec_bootstrap.h.

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

Get vector value at index i.

Definition at line 181 of file vec_bootstrap.h.

#define vec_elt_at_index (   v,
  i 
)
Value:
({ \
ASSERT ((i) < vec_len (v)); \
(v) + (i); \
})
sll srl srl sll sra u16x4 i
Definition: vector_sse2.h:337
#define v
Definition: acl.c:320
#define ASSERT(truth)
#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 174 of file vec_bootstrap.h.

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

End (last data address) of vector.

Definition at line 168 of file vec_bootstrap.h.

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

Vector iterator.

Definition at line 184 of file vec_bootstrap.h.

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

Vector iterator (reverse)

Definition at line 187 of file vec_bootstrap.h.

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

Iterate over vector indices.

Definition at line 191 of file vec_bootstrap.h.

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

True if given pointer is within given vector.

Definition at line 171 of file vec_bootstrap.h.

#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 142 of file vec_bootstrap.h.

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

Total number of elements that can fit into vector.

Definition at line 165 of file vec_bootstrap.h.

#define vec_reset_length (   v)    do { if (v) _vec_len (v) = 0; } while (0)

Reset vector length to zero NULL-pointer tolerant.

Definition at line 148 of file vec_bootstrap.h.

Function Documentation

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

Definition at line 116 of file vec_bootstrap.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword vec_aligned_header_bytes ( uword  header_bytes,
uword  align 
)
inlinestatic

Definition at line 110 of file vec_bootstrap.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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

Definition at line 122 of file vec_bootstrap.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 92 of file vec_bootstrap.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

static uword vec_header_bytes ( uword  header_bytes)
inlinestatic

Definition at line 79 of file vec_bootstrap.h.

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

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 104 of file vec_bootstrap.h.

+ Here is the call graph for this function: