8#ifndef INCLUDED_BDLC_PACKEDINTARRAY
9#define INCLUDED_BDLC_PACKEDINTARRAY
196#include <bdlscm_version.h>
213#include <bsl_cstddef.h>
214#include <bsl_cstdint.h>
215#include <bsl_cstring.h>
216#include <bsl_limits.h>
217#include <bsl_iosfwd.h>
219#ifndef BDE_DONT_ALLOW_TRANSITIVE_INCLUDES
227template <
class TYPE>
class PackedIntArray;
229template <
class TYPE>
class PackedIntArrayConstIterator;
231template <
class TYPE> PackedIntArrayConstIterator<TYPE>
289 template <
class STREAM>
290 static void bdexGet8(STREAM& stream, bsl::int8_t& variable);
294 template <
class STREAM>
295 static void bdexGet16(STREAM& stream, bsl::int16_t& variable);
299 template <
class STREAM>
300 static void bdexGet32(STREAM& stream, bsl::int32_t& variable);
304 template <
class STREAM>
305 static void bdexGet64(STREAM& stream, bsl::int64_t& variable);
309 template <
class STREAM>
310 static void bdexPut8(STREAM& stream, bsl::int8_t value);
314 template <
class STREAM>
315 static void bdexPut16(STREAM& stream, bsl::int16_t value);
319 template <
class STREAM>
320 static void bdexPut32(STREAM& stream, bsl::int32_t value);
324 template <
class STREAM>
325 static void bdexPut64(STREAM& stream, bsl::int64_t value);
355 template <
class STREAM>
356 static void bdexGet8(STREAM& stream, bsl::uint8_t& variable);
360 template <
class STREAM>
361 static void bdexGet16(STREAM& stream, bsl::uint16_t& variable);
365 template <
class STREAM>
366 static void bdexGet32(STREAM& stream, bsl::uint32_t& variable);
370 template <
class STREAM>
371 static void bdexGet64(STREAM& stream, bsl::uint64_t& variable);
375 template <
class STREAM>
376 static void bdexPut8(STREAM& stream, bsl::uint8_t value);
380 template <
class STREAM>
381 static void bdexPut16(STREAM& stream, bsl::uint16_t value);
385 template <
class STREAM>
386 static void bdexPut32(STREAM& stream, bsl::uint32_t value);
390 template <
class STREAM>
391 static void bdexPut64(STREAM& stream, bsl::uint64_t value);
408template <
class STORAGE>
423 bsl::size_t d_length;
425 int d_bytesPerElement;
428 bsl::size_t d_capacityInBytes;
437 static bsl::size_t nextCapacityGE(bsl::size_t minValue, bsl::size_t value);
446 void expandImp(
int requiredBytesPerElement,
447 bsl::size_t requiredCapacityInBytes);
454 void replaceImp(bsl::size_t dstIndex,
ElementType value);
467 void replaceImp(
void *dst,
468 bsl::size_t dstIndex,
469 int dstBytesPerElement,
471 bsl::size_t srcIndex,
472 int srcBytesPerElement,
473 bsl::size_t numElements);
478 char *address()
const;
493 int requiredBytesPerElement(bsl::size_t index,
494 bsl::size_t numElements)
const;
557 bsl::size_t srcIndex,
558 bsl::size_t numElements);
571 template <
class STREAM>
603 bsl::size_t srcIndex,
604 bsl::size_t numElements);
620 void remove(bsl::size_t dstIndex);
628 void remove(bsl::size_t dstIndex, bsl::size_t numElements);
652 bsl::size_t srcIndex,
653 bsl::size_t numElements);
691 void resize(bsl::size_t numElements);
718 template <
class STREAM>
740 bsl::size_t
length()
const;
754 bsl::ostream&
print(bsl::ostream& stream,
756 int spacesPerLevel = 4)
const;
1007template <
class TYPE>
1019template <
class TYPE>
1027template <
class TYPE>
1035template <
class TYPE>
1042template <
class TYPE>
1051template <
class TYPE>
1061template <
class TYPE>
1070template <
class TYPE>
1079template <
class TYPE>
1097template <
class TYPE>
1104 static const bsl::size_t k_MAX_BYTES_PER_ELEMENT = 8;
1176 bsl::size_t srcIndex,
1177 bsl::size_t numElements);
1190 template <
class STREAM>
1198 void insert(bsl::size_t dstIndex, TYPE value);
1227 bsl::size_t srcIndex,
1228 bsl::size_t numElements);
1252 void remove(bsl::size_t dstIndex, bsl::size_t numElements);
1286 bsl::size_t srcIndex,
1287 bsl::size_t numElements);
1356 template <
class STREAM>
1412 bsl::ostream&
print(bsl::ostream& stream,
1414 int spacesPerLevel = 4)
const;
1425template <
class TYPE>
1433template <
class TYPE>
1442template <
class TYPE>
1451template <
class TYPE>
1457template <
class HASHALG,
class TYPE>
1468template <
class STREAM>
1473 variable =
static_cast<bsl::int8_t
>(v);
1476template <
class STREAM>
1478 bsl::int16_t& variable)
1482 variable =
static_cast<bsl::int16_t
>(v);
1485template <
class STREAM>
1487 bsl::int32_t& variable)
1491 variable =
static_cast<bsl::int32_t
>(v);
1494template <
class STREAM>
1496 bsl::int64_t& variable)
1500 variable =
static_cast<bsl::int64_t
>(v);
1503template <
class STREAM>
1506 stream.putInt8(
static_cast<int>(value));
1509template <
class STREAM>
1512 stream.putInt16(
static_cast<int>(value));
1515template <
class STREAM>
1518 stream.putInt32(
static_cast<int>(value));
1521template <
class STREAM>
1531template <
class STREAM>
1533 bsl::uint8_t& variable)
1537 variable =
static_cast<bsl::uint8_t
>(v);
1540template <
class STREAM>
1542 bsl::uint16_t& variable)
1545 stream.getUint16(v);
1546 variable =
static_cast<bsl::uint16_t
>(v);
1549template <
class STREAM>
1551 bsl::uint32_t& variable)
1554 stream.getUint32(v);
1555 variable =
static_cast<bsl::uint32_t
>(v);
1558template <
class STREAM>
1560 bsl::uint64_t& variable)
1563 stream.getUint64(v);
1564 variable =
static_cast<bsl::uint64_t
>(v);
1567template <
class STREAM>
1570 stream.putUint8(
static_cast<unsigned int>(value));
1573template <
class STREAM>
1576 stream.putUint16(
static_cast<unsigned int>(value));
1579template <
class STREAM>
1582 stream.putUint32(
static_cast<unsigned int>(value));
1585template <
class STREAM>
1596template <
class STORAGE>
1603 static const bsl::size_t k_TOP_CAPACITY = k_MAX_CAPACITY / 3 * 2 - 3;
1610 while (value < minValue) {
1611 value += (value + 3) / 2;
1618template <
class STORAGE>
1620char *PackedIntArrayImp<STORAGE>::address()
const
1622 return static_cast<char *
>(d_storage_p);
1626template <
class STORAGE>
1634template <
class STORAGE>
1639 append(srcArray, 0, srcArray.d_length);
1642template <
class STORAGE>
1643template <
class STREAM>
1650 int tmpBytesPerElement;
1654 tmpBytesPerElement =
static_cast<int>(v);
1656 if ( 1 != tmpBytesPerElement
1657 && 2 != tmpBytesPerElement
1658 && 4 != tmpBytesPerElement
1659 && 8 != tmpBytesPerElement) {
1660 stream.invalidate();
1663 bsl::size_t tmpLength;
1666 stream.getLength(v);
1667 tmpLength =
static_cast<bsl::size_t
>(v);
1670 bsl::size_t numBytes = tmpBytesPerElement * tmpLength;
1671 if (numBytes > d_capacityInBytes) {
1674 bsl::size_t requiredCapacityInBytes =
1675 nextCapacityGE(numBytes, d_capacityInBytes);
1679 d_allocator_p->allocate(requiredCapacityInBytes);
1683 d_allocator_p->deallocate(d_storage_p);
1688 d_capacityInBytes = requiredCapacityInBytes;
1693 d_bytesPerElement = tmpBytesPerElement;
1694 d_length = tmpLength;
1698 switch (d_bytesPerElement) {
1700 typename STORAGE::OneByteStorageType *s =
1701 static_cast<typename STORAGE::OneByteStorageType *
>
1703 for (bsl::size_t i = 0; i < d_length; ++i) {
1704 STORAGE::bdexGet8(stream, s[i]);
1708 typename STORAGE::TwoByteStorageType *s =
1709 static_cast<typename STORAGE::TwoByteStorageType *
>
1711 for (bsl::size_t i = 0; i < d_length; ++i) {
1712 STORAGE::bdexGet16(stream, s[i]);
1716 typename STORAGE::FourByteStorageType *s =
1717 static_cast<typename STORAGE::FourByteStorageType *
>
1719 for (bsl::size_t i = 0; i < d_length; ++i) {
1720 STORAGE::bdexGet32(stream, s[i]);
1724 typename STORAGE::EightByteStorageType *s =
1725 static_cast<typename STORAGE::EightByteStorageType *
>
1727 for (bsl::size_t i = 0; i < d_length; ++i) {
1728 STORAGE::bdexGet64(stream, s[i]);
1736 stream.invalidate();
1743template <
class STORAGE>
1746 bsl::size_t dstIndex,
1751 insert(dstIndex, srcArray, 0, srcArray.
length());
1754template <
class STORAGE>
1763template <
class STORAGE>
1770template <
class STORAGE>
1776 remove(dstIndex, 1);
1779template <
class STORAGE>
1782 bsl::size_t numElements)
1788 d_length -= numElements;
1791 bsl::memmove(address() + dstIndex * d_bytesPerElement,
1792 address() + (dstIndex + numElements) * d_bytesPerElement,
1793 (d_length - dstIndex) * d_bytesPerElement);
1797template <
class STORAGE>
1802 d_bytesPerElement = 1;
1805template <
class STORAGE>
1810 BSLS_ASSERT(k_MAX_CAPACITY / d_bytesPerElement >= numElements);
1812 size_t requiredCapacityInBytes = d_bytesPerElement * numElements;
1813 if (requiredCapacityInBytes > d_capacityInBytes) {
1814 reserveCapacityImp(requiredCapacityInBytes);
1818template <
class STORAGE>
1825 int requiredBytesPerElement = d_bytesPerElement;
1827 int rbpe = STORAGE::requiredBytesPerElement(maxValue);
1828 if (rbpe > requiredBytesPerElement) {
1829 requiredBytesPerElement = rbpe;
1833 BSLS_ASSERT(k_MAX_CAPACITY / requiredBytesPerElement >= numElements);
1835 size_t requiredCapacityInBytes = requiredBytesPerElement * numElements;
1837 if (requiredCapacityInBytes > d_capacityInBytes) {
1838 reserveCapacityImp(requiredCapacityInBytes);
1848 int requiredBytesPerElement = d_bytesPerElement;
1851 if (rbpe > requiredBytesPerElement) {
1852 requiredBytesPerElement = rbpe;
1856 BSLS_ASSERT(k_MAX_CAPACITY / requiredBytesPerElement >= numElements);
1858 size_t requiredCapacityInBytes = requiredBytesPerElement * numElements;
1860 if (requiredCapacityInBytes > d_capacityInBytes) {
1861 reserveCapacityImp(requiredCapacityInBytes);
1865template <
class STORAGE>
1873 int requiredBytesPerElement = d_bytesPerElement;
1875 int rbpe = STORAGE::requiredBytesPerElement(maxValue);
1876 if (rbpe > requiredBytesPerElement) {
1877 requiredBytesPerElement = rbpe;
1880 rbpe = STORAGE::requiredBytesPerElement(minValue);
1881 if (rbpe > requiredBytesPerElement) {
1882 requiredBytesPerElement = rbpe;
1886 BSLS_ASSERT(k_MAX_CAPACITY / requiredBytesPerElement >= numElements);
1888 size_t requiredCapacityInBytes = requiredBytesPerElement * numElements;
1890 if (requiredCapacityInBytes > d_capacityInBytes) {
1891 reserveCapacityImp(requiredCapacityInBytes);
1895template <
class STORAGE>
1899 if (numElements > d_length) {
1900 reserveCapacity(numElements);
1901 bsl::memset(address() + d_length * d_bytesPerElement,
1903 (numElements - d_length) * d_bytesPerElement);
1905 d_length = numElements;
1908template <
class STORAGE>
1912 BSLS_ASSERT(d_allocator_p == other.d_allocator_p);
1921template <
class STORAGE>
1925 return d_allocator_p;
1928template <
class STORAGE>
1929template <
class STREAM>
1937 stream.putInt8(d_bytesPerElement);
1938 stream.putLength(
static_cast<int>(d_length));
1939 switch (d_bytesPerElement) {
1941 typename STORAGE::OneByteStorageType *s =
1942 static_cast<typename STORAGE::OneByteStorageType *
>
1944 for (bsl::size_t i = 0; i < d_length; ++i) {
1945 STORAGE::bdexPut8(stream, s[i]);
1949 typename STORAGE::TwoByteStorageType *s =
1950 static_cast<typename STORAGE::TwoByteStorageType *
>
1952 for (bsl::size_t i = 0; i < d_length; ++i) {
1953 STORAGE::bdexPut16(stream, s[i]);
1957 typename STORAGE::FourByteStorageType *s =
1958 static_cast<typename STORAGE::FourByteStorageType *
>
1960 for (bsl::size_t i = 0; i < d_length; ++i) {
1961 STORAGE::bdexPut32(stream, s[i]);
1965 typename STORAGE::EightByteStorageType *s =
1966 static_cast<typename STORAGE::EightByteStorageType *
>
1968 for (bsl::size_t i = 0; i < d_length; ++i) {
1969 STORAGE::bdexPut64(stream, s[i]);
1975 stream.invalidate();
1982template <
class STORAGE>
1985 return d_bytesPerElement;
1988template <
class STORAGE>
1991 return d_capacityInBytes / d_bytesPerElement;
1994template <
class STORAGE>
1997 return 0 == d_length;
2000template <
class STORAGE>
2005 if (d_length == other.d_length) {
2006 if (0 == d_length) {
2009 else if (d_bytesPerElement == other.d_bytesPerElement) {
2010 return 0 == bsl::memcmp(d_storage_p,
2012 d_length * d_bytesPerElement);
2015 return isEqualImp(other);
2021template <
class STORAGE>
2033template <
class TYPE>
2036 const ImpType *array,
2045template <
class TYPE>
2053template <
class TYPE>
2057: d_array_p(original.d_array_p)
2058, d_index(original.d_index)
2063template <
class TYPE>
2068 d_array_p = rhs.d_array_p;
2069 d_index = rhs.d_index;
2073template <
class TYPE>
2085template <
class TYPE>
2097template <
class TYPE>
2108 || d_array_p->length() - d_index >= bsl::size_t(offset));
2114template <
class TYPE>
2125 || d_array_p->length() - d_index >= bsl::size_t(-offset));
2132template <
class TYPE>
2139 return static_cast<TYPE
>((*d_array_p)[d_index]);
2142template <
class TYPE>
2152template <
class TYPE>
2162 || d_array_p->length() - d_index > bsl::size_t(offset));
2164 return static_cast<TYPE
>((*d_array_p)[d_index + offset]);
2167template <
class TYPE>
2178 || d_array_p->length() - d_index >= bsl::size_t(offset));
2184template <
class TYPE>
2195 || d_array_p->length() - d_index >= bsl::size_t(-offset));
2203template <
class TYPE>
2206 PackedIntArrayConstIterator<TYPE>& iter,
2212 const PackedIntArrayConstIterator<TYPE> curr = iter;
2217template <
class TYPE>
2220 PackedIntArrayConstIterator<TYPE>& iter,
2226 const PackedIntArrayConstIterator<TYPE> curr = iter;
2231template <
class TYPE>
2234 const PackedIntArrayConstIterator<TYPE>& rhs)
2236 return lhs.d_array_p ==
rhs.d_array_p &&
lhs.d_index ==
rhs.d_index;
2239template <
class TYPE>
2242 const PackedIntArrayConstIterator<TYPE>& rhs)
2244 return lhs.d_array_p !=
rhs.d_array_p ||
lhs.d_index !=
rhs.d_index;
2247template <
class TYPE>
2249bsl::ptrdiff_t
bdlc::operator-(
const PackedIntArrayConstIterator<TYPE>& lhs,
2250 const PackedIntArrayConstIterator<TYPE>& rhs)
2255 lhs.d_index >=
rhs.d_index
2256 ?
lhs.d_index -
rhs.d_index <=
2257 bsl::size_t(bsl::numeric_limits<bsl::ptrdiff_t>::max())
2258 :
rhs.d_index -
lhs.d_index <=
2259 bsl::size_t(
bsl::numeric_limits<
bsl::ptrdiff_t>::min()));
2261 return static_cast<bsl::ptrdiff_t
>(
lhs.d_index -
rhs.d_index);
2264template <
class TYPE>
2267 const PackedIntArrayConstIterator<TYPE>& rhs)
2271 return lhs.d_index <
rhs.d_index;
2274template <
class TYPE>
2277 const PackedIntArrayConstIterator<TYPE>& rhs)
2281 return lhs.d_index <=
rhs.d_index;
2284template <
class TYPE>
2287 const PackedIntArrayConstIterator<TYPE>& rhs)
2291 return lhs.d_index >
rhs.d_index;
2294template <
class TYPE>
2297 const PackedIntArrayConstIterator<TYPE>& rhs)
2301 return lhs.d_index >=
rhs.d_index;
2311template <
class TYPE>
2315 return ImpType::maxSupportedBdexVersion(serializationVersion);
2319template <
class TYPE>
2322: d_imp(basicAllocator)
2326template <
class TYPE>
2332 static_cast<typename
ImpType::ElementType>(value),
2337template <
class TYPE>
2342: d_imp(original.d_imp, basicAllocator)
2346template <
class TYPE>
2353template <
class TYPE>
2362template <
class TYPE>
2366 d_imp.append(
static_cast<typename ImpType::ElementType
>(value));
2369template <
class TYPE>
2373 d_imp.append(srcArray.d_imp);
2376template <
class TYPE>
2379 bsl::size_t srcIndex,
2380 bsl::size_t numElements)
2387 d_imp.append(srcArray.d_imp, srcIndex, numElements);
2390template <
class TYPE>
2391template <
class STREAM>
2395 return d_imp.bdexStreamIn(stream, version);
2398template <
class TYPE>
2404 d_imp.insert(dstIndex,
static_cast<typename ImpType::ElementType
>(value));
2407template <
class TYPE>
2412 insert(dst.d_index, value);
2416template <
class TYPE>
2423 d_imp.insert(dstIndex, srcArray.d_imp);
2426template <
class TYPE>
2430 bsl::size_t srcIndex,
2431 bsl::size_t numElements)
2440 d_imp.insert(dstIndex, srcArray.d_imp, srcIndex, numElements);
2443template <
class TYPE>
2452template <
class TYPE>
2456 d_imp.push_back(
static_cast<typename ImpType::ElementType
>(value));
2459template <
class TYPE>
2465 d_imp.remove(dstIndex);
2468template <
class TYPE>
2471 bsl::size_t numElements)
2477 d_imp.remove(dstIndex, numElements);
2480template <
class TYPE>
2487 remove(dstFirst.d_index, dstLast.d_index - dstFirst.d_index);
2491template <
class TYPE>
2498template <
class TYPE>
2504 d_imp.replace(dstIndex,
static_cast<typename ImpType::ElementType
>(value));
2507template <
class TYPE>
2511 bsl::size_t srcIndex,
2512 bsl::size_t numElements)
2523 d_imp.replace(dstIndex, srcArray.d_imp, srcIndex, numElements);
2526template <
class TYPE>
2532 ImpType::k_MAX_CAPACITY / k_MAX_BYTES_PER_ELEMENT >= numElements);
2534 d_imp.reserveCapacityImp(numElements * k_MAX_BYTES_PER_ELEMENT);
2537template <
class TYPE>
2545 d_imp.reserveCapacity(numElements, maxValue);
2548template <
class TYPE>
2556 d_imp.reserveCapacity(numElements, minValue, maxValue);
2559template <
class TYPE>
2563 d_imp.resize(numElements);
2566template <
class TYPE>
2572 d_imp.swap(other.d_imp);
2576template <
class TYPE>
2582 return static_cast<TYPE
>(d_imp[index]);
2585template <
class TYPE>
2589 return d_imp.allocator();
2592template <
class TYPE>
2598 return static_cast<TYPE
>(d_imp[length() - 1]);
2601template <
class TYPE>
2602template <
class STREAM>
2606 return d_imp.bdexStreamOut(stream, version);
2609template <
class TYPE>
2617template <
class TYPE>
2621 return d_imp.bytesPerElement();
2624template <
class TYPE>
2628 return d_imp.capacity();
2631template <
class TYPE>
2638template <
class TYPE>
2644 return static_cast<TYPE
>(d_imp[0]);
2647template <
class TYPE>
2651 return d_imp.isEmpty();
2654template <
class TYPE>
2658 return d_imp.isEqual(other.d_imp);
2661template <
class TYPE>
2665 return d_imp.length();
2668template <
class TYPE>
2671 int spacesPerLevel)
const
2673 return d_imp.print(stream, level, spacesPerLevel);
2679template <
class TYPE>
2682 const PackedIntArray<TYPE>& array)
2684 return array.
print(stream);
2687template <
class TYPE>
2690 const PackedIntArray<TYPE>& rhs)
2692 return lhs.isEqual(rhs);
2695template <
class TYPE>
2698 const PackedIntArray<TYPE>& rhs)
2704template <
class TYPE>
2705void bdlc::swap(PackedIntArray<TYPE>& a, PackedIntArray<TYPE>& b)
2707 if (a.allocator() == b.allocator()) {
2713 PackedIntArray<TYPE> futureA(b, a.allocator());
2714 PackedIntArray<TYPE> futureB(a, b.allocator());
2721template <
class HASHALG,
class TYPE>
2725 using ::BloombergLP::bslh::hashAppend;
2726 typedef typename PackedIntArray<TYPE>::const_iterator ci_t;
2728 for (ci_t b = input.begin(), e = input.end(); b != e; ++b) {
2739template <
class STORAGE>
2743template <
class TYPE>
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlc_packedintarray.h:802
friend bsl::ptrdiff_t operator-(const PackedIntArrayConstIterator &, const PackedIntArrayConstIterator &)
PackedIntArrayConstIterator & operator=(const PackedIntArrayConstIterator &rhs)
Definition bdlc_packedintarray.h:2066
PackedIntArrayConstIterator & operator-=(bsl::ptrdiff_t offset)
Definition bdlc_packedintarray.h:2117
TYPE value_type
Definition bdlc_packedintarray.h:863
bsl::ptrdiff_t difference_type
Definition bdlc_packedintarray.h:850
TYPE operator*() const
Definition bdlc_packedintarray.h:2134
TYPE operator[](bsl::ptrdiff_t offset) const
Definition bdlc_packedintarray.h:2154
friend PackedIntArrayConstIterator operator--(PackedIntArrayConstIterator &, int)
PackedIntArrayConstIterator & operator+=(bsl::ptrdiff_t offset)
Definition bdlc_packedintarray.h:2100
PackedIntArrayConstIterator operator+(bsl::ptrdiff_t offset) const
Definition bdlc_packedintarray.h:2170
bsl::size_t size_type
Definition bdlc_packedintarray.h:856
void * pointer
Definition bdlc_packedintarray.h:868
friend PackedIntArrayConstIterator operator++(PackedIntArrayConstIterator &, int)
~PackedIntArrayConstIterator()=default
TYPE operator->() const
Definition bdlc_packedintarray.h:2144
TYPE & reference
Definition bdlc_packedintarray.h:873
PackedIntArrayConstIterator()
Definition bdlc_packedintarray.h:2047
Definition bdlc_packedintarray.h:409
bool isEqual(const PackedIntArrayImp &other) const
Definition bdlc_packedintarray.h:2002
~PackedIntArrayImp()
Destroy this object.
PackedIntArrayImp(bslma::Allocator *basicAllocator=0)
void swap(PackedIntArrayImp &other)
Definition bdlc_packedintarray.h:1910
bsl::size_t length() const
Return number of elements in this array.
Definition bdlc_packedintarray.h:2023
void append(const PackedIntArrayImp &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
STREAM & bdexStreamIn(STREAM &stream, int version)
Definition bdlc_packedintarray.h:1645
STREAM & bdexStreamOut(STREAM &stream, int version) const
Definition bdlc_packedintarray.h:1931
void insert(bsl::size_t dstIndex, ElementType value)
bslma::Allocator * allocator() const
Return the allocator used by this array to supply memory.
Definition bdlc_packedintarray.h:1923
PackedIntArrayImp & operator=(const PackedIntArrayImp &rhs)
PackedIntArrayImp(const PackedIntArrayImp &original, bslma::Allocator *basicAllocator=0)
static int maxSupportedBdexVersion(int serializationVersion)
Definition bdlc_packedintarray.h:1628
bsl::size_t capacity() const
Definition bdlc_packedintarray.h:1990
void reserveCapacity(bsl::size_t numElements)
Definition bdlc_packedintarray.h:1807
void reserveCapacityImp(bsl::size_t requiredCapacityInBytes)
void insert(bsl::size_t dstIndex, const PackedIntArrayImp &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
void replace(bsl::size_t dstIndex, const PackedIntArrayImp &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
void pop_back()
Definition bdlc_packedintarray.h:1756
static const bsl::size_t k_MAX_CAPACITY
Definition bdlc_packedintarray.h:416
void append(ElementType value)
int bytesPerElement() const
Definition bdlc_packedintarray.h:1984
void remove(bsl::size_t dstIndex)
Definition bdlc_packedintarray.h:1772
void push_back(ElementType value)
Definition bdlc_packedintarray.h:1765
void replace(bsl::size_t dstIndex, ElementType value)
bool isEmpty() const
Definition bdlc_packedintarray.h:1996
void resize(bsl::size_t numElements)
Definition bdlc_packedintarray.h:1897
ElementType operator[](bsl::size_t index) const
void removeAll()
Definition bdlc_packedintarray.h:1799
STORAGE::EightByteStorageType ElementType
Definition bdlc_packedintarray.h:413
PackedIntArrayImp(bsl::size_t numElements, ElementType value=0, bslma::Allocator *basicAllocator=0)
Definition bdlc_packedintarray.h:1098
const_iterator end() const
Definition bdlc_packedintarray.h:2633
void pop_back()
Definition bdlc_packedintarray.h:2445
void append(const PackedIntArray &srcArray)
Definition bdlc_packedintarray.h:2371
STREAM & bdexStreamOut(STREAM &stream, int version) const
Definition bdlc_packedintarray.h:2604
const_iterator begin() const
Definition bdlc_packedintarray.h:2612
void reserveCapacity(bsl::size_t numElements, TYPE maxValue)
Definition bdlc_packedintarray.h:2539
bool isEmpty() const
Definition bdlc_packedintarray.h:2649
STREAM & bdexStreamIn(STREAM &stream, int version)
Definition bdlc_packedintarray.h:2393
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlc_packedintarray.h:2669
bsl::size_t capacity() const
Definition bdlc_packedintarray.h:2626
void replace(bsl::size_t dstIndex, const PackedIntArray &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
Definition bdlc_packedintarray.h:2509
void swap(PackedIntArray &other)
Definition bdlc_packedintarray.h:2568
void append(const PackedIntArray &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
Definition bdlc_packedintarray.h:2378
void insert(bsl::size_t dstIndex, const PackedIntArray &srcArray, bsl::size_t srcIndex, bsl::size_t numElements)
Definition bdlc_packedintarray.h:2428
PackedIntArray(bslma::Allocator *basicAllocator=0)
Definition bdlc_packedintarray.h:2321
void removeAll()
Definition bdlc_packedintarray.h:2493
PackedIntArrayConstIterator< TYPE > const_iterator
Definition bdlc_packedintarray.h:1114
void resize(bsl::size_t numElements)
Definition bdlc_packedintarray.h:2561
static int maxSupportedBdexVersion(int serializationVersion)
Definition bdlc_packedintarray.h:2313
bsl::size_t length() const
Return number of elements in this array.
Definition bdlc_packedintarray.h:2663
TYPE back() const
Definition bdlc_packedintarray.h:2594
void reserveCapacity(bsl::size_t numElements)
Definition bdlc_packedintarray.h:2528
void push_back(TYPE value)
Definition bdlc_packedintarray.h:2454
TYPE front() const
Definition bdlc_packedintarray.h:2640
PackedIntArray(const PackedIntArray &original, bslma::Allocator *basicAllocator=0)
Definition bdlc_packedintarray.h:2339
void insert(bsl::size_t dstIndex, const PackedIntArray &srcArray)
Definition bdlc_packedintarray.h:2418
PackedIntArray(bsl::size_t numElements, TYPE value=0, bslma::Allocator *basicAllocator=0)
Definition bdlc_packedintarray.h:2328
~PackedIntArray()
Destroy this object.
Definition bdlc_packedintarray.h:2348
void append(TYPE value)
Definition bdlc_packedintarray.h:2364
TYPE value_type
Definition bdlc_packedintarray.h:1112
void insert(bsl::size_t dstIndex, TYPE value)
Definition bdlc_packedintarray.h:2400
const_iterator remove(const_iterator dstFirst, const_iterator dstLast)
Definition bdlc_packedintarray.h:2483
PackedIntArray & operator=(const PackedIntArray &rhs)
Definition bdlc_packedintarray.h:2355
bslma::Allocator * allocator() const
Return the allocator used by this array to supply memory.
Definition bdlc_packedintarray.h:2587
void remove(bsl::size_t dstIndex)
Definition bdlc_packedintarray.h:2461
TYPE operator[](bsl::size_t index) const
Definition bdlc_packedintarray.h:2578
int bytesPerElement() const
Definition bdlc_packedintarray.h:2619
const_iterator insert(const_iterator dst, TYPE value)
Definition bdlc_packedintarray.h:2410
void remove(bsl::size_t dstIndex, bsl::size_t numElements)
Definition bdlc_packedintarray.h:2470
void replace(bsl::size_t dstIndex, TYPE value)
Definition bdlc_packedintarray.h:2500
bool isEqual(const PackedIntArray &other) const
Definition bdlc_packedintarray.h:2656
void reserveCapacity(bsl::size_t numElements, TYPE minValue, TYPE maxValue)
Definition bdlc_packedintarray.h:2550
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:182
Definition bslma_allocator.h:545
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#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)
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
Definition bdlc_packedintarray.h:769
bsl::conditional< bsl::is_same< TYPE, unsignedchar >::value||bsl::is_same< TYPE, unsignedshort >::value||bsl::is_same< TYPE, unsignedint >::value||bsl::is_same< TYPE, unsignedlongint >::value||bsl::is_same< TYPE, bsls::Types::Uint64 >::value||bsl::is_same< TYPE, bsl::uint8_t >::value||bsl::is_same< TYPE, bsl::uint16_t >::value||bsl::is_same< TYPE, bsl::uint32_t >::value||bsl::is_same< TYPE, bsl::uint64_t >::value, PackedIntArrayImp< PackedIntArrayImp_Unsigned >, PackedIntArrayImp< PackedIntArrayImp_Signed > >::type Type
Definition bdlc_packedintarray.h:783
Definition bdlc_packedintarray.h:277
bsl::int8_t OneByteStorageType
Definition bdlc_packedintarray.h:280
static void bdexPut16(STREAM &stream, bsl::int16_t value)
Definition bdlc_packedintarray.h:1510
bsl::int64_t EightByteStorageType
Definition bdlc_packedintarray.h:283
static void bdexGet64(STREAM &stream, bsl::int64_t &variable)
Definition bdlc_packedintarray.h:1495
static void bdexGet16(STREAM &stream, bsl::int16_t &variable)
Definition bdlc_packedintarray.h:1477
static void bdexGet32(STREAM &stream, bsl::int32_t &variable)
Definition bdlc_packedintarray.h:1486
bsl::int16_t TwoByteStorageType
Definition bdlc_packedintarray.h:281
static void bdexGet8(STREAM &stream, bsl::int8_t &variable)
Definition bdlc_packedintarray.h:1469
static int requiredBytesPerElement(EightByteStorageType value)
Return the required number of bytes to store the specified value.
static void bdexPut32(STREAM &stream, bsl::int32_t value)
Definition bdlc_packedintarray.h:1516
static void bdexPut64(STREAM &stream, bsl::int64_t value)
Definition bdlc_packedintarray.h:1522
bsl::int32_t FourByteStorageType
Definition bdlc_packedintarray.h:282
static void bdexPut8(STREAM &stream, bsl::int8_t value)
Definition bdlc_packedintarray.h:1504
Definition bdlc_packedintarray.h:343
static void bdexGet16(STREAM &stream, bsl::uint16_t &variable)
Definition bdlc_packedintarray.h:1541
bsl::uint8_t OneByteStorageType
Definition bdlc_packedintarray.h:346
static void bdexGet64(STREAM &stream, bsl::uint64_t &variable)
Definition bdlc_packedintarray.h:1559
bsl::uint16_t TwoByteStorageType
Definition bdlc_packedintarray.h:347
static void bdexPut16(STREAM &stream, bsl::uint16_t value)
Definition bdlc_packedintarray.h:1574
static void bdexGet8(STREAM &stream, bsl::uint8_t &variable)
Definition bdlc_packedintarray.h:1532
static void bdexPut32(STREAM &stream, bsl::uint32_t value)
Definition bdlc_packedintarray.h:1580
static void bdexGet32(STREAM &stream, bsl::uint32_t &variable)
Definition bdlc_packedintarray.h:1550
bsl::uint32_t FourByteStorageType
Definition bdlc_packedintarray.h:348
bsl::uint64_t EightByteStorageType
Definition bdlc_packedintarray.h:349
static int requiredBytesPerElement(EightByteStorageType value)
Return the required number of bytes to store the specified value.
static void bdexPut8(STREAM &stream, bsl::uint8_t value)
Definition bdlc_packedintarray.h:1568
static void bdexPut64(STREAM &stream, bsl::uint64_t value)
Definition bdlc_packedintarray.h:1586
Definition bslmf_conditional.h:123
Definition bslmf_integralconstant.h:261
Definition bslmf_issame.h:146
Definition bslma_usesbslmaallocator.h:344
unsigned long long Uint64
Definition bsls_types.h:139
long long Int64
Definition bsls_types.h:134