8#ifndef INCLUDED_BDLC_COMPACTEDARRAY
9#define INCLUDED_BDLC_COMPACTEDARRAY
166#include <bdlscm_version.h>
185#include <bsl_algorithm.h>
186#include <bsl_cstddef.h>
187#include <bsl_iosfwd.h>
188#include <bsl_iterator.h>
189#include <bsl_limits.h>
190#include <bsl_vector.h>
196template <
class TYPE>
class CompactedArray;
198template <
class TYPE>
class CompactedArray_ConstIterator;
200template <
class TYPE> CompactedArray_ConstIterator<TYPE>
539 const TYPE&
operator[](bsl::ptrdiff_t offset)
const;
577 bsl::ptrdiff_t offset);
580 bsl::ptrdiff_t offset,
592 bsl::ptrdiff_t offset);
687 void erase(bsl::size_t index);
696 bsl::size_t increment(
const TYPE& value, bsl::size_t count = 1);
717 const TYPE& value = TYPE(),
754 bsl::size_t srcIndex,
755 bsl::size_t numElements);
761 void insert(bsl::size_t dstIndex,
const TYPE& value);
789 bsl::size_t srcIndex,
790 bsl::size_t numElements);
810 void remove(bsl::size_t dstIndex, bsl::size_t numElements);
828 void replace(bsl::size_t dstIndex,
const TYPE& value);
840 bsl::size_t srcIndex,
841 bsl::size_t numElements);
860 bsl::size_t numUniqueElements);
937 bsl::ostream&
print(bsl::ostream& stream,
939 int spacesPerLevel = 4)
const;
991template <
class HASHALG,
class TYPE>
1003template <
class TYPE>
1011template <
class TYPE>
1016 d_array_p->removeAll();
1021template <
class TYPE>
1033template <
class TYPE>
1048template <
class TYPE>
1053: d_count(original.d_count)
1062template <
class TYPE>
1066 d_value.object().~TYPE();
1070template <
class TYPE>
1076 d_value.object() = rhs.
d_value.object();
1085template <
class TYPE>
1088 const CompactedArray_CountedValue<TYPE>& rhs)
1090 return lhs.d_value.object() == rhs.d_value.object();
1093template <
class TYPE>
1096 const CompactedArray_CountedValue<TYPE>& rhs)
1098 return lhs.d_value.object() != rhs.d_value.object();
1101template <
class TYPE>
1106 return lhs.d_value.object() < rhs;
1109template <
class TYPE>
1112 const CompactedArray_CountedValue<TYPE>& rhs)
1114 return lhs < rhs.d_value.object();
1124template <
class TYPE>
1127 const CompactedArray<TYPE> *array,
1137template <
class TYPE>
1145template <
class TYPE>
1149: d_array_p(original.d_array_p)
1150, d_index(original.d_index)
1155template <
class TYPE>
1160 d_array_p = rhs.d_array_p;
1161 d_index = rhs.d_index;
1165template <
class TYPE>
1174 BSLS_ASSERT( 0 <= offset || d_index >= bsl::size_t(-offset));
1176 || d_array_p->length() - d_index >= bsl::size_t(offset));
1182template <
class TYPE>
1191 BSLS_ASSERT( 0 >= offset || d_index >= bsl::size_t(offset));
1193 || d_array_p->length() - d_index >= bsl::size_t(-offset));
1199template <
class TYPE>
1211template <
class TYPE>
1224template <
class TYPE>
1231 return (*d_array_p)[d_index];
1234template <
class TYPE>
1241 return (*d_array_p)[d_index];
1244template <
class TYPE>
1253 BSLS_ASSERT( 0 <= offset || d_index >= bsl::size_t(-offset));
1255 || d_array_p->length() - d_index > bsl::size_t(offset));
1257 return (*d_array_p)[d_index + offset];
1263template <
class TYPE>
1266 CompactedArray_ConstIterator<TYPE>& iterator,
1270 BSLS_ASSERT(iterator.d_index < iterator.d_array_p->length());
1272 const CompactedArray_ConstIterator<TYPE> curr = iterator;
1277template <
class TYPE>
1280 CompactedArray_ConstIterator<TYPE>& iterator,
1286 const CompactedArray_ConstIterator<TYPE> curr = iterator;
1291template <
class TYPE>
1294 const CompactedArray_ConstIterator<TYPE>& iterator,
1295 bsl::ptrdiff_t offset)
1302 || iterator.d_index >= bsl::size_t(-offset));
1304 || iterator.d_array_p->length() - iterator.d_index
1305 >= bsl::size_t( offset));
1307 return CompactedArray_ConstIterator<TYPE>(iterator.d_array_p,
1308 iterator.d_index + offset);
1311template <
class TYPE>
1314 bsl::ptrdiff_t offset,
1315 const CompactedArray_ConstIterator<TYPE>& iterator)
1317 return iterator + offset;
1320template <
class TYPE>
1323 const CompactedArray_ConstIterator<TYPE>& iterator,
1324 bsl::ptrdiff_t offset)
1331 || iterator.d_index >= bsl::size_t( offset));
1333 || iterator.d_array_p->length() - iterator.d_index
1334 >= bsl::size_t(-offset));
1336 return CompactedArray_ConstIterator<TYPE>(iterator.d_array_p,
1337 iterator.d_index - offset);
1340template <
class TYPE>
1342bsl::ptrdiff_t
bdlc::operator-(
const CompactedArray_ConstIterator<TYPE>& lhs,
1343 const CompactedArray_ConstIterator<TYPE>& rhs)
1350 lhs.d_index >= rhs.d_index
1351 ? lhs.d_index - rhs.d_index <=
1352 bsl::size_t(bsl::numeric_limits<bsl::ptrdiff_t>::max())
1353 : rhs.d_index - lhs.d_index <=
1354 bsl::size_t(
bsl::numeric_limits<
bsl::ptrdiff_t>::min()));
1356 return static_cast<bsl::ptrdiff_t
>(lhs.d_index - rhs.d_index);
1359template <
class TYPE>
1362 const CompactedArray_ConstIterator<TYPE>& rhs)
1364 return lhs.d_array_p == rhs.d_array_p && lhs.d_index == rhs.d_index;
1367template <
class TYPE>
1370 const CompactedArray_ConstIterator<TYPE>& rhs)
1372 return lhs.d_array_p != rhs.d_array_p || lhs.d_index != rhs.d_index;
1375template <
class TYPE>
1378 const CompactedArray_ConstIterator<TYPE>& rhs)
1384 return lhs.d_index < rhs.d_index;
1387template <
class TYPE>
1390 const CompactedArray_ConstIterator<TYPE>& rhs)
1396 return lhs.d_index <= rhs.d_index;
1399template <
class TYPE>
1402 const CompactedArray_ConstIterator<TYPE>& rhs)
1408 return lhs.d_index > rhs.d_index;
1411template <
class TYPE>
1414 const CompactedArray_ConstIterator<TYPE>& rhs)
1420 return lhs.d_index >= rhs.d_index;
1430template <
class TYPE>
1431void CompactedArray<TYPE>::erase(bsl::size_t index)
1435 for (bsl::size_t i = 0; i < d_index.length(); ++i) {
1436 if (d_index[i] > index) {
1437 d_index.replace(i, d_index[i] - 1);
1441 d_data.erase(d_data.begin() + index);
1444template <
class TYPE>
1445bsl::size_t CompactedArray<TYPE>::increment(
const TYPE& value,
1452 typename Data::iterator iter =
1457 if (iter == d_data.end()) {
1458 index = d_data.size();
1459 d_data.emplace_back(value, count);
1461 else if (value < iter->d_value.object()) {
1462 index = iter - d_data.begin();
1465 CompactedArray_CountedValue<TYPE>(
1468 d_data.get_allocator().mechanism()));
1470 for (bsl::size_t i = 0; i < d_index.length(); ++i) {
1471 if (d_index[i] >= index) {
1472 d_index.replace(i, d_index[i] + 1);
1477 index = iter - d_data.begin();
1479 iter->d_count += count;
1486template <
class TYPE>
1488: d_data(basicAllocator)
1489, d_index(basicAllocator)
1493template <
class TYPE>
1497: d_data(basicAllocator)
1498, d_index(basicAllocator)
1504 d_index.
resize(numElements);
1508template <
class TYPE>
1512: d_data(original.d_data, basicAllocator)
1513, d_index(original.d_index, basicAllocator)
1517template <
class TYPE>
1523template <
class TYPE>
1531 d_data = rhs.d_data;
1532 d_index = rhs.d_index;
1540template <
class TYPE>
1545 d_index.reserveCapacity(d_index.length() + 1, d_data.size() + 1);
1547 d_index.push_back(increment(value));
1552template <
class TYPE>
1555 if (&srcArray !=
this) {
1558 d_index.reserveCapacity(d_index.length() + srcArray.d_index.
length(),
1559 d_data.size() + srcArray.d_data.
size());
1561 for (bsl::size_t i = 0; i < srcArray.
length(); ++i) {
1562 d_index.push_back(increment(srcArray[i]));
1568 d_index.reserveCapacity(d_index.length() * 2);
1570 for (bsl::size_t i = 0; i < d_data.size(); ++i) {
1571 d_data[i].d_count *= 2;
1574 d_index.append(d_index);
1578template <
class TYPE>
1580 bsl::size_t srcIndex,
1581 bsl::size_t numElements)
1588 if (&srcArray !=
this) {
1591 d_index.reserveCapacity(d_index.length() + numElements,
1592 d_data.size() + numElements);
1594 for (bsl::size_t i = 0; i < numElements; ++i) {
1595 d_index.push_back(increment(srcArray[srcIndex + i]));
1601 d_index.reserveCapacity(d_index.length() + numElements);
1603 for (bsl::size_t i = 0; i < numElements; ++i) {
1604 d_data[d_index[srcIndex + i]].d_count += 1;
1607 d_index.append(d_index, srcIndex, numElements);
1611template <
class TYPE>
1618 d_index.reserveCapacity(d_index.length() + 1, d_data.size() + 1);
1620 d_index.insert(dstIndex, increment(value));
1625template <
class TYPE>
1632 insert(dst.d_index, value);
1636template <
class TYPE>
1642 if (&srcArray !=
this) {
1645 d_index.reserveCapacity(d_index.length() + srcArray.d_index.
length(),
1646 d_data.size() + srcArray.d_data.
size());
1648 for (bsl::size_t i = 0; i < srcArray.
length(); ++i) {
1649 d_index.insert(dstIndex + i, increment(srcArray[i]));
1655 d_index.reserveCapacity(d_index.length() * 2);
1657 for (bsl::size_t i = 0; i < d_data.size(); ++i) {
1658 d_data[i].d_count *= 2;
1661 d_index.insert(dstIndex, d_index);
1665template <
class TYPE>
1668 bsl::size_t srcIndex,
1669 bsl::size_t numElements)
1678 if (&srcArray !=
this) {
1681 d_index.reserveCapacity(d_index.length() + numElements,
1682 d_data.size() + numElements);
1684 for (bsl::size_t i = 0; i < numElements; ++i) {
1685 d_index.insert(dstIndex + i, increment(srcArray[srcIndex + i]));
1691 d_index.reserveCapacity(d_index.length() + numElements);
1693 for (bsl::size_t i = 0; i < numElements; ++i) {
1694 d_data[d_index[srcIndex + i]].d_count += 1;
1697 d_index.insert(dstIndex, d_index, srcIndex, numElements);
1701template <
class TYPE>
1706 bsl::size_t dataIndex = d_index.back();
1711 if (0 == --dataValue.
d_count) {
1720template <
class TYPE>
1727template <
class TYPE>
1733 remove(dstIndex, 1);
1736template <
class TYPE>
1738 bsl::size_t numElements)
1743 BSLS_ASSERT(dstIndex <= d_index.length() - numElements);
1747 bsl::size_t endIndex = dstIndex + numElements;
1748 for (bsl::size_t i = dstIndex; i < endIndex; ++i) {
1749 bsl::size_t dataIndex = d_index[i];
1752 if (0 == --dataValue.
d_count) {
1757 d_index.remove(dstIndex, numElements);
1762template <
class TYPE>
1772 remove(dstFirst.d_index, dstLast.d_index - dstFirst.d_index);
1776template <
class TYPE>
1780 d_index.removeAll();
1783template <
class TYPE>
1790 d_index.reserveCapacity(d_index.length(), d_data.size() + 1);
1792 bsl::size_t newDataIndex = increment(value);
1793 bsl::size_t dataIndex = d_index[dstIndex];
1796 if (0 == --dataValue.
d_count) {
1798 if (dataIndex <= newDataIndex) {
1803 d_index.replace(dstIndex, newDataIndex);
1808template <
class TYPE>
1811 bsl::size_t srcIndex,
1812 bsl::size_t numElements)
1825 if (&srcArray !=
this) {
1826 d_index.reserveCapacity(d_index.length(), d_data.size() + numElements);
1828 for (bsl::size_t i = 0; i < numElements; ++i) {
1829 bsl::size_t newDataIndex = increment(srcArray[srcIndex + i]);
1830 bsl::size_t dataIndex = d_index[dstIndex + i];
1834 if (0 == --dataValue.
d_count) {
1836 if (dataIndex <= newDataIndex) {
1841 d_index.replace(dstIndex + i, newDataIndex);
1845 bsl::size_t endIndex;
1847 endIndex = srcIndex + numElements;
1848 for (bsl::size_t i = srcIndex; i < endIndex; ++i) {
1849 ++d_data[d_index[i]].d_count;
1852 endIndex = dstIndex + numElements;
1853 for (bsl::size_t i = dstIndex; i < endIndex; ++i) {
1854 bsl::size_t dataIndex = d_index[i];
1857 if (0 == --dataValue.
d_count) {
1862 d_index.replace(dstIndex, d_index, srcIndex, numElements);
1868template <
class TYPE>
1871 BSLS_ASSERT(
false == isEmpty() || 0 == numElements);
1873 if (0 < numElements) {
1874 d_index.reserveCapacity(numElements, d_data.size() - 1);
1878template <
class TYPE>
1880 bsl::size_t numUniqueElements)
1883 BSLS_ASSERT(0 < numUniqueElements || 0 == numElements);
1885 if (0 < numElements) {
1886 d_data.reserve(numUniqueElements);
1887 if (d_data.size() > numUniqueElements) {
1888 numUniqueElements = d_data.size();
1890 d_index.reserveCapacity(numElements, numUniqueElements - 1);
1894template <
class TYPE>
1897 if (d_index.length() < numElements) {
1900 d_index.reserveCapacity(numElements, d_data.size() + 1);
1902 bsl::size_t count = numElements - d_index.length();
1903 bsl::size_t index = increment(TYPE(), count);
1905 for (bsl::size_t i = 0; i < count; ++i) {
1906 d_index.push_back(index);
1912 bsl::size_t count = d_index.length() - numElements;
1914 for (bsl::size_t i = 0; i < count; ++i) {
1920template <
class TYPE>
1930template <
class TYPE>
1936 return d_data[d_index[index]].d_value.object();
1939template <
class TYPE>
1943 return d_index.allocator();
1946template <
class TYPE>
1952 return operator[](length() - 1);
1955template <
class TYPE>
1963template <
class TYPE>
1967 return d_index.isEmpty() ? 0 : d_index.capacity();
1970template <
class TYPE>
1977template <
class TYPE>
1983 return operator[](0);
1986template <
class TYPE>
1990 return 0 == length();
1993template <
class TYPE>
1997 return d_index == other.d_index && d_data == other.d_data;
2000template <
class TYPE>
2004 return d_index.length();
2007template <
class TYPE>
2010 int spacesPerLevel)
const
2018 for (bsl::size_t i = 0; i < d_index.length(); ++i) {
2019 printer.
printValue(d_data[d_index[i]].d_value.object());
2026template <
class TYPE>
2032 return d_data[index].d_value.object();
2035template <
class TYPE>
2039 return d_data.size();
2045template <
class TYPE>
2048 const CompactedArray<TYPE>& array)
2050 return array.
print(stream, 0, -1);
2053template <
class TYPE>
2056 const CompactedArray<TYPE>& rhs)
2058 return lhs.isEqual(rhs);
2061template <
class TYPE>
2064 const CompactedArray<TYPE>& rhs)
2066 return !lhs.isEqual(rhs);
2070template <
class TYPE>
2071void bdlc::swap(CompactedArray<TYPE>& a, CompactedArray<TYPE>& b)
2073 if (a.allocator() == b.allocator()) {
2079 CompactedArray<TYPE> futureA(b, a.allocator());
2080 CompactedArray<TYPE> futureB(a, b.allocator());
2087template <
class HASHALG,
class TYPE>
2090 using ::BloombergLP::bslh::hashAppend;
2091 typedef typename CompactedArray<TYPE>::const_iterator citer;
2093 for (citer b = input.begin(), e = input.end(); b != e; ++b) {
2105template <
class TYPE>
2109template <
class TYPE>
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlc_compactedarray.h:373
TYPE value_type
Definition bdlc_compactedarray.h:435
std::random_access_iterator_tag iterator_category
Definition bdlc_compactedarray.h:443
bsl::size_t size_type
Definition bdlc_compactedarray.h:431
CompactedArray_ConstIterator()
Definition bdlc_compactedarray.h:1139
CompactedArray_ConstIterator & operator=(const CompactedArray_ConstIterator &rhs)
Definition bdlc_compactedarray.h:1158
const TYPE & operator->() const
Definition bdlc_compactedarray.h:1236
~CompactedArray_ConstIterator()=default
const TYPE & operator[](bsl::ptrdiff_t offset) const
Definition bdlc_compactedarray.h:1247
TYPE & reference
Definition bdlc_compactedarray.h:440
const TYPE & operator*() const
Definition bdlc_compactedarray.h:1226
bsl::ptrdiff_t difference_type
Definition bdlc_compactedarray.h:428
TYPE * pointer
Definition bdlc_compactedarray.h:437
CompactedArray_ConstIterator & operator-=(bsl::ptrdiff_t offset)
Definition bdlc_compactedarray.h:1185
CompactedArray_ConstIterator & operator+=(bsl::ptrdiff_t offset)
Definition bdlc_compactedarray.h:1168
friend CompactedArray_ConstIterator operator++(CompactedArray_ConstIterator &, int)
friend CompactedArray_ConstIterator operator--(CompactedArray_ConstIterator &, int)
Definition bdlc_compactedarray.h:254
~CompactedArray_RemoveAllProctor()
Definition bdlc_compactedarray.h:1013
void release()
Definition bdlc_compactedarray.h:1023
Definition bdlc_compactedarray.h:670
const_iterator end() const
Definition bdlc_compactedarray.h:1972
void append(const CompactedArray &srcArray)
Definition bdlc_compactedarray.h:1553
const TYPE & uniqueElement(bsl::size_t index) const
Definition bdlc_compactedarray.h:2028
void remove(bsl::size_t dstIndex, bsl::size_t numElements)
Definition bdlc_compactedarray.h:1737
void push_back(const TYPE &value)
Append to this array an element having the specified value.
Definition bdlc_compactedarray.h:1722
CompactedArray & operator=(const CompactedArray &rhs)
Definition bdlc_compactedarray.h:1524
bsl::size_t capacity() const
Definition bdlc_compactedarray.h:1965
void insert(bsl::size_t dstIndex, const CompactedArray &srcArray)
Definition bdlc_compactedarray.h:1637
const_iterator insert(const_iterator dst, const TYPE &value)
Definition bdlc_compactedarray.h:1628
void swap(CompactedArray &other)
Definition bdlc_compactedarray.h:1921
const_iterator remove(const_iterator dstFirst, const_iterator dstLast)
Definition bdlc_compactedarray.h:1765
void reserveCapacity(bsl::size_t numElements, bsl::size_t numUniqueElements)
Definition bdlc_compactedarray.h:1879
void replace(bsl::size_t dstIndex, const TYPE &value)
Definition bdlc_compactedarray.h:1784
const TYPE & front() const
Definition bdlc_compactedarray.h:1979
bool isEmpty() const
Definition bdlc_compactedarray.h:1988
TYPE value_type
Definition bdlc_compactedarray.h:700
~CompactedArray()
Destroy this object.
Definition bdlc_compactedarray.h:1518
void insert(bsl::size_t dstIndex, const TYPE &value)
Definition bdlc_compactedarray.h:1612
bool isEqual(const CompactedArray &other) const
Definition bdlc_compactedarray.h:1995
void reserveCapacity(bsl::size_t numElements)
Definition bdlc_compactedarray.h:1869
bsl::size_t uniqueLength() const
Return the number of unique elements in this array.
Definition bdlc_compactedarray.h:2037
CompactedArray(bsl::size_t numElements, const TYPE &value=TYPE(), bslma::Allocator *basicAllocator=0)
Definition bdlc_compactedarray.h:1494
void insert(bsl::size_t dstIndex, const CompactedArray &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
Definition bdlc_compactedarray.h:1666
const_iterator begin() const
Definition bdlc_compactedarray.h:1958
void append(const TYPE &value)
Definition bdlc_compactedarray.h:1541
bslma::Allocator * allocator() const
Return the allocator used by this array to supply memory.
Definition bdlc_compactedarray.h:1941
CompactedArray(const CompactedArray &original, bslma::Allocator *basicAllocator=0)
Definition bdlc_compactedarray.h:1509
const TYPE & back() const
Definition bdlc_compactedarray.h:1948
void append(const CompactedArray &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
Definition bdlc_compactedarray.h:1579
bsl::size_t length() const
Return the number of elements in this array.
Definition bdlc_compactedarray.h:2002
CompactedArray_ConstIterator< TYPE > const_iterator
Definition bdlc_compactedarray.h:702
void resize(bsl::size_t numElements)
Definition bdlc_compactedarray.h:1895
const TYPE & operator[](bsl::size_t index) const
Definition bdlc_compactedarray.h:1932
void removeAll()
Remove all the elements from this array.
Definition bdlc_compactedarray.h:1777
CompactedArray(bslma::Allocator *basicAllocator=0)
Definition bdlc_compactedarray.h:1487
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlc_compactedarray.h:2008
void replace(bsl::size_t dstIndex, const CompactedArray &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
Definition bdlc_compactedarray.h:1809
void remove(bsl::size_t dstIndex)
Definition bdlc_compactedarray.h:1729
void pop_back()
Definition bdlc_compactedarray.h:1702
Definition bdlc_packedintarray.h:1048
void resize(bsl::size_t numElements)
Definition bdlc_packedintarray.h:2484
bsl::size_t length() const
Return number of elements in this array.
Definition bdlc_packedintarray.h:2586
void reserveCapacity(bsl::size_t numElements)
Definition bdlc_packedintarray.h:2451
size_type size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements in this vector.
Definition bslstl_vector.h:2664
Definition bslstl_vector.h:1025
VALUE_TYPE & emplace_back(Args &&... arguments)
Definition bslstl_vector.h:3741
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:194
Definition bslim_printer.h:601
void printValue(const TYPE &data) const
Definition bslim_printer.h:1207
void end(bool suppressBracket=false) const
void start(bool suppressBracket=false) const
Definition bslma_allocator.h:457
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1804
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
void hashAppend(HASH_ALGORITHM &hashAlg, const baljsn::EncoderTestAddress &object)
Definition baljsn_encoder_testtypes.h:9236
Definition bdlc_bitarray.h:503
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 bdlb_printmethods.h:283
Definition balxml_encoderoptions.h:68
static FORWARD_IT lowerBound(FORWARD_IT first, FORWARD_IT last, const TYPE &value)
Definition bdlb_algorithmworkaroundutil.h:157
Definition bdlc_compactedarray.h:291
bsl::size_t d_count
Definition bdlc_compactedarray.h:295
CompactedArray_CountedValue(const TYPE &value, bsl::size_t count, bslma::Allocator *basicAllocator)
Definition bdlc_compactedarray.h:1035
CompactedArray_CountedValue & operator=(const CompactedArray_CountedValue< TYPE > &rhs)
Definition bdlc_compactedarray.h:1073
~CompactedArray_CountedValue()
Destroy this object.
Definition bdlc_compactedarray.h:1064
bsls::ObjectBuffer< TYPE > d_value
Definition bdlc_compactedarray.h:294
static void construct(TARGET_TYPE *address, const ALLOCATOR &allocator)
Definition bslma_constructionutil.h:1243
Definition bslma_usesbslmaallocator.h:343
Definition bsls_objectbuffer.h:276