Merge IDBTransactionBackendInterface and IDBTransactionBackendImpl
[WebKit-https.git] / Source / WebCore / Modules / indexeddb / leveldb / IDBBackingStoreCursorLevelDB.h
1 /*
2  * Copyright (C) 2013 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef IDBBackingStoreCursorLevelDB_h
27 #define IDBBackingStoreCursorLevelDB_h
28
29 #include "IDBBackingStoreCursorInterface.h"
30 #include "IDBKey.h"
31 #include "IDBRecordIdentifier.h"
32 #include "LevelDBIterator.h"
33
34 #if ENABLE(INDEXED_DATABASE)
35 #if USE(LEVELDB)
36
37 namespace WebCore {
38
39 class IDBBackingStoreInterface;
40 class LevelDBTransaction;
41
42 class IDBBackingStoreCursorLevelDB : public IDBBackingStoreCursorInterface {
43 public:
44     struct CursorOptions {
45         int64_t databaseId;
46         int64_t objectStoreId;
47         int64_t indexId;
48         Vector<char> lowKey;
49         bool lowOpen;
50         Vector<char> highKey;
51         bool highOpen;
52         bool forward;
53         bool unique;
54     };
55
56     virtual PassRefPtr<IDBKey> key() const OVERRIDE { return m_currentKey; }
57     virtual bool continueFunction(const IDBKey* = 0, IteratorState = Seek) OVERRIDE;
58     virtual bool advance(unsigned long) OVERRIDE;
59     bool firstSeek();
60
61     virtual PassRefPtr<IDBBackingStoreCursorInterface> clone() OVERRIDE = 0;
62     virtual PassRefPtr<IDBKey> primaryKey() const OVERRIDE { return m_currentKey; }
63     virtual PassRefPtr<SharedBuffer> value() const OVERRIDE = 0;
64     virtual const IDBRecordIdentifier& recordIdentifier() const OVERRIDE { return *m_recordIdentifier; }
65     virtual ~IDBBackingStoreCursorLevelDB() { }
66     virtual bool loadCurrentRow() = 0;
67
68 protected:
69     IDBBackingStoreCursorLevelDB(LevelDBTransaction* transaction, const CursorOptions& cursorOptions)
70         : m_transaction(transaction)
71         , m_cursorOptions(cursorOptions)
72         , m_recordIdentifier(IDBRecordIdentifier::create())
73     {
74     }
75     explicit IDBBackingStoreCursorLevelDB(const IDBBackingStoreCursorLevelDB* other);
76
77     virtual Vector<char> encodeKey(const IDBKey&) = 0;
78
79     bool isPastBounds() const;
80     bool haveEnteredRange() const;
81
82     LevelDBTransaction* m_transaction;
83     const CursorOptions m_cursorOptions;
84     OwnPtr<LevelDBIterator> m_iterator;
85     RefPtr<IDBKey> m_currentKey;
86     RefPtr<IDBRecordIdentifier> m_recordIdentifier;
87 };
88
89 } // namespace WebCore
90
91 #endif // USE(LEVELDB)
92 #endif // ENABLE(INDEXED_DATABASE)
93 #endif // IDBBackingStoreCursorLevelDB_h