30 template<
unsigned nBits>
33 StorageList(packedLength(size), 0u),
40 template<
unsigned nBits>
56 #if (UINT_MAX == 0xFFFFFFFF)
58 # define COUNT_PACKEDBITS(sum, x) \
60 x -= (x >> 1) & 0x55555555; \
61 x = (x & 0x33333333) + ((x >> 2) & 0x33333333); \
62 sum += (((x + (x >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24; \
64 #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF)
66 # define COUNT_PACKEDBITS(sum, x) \
68 x -= (x >> 1) & 0x5555555555555555; \
69 x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333); \
70 sum += (((x + (x >> 4)) & 0x0F0F0F0F0F0F0F0F) * 0x0101010101010101) >> 56;\
74 # define COUNT_PACKEDBITS(sum, x) for (; x; ++sum) { x &= x - 1; }
78 template<
unsigned nBits>
81 register unsigned int c = 0;
86 unsigned int mask = maskLower(packing());
88 const unsigned int endSeg = size_ / packing();
89 const unsigned int endOff = size_ % packing();
92 for (
unsigned i = 0; i < endSeg; ++i)
94 register unsigned int bits = StorageList::operator[](i) & mask;
101 mask = maskLower(endOff);
103 register unsigned int bits = StorageList::operator[](endSeg) & mask;
112 template<
unsigned nBits>
121 unsigned int mask = maskLower(packing());
123 label currElem = packedLength(size_) - 1;
124 unsigned int endOff = size_ % packing();
129 StorageList::operator[](currElem) &= maskLower(endOff);
133 while (currElem > 0 && !(StorageList::operator[](currElem) &= mask))
139 label newsize = (currElem + 1) * packing();
142 mask = max_value() << (nBits * (packing() - 1));
144 for (endOff = packing(); endOff >= 1; --endOff, --newsize)
146 if (StorageList::operator[](currElem) & mask)
154 if (size_ == newsize)
164 template<
unsigned nBits>
167 label packLen = packedLength(size_);
169 for (label i=0; i < packLen; i++)
171 StorageList::operator[](i) = ~
StorageList::operator[](i);
176 template<
unsigned nBits>
189 template<
unsigned nBits>
192 os <<
"iterator<" << label(nBits) <<
"> ["
193 << this->index_ <<
"]"
194 <<
" segment:" << label(this->index_ / packing())
195 <<
" offset:" << label(this->index_ % packing())
196 <<
" value:" << this->
get()
203 template<
unsigned nBits>
206 const label packLen = packedLength(size_);
208 os <<
"PackedList<" << nBits <<
">"
209 <<
" max_value:" << max_value()
210 <<
" packing:" << packing() <<
nl
211 <<
" count: " << count() <<
nl
212 <<
" size/capacity: " << size_ <<
"/" << capacity() <<
nl
213 <<
" storage/capacity: " << packLen <<
"/" << StorageList::size()
217 unsigned int mask = maskLower(packing());
219 for (label i=0; i < packLen; i++)
221 const StorageType& rawBits = StorageList::operator[](i);
226 unsigned int endOff = size_ % packing();
230 mask = maskLower(endOff);
238 for (
unsigned int testBit = (1u << max_bits()); testBit; testBit >>= 1)
242 if (rawBits & testBit)
266 template<
unsigned nBits>
269 StorageList::operator=(lst);
274 template<
unsigned nBits>
277 setCapacity(lst.
size());