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>
429 static void assign(bsl::uint64_t *bitString,
437 static void assign(bsl::uint64_t *bitString,
440 bsl::size_t numBits);
445 static void assign0(bsl::uint64_t *bitString, bsl::size_t index);
452 bsl::size_t numBits);
457 static void assign1(bsl::uint64_t *bitString, bsl::size_t index);
464 bsl::size_t numBits);
473 bsl::uint64_t srcValue,
474 bsl::size_t numBits);
486 bsl::size_t dstIndex,
487 const bsl::uint64_t *srcBitString,
488 bsl::size_t srcIndex,
489 bsl::size_t numBits);
500 bsl::size_t dstIndex,
501 const bsl::uint64_t *srcBitString,
502 bsl::size_t srcIndex,
503 bsl::size_t numBits);
512 static void orEqual(bsl::uint64_t *dstBitString,
513 bsl::size_t dstIndex,
514 const bsl::uint64_t *srcBitString,
515 bsl::size_t srcIndex,
516 bsl::size_t numBits);
526 bsl::size_t dstIndex,
527 const bsl::uint64_t *srcBitString,
528 bsl::size_t srcIndex,
529 bsl::size_t numBits);
540 static void copy(bsl::uint64_t *dstBitString,
541 bsl::size_t dstIndex,
542 const bsl::uint64_t *srcBitString,
543 bsl::size_t srcIndex,
544 bsl::size_t numBits);
555 static void copyRaw(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);
570 static void insert(bsl::uint64_t *bitString,
571 bsl::size_t initialLength,
572 bsl::size_t dstIndex,
574 bsl::size_t numBits);
583 static void insert0(bsl::uint64_t *bitString,
584 bsl::size_t initialLength,
585 bsl::size_t dstIndex,
586 bsl::size_t numBits);
595 static void insert1(bsl::uint64_t *bitString,
596 bsl::size_t initialLength,
597 bsl::size_t dstIndex,
598 bsl::size_t numBits);
609 bsl::size_t initialLength,
610 bsl::size_t dstIndex,
611 bsl::size_t numBits);
619 static void remove(bsl::uint64_t *bitString,
622 bsl::size_t numBits);
633 bsl::size_t numBits);
644 bsl::size_t numBits);
655 static void swapRaw(bsl::uint64_t *bitString1,
657 bsl::uint64_t *bitString2,
659 bsl::size_t numBits);
665 static void toggle(bsl::uint64_t *bitString,
667 bsl::size_t numBits);
676 static bool areEqual(
const bsl::uint64_t *bitString1,
677 const bsl::uint64_t *bitString2,
678 bsl::size_t numBits);
686 static bool areEqual(
const bsl::uint64_t *bitString1,
688 const bsl::uint64_t *bitString2,
690 bsl::size_t numBits);
697 static bool bit(
const bsl::uint64_t *bitString, bsl::size_t index);
704 static bsl::uint64_t
bits(
const bsl::uint64_t *bitString,
706 bsl::size_t numBits);
776 static bool isAny0(
const bsl::uint64_t *bitString,
778 bsl::size_t numBits);
784 static bool isAny1(
const bsl::uint64_t *bitString,
786 bsl::size_t numBits);
792 static bsl::size_t
num0(
const bsl::uint64_t *bitString,
794 bsl::size_t numBits);
800 static bsl::size_t
num1(
const bsl::uint64_t *bitString,
802 bsl::size_t numBits);
817 static bsl::ostream&
print(bsl::ostream& stream,
818 const bsl::uint64_t *bitString,
821 int spacesPerLevel = 4);
849 bitString[idx] |= (1ULL << pos);
852 bitString[idx] &= ~(1ULL << pos);
864 bitString[idx] &= ~(1ULL << pos);
875 bitString[idx] |= 1ULL << pos;
882 bsl::size_t initialLength,
883 bsl::size_t dstIndex,
889 insertRaw(bitString, initialLength, dstIndex, numBits);
890 assign(bitString, dstIndex, value, numBits);
895 bsl::size_t initialLength,
896 bsl::size_t dstIndex,
901 insertRaw(bitString, initialLength, dstIndex, numBits);
902 assign0(bitString, dstIndex, numBits);
907 bsl::size_t initialLength,
908 bsl::size_t dstIndex,
913 insertRaw(bitString, initialLength, dstIndex, numBits);
914 assign1(bitString, dstIndex, numBits);
925 remove(bitString, length, index, numBits);
926 assign0(bitString, length - numBits, numBits);
937 remove(bitString, length, index, numBits);
938 assign1(bitString, length - numBits, numBits);
952 return bitString[idx] & (1ULL << pos);
964 return numBits -
num1(bitString, index, numBits);
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1804
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
Definition bdlb_algorithmworkaroundutil.h:74
Definition bdlb_bitstringutil.h:414
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:839
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:857
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:945
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:420
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:906
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:868
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:894
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:958
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:930
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:881
static void removeAndFill0(bsl::uint64_t *bitString, bsl::size_t length, bsl::size_t index, bsl::size_t numBits)
Definition bdlb_bitstringutil.h:918
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:417