8#ifndef INCLUDED_BDLC_COMPACTEDARRAY
9#define INCLUDED_BDLC_COMPACTEDARRAY
167#include <bdlscm_version.h>
186#include <bsl_algorithm.h>
187#include <bsl_cstddef.h>
188#include <bsl_iosfwd.h>
189#include <bsl_iterator.h>
190#include <bsl_limits.h>
191#include <bsl_vector.h>
197template <
class TYPE>
class CompactedArray;
199template <
class TYPE>
class CompactedArray_ConstIterator;
201template <
class TYPE> CompactedArray_ConstIterator<TYPE>
556 const TYPE&
operator[](bsl::ptrdiff_t offset)
const;
597 bsl::ptrdiff_t offset);
600 bsl::ptrdiff_t offset,
613 bsl::ptrdiff_t offset);
715 void erase(bsl::size_t index);
724 bsl::size_t increment(
const TYPE& value, bsl::size_t count = 1);
745 const TYPE& value = TYPE(),
786 bsl::size_t srcIndex,
787 bsl::size_t numElements);
794 void insert(bsl::size_t dstIndex,
const TYPE& value);
827 bsl::size_t srcIndex,
828 bsl::size_t numElements);
851 void remove(bsl::size_t dstIndex, bsl::size_t numElements);
871 void replace(bsl::size_t dstIndex,
const TYPE& value);
885 bsl::size_t srcIndex,
886 bsl::size_t numElements);
908 bsl::size_t numUniqueElements);
992 bsl::ostream&
print(bsl::ostream& stream,
994 int spacesPerLevel = 4)
const;
1017template <
class TYPE>
1025template <
class TYPE>
1034template <
class TYPE>
1043template <
class TYPE>
1049template <
class HASHALG,
class TYPE>
1061template <
class TYPE>
1069template <
class TYPE>
1074 d_array_p->removeAll();
1079template <
class TYPE>
1091template <
class TYPE>
1106template <
class TYPE>
1111: d_count(original.d_count)
1120template <
class TYPE>
1124 d_value.object().~TYPE();
1128template <
class TYPE>
1134 d_value.object() = rhs.d_value.object();
1135 d_count = rhs.d_count;
1143template <
class TYPE>
1146 const CompactedArray_CountedValue<TYPE>& rhs)
1148 return lhs.d_value.object() == rhs.d_value.object();
1151template <
class TYPE>
1154 const CompactedArray_CountedValue<TYPE>& rhs)
1156 return lhs.d_value.object() !=
rhs.d_value.object();
1159template <
class TYPE>
1164 return lhs.d_value.object() <
rhs;
1167template <
class TYPE>
1170 const CompactedArray_CountedValue<TYPE>& rhs)
1172 return lhs <
rhs.d_value.object();
1182template <
class TYPE>
1185 const CompactedArray<TYPE> *array,
1195template <
class TYPE>
1203template <
class TYPE>
1207: d_array_p(original.d_array_p)
1208, d_index(original.d_index)
1213template <
class TYPE>
1218 d_array_p = rhs.d_array_p;
1219 d_index = rhs.d_index;
1223template <
class TYPE>
1232 BSLS_ASSERT( 0 <= offset || d_index >= bsl::size_t(-offset));
1234 || d_array_p->length() - d_index >= bsl::size_t(offset));
1240template <
class TYPE>
1249 BSLS_ASSERT( 0 >= offset || d_index >= bsl::size_t(offset));
1251 || d_array_p->length() - d_index >= bsl::size_t(-offset));
1257template <
class TYPE>
1269template <
class TYPE>
1282template <
class TYPE>
1289 return (*d_array_p)[d_index];
1292template <
class TYPE>
1299 return (*d_array_p)[d_index];
1302template <
class TYPE>
1311 BSLS_ASSERT( 0 <= offset || d_index >= bsl::size_t(-offset));
1313 || d_array_p->length() - d_index > bsl::size_t(offset));
1315 return (*d_array_p)[d_index + offset];
1321template <
class TYPE>
1324 CompactedArray_ConstIterator<TYPE>& iterator,
1328 BSLS_ASSERT(iterator.d_index < iterator.d_array_p->length());
1330 const CompactedArray_ConstIterator<TYPE> curr = iterator;
1335template <
class TYPE>
1338 CompactedArray_ConstIterator<TYPE>& iterator,
1344 const CompactedArray_ConstIterator<TYPE> curr = iterator;
1349template <
class TYPE>
1352 const CompactedArray_ConstIterator<TYPE>& iterator,
1353 bsl::ptrdiff_t offset)
1360 || iterator.d_index >= bsl::size_t(-offset));
1362 || iterator.d_array_p->length() - iterator.d_index
1363 >= bsl::size_t( offset));
1365 return CompactedArray_ConstIterator<TYPE>(iterator.d_array_p,
1366 iterator.d_index + offset);
1369template <
class TYPE>
1372 bsl::ptrdiff_t offset,
1373 const CompactedArray_ConstIterator<TYPE>& iterator)
1375 return iterator + offset;
1378template <
class TYPE>
1381 const CompactedArray_ConstIterator<TYPE>& iterator,
1382 bsl::ptrdiff_t offset)
1389 || iterator.d_index >= bsl::size_t( offset));
1391 || iterator.d_array_p->length() - iterator.d_index
1392 >= bsl::size_t(-offset));
1394 return CompactedArray_ConstIterator<TYPE>(iterator.d_array_p,
1395 iterator.d_index - offset);
1398template <
class TYPE>
1400bsl::ptrdiff_t
bdlc::operator-(
const CompactedArray_ConstIterator<TYPE>& lhs,
1401 const CompactedArray_ConstIterator<TYPE>& rhs)
1408 lhs.d_index >=
rhs.d_index
1409 ?
lhs.d_index -
rhs.d_index <=
1410 bsl::size_t(bsl::numeric_limits<bsl::ptrdiff_t>::max())
1411 :
rhs.d_index -
lhs.d_index <=
1412 bsl::size_t(
bsl::numeric_limits<
bsl::ptrdiff_t>::min()));
1414 return static_cast<bsl::ptrdiff_t
>(
lhs.d_index -
rhs.d_index);
1417template <
class TYPE>
1420 const CompactedArray_ConstIterator<TYPE>& rhs)
1422 return lhs.d_array_p ==
rhs.d_array_p &&
lhs.d_index ==
rhs.d_index;
1425template <
class TYPE>
1428 const CompactedArray_ConstIterator<TYPE>& rhs)
1430 return lhs.d_array_p !=
rhs.d_array_p ||
lhs.d_index !=
rhs.d_index;
1433template <
class TYPE>
1436 const CompactedArray_ConstIterator<TYPE>& rhs)
1442 return lhs.d_index <
rhs.d_index;
1445template <
class TYPE>
1448 const CompactedArray_ConstIterator<TYPE>& rhs)
1454 return lhs.d_index <=
rhs.d_index;
1457template <
class TYPE>
1460 const CompactedArray_ConstIterator<TYPE>& rhs)
1466 return lhs.d_index >
rhs.d_index;
1469template <
class TYPE>
1472 const CompactedArray_ConstIterator<TYPE>& rhs)
1478 return lhs.d_index >=
rhs.d_index;
1488template <
class TYPE>
1489void CompactedArray<TYPE>::erase(bsl::size_t index)
1493 for (bsl::size_t i = 0; i < d_index.length(); ++i) {
1494 if (d_index[i] > index) {
1495 d_index.replace(i, d_index[i] - 1);
1499 d_data.erase(d_data.begin() + index);
1502template <
class TYPE>
1503bsl::size_t CompactedArray<TYPE>::increment(
const TYPE& value,
1510 typename Data::iterator iter =
1515 if (iter == d_data.end()) {
1516 index = d_data.size();
1517 d_data.emplace_back(value, count);
1519 else if (value < iter->d_value.object()) {
1520 index = iter - d_data.begin();
1523 CompactedArray_CountedValue<TYPE>(
1526 d_data.get_allocator().mechanism()));
1528 for (bsl::size_t i = 0; i < d_index.length(); ++i) {
1529 if (d_index[i] >= index) {
1530 d_index.replace(i, d_index[i] + 1);
1535 index = iter - d_data.begin();
1537 iter->d_count += count;
1544template <
class TYPE>
1546: d_data(basicAllocator)
1547, d_index(basicAllocator)
1551template <
class TYPE>
1555: d_data(basicAllocator)
1556, d_index(basicAllocator)
1562 d_index.
resize(numElements);
1566template <
class TYPE>
1570: d_data(original.d_data, basicAllocator)
1571, d_index(original.d_index, basicAllocator)
1575template <
class TYPE>
1581template <
class TYPE>
1588 d_index.reserveCapacity(rhs.length(), rhs.uniqueLength());
1589 d_data = rhs.d_data;
1590 d_index = rhs.d_index;
1598template <
class TYPE>
1603 d_index.reserveCapacity(d_index.length() + 1, d_data.size() + 1);
1605 d_index.push_back(increment(value));
1610template <
class TYPE>
1613 if (&srcArray !=
this) {
1616 d_index.reserveCapacity(d_index.length() + srcArray.d_index.
length(),
1617 d_data.size() + srcArray.d_data.
size());
1619 for (bsl::size_t i = 0; i < srcArray.
length(); ++i) {
1620 d_index.push_back(increment(srcArray[i]));
1626 d_index.reserveCapacity(d_index.length() * 2);
1628 for (bsl::size_t i = 0; i < d_data.size(); ++i) {
1629 d_data[i].d_count *= 2;
1632 d_index.append(d_index);
1636template <
class TYPE>
1638 bsl::size_t srcIndex,
1639 bsl::size_t numElements)
1646 if (&srcArray !=
this) {
1649 d_index.reserveCapacity(d_index.length() + numElements,
1650 d_data.size() + numElements);
1652 for (bsl::size_t i = 0; i < numElements; ++i) {
1653 d_index.push_back(increment(srcArray[srcIndex + i]));
1659 d_index.reserveCapacity(d_index.length() + numElements);
1661 for (bsl::size_t i = 0; i < numElements; ++i) {
1662 d_data[d_index[srcIndex + i]].d_count += 1;
1665 d_index.append(d_index, srcIndex, numElements);
1669template <
class TYPE>
1676 d_index.reserveCapacity(d_index.length() + 1, d_data.size() + 1);
1678 d_index.insert(dstIndex, increment(value));
1683template <
class TYPE>
1690 insert(dst.d_index, value);
1694template <
class TYPE>
1700 if (&srcArray !=
this) {
1703 d_index.reserveCapacity(d_index.length() + srcArray.d_index.
length(),
1704 d_data.size() + srcArray.d_data.
size());
1706 for (bsl::size_t i = 0; i < srcArray.
length(); ++i) {
1707 d_index.insert(dstIndex + i, increment(srcArray[i]));
1713 d_index.reserveCapacity(d_index.length() * 2);
1715 for (bsl::size_t i = 0; i < d_data.size(); ++i) {
1716 d_data[i].d_count *= 2;
1719 d_index.insert(dstIndex, d_index);
1723template <
class TYPE>
1726 bsl::size_t srcIndex,
1727 bsl::size_t numElements)
1736 if (&srcArray !=
this) {
1739 d_index.reserveCapacity(d_index.length() + numElements,
1740 d_data.size() + numElements);
1742 for (bsl::size_t i = 0; i < numElements; ++i) {
1743 d_index.insert(dstIndex + i, increment(srcArray[srcIndex + i]));
1749 d_index.reserveCapacity(d_index.length() + numElements);
1751 for (bsl::size_t i = 0; i < numElements; ++i) {
1752 d_data[d_index[srcIndex + i]].d_count += 1;
1755 d_index.insert(dstIndex, d_index, srcIndex, numElements);
1759template <
class TYPE>
1764 bsl::size_t dataIndex = d_index.back();
1769 if (0 == --dataValue.
d_count) {
1778template <
class TYPE>
1785template <
class TYPE>
1791 remove(dstIndex, 1);
1794template <
class TYPE>
1796 bsl::size_t numElements)
1801 BSLS_ASSERT(dstIndex <= d_index.length() - numElements);
1805 bsl::size_t endIndex = dstIndex + numElements;
1806 for (bsl::size_t i = dstIndex; i < endIndex; ++i) {
1807 bsl::size_t dataIndex = d_index[i];
1810 if (0 == --dataValue.
d_count) {
1815 d_index.remove(dstIndex, numElements);
1820template <
class TYPE>
1830 remove(dstFirst.d_index, dstLast.d_index - dstFirst.d_index);
1834template <
class TYPE>
1838 d_index.removeAll();
1841template <
class TYPE>
1848 d_index.reserveCapacity(d_index.length(), d_data.size() + 1);
1850 bsl::size_t newDataIndex = increment(value);
1851 bsl::size_t dataIndex = d_index[dstIndex];
1854 if (0 == --dataValue.
d_count) {
1856 if (dataIndex <= newDataIndex) {
1861 d_index.replace(dstIndex, newDataIndex);
1866template <
class TYPE>
1869 bsl::size_t srcIndex,
1870 bsl::size_t numElements)
1883 if (&srcArray !=
this) {
1884 d_index.reserveCapacity(d_index.length(), d_data.size() + numElements);
1886 for (bsl::size_t i = 0; i < numElements; ++i) {
1887 bsl::size_t newDataIndex = increment(srcArray[srcIndex + i]);
1888 bsl::size_t dataIndex = d_index[dstIndex + i];
1892 if (0 == --dataValue.
d_count) {
1894 if (dataIndex <= newDataIndex) {
1899 d_index.replace(dstIndex + i, newDataIndex);
1903 bsl::size_t endIndex;
1905 endIndex = srcIndex + numElements;
1906 for (bsl::size_t i = srcIndex; i < endIndex; ++i) {
1907 ++d_data[d_index[i]].d_count;
1910 endIndex = dstIndex + numElements;
1911 for (bsl::size_t i = dstIndex; i < endIndex; ++i) {
1912 bsl::size_t dataIndex = d_index[i];
1915 if (0 == --dataValue.
d_count) {
1920 d_index.replace(dstIndex, d_index, srcIndex, numElements);
1926template <
class TYPE>
1929 BSLS_ASSERT(
false == isEmpty() || 0 == numElements);
1931 if (0 < numElements) {
1932 d_index.reserveCapacity(numElements, d_data.size() - 1);
1936template <
class TYPE>
1938 bsl::size_t numUniqueElements)
1941 BSLS_ASSERT(0 < numUniqueElements || 0 == numElements);
1943 if (0 < numElements) {
1944 d_data.reserve(numUniqueElements);
1945 if (d_data.size() > numUniqueElements) {
1946 numUniqueElements = d_data.size();
1948 d_index.reserveCapacity(numElements, numUniqueElements - 1);
1952template <
class TYPE>
1955 if (d_index.length() < numElements) {
1958 d_index.reserveCapacity(numElements, d_data.size() + 1);
1960 bsl::size_t count = numElements - d_index.length();
1961 bsl::size_t index = increment(TYPE(), count);
1963 for (bsl::size_t i = 0; i < count; ++i) {
1964 d_index.push_back(index);
1970 bsl::size_t count = d_index.length() - numElements;
1972 for (bsl::size_t i = 0; i < count; ++i) {
1978template <
class TYPE>
1988template <
class TYPE>
1994 return d_data[d_index[index]].d_value.object();
1997template <
class TYPE>
2001 return d_index.allocator();
2004template <
class TYPE>
2010 return operator[](length() - 1);
2013template <
class TYPE>
2021template <
class TYPE>
2025 return d_index.isEmpty() ? 0 : d_index.capacity();
2028template <
class TYPE>
2035template <
class TYPE>
2041 return operator[](0);
2044template <
class TYPE>
2048 return 0 == length();
2051template <
class TYPE>
2055 return d_index == other.d_index && d_data == other.d_data;
2058template <
class TYPE>
2062 return d_index.length();
2065template <
class TYPE>
2068 int spacesPerLevel)
const
2076 for (bsl::size_t i = 0; i < d_index.length(); ++i) {
2077 printer.
printValue(d_data[d_index[i]].d_value.object());
2084template <
class TYPE>
2090 return d_data[index].d_value.object();
2093template <
class TYPE>
2097 return d_data.size();
2103template <
class TYPE>
2106 const CompactedArray<TYPE>& array)
2108 return array.
print(stream, 0, -1);
2111template <
class TYPE>
2114 const CompactedArray<TYPE>& rhs)
2116 return lhs.isEqual(rhs);
2119template <
class TYPE>
2122 const CompactedArray<TYPE>& rhs)
2124 return !
lhs.isEqual(rhs);
2128template <
class TYPE>
2129void bdlc::swap(CompactedArray<TYPE>& a, CompactedArray<TYPE>& b)
2131 if (a.allocator() == b.allocator()) {
2137 CompactedArray<TYPE> futureA(b, a.allocator());
2138 CompactedArray<TYPE> futureB(a, b.allocator());
2145template <
class HASHALG,
class TYPE>
2148 using ::BloombergLP::bslh::hashAppend;
2149 typedef typename CompactedArray<TYPE>::const_iterator citer;
2151 for (citer b = input.begin(), e = input.end(); b != e; ++b) {
2163template <
class TYPE>
2167template <
class TYPE>
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlc_compactedarray.h:381
TYPE value_type
Definition bdlc_compactedarray.h:443
std::random_access_iterator_tag iterator_category
Definition bdlc_compactedarray.h:451
bsl::size_t size_type
Definition bdlc_compactedarray.h:439
CompactedArray_ConstIterator()
Definition bdlc_compactedarray.h:1197
CompactedArray_ConstIterator & operator=(const CompactedArray_ConstIterator &rhs)
Definition bdlc_compactedarray.h:1216
const TYPE & operator->() const
Definition bdlc_compactedarray.h:1294
~CompactedArray_ConstIterator()=default
Destroy this object.
const TYPE & operator[](bsl::ptrdiff_t offset) const
Definition bdlc_compactedarray.h:1305
TYPE & reference
Definition bdlc_compactedarray.h:448
const TYPE & operator*() const
Definition bdlc_compactedarray.h:1284
bsl::ptrdiff_t difference_type
Definition bdlc_compactedarray.h:436
TYPE * pointer
Definition bdlc_compactedarray.h:445
CompactedArray_ConstIterator & operator-=(bsl::ptrdiff_t offset)
Definition bdlc_compactedarray.h:1243
CompactedArray_ConstIterator & operator+=(bsl::ptrdiff_t offset)
Definition bdlc_compactedarray.h:1226
friend CompactedArray_ConstIterator operator++(CompactedArray_ConstIterator &, int)
friend CompactedArray_ConstIterator operator--(CompactedArray_ConstIterator &, int)
Definition bdlc_compactedarray.h:255
~CompactedArray_RemoveAllProctor()
Definition bdlc_compactedarray.h:1071
void release()
Definition bdlc_compactedarray.h:1081
Definition bdlc_compactedarray.h:697
const_iterator end() const
Definition bdlc_compactedarray.h:2030
void append(const CompactedArray &srcArray)
Definition bdlc_compactedarray.h:1611
const TYPE & uniqueElement(bsl::size_t index) const
Definition bdlc_compactedarray.h:2086
void remove(bsl::size_t dstIndex, bsl::size_t numElements)
Definition bdlc_compactedarray.h:1795
void push_back(const TYPE &value)
Append to this array an element having the specified value.
Definition bdlc_compactedarray.h:1780
CompactedArray & operator=(const CompactedArray &rhs)
Definition bdlc_compactedarray.h:1582
bsl::size_t capacity() const
Definition bdlc_compactedarray.h:2023
void insert(bsl::size_t dstIndex, const CompactedArray &srcArray)
Definition bdlc_compactedarray.h:1695
const_iterator insert(const_iterator dst, const TYPE &value)
Definition bdlc_compactedarray.h:1686
void swap(CompactedArray &other)
Definition bdlc_compactedarray.h:1979
const_iterator remove(const_iterator dstFirst, const_iterator dstLast)
Definition bdlc_compactedarray.h:1823
void reserveCapacity(bsl::size_t numElements, bsl::size_t numUniqueElements)
Definition bdlc_compactedarray.h:1937
void replace(bsl::size_t dstIndex, const TYPE &value)
Definition bdlc_compactedarray.h:1842
const TYPE & front() const
Definition bdlc_compactedarray.h:2037
bool isEmpty() const
Definition bdlc_compactedarray.h:2046
TYPE value_type
Definition bdlc_compactedarray.h:728
~CompactedArray()
Destroy this object.
Definition bdlc_compactedarray.h:1576
void insert(bsl::size_t dstIndex, const TYPE &value)
Definition bdlc_compactedarray.h:1670
bool isEqual(const CompactedArray &other) const
Definition bdlc_compactedarray.h:2053
void reserveCapacity(bsl::size_t numElements)
Definition bdlc_compactedarray.h:1927
bsl::size_t uniqueLength() const
Return the number of unique elements in this array.
Definition bdlc_compactedarray.h:2095
CompactedArray(bsl::size_t numElements, const TYPE &value=TYPE(), bslma::Allocator *basicAllocator=0)
Definition bdlc_compactedarray.h:1552
void insert(bsl::size_t dstIndex, const CompactedArray &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
Definition bdlc_compactedarray.h:1724
const_iterator begin() const
Definition bdlc_compactedarray.h:2016
void append(const TYPE &value)
Definition bdlc_compactedarray.h:1599
bslma::Allocator * allocator() const
Return the allocator used by this array to supply memory.
Definition bdlc_compactedarray.h:1999
CompactedArray(const CompactedArray &original, bslma::Allocator *basicAllocator=0)
Definition bdlc_compactedarray.h:1567
const TYPE & back() const
Definition bdlc_compactedarray.h:2006
void append(const CompactedArray &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
Definition bdlc_compactedarray.h:1637
bsl::size_t length() const
Return the number of elements in this array.
Definition bdlc_compactedarray.h:2060
CompactedArray_ConstIterator< TYPE > const_iterator
Definition bdlc_compactedarray.h:730
void resize(bsl::size_t numElements)
Definition bdlc_compactedarray.h:1953
const TYPE & operator[](bsl::size_t index) const
Definition bdlc_compactedarray.h:1990
void removeAll()
Remove all the elements from this array.
Definition bdlc_compactedarray.h:1835
CompactedArray(bslma::Allocator *basicAllocator=0)
Definition bdlc_compactedarray.h:1545
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlc_compactedarray.h:2066
void replace(bsl::size_t dstIndex, const CompactedArray &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
Definition bdlc_compactedarray.h:1867
void remove(bsl::size_t dstIndex)
Definition bdlc_compactedarray.h:1787
void pop_back()
Definition bdlc_compactedarray.h:1760
Definition bdlc_packedintarray.h:1098
void resize(bsl::size_t numElements)
Definition bdlc_packedintarray.h:2561
bsl::size_t length() const
Return number of elements in this array.
Definition bdlc_packedintarray.h:2663
void reserveCapacity(bsl::size_t numElements)
Definition bdlc_packedintarray.h:2528
size_type size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements in this vector.
Definition bslstl_vector.h:3019
Definition bslstl_vector.h:1120
VALUE_TYPE & emplace_back(Args &&... arguments)
Definition bslstl_vector.h:4324
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:182
Definition bslim_printer.h:604
void printValue(const TYPE &data) const
Definition bslim_printer.h:1240
void end(bool suppressBracket=false) const
void start(bool suppressBracket=false) const
Definition bslma_allocator.h:545
#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
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const BigEndianInt16 &object)
Definition bdlc_bitarray.h:506
CompactedArray_ConstIterator< TYPE > operator--(CompactedArray_ConstIterator< TYPE > &, int)
CompactedArray_ConstIterator< TYPE > operator+(const CompactedArray_ConstIterator< TYPE > &, bsl::ptrdiff_t)
void hashAppend(HASHALG &hashAlg, const CompactedArray< TYPE > &input)
Pass the specified input to the specified hashAlg.
void swap(BitArray &a, BitArray &b)
bool operator>(const CompactedArray_ConstIterator< TYPE > &, const CompactedArray_ConstIterator< TYPE > &)
bool operator<=(const CompactedArray_ConstIterator< TYPE > &, const CompactedArray_ConstIterator< TYPE > &)
bool operator==(const BitArray &lhs, const BitArray &rhs)
bool operator>=(const CompactedArray_ConstIterator< TYPE > &, const CompactedArray_ConstIterator< TYPE > &)
bool operator!=(const BitArray &lhs, const BitArray &rhs)
bool operator<(const CompactedArray_ConstIterator< TYPE > &, const CompactedArray_ConstIterator< TYPE > &)
BitArray operator-(const BitArray &lhs, const BitArray &rhs)
CompactedArray_ConstIterator< TYPE > operator++(CompactedArray_ConstIterator< TYPE > &, int)
BitArray operator<<(const BitArray &array, bsl::size_t numBits)
Definition bdlat_valuetypefunctions.h:939
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition baljsn_encoder_testtypes.h:76
static FORWARD_IT lowerBound(FORWARD_IT first, FORWARD_IT last, const TYPE &value)
Definition bdlb_algorithmworkaroundutil.h:159
Definition bdlc_compactedarray.h:296
bsl::size_t d_count
Definition bdlc_compactedarray.h:300
CompactedArray_CountedValue(const TYPE &value, bsl::size_t count, bslma::Allocator *basicAllocator)
Definition bdlc_compactedarray.h:1093
CompactedArray_CountedValue & operator=(const CompactedArray_CountedValue< TYPE > &rhs)
Definition bdlc_compactedarray.h:1131
~CompactedArray_CountedValue()
Destroy this object.
Definition bdlc_compactedarray.h:1122
bsls::ObjectBuffer< TYPE > d_value
Definition bdlc_compactedarray.h:299
static void construct(TARGET_TYPE *address, const ALLOCATOR &allocator)
Definition bslma_constructionutil.h:1244
Definition bslma_usesbslmaallocator.h:344
Definition bsls_objectbuffer.h:277