зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1397056 - Add Contains and a return parameter to Remove for SmallPointerArray. r=froydnj
* * * [mq]: fix MozReview-Commit-ID: 5laM7PQLP7X
This commit is contained in:
Родитель
cc2e281b3b
Коммит
a56e3551a2
|
@ -9,6 +9,7 @@
|
|||
#define mozilla_SmallPointerArray_h
|
||||
|
||||
#include "mozilla/Assertions.h"
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
#include <vector>
|
||||
|
||||
|
@ -96,34 +97,60 @@ public:
|
|||
mInlineElements[0] = nullptr;
|
||||
}
|
||||
|
||||
void RemoveElement(T* aElement) {
|
||||
bool RemoveElement(T* aElement) {
|
||||
MOZ_ASSERT(aElement != nullptr);
|
||||
if (aElement == nullptr) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mInlineElements[0] == aElement) {
|
||||
// Expectected case.
|
||||
mInlineElements[0] = mInlineElements[1];
|
||||
mInlineElements[1] = nullptr;
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mInlineElements[0]) {
|
||||
if (mInlineElements[1] == aElement) {
|
||||
mInlineElements[1] = nullptr;
|
||||
return true;
|
||||
}
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mArray) {
|
||||
for (auto iter = mArray->begin(); iter != mArray->end(); iter++) {
|
||||
if (*iter == aElement) {
|
||||
mArray->erase(iter);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Contains(T* aElement) const {
|
||||
MOZ_ASSERT(aElement != nullptr);
|
||||
if (aElement == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mInlineElements[0] == aElement) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mInlineElements[0]) {
|
||||
if (mInlineElements[1] == aElement) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mArray) {
|
||||
return std::find(mArray->begin(), mArray->end(), aElement) != mArray->end();
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
size_t Length() const
|
||||
|
|
|
@ -19,12 +19,14 @@ void TestArrayManipulation()
|
|||
|
||||
MOZ_RELEASE_ASSERT(testArray.Length() == 0);
|
||||
MOZ_RELEASE_ASSERT(sizeof(testArray) == 2 * sizeof(void*));
|
||||
MOZ_RELEASE_ASSERT(!testArray.Contains(PTR1));
|
||||
|
||||
testArray.AppendElement(PTR1);
|
||||
|
||||
MOZ_RELEASE_ASSERT(testArray.Length() == 1);
|
||||
MOZ_RELEASE_ASSERT(testArray[0] == PTR1);
|
||||
MOZ_RELEASE_ASSERT(testArray.ElementAt(0) == PTR1);
|
||||
MOZ_RELEASE_ASSERT(testArray.Contains(PTR1));
|
||||
|
||||
testArray.AppendElement(PTR2);
|
||||
|
||||
|
@ -33,12 +35,15 @@ void TestArrayManipulation()
|
|||
MOZ_RELEASE_ASSERT(testArray.ElementAt(0) == PTR1);
|
||||
MOZ_RELEASE_ASSERT(testArray[1] == PTR2);
|
||||
MOZ_RELEASE_ASSERT(testArray.ElementAt(1) == PTR2);
|
||||
MOZ_RELEASE_ASSERT(testArray.Contains(PTR2));
|
||||
|
||||
testArray.RemoveElement(PTR1);
|
||||
MOZ_RELEASE_ASSERT(testArray.RemoveElement(PTR1));
|
||||
MOZ_RELEASE_ASSERT(!testArray.RemoveElement(PTR1));
|
||||
|
||||
MOZ_RELEASE_ASSERT(testArray.Length() == 1);
|
||||
MOZ_RELEASE_ASSERT(testArray[0] == PTR2);
|
||||
MOZ_RELEASE_ASSERT(testArray.ElementAt(0) == PTR2);
|
||||
MOZ_RELEASE_ASSERT(!testArray.Contains(PTR1));
|
||||
|
||||
testArray.AppendElement(PTR1);
|
||||
|
||||
|
@ -47,6 +52,7 @@ void TestArrayManipulation()
|
|||
MOZ_RELEASE_ASSERT(testArray.ElementAt(0) == PTR2);
|
||||
MOZ_RELEASE_ASSERT(testArray[1] == PTR1);
|
||||
MOZ_RELEASE_ASSERT(testArray.ElementAt(1) == PTR1);
|
||||
MOZ_RELEASE_ASSERT(testArray.Contains(PTR1));
|
||||
|
||||
testArray.AppendElement(PTR3);
|
||||
|
||||
|
@ -57,8 +63,9 @@ void TestArrayManipulation()
|
|||
MOZ_RELEASE_ASSERT(testArray.ElementAt(1) == PTR1);
|
||||
MOZ_RELEASE_ASSERT(testArray[2] == PTR3);
|
||||
MOZ_RELEASE_ASSERT(testArray.ElementAt(2) == PTR3);
|
||||
MOZ_RELEASE_ASSERT(testArray.Contains(PTR3));
|
||||
|
||||
testArray.RemoveElement(PTR1);
|
||||
MOZ_RELEASE_ASSERT(testArray.RemoveElement(PTR1));
|
||||
|
||||
MOZ_RELEASE_ASSERT(testArray.Length() == 2);
|
||||
MOZ_RELEASE_ASSERT(testArray[0] == PTR2);
|
||||
|
@ -66,13 +73,13 @@ void TestArrayManipulation()
|
|||
MOZ_RELEASE_ASSERT(testArray[1] == PTR3);
|
||||
MOZ_RELEASE_ASSERT(testArray.ElementAt(1) == PTR3);
|
||||
|
||||
testArray.RemoveElement(PTR2);
|
||||
MOZ_RELEASE_ASSERT(testArray.RemoveElement(PTR2));
|
||||
|
||||
MOZ_RELEASE_ASSERT(testArray.Length() == 1);
|
||||
MOZ_RELEASE_ASSERT(testArray[0] == PTR3);
|
||||
MOZ_RELEASE_ASSERT(testArray.ElementAt(0) == PTR3);
|
||||
|
||||
testArray.RemoveElement(PTR3);
|
||||
MOZ_RELEASE_ASSERT(testArray.RemoveElement(PTR3));
|
||||
|
||||
MOZ_RELEASE_ASSERT(testArray.Length() == 0);
|
||||
|
||||
|
@ -94,13 +101,13 @@ void TestArrayManipulation()
|
|||
MOZ_RELEASE_ASSERT(testArray[1] == PTR2);
|
||||
MOZ_RELEASE_ASSERT(testArray.ElementAt(1) == PTR2);
|
||||
|
||||
testArray.RemoveElement(PTR2);
|
||||
MOZ_RELEASE_ASSERT(testArray.RemoveElement(PTR2));
|
||||
|
||||
MOZ_RELEASE_ASSERT(testArray.Length() == 1);
|
||||
MOZ_RELEASE_ASSERT(testArray[0] == PTR1);
|
||||
MOZ_RELEASE_ASSERT(testArray.ElementAt(0) == PTR1);
|
||||
|
||||
testArray.RemoveElement(PTR3);
|
||||
MOZ_RELEASE_ASSERT(!testArray.RemoveElement(PTR3));
|
||||
|
||||
MOZ_RELEASE_ASSERT(testArray.Length() == 1);
|
||||
MOZ_RELEASE_ASSERT(testArray[0] == PTR1);
|
||||
|
|
|
@ -38,6 +38,7 @@ skip-if = os == 'android' # Bug 1147630
|
|||
[TestScopeExit]
|
||||
[TestSegmentedVector]
|
||||
[TestSHA1]
|
||||
[TestSmallPointerArray]
|
||||
[TestSaturate]
|
||||
[TestSplayTree]
|
||||
[TestSyncRunnable]
|
||||
|
|
Загрузка…
Ссылка в новой задаче