Line data Source code
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 0 : 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 :
44 0 : 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
|