32 template<
unsigned nBits>
35 return sizeof(StorageType)*CHAR_BIT - 1;
39 template<
unsigned nBits>
42 return (1u << nBits) - 1;
46 template<
unsigned nBits>
49 return sizeof(StorageType)*CHAR_BIT / nBits;
53 template<
unsigned nBits>
59 return (~0u >> (
sizeof(StorageType)*CHAR_BIT - nBits * offset));
63 template<
unsigned nBits>
66 return (nElem + packing() - 1) / packing();
72 template<
unsigned nBits>
80 template<
unsigned nBits>
88 template<
unsigned nBits>
96 template<
unsigned nBits>
103 template<
unsigned nBits>
115 template<
unsigned nBits>
123 template<
unsigned nBits>
135 template<
unsigned nBits>
139 const unsigned int seg = index_ /
packing();
140 const unsigned int off = index_ %
packing();
142 const unsigned int& stored = list_->StorageList::operator[](seg);
143 return (stored >> (nBits * off)) &
max_value();
147 template<
unsigned nBits>
151 const unsigned int seg = index_ /
packing();
152 const unsigned int off = index_ %
packing();
154 unsigned int& stored = list_->StorageList::operator[](seg);
155 const unsigned int prev = stored;
157 const unsigned int startBit = nBits * off;
158 const unsigned int maskNew =
max_value() << startBit;
168 stored |= maskNew & (val << startBit);
171 return prev != stored;
175 template<
unsigned nBits>
181 return this->
get() == iter.
get();
185 template<
unsigned nBits>
186 inline bool Foam::PackedList<nBits>::iteratorBase::operator!=
191 return this->
get() != iter.get();
195 template<
unsigned nBits>
199 const unsigned int val = iter.
get();
205 template<
unsigned nBits>
210 if (index_ >= list_->size_)
212 list_->resize(index_ + 1);
220 template<
unsigned nBits>
221 inline Foam::PackedList<nBits>::iteratorBase::operator
222 unsigned int ()
const
225 if (index_ >= list_->size_)
236 template<
unsigned nBits>
243 template<
unsigned nBits>
250 template<
unsigned nBits>
260 if (this->index_ > this->list_->size_)
262 this->index_ = this->list_->size_;
267 template<
unsigned nBits>
277 if (this->index_ > this->list_->size_)
279 this->index_ = this->list_->size_;
284 template<
unsigned nBits>
295 template<
unsigned nBits>
306 template<
unsigned nBits>
316 template<
unsigned nBits>
322 return this->index_ == iter.
index_;
326 template<
unsigned nBits>
327 inline bool Foam::PackedList<nBits>::iterator::operator!=
332 return this->index_ != iter.
index_;
337 template<
unsigned nBits>
343 return this->index_ == iter.
index_;
347 template<
unsigned nBits>
348 inline bool Foam::PackedList<nBits>::const_iterator::operator!=
353 return this->index_ != iter.
index_;
358 template<
unsigned nBits>
362 this->list_ = iter.
list_;
363 this->index_ = iter.
index_;
367 if (this->index_ > this->list_->size_)
369 this->index_ = this->list_->size_;
376 template<
unsigned nBits>
380 this->list_ = iter.
list_;
381 this->index_ = iter.
index_;
385 if (this->index_ > this->list_->size_)
387 this->index_ = this->list_->size_;
394 template<
unsigned nBits>
403 template<
unsigned nBits>
412 template<
unsigned nBits>
422 template<
unsigned nBits>
432 template<
unsigned nBits>
441 template<
unsigned nBits>
450 template<
unsigned nBits>
460 template<
unsigned nBits>
470 template<
unsigned nBits>
478 template<
unsigned nBits>
486 template<
unsigned nBits>
494 template<
unsigned nBits>
502 template<
unsigned nBits>
510 template<
unsigned nBits>
518 template<
unsigned nBits>
526 template<
unsigned nBits>
534 template<
unsigned nBits>
542 template<
unsigned nBits>
552 template<
unsigned nBits>
559 template<
unsigned nBits>
566 template<
unsigned nBits>
570 const unsigned int& val
581 unsigned int fill = val;
590 for (
unsigned int i = 1; i <
packing(); ++i)
592 fill |= (fill << nBits);
596 unsigned int seg = size_ /
packing();
597 unsigned int off = size_ %
packing();
611 unsigned int endSeg = nElem /
packing();
629 template<
unsigned nBits>
633 const unsigned int& val
641 template<
unsigned nBits>
648 template<
unsigned nBits>
661 template<
unsigned nBits>
667 label len = packedLength(nElem);
686 template<
unsigned nBits>
693 template<
unsigned nBits>
701 template<
unsigned nBits>
704 label len = packedLength(size_);
713 template<
unsigned nBits>
721 template<
unsigned nBits>
729 template<
unsigned nBits>
739 template<
unsigned nBits>
747 template<
unsigned nBits>
754 <<
"negative index " << i <<
" max=" << size_-1
771 template<
unsigned nBits>
786 template<
unsigned nBits>
790 const unsigned int val
797 <<
"negative index " << i <<
" max=" << size_-1
812 template<
unsigned nBits>
816 if (i < 0 || i >= size_)
825 template<
unsigned nBits>
836 template<
unsigned nBits>
843 "Foam::PackedList<nBits>::remove()"
847 label elemI = size_ - 1;
855 template<
unsigned nBits>
881 template<
unsigned nBits>
886 unsigned int fill = val;
895 for (
unsigned int i = 1; i <
packing(); ++i)
897 fill |= (fill << nBits);