Bug 1409152. Add an nsTArray::ContainsSorted method. r=froydnj

This commit is contained in:
Boris Zbarsky 2017-10-17 15:39:59 -04:00
parent 661d20b507
commit fb684cc726
6 changed files with 20 additions and 7 deletions

View File

@ -174,7 +174,7 @@ TrackUnionStream::TrackUnionStream()
TrackID id;
if (IsTrackIDExplicit(id = aPort->GetDestinationTrackId())) {
MOZ_ASSERT(id >= mNextAvailableTrackID &&
mUsedTracks.BinaryIndexOf(id) == mUsedTracks.NoIndex,
!mUsedTracks.ContainsSorted(id),
"Desired destination id taken. Only provide a destination ID "
"if you can assure its availability, or we may not be able "
"to bind to the correct DOM-side track.");
@ -191,7 +191,7 @@ TrackUnionStream::TrackUnionStream()
mUsedTracks.InsertElementSorted(id);
} else if ((id = aTrack->GetID()) &&
id > mNextAvailableTrackID &&
mUsedTracks.BinaryIndexOf(id) == mUsedTracks.NoIndex) {
!mUsedTracks.ContainsSorted(id)) {
// Input id available. Mark it used in mUsedTracks.
mUsedTracks.InsertElementSorted(id);
} else {

View File

@ -274,7 +274,7 @@ nsDocumentRuleResultCacheKey::Matches(
#ifdef DEBUG
for (css::DocumentRule* rule : mMatchingRules) {
MOZ_ASSERT(aRules.BinaryIndexOf(rule) != aRules.NoIndex,
MOZ_ASSERT(aRules.ContainsSorted(rule),
"aRules must contain all rules in mMatchingRules");
}
#endif

View File

@ -1416,7 +1416,7 @@ PaintRowGroupBackgroundByColIdx(nsTableRowGroupFrame* aRowGroup,
}
for (nsTableCellFrame* cell = row->GetFirstCell(); cell; cell = cell->GetNextCell()) {
uint32_t curColIdx = cell->ColIndex();
if (!aColIdx.Contains(curColIdx)) {
if (!aColIdx.ContainsSorted(curColIdx)) {
if (curColIdx > aColIdx.LastElement()) {
// We can just stop looking at this row.
break;

View File

@ -61,7 +61,7 @@ public:
bool Contains(const nsAtom* aAtom) const
{
return mElems.BinaryIndexOf(aAtom) != mElems.NoIndex;
return mElems.ContainsSorted(aAtom);
}
bool Intersects(const AtomSet& aOther) const;

View File

@ -582,8 +582,7 @@ LookupCacheV2::Has(const Completion& aCompletion,
if (found) {
*aHas = true;
*aMatchLength = PREFIX_SIZE;
} else if (mUpdateCompletions.BinaryIndexOf(aCompletion) !=
nsTArray<Completion>::NoIndex) {
} else if (mUpdateCompletions.ContainsSorted(aCompletion)) {
// Completions is found in database, confirm the result
*aHas = true;
*aMatchLength = COMPLETE_SIZE;

View File

@ -1149,6 +1149,13 @@ public:
return IndexOf(aItem, 0, aComp) != NoIndex;
}
// Like Contains(), but assumes a sorted array.
template<class Item, class Comparator>
bool ContainsSorted(const Item& aItem, const Comparator& aComp) const
{
return BinaryIndexOf(aItem, aComp) != NoIndex;
}
// This method searches for the first element in this array that is equal
// to the given element. This method assumes that 'operator==' is defined
// for elem_type.
@ -1160,6 +1167,13 @@ public:
return IndexOf(aItem) != NoIndex;
}
// Like Contains(), but assumes a sorted array.
template<class Item>
bool ContainsSorted(const Item& aItem) const
{
return BinaryIndexOf(aItem) != NoIndex;
}
// This method searches for the offset of the first element in this
// array that is equal to the given element.
// @param aItem The item to search for.