Clean up ArrayData APIs for mutable iteration

Replaces the awkward getFullPos() and setFullPos() methods with a more
intuitive advanceFullPos() method. This refactoring also reduces the number
of virtual calls made when doing mutable iteration on an array.
Esse commit está contido em:
andrewparoski
2013-02-11 21:22:48 -08:00
commit de Sara Golemon
commit ecdd701952
8 arquivos alterados com 93 adições e 124 exclusões
+3 -9
Ver Arquivo
@@ -253,7 +253,7 @@ void ArrayData::newFullPos(FullPos &fp) {
fp.setContainer(this);
fp.setNext(strongIterators());
setStrongIterators(&fp);
getFullPos(fp);
fp.m_pos = m_pos;
}
void ArrayData::freeFullPos(FullPos &fp) {
@@ -282,16 +282,10 @@ bool ArrayData::validFullPos(const FullPos& fp) const {
return false;
}
void ArrayData::getFullPos(FullPos &fp) {
assert(fp.getContainer() == (ArrayData*)this);
fp.m_pos = ArrayData::invalid_index;
}
bool ArrayData::setFullPos(const FullPos &fp) {
assert(fp.getContainer() == (ArrayData*)this);
bool ArrayData::advanceFullPos(FullPos& fp) {
return false;
}
void ArrayData::freeStrongIterators() {
for (FullPosRange r(strongIterators()); !r.empty(); r.popFront()) {
r.front()->setContainer(nullptr);