15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_COMMON_INDEXED_DB_INDEXED_DB_KEY_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_COMMON_INDEXED_DB_INDEXED_DB_KEY_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/memory/scoped_vector.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h"
15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "third_party/WebKit/public/platform/WebIDBTypes.h"
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink {
18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass WebIDBKey;
19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT IndexedDBKey {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef std::vector<IndexedDBKey> KeyArray;
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  IndexedDBKey();  // Defaults to blink::WebIDBKeyTypeInvalid.
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  explicit IndexedDBKey(blink::WebIDBKeyType);  // must be Null or Invalid
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  explicit IndexedDBKey(const KeyArray& array);
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  explicit IndexedDBKey(const std::string& binary);
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  explicit IndexedDBKey(const base::string16& string);
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  IndexedDBKey(double number,
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)               blink::WebIDBKeyType type);  // must be date or number
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~IndexedDBKey();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool IsValid() const;
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool IsLessThan(const IndexedDBKey& other) const;
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  bool Equals(const IndexedDBKey& other) const;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebIDBKeyType type() const { return type_; }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::vector<IndexedDBKey>& array() const { return array_; }
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const std::string& binary() const { return binary_; }
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const base::string16& string() const { return string_; }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double date() const { return date_; }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double number() const { return number_; }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  size_t size_estimate() const { return size_estimate_; }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  int CompareTo(const IndexedDBKey& other) const;
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  blink::WebIDBKeyType type_;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<IndexedDBKey> array_;
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string binary_;
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 string_;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double date_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double number_;
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  size_t size_estimate_;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_COMMON_INDEXED_DB_INDEXED_DB_KEY_H_
66