[#BloombergLP-bdlc]
= xref:BloombergLP.adoc[BloombergLP]::bdlc
:relfileprefix: ../
:mrdocs:

Components providing a compact, value&hyphen;semantic bit array&period;

== Types

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bdlc/BitArray.adoc[`BitArray`] 
| This class implements an efficient, value&hyphen;semantic array of boolean (a&period;k&period;a&period; bit, i&period;e&period;, binary digit) values stored in contiguous memory&period; The physical capacity of this array may grow, but never shrinks&period; Capacity may be reserved initially via a constructor, or at any time thereafter by using the `reserveCapacity` method&semi; otherwise, capacity will be increased automatically as needed&period; Note that capacity is not a _salient_ attribute of this object, and, as such, does not contribute to overall value&period; Also note that this class provides an implicit no&hyphen;throw guarantee for all methods (including manipulators) that do not attempt to alter capacity&period;
| xref:BloombergLP/bdlc/CompactedArray.adoc[`CompactedArray`] 
| This space&hyphen;efficient, value&hyphen;semantic array class represents a sequence of `TYPE` elements&period; The interface provides functionality similar to a `vector&lt;TYPE&gt;`, however, modifiable references to individual elements are not provided&period; This class provides accessors that return iterators that provide non&hyphen;modifiable access to its elements&period; The returned iterators, unlike those returned by a `vector&lt;TYPE&gt;`, are _not_ invalidated upon reallocation&period;
| xref:BloombergLP/bdlc/CompactedArray_ConstIterator.adoc[`CompactedArray&lowbar;ConstIterator`] 
| This value&hyphen;semantic class represents a random access iterator providing non&hyphen;modifiable access to the elements of a `CompactedArray`&period; This class provides all functionality of a random access iterator, as defined by the standard, but is _not_ compatible with most standard methods requiring a bidirectional `const&lowbar;iterator`&period;
| xref:BloombergLP/bdlc/CompactedArray_CountedValue.adoc[`CompactedArray&lowbar;CountedValue`] 
| This `struct` represents a reference&hyphen;counted value&period; Note that comparison of `d&lowbar;count` is intentionally omitted from the free equality&hyphen;comparison operators of this class&period;
| xref:BloombergLP/bdlc/CompactedArray_RemoveAllProctor.adoc[`CompactedArray&lowbar;RemoveAllProctor`] 
| This class implements a proctor that, unless its `release` method has previously been invoked, automatically invokes `removeAll` on a `CompactedArray` upon destruction&period;
| xref:BloombergLP/bdlc/FlatHashMap.adoc[`FlatHashMap`] 
| This class template implements a value&hyphen;semantic container type holding an unordered map of `KEY&hyphen;VALUE` pairs having unique keys that provides a mapping from keys of (template parameter) type `KEY` to their associated mapped values of (template parameter) type `VALUE`&period; The (template parameter) type `HASH` is a functor providing the hash value for `KEY`&period; The (template parameter) type `EQUAL` is a functor providing the equality function for two `KEY` values&period; See &lcub;Requirements on `KEY`, `HASH`, and `EQUAL`&rcub; for more information&period;
| xref:BloombergLP/bdlc/FlatHashMap_EntryUtil.adoc[`FlatHashMap&lowbar;EntryUtil`] 
| This templated utility provides methods to construct an `ENTRY` and a method to extract the key from an `ENTRY`&period;
| xref:BloombergLP/bdlc/FlatHashSet.adoc[`FlatHashSet`] 
| This class template implements a value&hyphen;semantic container type holding an unordered set of unique values of (template parameter) type `KEY`&period; The (template parameter) type `HASH` is a functor providing the hash value for `KEY`&period; The (template parameter) type `EQUAL` is a functor providing the equality function for two `KEY` values&period; See &lcub;Requirements on `KEY`, `HASH`, and `EQUAL`&rcub; for more information&period;
| xref:BloombergLP/bdlc/FlatHashSet_EntryUtil.adoc[`FlatHashSet&lowbar;EntryUtil`] 
| This templated utility provides methods to construct an `ENTRY` and a method to extract the key from an `ENTRY` (which is, identically, the `ENTRY`)&period;
| xref:BloombergLP/bdlc/FlatHashTable.adoc[`FlatHashTable`] 
| This class template provides a flat hash table implementation useful for implementing a flat hash set and flat hash map&period;
| xref:BloombergLP/bdlc/FlatHashTable_GroupControl.adoc[`FlatHashTable&lowbar;GroupControl`] 
| This class provides methods for making inquires to the data of a group control loading during construction&period;
| xref:BloombergLP/bdlc/FlatHashTable_IteratorImp.adoc[`FlatHashTable&lowbar;IteratorImp`] 
| This class implements the methods required by `bsl&colon;&colon;ForwardIterator` to provide forward iterators&period; As such, an instance of this class represents a position within a flat hash table&period; This class uses no features of the `ENTRY` type except for addresses of `ENTRY` objects&period;
| xref:BloombergLP/bdlc/HashTable.adoc[`HashTable`] 
| This class is a double&hyphen;hashed table&period; The `VALUE` template parameter is optional&period; The `capacityHint` specified at construction time will be used to compute the number of buckets (capacity) in this object&period; Also, two hash functions may optionally be specified at construction time&period; Elements can be inserted using the `insert` method&period; If the `VALUE` parameter is not `bslmf&colon;&colon;Nil`, then both key and value must be supplied to the `insert` method&period; Otherwise, only the key should be supplied&period; The `find` method can be used to lookup elements by a specified key&period; The optional `TRAITS` parameter can be used to classify &quot;null&quot; and &quot;removed&quot; values&period; See the component&hyphen;level documentation for more details&period;
| xref:BloombergLP/bdlc/HashTableDefaultHash1.adoc[`HashTableDefaultHash1`] 
| Default hash function provided by this component&period; See component&hyphen;level documentation for more details&period; Note that this class is not intended to be used by clients, but the name of this struct must be public so that clients can explicitly specify this struct when default hash function is needed&period; Note that this functor is implemented using `bdlb&colon;&colon;HashUtil&colon;&colon;hash1`&period;
| xref:BloombergLP/bdlc/HashTableDefaultHash2.adoc[`HashTableDefaultHash2`] 
| Default hash function provided by this component&period; See component&hyphen;level documentation for more details&period; Note that this class is not intended to be used by clients, but the name of this struct must be public so that clients can explicitly specify this struct when default hash function is needed&period; Note that this functor is implemented using `bdlb&colon;&colon;HashUtil&colon;&colon;hash2`&period;
| xref:BloombergLP/bdlc/HashTableDefaultTraits.adoc[`HashTableDefaultTraits`] 
| Default traits provided by this component&period; See component&hyphen;level documentation for more details&period; Note that this class is not intended to be used by clients, but the name of this struct must be public so that clients can explicitly specify this struct when default traits are needed&period;
| xref:BloombergLP/bdlc/IndexClerk.adoc[`IndexClerk`] 
| This class defines an efficient, value&hyphen;semantic manager type for reusable, non&hyphen;negative integer indices&period; The class invariants are that the all decommissioned indices must be non&hyphen;negative, less than the next new index, and unique&period;
| xref:BloombergLP/bdlc/IndexClerkIter.adoc[`IndexClerkIter`] 
| This class defines an in&hyphen;core value&hyphen;semantic iterator providing sequential read&hyphen;only access to the decommissioned indices of a `IndexClerk`&period; The order of iteration is implementation dependent&period;
| xref:BloombergLP/bdlc/PackedIntArray-0b.adoc[`PackedIntArray`] 
| This space&hyphen;efficient value&hyphen;semantic array class represents a sequence of `TYPE` elements&semi; `TYPE` must be convertible to either a signed or unsigned 64&hyphen;bit integer using `static&lowbar;cast`&period; The interface provides functionality similar to a `vector&lt;int&gt;` however references to individual elements are not provided&period; This class provides accessors that return iterators that provide non&hyphen;modifiable access to its elements&period; The returned iterators, unlike those returned by a `vector&lt;int&gt;` are _not_ invalidated upon reallocation&period;
| xref:BloombergLP/bdlc/PackedIntArrayConstIterator.adoc[`PackedIntArrayConstIterator`] 
| This unconstrained (value&hyphen;semantic) class represents a random access iterator providing non&hyphen;modifiable access to the elements of a `PackedIntArray`&period; This class provides all functionality of a random access iterator, as defined by the standard, but is _not_ compatible with most standard methods requiring a bidirectional const&lowbar;iterator&period;
| xref:BloombergLP/bdlc/PackedIntArrayImp-0a.adoc[`PackedIntArrayImp`] 
| This space&hyphen;efficient value&hyphen;semantic array class represents a sequence of `STORAGE&colon;&colon;EightByteStorageType` elements&semi; `STORAGE&colon;&colon;EightByteStorageType` must be convertible to either a signed or unsigned 64&hyphen;bit integer using `static&lowbar;cast`&period; The interface provides functionality similar to a `vector&lt;int&gt;` however references to individual elements are not provided&period;
| xref:BloombergLP/bdlc/PackedIntArrayImpType-0d.adoc[`PackedIntArrayImpType`] 
| This meta&hyphen;function selects `PackedIntArrayImp&lt;PackedIntArrayImp&lowbar;Unsigned&gt;` if `TYPE` should be stored as an unsigned integer, and `PackedIntArrayImp&lt;PackedIntArrayImp&lowbar;Signed&gt;` otherwise&period;
| xref:BloombergLP/bdlc/PackedIntArrayImp_Signed.adoc[`PackedIntArrayImp&lowbar;Signed`] 
| This `struct` provides a namespace for types and methods used to implement a space&hyphen;efficient value&hyphen;semantic array class representing a sequence of `TYPE` elements&semi; `TYPE` must be convertible to either a `bsl&colon;&colon;int64&lowbar;t`&period; Specifically, it defines the types used to store the array&apos;s data, methods needed to externalize and unexternalize the array, and a method to determine the storage size to use for a given value&period;
| xref:BloombergLP/bdlc/PackedIntArrayImp_Unsigned.adoc[`PackedIntArrayImp&lowbar;Unsigned`] 
| This `struct` provides a namespace for types and methods used to implement a space&hyphen;efficient value&hyphen;semantic array class representing a sequence of `TYPE` elements&semi; `TYPE` must be convertible to either a `bsl&colon;&colon;uint64&lowbar;t`&period; Specifically, it defines the types used to store the array&apos;s data, methods needed to externalize and unexternalize the array, and a method to determine the storage size to use for a given value&period;
| xref:BloombergLP/bdlc/PackedIntArrayUtil.adoc[`PackedIntArrayUtil`] 
| This `struct` provides a namespace for utility functions that provide non&hyphen;primitive operations on `bdlc&colon;&colon;PackedIntArray`&period;
| xref:BloombergLP/bdlc/Queue.adoc[`Queue`] 
| This class implements an efficient, in&hyphen;place double&hyphen;ended queue of values of parameterized type `T`&period; The physical capacity of this queue may grow, but never shrinks&period; Capacity may be reserved initially via a constructor, or at any time thereafter by using the `reserveCapacity` and `reserveCapacityRaw` methods&period; Note that there is no guarantee of contiguous storage of consecutive elements&period;
|===


== Functions

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bdlc/hashAppend-0f.adoc[`hashAppend`] 
| `hashAppend` overloads
| xref:BloombergLP/bdlc/operator_bitand.adoc[`operator&amp;`] 
| Return the value that is the bitwise AND of the specified `lhs` and `rhs` arrays&period; The length of the resulting bit array will be the maximum of that of `lhs` and `rhs`, with any unmatched high&hyphen;order bits set to 0&period; Note that this behavior is consistent with zero&hyphen;extending a copy of the shorter array&period;
| xref:BloombergLP/bdlc/operator_plus-04.adoc[`operator&plus;`] 
| Addition operators
| xref:BloombergLP/bdlc/operator_inc-0c.adoc[`operator&plus;&plus;`] 
| Increment operators
| xref:BloombergLP/bdlc/operator_minus-0a4.adoc[`operator&hyphen;`] 
| Subtraction operators
| xref:BloombergLP/bdlc/operator_dec-0a.adoc[`operator&hyphen;&hyphen;`] 
| Decrement operators
| xref:BloombergLP/bdlc/operator_rshift.adoc[`operator&gt;&gt;`] 
| Return the value of the specified `array` right&hyphen;shifted by the specified `numBits` positions, having filled the higher&hyphen;index positions with zeros&period; The behavior is undefined unless `numBits &lt;&equals; array&period;length()`&period; Note that the length of the result equals the length of the original array, and that the lowest&hyphen;order `numBits` are discarded in the result&period;
| xref:BloombergLP/bdlc/operator_xor.adoc[`operator&circ;`] 
| Return the value that is the bitwise XOR of the specified `lhs` and `rhs` arrays&period; The length of the resulting bit array will be the maximum of that of `lhs` and `rhs`, with any unmatched high&hyphen;order bits copied unchanged&period; Note that this behavior is consistent with zero&hyphen;extending a copy of the shorter array&period;
| xref:BloombergLP/bdlc/operator_bitor.adoc[`operator&verbar;`] 
| Return the value that is the bitwise OR of the specified `lhs` and `rhs` arrays&period; The length of the resulting bit array will be the maximum of that of `lhs` and `rhs`, with any unmatched high&hyphen;order bits copied unchanged&period; Note that this behavior is consistent with zero&hyphen;extending a copy of the shorter array&period;
| xref:BloombergLP/bdlc/operator_bitnot.adoc[`operator&#126;`] 
| Return the bitwise complement (&quot;toggle&quot;) of the specified `array`&period;
| xref:BloombergLP/bdlc/swap-00f.adoc[`swap`] 
| `swap` overloads
| xref:BloombergLP/bdlc/operator_lshift-0683.adoc[`operator&lt;&lt;`] 
| Left shift operators
| xref:BloombergLP/bdlc/operator_eq-043.adoc[`operator&equals;&equals;`] 
| Equality operators
| xref:BloombergLP/bdlc/operator_not_eq-0e.adoc[`operator!&equals;`] 
| Inequality operators
| xref:BloombergLP/bdlc/operator_lt-0e.adoc[`operator&lt;`] 
| Less&hyphen;than operators
| xref:BloombergLP/bdlc/operator_le-01.adoc[`operator&lt;&equals;`] 
| Less&hyphen;than&hyphen;or&hyphen;equal operators
| xref:BloombergLP/bdlc/operator_gt-06.adoc[`operator&gt;`] 
| Greater&hyphen;than operators
| xref:BloombergLP/bdlc/operator_ge-05.adoc[`operator&gt;&equals;`] 
| Greater&hyphen;than&hyphen;or&hyphen;equal operators
|===



[.small]#Created with https://www.mrdocs.com[MrDocs]#
