Eliminate useless NULL push by making fIndexedData 0-based.

Depends on http://crrev.com/134223002

Testing: out/Debug/dm && out/Debug/tests && echo ok

BUG=skia:1979
R=dominikg@chromium.org, tomhudson@chromium.org, halcanary@google.com

Author: mtklein@google.com

Review URL: https://codereview.chromium.org/134283002

git-svn-id: http://skia.googlecode.com/svn/trunk@13028 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
commit-bot@chromium.org 2014-01-10 20:13:09 +00:00
Родитель 2dc54c94f0
Коммит 6e83423f16
1 изменённых файлов: 9 добавлений и 10 удалений

Просмотреть файл

@ -389,9 +389,6 @@ public:
*/
void reset() {
fIndexedData.rewind();
// TODO(mtklein): There's no reason to have the index start from 1. Clean this up.
// index 0 is always empty since it is used as a signal that find failed
fIndexedData.push(NULL);
}
~SkFlatDictionary() {
@ -399,13 +396,13 @@ public:
}
int count() const {
SkASSERT(fHash.count() == fIndexedData.count() - 1);
SkASSERT(fHash.count() == fIndexedData.count());
return fHash.count();
}
// For testing only. Index is zero-based.
const SkFlatData* operator[](int index) {
return fIndexedData[index+1];
return fIndexedData[index];
}
/**
@ -449,10 +446,11 @@ public:
}
// findAndReturnMutableFlat put flat at the back. Swap it into found->index() instead.
// indices in SkFlatData are 1-based, while fIndexedData is 0-based. Watch out!
SkASSERT(flat->index() == this->count());
flat->setIndex(found->index());
fIndexedData.removeShuffle(found->index());
SkASSERT(flat == fIndexedData[found->index()]);
fIndexedData.removeShuffle(found->index()-1);
SkASSERT(flat == fIndexedData[found->index()-1]);
// findAndReturnMutableFlat already called fHash.add(), so we just clean up the old entry.
fHash.remove(*found);
@ -474,7 +472,7 @@ public:
}
SkTRefArray<T>* array = SkTRefArray<T>::Create(count);
for (int i = 0; i < count; i++) {
this->unflatten(&array->writableAt(i), fIndexedData[i+1]);
this->unflatten(&array->writableAt(i), fIndexedData[i]);
}
return array;
}
@ -484,7 +482,8 @@ public:
* Caller takes ownership of the result.
*/
T* unflatten(int index) const {
const SkFlatData* element = fIndexedData[index];
// index is 1-based, while fIndexedData is 0-based.
const SkFlatData* element = fIndexedData[index-1];
SkASSERT(index == element->index());
T* dst = new T;
@ -605,7 +604,7 @@ private:
SkOrderedWriteBuffer fWriteBuffer;
bool fReady;
// For index -> SkFlatData. fIndexedData[0] is always NULL.
// For index -> SkFlatData. 0-based, while all indices in the API are 1-based. Careful!
SkTDArray<const SkFlatData*> fIndexedData;
// For SkFlatData -> cached SkFlatData, which has index().