Bug 1342303 part 2 - Add range-based for loop support to nsCOMArray. r=erahm

MozReview-Commit-ID: 7T8Z0PVg2ex

--HG--
extra : rebase_source : 8108344d6607145b231e20d82cf2b3792ce5a4bd
This commit is contained in:
Xidorn Quan 2017-02-24 21:31:15 +11:00
parent 63753595c2
commit 5068cf4922

View File

@ -8,7 +8,9 @@
#define nsCOMArray_h__
#include "mozilla/Attributes.h"
#include "mozilla/ArrayIterator.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/ReverseIterator.h"
#include "nsCycleCollectionNoteChild.h"
#include "nsTArray.h"
@ -231,6 +233,12 @@ template<class T>
class nsCOMArray : public nsCOMArray_base
{
public:
typedef int32_t index_type;
typedef mozilla::ArrayIterator<T*, nsCOMArray> iterator;
typedef mozilla::ArrayIterator<const T*, nsCOMArray> const_iterator;
typedef mozilla::ReverseIterator<iterator> reverse_iterator;
typedef mozilla::ReverseIterator<const_iterator> const_reverse_iterator;
nsCOMArray() {}
explicit nsCOMArray(int32_t aCount) : nsCOMArray_base(aCount) {}
explicit nsCOMArray(const nsCOMArray<T>& aOther) : nsCOMArray_base(aOther) {}
@ -443,6 +451,22 @@ public:
return nsCOMArray_base::Forget(reinterpret_cast<nsISupports***>(aElements));
}
// Methods for range-based for loops.
iterator begin() { return iterator(*this, 0); }
const_iterator begin() const { return const_iterator(*this, 0); }
const_iterator cbegin() const { return begin(); }
iterator end() { return iterator(*this, Length()); }
const_iterator end() const { return const_iterator(*this, Length()); }
const_iterator cend() const { return end(); }
// Methods for reverse iterating.
reverse_iterator rbegin() { return reverse_iterator(end()); }
const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
const_reverse_iterator crbegin() const { return rbegin(); }
reverse_iterator rend() { return reverse_iterator(begin()); }
const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
const_reverse_iterator crend() const { return rend(); }
private:
// don't implement these!