8#ifndef INCLUDED_BDLB_BITSTRINGUTIL
9#define INCLUDED_BDLB_BITSTRINGUTIL
393#include <bdlscm_version.h>
400#include <bsl_cstddef.h>
401#include <bsl_cstdint.h>
402#include <bsl_iosfwd.h>
432 static void assign(bsl::uint64_t *bitString,
441 static void assign(bsl::uint64_t *bitString,
444 bsl::size_t numBits);
450 static void assign0(bsl::uint64_t *bitString, bsl::size_t index);
458 bsl::size_t numBits);
464 static void assign1(bsl::uint64_t *bitString, bsl::size_t index);
472 bsl::size_t numBits);
482 bsl::uint64_t srcValue,
483 bsl::size_t numBits);
496 bsl::size_t dstIndex,
497 const bsl::uint64_t *srcBitString,
498 bsl::size_t srcIndex,
499 bsl::size_t numBits);
512 bsl::size_t dstIndex,
513 const bsl::uint64_t *srcBitString,
514 bsl::size_t srcIndex,
515 bsl::size_t numBits);
525 static void orEqual(bsl::uint64_t *dstBitString,
526 bsl::size_t dstIndex,
527 const bsl::uint64_t *srcBitString,
528 bsl::size_t srcIndex,
529 bsl::size_t numBits);
540 bsl::size_t dstIndex,
541 const bsl::uint64_t *srcBitString,
542 bsl::size_t srcIndex,
543 bsl::size_t numBits);
555 static void copy(bsl::uint64_t *dstBitString,
556 bsl::size_t dstIndex,
557 const bsl::uint64_t *srcBitString,
558 bsl::size_t srcIndex,
559 bsl::size_t numBits);
571 static void copyRaw(bsl::uint64_t *dstBitString,
572 bsl::size_t dstIndex,
573 const bsl::uint64_t *srcBitString,
574 bsl::size_t srcIndex,
575 bsl::size_t numBits);
587 static void insert(bsl::uint64_t *bitString,
588 bsl::size_t initialLength,
589 bsl::size_t dstIndex,
591 bsl::size_t numBits);
601 static void insert0(bsl::uint64_t *bitString,
602 bsl::size_t initialLength,
603 bsl::size_t dstIndex,
604 bsl::size_t numBits);
614 static void insert1(bsl::uint64_t *bitString,
615 bsl::size_t initialLength,
616 bsl::size_t dstIndex,
617 bsl::size_t numBits);
630 bsl::size_t initialLength,
631 bsl::size_t dstIndex,
632 bsl::size_t numBits);
641 static void remove(bsl::uint64_t *bitString,
644 bsl::size_t numBits);
656 bsl::size_t numBits);
668 bsl::size_t numBits);
680 static void swapRaw(bsl::uint64_t *bitString1,
682 bsl::uint64_t *bitString2,
684 bsl::size_t numBits);
691 static void toggle(bsl::uint64_t *bitString,
693 bsl::size_t numBits);
703 static bool areEqual(
const bsl::uint64_t *bitString1,
704 const bsl::uint64_t *bitString2,
705 bsl::size_t numBits);
714 static bool areEqual(
const bsl::uint64_t *bitString1,
716 const bsl::uint64_t *bitString2,
718 bsl::size_t numBits);
726 static bool bit(
const bsl::uint64_t *bitString, bsl::size_t index);
734 static bsl::uint64_t
bits(
const bsl::uint64_t *bitString,
736 bsl::size_t numBits);
811 static bool isAny0(
const bsl::uint64_t *bitString,
813 bsl::size_t numBits);
820 static bool isAny1(
const bsl::uint64_t *bitString,
822 bsl::size_t numBits);
829 static bsl::size_t
num0(
const bsl::uint64_t *bitString,
831 bsl::size_t numBits);
838 static bsl::size_t
num1(
const bsl::uint64_t *bitString,
840 bsl::size_t numBits);
856 static bsl::ostream&
print(bsl::ostream& stream,
857 const bsl::uint64_t *bitString,
860 int spacesPerLevel = 4);
888 bitString[idx] |= (1ULL << pos);
891 bitString[idx] &= ~(1ULL << pos);
903 bitString[idx] &= ~(1ULL << pos);
914 bitString[idx] |= 1ULL << pos;
921 bsl::size_t initialLength,
922 bsl::size_t dstIndex,
928 insertRaw(bitString, initialLength, dstIndex, numBits);
929 assign(bitString, dstIndex, value, numBits);
934 bsl::size_t initialLength,
935 bsl::size_t dstIndex,
940 insertRaw(bitString, initialLength, dstIndex, numBits);
941 assign0(bitString, dstIndex, numBits);
946 bsl::size_t initialLength,
947 bsl::size_t dstIndex,
952 insertRaw(bitString, initialLength, dstIndex, numBits);
953 assign1(bitString, dstIndex, numBits);
964 remove(bitString, length, index, numBits);
965 assign0(bitString, length - numBits, numBits);
976 remove(bitString, length, index, numBits);
977 assign1(bitString, length - numBits, numBits);
991 return bitString[idx] & (1ULL << pos);
1003 return numBits -
num1(bitString, index, numBits);
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlb_algorithmworkaroundutil.h:74
Definition bdlb_bitstringutil.h:416
static bsl::size_t find0AtMinIndex(const bsl::uint64_t *bitString, bsl::size_t length)
static void insertRaw(bsl::uint64_t *bitString, bsl::size_t initialLength, bsl::size_t dstIndex, bsl::size_t numBits)
static void assign(bsl::uint64_t *bitString, bsl::size_t index, bool value)
Definition bdlb_bitstringutil.h:878
static void toggle(bsl::uint64_t *bitString, bsl::size_t index, bsl::size_t numBits)
static void assignBits(bsl::uint64_t *bitString, bsl::size_t index, bsl::uint64_t srcValue, bsl::size_t numBits)
static void assign0(bsl::uint64_t *bitString, bsl::size_t index)
Definition bdlb_bitstringutil.h:896
static bool areEqual(const bsl::uint64_t *bitString1, bsl::size_t index1, const bsl::uint64_t *bitString2, bsl::size_t index2, bsl::size_t numBits)
static bool bit(const bsl::uint64_t *bitString, bsl::size_t index)
Definition bdlb_bitstringutil.h:984
static void orEqual(bsl::uint64_t *dstBitString, bsl::size_t dstIndex, const bsl::uint64_t *srcBitString, bsl::size_t srcIndex, bsl::size_t numBits)
static const bsl::size_t k_INVALID_INDEX
Definition bdlb_bitstringutil.h:422
static bsl::size_t find1AtMinIndex(const bsl::uint64_t *bitString, bsl::size_t begin, bsl::size_t end)
static bsl::uint64_t bits(const bsl::uint64_t *bitString, bsl::size_t index, bsl::size_t numBits)
static bool areEqual(const bsl::uint64_t *bitString1, const bsl::uint64_t *bitString2, bsl::size_t numBits)
static void insert1(bsl::uint64_t *bitString, bsl::size_t initialLength, bsl::size_t dstIndex, bsl::size_t numBits)
Definition bdlb_bitstringutil.h:945
static void copyRaw(bsl::uint64_t *dstBitString, bsl::size_t dstIndex, const bsl::uint64_t *srcBitString, bsl::size_t srcIndex, bsl::size_t numBits)
static bsl::size_t find0AtMaxIndex(const bsl::uint64_t *bitString, bsl::size_t begin, bsl::size_t end)
static void assign1(bsl::uint64_t *bitString, bsl::size_t index, bsl::size_t numBits)
static bsl::size_t find0AtMaxIndex(const bsl::uint64_t *bitString, bsl::size_t length)
static bsl::size_t find1AtMaxIndex(const bsl::uint64_t *bitString, bsl::size_t length)
static void assign1(bsl::uint64_t *bitString, bsl::size_t index)
Definition bdlb_bitstringutil.h:907
static void remove(bsl::uint64_t *bitString, bsl::size_t length, bsl::size_t index, bsl::size_t numBits)
static void insert0(bsl::uint64_t *bitString, bsl::size_t initialLength, bsl::size_t dstIndex, bsl::size_t numBits)
Definition bdlb_bitstringutil.h:933
static bool isAny0(const bsl::uint64_t *bitString, bsl::size_t index, bsl::size_t numBits)
static void assign0(bsl::uint64_t *bitString, bsl::size_t index, bsl::size_t numBits)
static void assign(bsl::uint64_t *bitString, bsl::size_t index, bool value, bsl::size_t numBits)
static void andEqual(bsl::uint64_t *dstBitString, bsl::size_t dstIndex, const bsl::uint64_t *srcBitString, bsl::size_t srcIndex, bsl::size_t numBits)
static void minusEqual(bsl::uint64_t *dstBitString, bsl::size_t dstIndex, const bsl::uint64_t *srcBitString, bsl::size_t srcIndex, bsl::size_t numBits)
static bsl::size_t find1AtMinIndex(const bsl::uint64_t *bitString, bsl::size_t length)
static bsl::size_t num0(const bsl::uint64_t *bitString, bsl::size_t index, bsl::size_t numBits)
Definition bdlb_bitstringutil.h:997
static bool isAny1(const bsl::uint64_t *bitString, bsl::size_t index, bsl::size_t numBits)
static bsl::size_t find0AtMinIndex(const bsl::uint64_t *bitString, bsl::size_t begin, bsl::size_t end)
static void copy(bsl::uint64_t *dstBitString, bsl::size_t dstIndex, const bsl::uint64_t *srcBitString, bsl::size_t srcIndex, bsl::size_t numBits)
static bsl::ostream & print(bsl::ostream &stream, const bsl::uint64_t *bitString, bsl::size_t numBits, int level=1, int spacesPerLevel=4)
static bsl::size_t find1AtMaxIndex(const bsl::uint64_t *bitString, bsl::size_t begin, bsl::size_t end)
static void removeAndFill1(bsl::uint64_t *bitString, bsl::size_t length, bsl::size_t index, bsl::size_t numBits)
Definition bdlb_bitstringutil.h:969
static void swapRaw(bsl::uint64_t *bitString1, bsl::size_t index1, bsl::uint64_t *bitString2, bsl::size_t index2, bsl::size_t numBits)
static void insert(bsl::uint64_t *bitString, bsl::size_t initialLength, bsl::size_t dstIndex, bool value, bsl::size_t numBits)
Definition bdlb_bitstringutil.h:920
static void removeAndFill0(bsl::uint64_t *bitString, bsl::size_t length, bsl::size_t index, bsl::size_t numBits)
Definition bdlb_bitstringutil.h:957
static void xorEqual(bsl::uint64_t *dstBitString, bsl::size_t dstIndex, const bsl::uint64_t *srcBitString, bsl::size_t srcIndex, bsl::size_t numBits)
static bsl::size_t num1(const bsl::uint64_t *bitString, bsl::size_t index, bsl::size_t numBits)
@ k_BITS_PER_UINT64
Definition bdlb_bitstringutil.h:419