1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #ifndef CacheIndexIterator__h__ 6 #define CacheIndexIterator__h__ 7 8 #include "nsTArray.h" 9 #include "nsCOMPtr.h" 10 #include "nsAutoPtr.h" 11 #include "mozilla/SHA1.h" 12 13 namespace mozilla { 14 namespace net { 15 16 class CacheIndex; 17 struct CacheIndexRecord; 18 19 class CacheIndexIterator 20 { 21 public: 22 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CacheIndexIterator) 23 24 CacheIndexIterator(CacheIndex *aIndex, bool aAddNew); 25 26 protected: 27 virtual ~CacheIndexIterator(); 28 29 public: 30 // Returns a hash of a next entry. If there is no entry NS_ERROR_NOT_AVAILABLE 31 // is returned and the iterator is closed. Other error is returned when the 32 // iterator is closed for other reason, e.g. shutdown. 33 nsresult GetNextHash(SHA1Sum::Hash *aHash); 34 35 // Closes the iterator. This means the iterator is removed from the list of 36 // iterators in CacheIndex. 37 nsresult Close(); 38 39 protected: 40 friend class CacheIndex; 41 42 nsresult CloseInternal(nsresult aStatus); 43 ShouldBeNewAdded()44 bool ShouldBeNewAdded() { return mAddNew; } 45 virtual void AddRecord(CacheIndexRecord *aRecord); 46 bool RemoveRecord(CacheIndexRecord *aRecord); 47 bool ReplaceRecord(CacheIndexRecord *aOldRecord, 48 CacheIndexRecord *aNewRecord); 49 50 nsresult mStatus; 51 RefPtr<CacheIndex> mIndex; 52 nsTArray<CacheIndexRecord *> mRecords; 53 bool mAddNew; 54 }; 55 56 } // namespace net 57 } // namespace mozilla 58 59 #endif 60