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/. */
5 #ifndef CacheIndexIterator__h__
6 #define CacheIndexIterator__h__
10 #include "nsAutoPtr.h"
11 #include "mozilla/SHA1.h"
17 struct CacheIndexRecord
;
19 class CacheIndexIterator
22 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CacheIndexIterator
)
24 CacheIndexIterator(CacheIndex
*aIndex
, bool aAddNew
);
27 virtual ~CacheIndexIterator();
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
);
35 // Closes the iterator. This means the iterator is removed from the list of
36 // iterators in CacheIndex.
40 friend class CacheIndex
;
42 nsresult
CloseInternal(nsresult aStatus
);
44 bool ShouldBeNewAdded() { return mAddNew
; }
45 virtual void AddRecord(CacheIndexRecord
*aRecord
);
46 virtual void AddRecords(const nsTArray
<CacheIndexRecord
*> &aRecords
);
47 bool RemoveRecord(CacheIndexRecord
*aRecord
);
48 bool ReplaceRecord(CacheIndexRecord
*aOldRecord
,
49 CacheIndexRecord
*aNewRecord
);
52 nsRefPtr
<CacheIndex
> mIndex
;
53 nsTArray
<CacheIndexRecord
*> mRecords
;