summaryrefslogtreecommitdiff
path: root/Source/WebCore/Modules/indexeddb/IDBGetResult.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/Modules/indexeddb/IDBGetResult.h')
-rw-r--r--Source/WebCore/Modules/indexeddb/IDBGetResult.h119
1 files changed, 97 insertions, 22 deletions
diff --git a/Source/WebCore/Modules/indexeddb/IDBGetResult.h b/Source/WebCore/Modules/indexeddb/IDBGetResult.h
index 04ae0f4ae..6224464ef 100644
--- a/Source/WebCore/Modules/indexeddb/IDBGetResult.h
+++ b/Source/WebCore/Modules/indexeddb/IDBGetResult.h
@@ -23,57 +23,132 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef IDBGetResult_h
-#define IDBGetResult_h
+#pragma once
#if ENABLE(INDEXED_DATABASE)
#include "IDBKey.h"
#include "IDBKeyData.h"
#include "IDBKeyPath.h"
+#include "IDBValue.h"
#include "SharedBuffer.h"
namespace WebCore {
-struct IDBGetResult {
+class IDBGetResult {
+public:
IDBGetResult()
+ : m_isDefined(false)
{
}
- IDBGetResult(PassRefPtr<SharedBuffer> buffer)
- : valueBuffer(buffer)
+ IDBGetResult(const IDBValue& value, const IDBKeyData& currentPrimaryKey)
+ : m_value(value)
+ , m_primaryKeyData(currentPrimaryKey)
{
}
- IDBGetResult(PassRefPtr<IDBKey> key)
- : keyData(key.get())
+ IDBGetResult(const ThreadSafeDataBuffer& buffer)
+ : m_value(buffer)
{
}
- IDBGetResult(PassRefPtr<SharedBuffer> buffer, PassRefPtr<IDBKey> key, const IDBKeyPath& path)
- : valueBuffer(buffer)
- , keyData(key.get())
- , keyPath(path)
+ IDBGetResult(IDBValue&& buffer)
+ : m_value(WTFMove(buffer))
{
}
- IDBGetResult isolatedCopy() const
+ IDBGetResult(IDBKey& key)
+ : m_keyData(&key)
{
- IDBGetResult result;
- if (valueBuffer)
- result.valueBuffer = valueBuffer->copy();
+ }
+
+ IDBGetResult(const IDBKeyData& keyData)
+ : m_keyData(keyData)
+ {
+ }
+
+ IDBGetResult(SharedBuffer* buffer, IDBKey& key, const IDBKeyPath& path)
+ : m_keyData(&key)
+ , m_keyPath(path)
+ {
+ if (buffer)
+ dataFromBuffer(*buffer);
+ }
- result.keyData = keyData.isolatedCopy();
- result.keyPath = keyPath.isolatedCopy();
- return result;
+ IDBGetResult(const IDBKeyData& keyData, const IDBKeyData& primaryKeyData)
+ : m_keyData(keyData)
+ , m_primaryKeyData(primaryKeyData)
+ {
+ }
+
+ IDBGetResult(const IDBKeyData& keyData, const IDBKeyData& primaryKeyData, IDBValue&& value)
+ : m_value(WTFMove(value))
+ , m_keyData(keyData)
+ , m_primaryKeyData(primaryKeyData)
+ {
+ }
+
+ IDBGetResult(const IDBKeyData& keyData, const IDBKeyData& primaryKeyData, const IDBValue& value)
+ : m_value(value)
+ , m_keyData(keyData)
+ , m_primaryKeyData(primaryKeyData)
+ {
}
- RefPtr<SharedBuffer> valueBuffer;
- IDBKeyData keyData;
- IDBKeyPath keyPath;
+ enum IsolatedCopyTag { IsolatedCopy };
+ IDBGetResult(const IDBGetResult&, IsolatedCopyTag);
+
+ IDBGetResult isolatedCopy() const;
+
+ const IDBValue& value() const { return m_value; }
+ const IDBKeyData& keyData() const { return m_keyData; }
+ const IDBKeyData& primaryKeyData() const { return m_primaryKeyData; }
+ const IDBKeyPath& keyPath() const { return m_keyPath; }
+ bool isDefined() const { return m_isDefined; }
+
+ template<class Encoder> void encode(Encoder&) const;
+ template<class Decoder> static bool decode(Decoder&, IDBGetResult&);
+
+private:
+ void dataFromBuffer(SharedBuffer&);
+
+ static void isolatedCopy(const IDBGetResult& source, IDBGetResult& destination);
+
+ IDBValue m_value;
+ IDBKeyData m_keyData;
+ IDBKeyData m_primaryKeyData;
+ IDBKeyPath m_keyPath;
+ bool m_isDefined { true };
};
+template<class Encoder>
+void IDBGetResult::encode(Encoder& encoder) const
+{
+ encoder << m_keyData << m_primaryKeyData << m_keyPath << m_isDefined << m_value;
+}
+
+template<class Decoder>
+bool IDBGetResult::decode(Decoder& decoder, IDBGetResult& result)
+{
+ if (!decoder.decode(result.m_keyData))
+ return false;
+
+ if (!decoder.decode(result.m_primaryKeyData))
+ return false;
+
+ if (!decoder.decode(result.m_keyPath))
+ return false;
+
+ if (!decoder.decode(result.m_isDefined))
+ return false;
+
+ if (!decoder.decode(result.m_value))
+ return false;
+
+ return true;
+}
+
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
-#endif // IDBGetResult_h