Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
rte_bitset.h(3) 		      DPDK			 rte_bitset.h(3)

NAME
     rte_bitset.h

SYNOPSIS
     #include <limits.h>
     #include <stdbool.h>
     #include <stddef.h>
     #include <stdint.h>
     #include <rte_bitops.h>
     #include <rte_branch_prediction.h>
     #include <rte_common.h>
     #include <rte_compat.h>
     #include <rte_debug.h>
     #include <rte_memcpy.h>

   Macros
     #define RTE_BITSET_WORD_SIZE   (sizeof(uint64_t))
     #define RTE_BITSET_WORD_BITS   (RTE_BITSET_WORD_SIZE * CHAR_BIT)
     #define  RTE_BITSET_NUM_WORDS(size)      ((size + RTE_BITSET_WORD_BITS - 1)
	 / RTE_BITSET_WORD_BITS)
     #define RTE_BITSET_SIZE(size)	 ((size_t)(RTE_BITSET_NUM_WORDS(size)  *
	 RTE_BITSET_WORD_SIZE))
     #define   RTE_BITSET_DECLARE(name,    size)	uint64_t   name[RTE_BIT-
	 SET_NUM_WORDS(size)]
     #define RTE_BITSET_FOREACH_SET(var,  bitset,   size)     __RTE_BITSET_FORE-
	 ACH(var, bitset, size, 0, size, 0)
     #define   RTE_BITSET_FOREACH_CLEAR(var,   bitset,	 size)	      __RTE_BIT-
	 SET_FOREACH(var,     bitset,	  size,     0,	   size,      __RTE_BIT-
	 SET_FIND_FLAG_FIND_CLEAR)
     #define RTE_BITSET_FOREACH_SET_RANGE(var,	bitset,  size,	start_bit,  len)
	   __RTE_BITSET_FOREACH(var, bitset, size, start_bit, len, 0)
     #define  RTE_BITSET_FOREACH_CLEAR_RANGE(var,   bitset,   size,   start_bit,
	 len)	    __RTE_BITSET_FOREACH(var,  bitset,	size,  start_bit,   len,
	 __RTE_BITSET_FIND_FLAG_FIND_CLEAR)

   Functions
     static  __rte_experimental  void  rte_bitset_init (uint64_t *bitset, size_t
	 size)
     static __rte_experimental bool  rte_bitset_test  (const  uint64_t	*bitset,
	 size_t bit_num)
     static  __rte_experimental  void  rte_bitset_set  (uint64_t *bitset, size_t
	 bit_num)
     static __rte_experimental void rte_bitset_clear (uint64_t	*bitset,  size_t
	 bit_num)
     static  __rte_experimental void rte_bitset_assign (uint64_t *bitset, size_t
	 bit_num, bool bit_value)
     static __rte_experimental void rte_bitset_flip  (uint64_t	*bitset,  size_t
	 bit_num)
     static __rte_experimental bool rte_bitset_atomic_test (const uint64_t *bit-
	 set, size_t bit_num, int memory_order)
     static  __rte_experimental  void  rte_bitset_atomic_set  (uint64_t *bitset,
	 size_t bit_num, int memory_order)
     static __rte_experimental void rte_bitset_atomic_clear  (uint64_t	*bitset,
	 size_t bit_num, int memory_order)
     static  __rte_experimental void rte_bitset_atomic_assign (uint64_t *bitset,
	 size_t bit_num, bool bit_value, int memory_order)
     static __rte_experimental void  rte_bitset_atomic_flip  (uint64_t	*bitset,
	 size_t bit_num, int memory_order)
     static __rte_experimental void rte_bitset_set_all (uint64_t *bitset, size_t
	 size)
     static  __rte_experimental  void  rte_bitset_clear_all  (uint64_t	*bitset,
	 size_t size)
     static __rte_experimental size_t rte_bitset_count_set (const uint64_t *bit-
	 set, size_t size)
     static __rte_experimental	size_t	rte_bitset_count_clear	(const	uint64_t
	 *bitset, size_t size)
     static __rte_experimental ssize_t rte_bitset_find_first_set (const uint64_t
	 *bitset, size_t size)
     static __rte_experimental ssize_t rte_bitset_find_set (const uint64_t *bit-
	 set, size_t size, size_t start_bit, size_t len)
     static  __rte_experimental ssize_t rte_bitset_find_set_wrap (const uint64_t
	 *bitset, size_t size, size_t start_bit, size_t len)
     static  __rte_experimental   ssize_t   rte_bitset_find_first_clear   (const
	 uint64_t *bitset, size_t size)
     static  __rte_experimental  ssize_t  rte_bitset_find_clear  (const uint64_t
	 *bitset, size_t size, size_t start_bit, size_t len)
     static   __rte_experimental   ssize_t   rte_bitset_find_clear_wrap   (const
	 uint64_t *bitset, size_t size, size_t start_bit, size_t len)
     static  __rte_experimental  void  rte_bitset_copy (uint64_t *__rte_restrict
	 dst_bitset, const uint64_t *__rte_restrict src_bitset, size_t size)
     static __rte_experimental void rte_bitset_or (uint64_t  *dst_bitset,  const
	 uint64_t *src_bitset0, const uint64_t *src_bitset1, size_t size)
     static  __rte_experimental void rte_bitset_and (uint64_t *dst_bitset, const
	 uint64_t *src_bitset0, const uint64_t *src_bitset1, size_t size)
     static __rte_experimental void rte_bitset_xor (uint64_t *dst_bitset,  const
	 uint64_t *src_bitset0, const uint64_t *src_bitset1, size_t size)
     static __rte_experimental void rte_bitset_complement (uint64_t *dst_bitset,
	 const uint64_t *src_bitset, size_t size)
     static __rte_experimental void rte_bitset_shift_left (uint64_t *dst_bitset,
	 const uint64_t *src_bitset, size_t size, size_t shift_bits)
     static  __rte_experimental  void rte_bitset_shift_right (uint64_t *dst_bit-
	 set, const uint64_t *src_bitset, size_t size, size_t shift_bits)
     static __rte_experimental bool rte_bitset_equal (const uint64_t  *bitset_a,
	 const uint64_t *bitset_b, size_t size)
     __rte_experimental   ssize_t  rte_bitset_to_str  (const  uint64_t	*bitset,
	 size_t size, char *buf, size_t capacity)

Detailed Description
     RTE Bitset

     This file provides functions and macros for querying and manipulating  sets
     of bits kept in arrays of uint64_t-sized elements.

     The bits in a bitset are numbered from 0 to size - 1, with the lowest index
     being the least significant bit.

     The bitset array must be properly aligned.

     For  optimal performance, the size parameter, required by many of the API's
     functions, should be a compile-time constant.

     For large bitsets, the rte_bitmap.h API may be more appropriate.

     Warning
	 All functions modifying a bitset may overwrite any unused bits  of  the
	 last word. Such unused bits are ignored by all functions reading bits.

     Definition in file rte_bitset.h.

Macro Definition Documentation
   #define RTE_BITSET_WORD_SIZE   (sizeof(uint64_t))
     The  size	(in bytes) of each element in the array used to represent a bit-
     set.

     Definition at line 53 of file rte_bitset.h.

   #define RTE_BITSET_WORD_BITS   (RTE_BITSET_WORD_SIZE * CHAR_BIT)
     The size (in bits) of each element in the array used to represent a bitset.

     Definition at line 59 of file rte_bitset.h.

   #define RTE_BITSET_NUM_WORDS(size)	   ((size + RTE_BITSET_WORD_BITS - 1)  /
     RTE_BITSET_WORD_BITS)
     Computes the number of words required to store size bits.

     Definition at line 64 of file rte_bitset.h.

   #define   RTE_BITSET_SIZE(size)	 ((size_t)(RTE_BITSET_NUM_WORDS(size)  *
     RTE_BITSET_WORD_SIZE))
     Computes the amount of memory (in bytes) required to fit a  bitset  holding
     size bits.

     Definition at line 71 of file rte_bitset.h.

   #define    RTE_BITSET_DECLARE(name,	  size) 	uint64_t   name[RTE_BIT-
     SET_NUM_WORDS(size)]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Declare a bitset.

     Declare (e.g., as a struct field) or define (e.g., as a stack  variable)  a
     bitset of the specified size.

     Parameters
	 size The number of bits the bitset must be able to represent. Must be a
	 compile-time constant.
	 name The field or variable name of the resulting definition.

     Definition at line 104 of file rte_bitset.h.

   #define  RTE_BITSET_FOREACH_SET(var,  bitset,  size)       __RTE_BITSET_FORE-
     ACH(var, bitset, size, 0, size, 0)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Iterate over all bits set.

     This macro iterates over all bits set (i.e., all ones) in	the  bitset,  in
     the forward direction (i.e., starting with the least significant '1').

     Parameters
	 var  An  iterator  variable of type ssize_t. For each successive itera-
	 tion, this variable will hold the bit index of a set bit.
	 bitset A const uint64_t * pointer to the bitset array.
	 size The size of the bitset (in bits).

     Definition at line 135 of file rte_bitset.h.

   #define  RTE_BITSET_FOREACH_CLEAR(var,  bitset,  size)     __RTE_BITSET_FORE-
     ACH(var, bitset, size, 0, size, __RTE_BITSET_FIND_FLAG_FIND_CLEAR)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Iterate over all bits cleared.

     This macro iterates over all bits cleared in the bitset, in the forward di-
     rection (i.e., starting with the lowest-indexed set bit).

     Parameters
	 var  An  iterator  variable of type ssize_t. For each successive itera-
	 tion, this variable will hold the bit index of a cleared bit.
	 bitset A const uint64_t * pointer to the bitset array.
	 size The size of the bitset (in bits).

     Definition at line 155 of file rte_bitset.h.

   #define  RTE_BITSET_FOREACH_SET_RANGE(var,  bitset,	size,  start_bit,   len)
      __RTE_BITSET_FOREACH(var, bitset, size, start_bit, len, 0)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Iterate over all bits set within a range.

     This  macro  iterates  over  all bits set (i.e., all ones) in the specified
     range, in the forward direction (i.e., starting with the least  significant
     '1').

     Parameters
	 var  An  iterator  variable of type ssize_t. For each successive itera-
	 tion, this variable will hold the bit index of a set bit.
	 bitset A const uint64_t * pointer to the bitset array.
	 size The size of the bitset (in bits).
	 start_bit The index of the first bit to check. Must be less than size.
	 len The length (in bits) of the range. start_bit +  len  must	be  less
	 than or equal to size.

     Definition at line 181 of file rte_bitset.h.

   #define  RTE_BITSET_FOREACH_CLEAR_RANGE(var,  bitset,  size,  start_bit, len)
	 __RTE_BITSET_FOREACH(var,  bitset,  size,  start_bit,	len,  __RTE_BIT-
     SET_FIND_FLAG_FIND_CLEAR)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Iterate over all cleared bits within a range.

     This  macro iterates over all bits cleared (i.e., all zeroes) in the speci-
     fied range, in the forward direction (i.e., starting with the least signif-
     icant '0').

     Parameters
	 var An iterator variable of type ssize_t. For	each  successive  itera-
	 tion, this variable will hold the bit index of a set bit.
	 bitset A const uint64_t * pointer to the bitset array.
	 size The size of the bitset (in bits).
	 start_bit The index of the first bit to check. Must be less than size.
	 len  The  length  (in	bits) of the range. start_bit + len must be less
	 than or equal to size.

     Definition at line 207 of file rte_bitset.h.

Function Documentation
   static __rte_experimental void rte_bitset_init  (uint64_t  *  bitset,  size_t
     size) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Initializes a bitset.

     All bits are cleared.

     In  case  all  words  in  the bitset array are already set to zero by other
     means (e.g., at the time of memory allocation), this function need  not  be
     called.

     Parameters
	 bitset A pointer to the array of bitset 64-bit words.
	 size The size of the bitset (in bits).

     Definition at line 236 of file rte_bitset.h.

   static  __rte_experimental  bool  rte_bitset_test  (const  uint64_t * bitset,
     size_t bit_num) [inline],	[static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Test if a bit is set.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num Index of the bit to test. Index 0 is the least significant bit.

     Returns
	 Returns true if the bit is '1', and false if the bit is '0'.

     Definition at line 256 of file rte_bitset.h.

   static __rte_experimental void  rte_bitset_set  (uint64_t  *  bitset,  size_t
     bit_num) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Set a bit in the bitset.

     Bits are numbered from 0 to (size - 1) (inclusive).

     The operation is not guaranteed to be atomic.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num The index of the bit to be set.

     Definition at line 284 of file rte_bitset.h.

   static  __rte_experimental  void  rte_bitset_clear (uint64_t * bitset, size_t
     bit_num) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Clear a bit in the bitset.

     Bits are numbered 0 to (size - 1) (inclusive).

     The operation is not guaranteed to be atomic.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num The index of the bit to be cleared.

     Definition at line 312 of file rte_bitset.h.

   static __rte_experimental void rte_bitset_assign (uint64_t *  bitset,  size_t
     bit_num, bool bit_value) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Set or clear a bit in the bitset.

     Bits are numbered 0 to (size - 1) (inclusive).

     The operation is not guaranteed to be atomic.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num The index of the bit to be set or cleared.
	 bit_value Control if the bit should be set or cleared.

     Definition at line 342 of file rte_bitset.h.

   static  __rte_experimental  void  rte_bitset_flip  (uint64_t * bitset, size_t
     bit_num) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Change the value of a bit in the bitset.

     Bits are numbered 0 to (size - 1) (inclusive).

     The operation is not guaranteed to be atomic.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num The index of the bit to be flipped.

     Definition at line 371 of file rte_bitset.h.

   static __rte_experimental bool rte_bitset_atomic_test (const uint64_t *  bit-
     set, size_t bit_num, int memory_order) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Atomically test if a bit is set.

     Atomically  test  if a bit in a bitset is set with the specified memory or-
     dering.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num Index of the bit to test. Index 0 is the least significant bit.
	 memory_order The memory order to use.

     Returns
	 Returns true if the bit is '1', and false if the bit is '0'.

     Definition at line 402 of file rte_bitset.h.

   static __rte_experimental  void  rte_bitset_atomic_set  (uint64_t  *  bitset,
     size_t bit_num, int memory_order) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Atomically set a bit in the bitset.

     Set a bit in a bitset as an atomic operation, with the specified memory or-
     dering.

     rte_bitset_atomic_set()  is  multi-thread safe, provided all threads acting
     in parallel on the same bitset does so through rte_bitset_atomic_*()  func-
     tions.

     Bits are numbered from 0 to (size - 1) (inclusive).

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num The index of the bit to be set.
	 memory_order The memory order to use.

     Definition at line 438 of file rte_bitset.h.

   static  __rte_experimental  void  rte_bitset_atomic_clear (uint64_t * bitset,
     size_t bit_num, int memory_order) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Atomically clear a bit in the bitset.

     Clear a bit in a bitset as an atomic operation, with the  specified  memory
     ordering.

     rte_bitset_atomic_clear() is multi-thread safe, provided all threads acting
     in  parallel on the same bitset does so through rte_bitset_atomic_*() func-
     tions.

     Bits are numbered from 0 to (size - 1) (inclusive).

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num The index of the bit to be cleared.
	 memory_order The memory order to use.

     Definition at line 474 of file rte_bitset.h.

   static __rte_experimental void rte_bitset_atomic_assign (uint64_t  *  bitset,
     size_t bit_num, bool bit_value, int memory_order) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Atomically set or clear a bit in the bitset.

     Assign a value to a bit in a bitset as an atomic operation, with the speci-
     fied memory ordering.

     rte_bitset_atomic_assign()  is multi-thread safe, provided all threads act-
     ing in parallel on the same bitset does  so  through  rte_bitset_atomic_*()
     functions.

     Bits are numbered from 0 to (size - 1) (inclusive).

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num The index of the bit to be set or cleared.
	 bit_value Control if the bit should be set or cleared.
	 memory_order The memory order to use.

     Definition at line 512 of file rte_bitset.h.

   static  __rte_experimental  void  rte_bitset_atomic_flip  (uint64_t * bitset,
     size_t bit_num, int memory_order) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Atomically change the value of a bit in the bitset.

     Flip a bit in a bitset as an atomic operation, with  the  specified  memory
     ordering.

     rte_bitset_atomic_flip()  is multi-thread safe, provided all threads acting
     in parallel on the same bitset does so through rte_bitset_atomic_*()  func-
     tions.

     Bits are numbered from 0 to (size - 1) (inclusive).

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 bit_num The index of the bit to be flipped.
	 memory_order The memory order to use.

     Definition at line 549 of file rte_bitset.h.

   static  __rte_experimental void rte_bitset_set_all (uint64_t * bitset, size_t
     size) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Set all bits in the bitset.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).

     Definition at line 574 of file rte_bitset.h.

   static  __rte_experimental  void  rte_bitset_clear_all  (uint64_t  *  bitset,
     size_t size) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Clear all bits in the bitset.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).

     Definition at line 592 of file rte_bitset.h.

   static  __rte_experimental size_t rte_bitset_count_set (const uint64_t * bit-
     set, size_t size) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Count all set bits (also known as the weight).

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).

     Returns
	 Returns the number of '1' bits in the bitset.

     Definition at line 618 of file rte_bitset.h.

   static __rte_experimental size_t  rte_bitset_count_clear  (const  uint64_t  *
     bitset, size_t size) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Count all cleared bits.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).

     Returns
	 Returns the number of '0' bits in the bitset.

     Definition at line 650 of file rte_bitset.h.

   static __rte_experimental ssize_t rte_bitset_find_first_set (const uint64_t *
     bitset, size_t size) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Find first bit set.

     Scans the bitset in the forward direction (i.e., starting at the least sig-
     nificant bit), and returns the index of the first '1'.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).

     Returns
	 Returns  the  index of the least significant '1', or -1 if all bits are
	 '0'.

     Definition at line 767 of file rte_bitset.h.

   static __rte_experimental ssize_t rte_bitset_find_set (const uint64_t *  bit-
     set, size_t size, size_t start_bit, size_t len) [inline],	[static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Find first bit set at offset.

     Scans the bitset in the forward direction (i.e., starting at the least sig-
     nificant bit), starting at an offset start_bit into the bitset, and returns
     the index of the first '1' encountered.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).
	 start_bit The index of the first bit to check. Must be less than size.
	 len  The  number  of bits to scan. start_bit + len must be less than or
	 equal to size.

     Returns
	 Returns the index of the least significant '1', or -1 if all  bits  are
	 '0'.

     Definition at line 803 of file rte_bitset.h.

   static  __rte_experimental ssize_t rte_bitset_find_set_wrap (const uint64_t *
     bitset, size_t size, size_t start_bit, size_t len) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Find first bit set at offset, with wrap-around.

     Scans the bitset in the forward direction (i.e., starting at the least sig-
     nificant bit), starting at an offset start_bit into the bitset. If  no  '1'
     is  encountered  before  the end of the bitset, the search will continue at
     index 0.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).
	 start_bit The index of the first bit to check. Must be less than size.
	 len The number of bits to scan. start_bit + len must be  less	than  or
	 equal to size.

     Returns
	 Returns  the  index of the least significant '1', or -1 if all bits are
	 '0'.

     Definition at line 842 of file rte_bitset.h.

   static __rte_experimental ssize_t rte_bitset_find_first_clear (const uint64_t
     * bitset, size_t size) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Find first cleared bit.

     Scans the bitset in the forward direction (i.e., starting at the least sig-
     nificant bit), and returns the index of the first '0'.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).

     Returns
	 Returns the index of the least significant '0', or -1 if all  bits  are
	 '1'.

     Definition at line 874 of file rte_bitset.h.

   static  __rte_experimental  ssize_t	rte_bitset_find_clear  (const uint64_t *
     bitset, size_t size, size_t start_bit, size_t len) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Find first cleared bit at offset.

     Scans the bitset in the forward direction (i.e., starting at the least sig-
     nificant bit), starting at an offset start_bit into the bitset, and returns
     the index of the first '0' encountered.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).
	 start_bit The index of the first bit to check. Must be less than size.
	 len The number of bits to scan. start_bit + len must be  less	than  or
	 equal to size.

     Returns
	 Returns  the  index of the least significant '0', or -1 if all bits are
	 '1'.

     Definition at line 910 of file rte_bitset.h.

   static __rte_experimental ssize_t rte_bitset_find_clear_wrap (const	uint64_t
     * bitset, size_t size, size_t start_bit, size_t len) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Find first cleared bit at offset, with wrap-around.

     Scans the bitset in the forward direction (i.e., starting at the least sig-
     nificant  bit),  starting at an offset start_bit into the bitset. If no '0'
     is encountered before the end of the bitset, the search  will  continue  at
     index 0.

     Parameters
	 bitset A pointer to the array of words making up the bitset.
	 size The size of the bitset (in bits).
	 start_bit The index of the first bit to check. Must be less than size.
	 len  The  number  of bits to scan. start_bit + len must be less than or
	 equal to size.

     Returns
	 Returns the index of the least significant '0', or -1 if all  bits  are
	 '1'.

     Definition at line 949 of file rte_bitset.h.

   static  __rte_experimental  void  rte_bitset_copy  (uint64_t  *__rte_restrict
     dst_bitset, const uint64_t *__rte_restrict src_bitset,  size_t  size)  [in-
     line],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Copy bitset.

     Copy the bits of the src_bitset to the dst_bitset.

     The bitsets may not overlap and must be of equal size.

     Parameters
	 dst_bitset A pointer to the array of words making up the bitset.
	 src_bitset A pointer to the array of words making up the bitset.
	 size The size of the bitsets (in bits).

     Definition at line 982 of file rte_bitset.h.

   static  __rte_experimental  void  rte_bitset_or (uint64_t * dst_bitset, const
     uint64_t * src_bitset0, const uint64_t *  src_bitset1,  size_t  size)  [in-
     line],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Bitwise or two bitsets.

     Perform  a  bitwise  OR operation on all bits in the two equal-size bitsets
     src_bitset0 and src_bitset1, and store the results in dst_bitset.

     Parameters
	 dst_bitset A pointer to the destination bitset.
	 src_bitset0 A pointer to the first source bitset.
	 src_bitset1 A pointer to the second source bitset.
	 size The size of the bitsets (in bits).

     Definition at line 1009 of file rte_bitset.h.

   static __rte_experimental void rte_bitset_and (uint64_t *  dst_bitset,  const
     uint64_t  *  src_bitset0,	const  uint64_t * src_bitset1, size_t size) [in-
     line],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Bitwise and two bitsets.

     Perform a bitwise AND operation on all bits in the two  equal-size  bitsets
     src_bitset0 and src_bitset1, and store the result in dst_bitset.

     Parameters
	 dst_bitset A pointer to the destination bitset.
	 src_bitset0 A pointer to the first source bitset.
	 src_bitset1 A pointer to the second source bitset.
	 size The size of the bitsets (in bits).

     Definition at line 1039 of file rte_bitset.h.

   static  __rte_experimental  void rte_bitset_xor (uint64_t * dst_bitset, const
     uint64_t * src_bitset0, const uint64_t *  src_bitset1,  size_t  size)  [in-
     line],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Bitwise xor two bitsets.

     Perform  a  bitwise XOR operation on all bits in the two equal-size bitsets
     src_bitset0 and src_bitset1, and store the result in dst_bitset.

     Parameters
	 dst_bitset A pointer to the destination bitset.
	 src_bitset0 A pointer to the first source bitset.
	 src_bitset1 A pointer to the second source bitset.
	 size The size of the bitsets (in bits).

     Definition at line 1069 of file rte_bitset.h.

   static __rte_experimental void rte_bitset_complement (uint64_t *  dst_bitset,
     const uint64_t * src_bitset, size_t size) [inline],  [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Compute the bitwise complement of a bitset.

     Flip every bit in the src_bitset, and store the result in dst_bitset.

     Parameters
	 dst_bitset A pointer to the destination bitset.
	 src_bitset A pointer to the source bitset.
	 size The size of the bitsets (in bits).

     Definition at line 1096 of file rte_bitset.h.

   static  __rte_experimental void rte_bitset_shift_left (uint64_t * dst_bitset,
     const uint64_t * src_bitset,  size_t  size,  size_t  shift_bits)  [inline],
     [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Shift bitset left.

     Perform a logical shift left of (multiply) src_bitset, and store the result
     in dst_bitset.

     Parameters
	 dst_bitset A pointer to the destination bitset.
	 src_bitset A pointer to the source bitset.
	 size The size of the bitsets (in bits).
	 shift_bits The number of bits to shift the bitset.

     Definition at line 1124 of file rte_bitset.h.

   static __rte_experimental void rte_bitset_shift_right (uint64_t * dst_bitset,
     const  uint64_t  *  src_bitset,  size_t  size, size_t shift_bits) [inline],
     [static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Shift bitset right.

     Perform a logical shift right of (divide) src_bitset, and store the  result
     in dst_bitset.

     Parameters
	 dst_bitset A pointer to the destination bitset.
	 src_bitset A pointer to the source bitset.
	 size The size of the bitsets (in bits).
	 shift_bits The number of bits to shift the bitset.

     Definition at line 1169 of file rte_bitset.h.

   static  __rte_experimental  bool rte_bitset_equal (const uint64_t * bitset_a,
     const uint64_t * bitset_b, size_t size) [inline],	[static]
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Compare two bitsets.

     Compare two bitsets for equality.

     Parameters
	 bitset_a A pointer to the destination bitset.
	 bitset_b A pointer to the source bitset.
	 size The size of the bitsets (in bits).

     Definition at line 1222 of file rte_bitset.h.

   __rte_experimental ssize_t rte_bitset_to_str (const uint64_t * bitset, size_t
     size, char * buf, size_t capacity)
     Warning
	 EXPERIMENTAL: this API may change without prior notice.

     Converts a bitset to a string.

     This function prints a string representation of the bitstring to  the  sup-
     plied buffer.

     Each  bit is represented either by '0' or '1' in the output, with the first
     (left-most) character in the output being the most significant bit. The re-
     sulting string is NUL terminated.

     Parameters
	 bitset A pointer to the array of bitset 64-bit words.
	 size The number of bits the bitset represent.
	 buf A buffer to hold the output.
	 capacity The size of the buffer. Must be size + 1 or larger.

     Returns
	 Returns the number of bytes written (i.e., size +  1),  or  -EINVAL  in
	 case the buffer capacity was too small.

Author
     Generated automatically by Doxygen for DPDK from the source code.

Version 25.11.0 		 Thu Aug 27 2026		 rte_bitset.h(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=RTE_BITSET_FOREACH_SET&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help