summaryrefslogtreecommitdiffstats
path: root/vppinfra/vppinfra/sparse_vec.h
diff options
context:
space:
mode:
Diffstat (limited to 'vppinfra/vppinfra/sparse_vec.h')
-rw-r--r--vppinfra/vppinfra/sparse_vec.h53
1 files changed, 31 insertions, 22 deletions
diff --git a/vppinfra/vppinfra/sparse_vec.h b/vppinfra/vppinfra/sparse_vec.h
index bf18ebd9e9b..ec8f0a1c4bf 100644
--- a/vppinfra/vppinfra/sparse_vec.h
+++ b/vppinfra/vppinfra/sparse_vec.h
@@ -43,21 +43,24 @@
/* Sparsely indexed vectors. Basic idea taken from Hacker's delight.
Eliot added ranges. */
-typedef struct {
+typedef struct
+{
/* Bitmap one for each sparse index. */
- uword * is_member_bitmap;
+ uword *is_member_bitmap;
/* member_counts[i] = total number of members with j < i. */
- u16 * member_counts;
+ u16 *member_counts;
#define SPARSE_VEC_IS_RANGE (1 << 0)
#define SPARSE_VEC_IS_VALID_RANGE (1 << 1)
- u8 * range_flags;
+ u8 *range_flags;
} sparse_vec_header_t;
always_inline sparse_vec_header_t *
-sparse_vec_header (void * v)
-{ return vec_header (v, sizeof (sparse_vec_header_t)); }
+sparse_vec_header (void *v)
+{
+ return vec_header (v, sizeof (sparse_vec_header_t));
+}
/* Index 0 is always used to mark indices that are not valid in
sparse vector. For example, you look up V[0x1234] and 0x1234 is not
@@ -67,15 +70,15 @@ sparse_vec_header (void * v)
always_inline void *
sparse_vec_new (uword elt_bytes, uword sparse_index_bits)
{
- void * v;
- sparse_vec_header_t * h;
+ void *v;
+ sparse_vec_header_t *h;
word n;
ASSERT (sparse_index_bits <= 16);
v = _vec_resize (0,
/* length increment */ 8,
- /* data bytes */ 8*elt_bytes,
+ /* data bytes */ 8 * elt_bytes,
/* header bytes */ sizeof (h[0]),
/* data align */ 0);
@@ -95,12 +98,11 @@ sparse_vec_new (uword elt_bytes, uword sparse_index_bits)
}
always_inline uword
-sparse_vec_index_internal (void * v,
+sparse_vec_index_internal (void *v,
uword sparse_index,
- uword maybe_range,
- u32 * insert)
+ uword maybe_range, u32 * insert)
{
- sparse_vec_header_t * h;
+ sparse_vec_header_t *h;
uword i, b, d, w;
u8 is_member;
@@ -128,8 +130,8 @@ sparse_vec_index_internal (void * v,
if (insert)
{
- *insert = ! is_member;
- if (! is_member)
+ *insert = !is_member;
+ if (!is_member)
{
uword j;
w |= b;
@@ -147,19 +149,18 @@ sparse_vec_index_internal (void * v,
}
always_inline uword
-sparse_vec_index (void * v, uword sparse_index)
+sparse_vec_index (void *v, uword sparse_index)
{
return sparse_vec_index_internal (v, sparse_index,
/* maybe range */ 0,
/* insert? */ 0);
}
-
+
always_inline void
-sparse_vec_index2 (void * v,
- u32 si0, u32 si1,
- u32 * i0_return, u32 * i1_return)
+sparse_vec_index2 (void *v,
+ u32 si0, u32 si1, u32 * i0_return, u32 * i1_return)
{
- sparse_vec_header_t * h;
+ sparse_vec_header_t *h;
uword b0, b1, w0, w1, v0, v1;
u32 i0, i1, d0, d1;
u8 is_member0, is_member1;
@@ -189,7 +190,7 @@ sparse_vec_index2 (void * v,
d1 = h->member_counts[i1] + (v1 != 0);
/* Validate speculation. */
- if (PREDICT_FALSE (! is_pow2 (v0) || ! is_pow2 (v1)))
+ if (PREDICT_FALSE (!is_pow2 (v0) || !is_pow2 (v1)))
{
d0 += count_set_bits (v0) - (v0 != 0);
d1 += count_set_bits (v1) - (v1 != 0);
@@ -233,3 +234,11 @@ sparse_vec_index2 (void * v,
})
#endif /* included_sparse_vec_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */