1 /* 2 * Copyright (C) 2010 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 IDBKey_h 27 #define IDBKey_h 28 29 #if ENABLE(INDEXED_DATABASE) 30 31 #include "PlatformString.h" 32 #include <wtf/Forward.h> 33 #include <wtf/Threading.h> 34 35 namespace WebCore { 36 37 class IDBKey : public ThreadSafeRefCounted<IDBKey> { 38 public: createNull()39 static PassRefPtr<IDBKey> createNull() 40 { 41 RefPtr<IDBKey> idbKey(new IDBKey()); 42 idbKey->m_type = NullType; 43 return idbKey.release(); 44 } 45 createNumber(double number)46 static PassRefPtr<IDBKey> createNumber(double number) 47 { 48 RefPtr<IDBKey> idbKey(new IDBKey()); 49 idbKey->m_type = NumberType; 50 idbKey->m_number = number; 51 return idbKey.release(); 52 } 53 createString(const String & string)54 static PassRefPtr<IDBKey> createString(const String& string) 55 { 56 RefPtr<IDBKey> idbKey(new IDBKey()); 57 idbKey->m_type = StringType; 58 idbKey->m_string = string; 59 return idbKey.release(); 60 } 61 createDate(double date)62 static PassRefPtr<IDBKey> createDate(double date) 63 { 64 RefPtr<IDBKey> idbKey(new IDBKey()); 65 idbKey->m_type = DateType; 66 idbKey->m_date = date; 67 return idbKey.release(); 68 } 69 70 ~IDBKey(); 71 72 // In order of the least to the highest precedent in terms of sort order. 73 enum Type { 74 NullType = 0, // FIXME: Phase out support for null keys. 75 StringType, 76 DateType, 77 NumberType 78 }; 79 type()80 Type type() const { return m_type; } 81 string()82 const String& string() const 83 { 84 ASSERT(m_type == StringType); 85 return m_string; 86 } 87 date()88 double date() const 89 { 90 ASSERT(m_type == DateType); 91 return m_date; 92 } 93 number()94 double number() const 95 { 96 ASSERT(m_type == NumberType); 97 return m_number; 98 } 99 100 bool isLessThan(const IDBKey* other) const; 101 bool isEqual(const IDBKey* other) const; 102 103 using ThreadSafeRefCounted<IDBKey>::ref; 104 using ThreadSafeRefCounted<IDBKey>::deref; 105 106 private: 107 IDBKey(); 108 109 Type m_type; 110 String m_string; 111 double m_date; 112 double m_number; 113 }; 114 115 } 116 117 #endif // ENABLE(INDEXED_DATABASE) 118 119 #endif // IDBKey_h 120