1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 #ifndef nsResourceSet_h__ 6 #define nsResourceSet_h__ 7 8 #include "nsIRDFResource.h" 9 10 class nsResourceSet 11 { 12 public: nsResourceSet()13 nsResourceSet() 14 : mResources(nullptr), 15 mCount(0), 16 mCapacity(0) { 17 MOZ_COUNT_CTOR(nsResourceSet); } 18 19 nsResourceSet(const nsResourceSet& aResourceSet); 20 21 nsResourceSet& operator=(const nsResourceSet& aResourceSet); 22 23 ~nsResourceSet(); 24 25 nsresult Clear(); 26 nsresult Add(nsIRDFResource* aProperty); 27 void Remove(nsIRDFResource* aProperty); 28 29 bool Contains(nsIRDFResource* aProperty) const; 30 31 protected: 32 nsIRDFResource** mResources; 33 int32_t mCount; 34 int32_t mCapacity; 35 36 public: 37 class ConstIterator { 38 protected: 39 nsIRDFResource** mCurrent; 40 41 public: ConstIterator()42 ConstIterator() : mCurrent(nullptr) {} 43 ConstIterator(const ConstIterator & aConstIterator)44 ConstIterator(const ConstIterator& aConstIterator) 45 : mCurrent(aConstIterator.mCurrent) {} 46 47 ConstIterator& operator=(const ConstIterator& aConstIterator) { 48 mCurrent = aConstIterator.mCurrent; 49 return *this; } 50 51 ConstIterator& operator++() { 52 ++mCurrent; 53 return *this; } 54 55 ConstIterator operator++(int) { 56 ConstIterator result(*this); 57 ++mCurrent; 58 return result; } 59 60 /*const*/ nsIRDFResource* operator*() const { 61 return *mCurrent; } 62 63 /*const*/ nsIRDFResource* operator->() const MOZ_NO_ADDREF_RELEASE_ON_RETURN { 64 return *mCurrent; } 65 66 bool operator==(const ConstIterator& aConstIterator) const { 67 return mCurrent == aConstIterator.mCurrent; } 68 69 bool operator!=(const ConstIterator& aConstIterator) const { 70 return mCurrent != aConstIterator.mCurrent; } 71 72 protected: ConstIterator(nsIRDFResource ** aProperty)73 explicit ConstIterator(nsIRDFResource** aProperty) : mCurrent(aProperty) {} 74 friend class nsResourceSet; 75 }; 76 First()77 ConstIterator First() const { return ConstIterator(mResources); } Last()78 ConstIterator Last() const { return ConstIterator(mResources + mCount); } 79 }; 80 81 #endif // nsResourceSet_h__ 82 83