1/*
2 * Copyright (C) 2011 Google 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 *
8 * 1.  Redistributions of source code must retain the above copyright
9 *     notice, this list of conditions and the following disclaimer.
10 * 2.  Redistributions in binary form must reproduce the above copyright
11 *     notice, this list of conditions and the following disclaimer in the
12 *     documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef WebIDBKey_h
27#define WebIDBKey_h
28
29#include "WebCommon.h"
30#include "WebData.h"
31#include "WebIDBTypes.h"
32#include "WebPrivatePtr.h"
33#include "WebString.h"
34#include "WebVector.h"
35
36namespace blink {
37
38class IDBKey;
39
40class WebIDBKey {
41public:
42    // Please use one of the factory methods. This is public only to allow WebVector.
43    WebIDBKey() { }
44    ~WebIDBKey() { reset(); }
45
46    BLINK_EXPORT static WebIDBKey createArray(const WebVector<WebIDBKey>&);
47    BLINK_EXPORT static WebIDBKey createBinary(const WebData&);
48    BLINK_EXPORT static WebIDBKey createString(const WebString&);
49    BLINK_EXPORT static WebIDBKey createDate(double);
50    BLINK_EXPORT static WebIDBKey createNumber(double);
51    BLINK_EXPORT static WebIDBKey createInvalid();
52    BLINK_EXPORT static WebIDBKey createNull();
53
54    WebIDBKey(const WebIDBKey& e) { assign(e); }
55    WebIDBKey& operator=(const WebIDBKey& e)
56    {
57        assign(e);
58        return *this;
59    }
60
61    BLINK_EXPORT void assign(const WebIDBKey&);
62    BLINK_EXPORT void assignArray(const WebVector<WebIDBKey>&);
63    BLINK_EXPORT void assignBinary(const WebData&);
64    BLINK_EXPORT void assignString(const WebString&);
65    BLINK_EXPORT void assignDate(double);
66    BLINK_EXPORT void assignNumber(double);
67    BLINK_EXPORT void assignInvalid();
68    BLINK_EXPORT void assignNull();
69    BLINK_EXPORT void reset();
70
71    BLINK_EXPORT WebIDBKeyType keyType() const;
72    BLINK_EXPORT bool isValid() const;
73    BLINK_EXPORT WebVector<WebIDBKey> array() const; // Only valid for ArrayType.
74    BLINK_EXPORT WebData binary() const; // Only valid for BinaryType.
75    BLINK_EXPORT WebString string() const; // Only valid for StringType.
76    BLINK_EXPORT double date() const; // Only valid for DateType.
77    BLINK_EXPORT double number() const; // Only valid for NumberType.
78
79#if BLINK_IMPLEMENTATION
80    WebIDBKey(IDBKey*);
81    WebIDBKey& operator=(IDBKey*);
82    operator IDBKey*() const;
83#endif
84
85private:
86    WebPrivatePtr<IDBKey> m_private;
87};
88
89} // namespace blink
90
91#endif // WebIDBKey_h
92