Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: content/common/indexed_db/indexed_db_key.cc

Issue 19752007: Use builders to convert between WebKit and content IDB types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/indexed_db/indexed_db_key.h" 5 #include "content/common/indexed_db/indexed_db_key.h"
6 6
7 #include <string> 7 #include <string>
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "third_party/WebKit/public/platform/WebIDBKey.h"
10 #include "third_party/WebKit/public/platform/WebString.h"
11 #include "third_party/WebKit/public/platform/WebVector.h"
12 9
13 namespace content { 10 namespace content {
14 11
15 using WebKit::WebIDBKey; 12 using WebKit::WebIDBKey;
16 using WebKit::WebIDBKeyType; 13 using WebKit::WebIDBKeyType;
17 using WebKit::WebIDBKeyTypeArray; 14 using WebKit::WebIDBKeyTypeArray;
18 using WebKit::WebIDBKeyTypeDate; 15 using WebKit::WebIDBKeyTypeDate;
19 using WebKit::WebIDBKeyTypeInvalid; 16 using WebKit::WebIDBKeyTypeInvalid;
20 using WebKit::WebIDBKeyTypeMin; 17 using WebKit::WebIDBKeyTypeMin;
21 using WebKit::WebIDBKeyTypeNull; 18 using WebKit::WebIDBKeyTypeNull;
22 using WebKit::WebIDBKeyTypeNumber; 19 using WebKit::WebIDBKeyTypeNumber;
23 using WebKit::WebIDBKeyTypeString; 20 using WebKit::WebIDBKeyTypeString;
24 using WebKit::WebVector;
25 21
26 namespace { 22 namespace {
27 23
28 // Very rough estimate of minimum key size overhead. 24 // Very rough estimate of minimum key size overhead.
29 const size_t kOverheadSize = 16; 25 const size_t kOverheadSize = 16;
30 26
31 static size_t CalculateArraySize(const IndexedDBKey::KeyArray& keys) { 27 static size_t CalculateArraySize(const IndexedDBKey::KeyArray& keys) {
32 size_t size(0); 28 size_t size(0);
33 for (size_t i = 0; i < keys.size(); ++i) 29 for (size_t i = 0; i < keys.size(); ++i)
34 size += keys[i].size_estimate(); 30 size += keys[i].size_estimate();
35 return size; 31 return size;
36 } 32 }
37 33
38 static size_t CalculateKeySize(const WebIDBKey& key) {
39 switch (key.keyType()) {
40 case WebIDBKeyTypeArray: {
41 const WebVector<WebIDBKey>& array = key.array();
42 size_t total = 0;
43 for (size_t i = 0; i < array.size(); ++i)
44 total += CalculateKeySize(array[i]);
45 return kOverheadSize + total;
46 }
47 case WebIDBKeyTypeString:
48 return kOverheadSize +
49 (key.string().length() * sizeof(string16::value_type));
50
51 case WebIDBKeyTypeDate:
52 case WebIDBKeyTypeNumber:
53 return kOverheadSize + sizeof(double);
54
55 default:
56 return kOverheadSize;
57 }
58 NOTREACHED();
59 return 0;
60 }
61
62 template <typename T> 34 template <typename T>
63 static IndexedDBKey::KeyArray CopyKeyArray(const T& array) { 35 static IndexedDBKey::KeyArray CopyKeyArray(const T& array) {
64 IndexedDBKey::KeyArray result; 36 IndexedDBKey::KeyArray result;
65 result.reserve(array.size()); 37 result.reserve(array.size());
66 for (size_t i = 0; i < array.size(); ++i) { 38 for (size_t i = 0; i < array.size(); ++i) {
67 result.push_back(IndexedDBKey(array[i])); 39 result.push_back(IndexedDBKey(array[i]));
68 } 40 }
69 return result; 41 return result;
70 } 42 }
71 43
72 static IndexedDBKey::KeyArray CopyKeyArray(const WebIDBKey& other) {
73 IndexedDBKey::KeyArray result;
74 if (other.keyType() == WebIDBKeyTypeArray) {
75 result = CopyKeyArray(other.array());
76 }
77 return result;
78 }
79 } // namespace 44 } // namespace
80 45
81 IndexedDBKey::IndexedDBKey() 46 IndexedDBKey::IndexedDBKey()
82 : type_(WebIDBKeyTypeNull), 47 : type_(WebIDBKeyTypeNull),
83 date_(0), 48 date_(0),
84 number_(0), 49 number_(0),
85 size_estimate_(kOverheadSize) {} 50 size_estimate_(kOverheadSize) {}
86 51
87 IndexedDBKey::IndexedDBKey(WebIDBKeyType type) 52 IndexedDBKey::IndexedDBKey(WebIDBKeyType type)
88 : type_(type), date_(0), number_(0), size_estimate_(kOverheadSize) { 53 : type_(type), date_(0), number_(0), size_estimate_(kOverheadSize) {
(...skipping 14 matching lines...) Expand all
103 date_(0), 68 date_(0),
104 number_(0), 69 number_(0),
105 size_estimate_(kOverheadSize + CalculateArraySize(keys)) {} 70 size_estimate_(kOverheadSize + CalculateArraySize(keys)) {}
106 71
107 IndexedDBKey::IndexedDBKey(const string16& key) 72 IndexedDBKey::IndexedDBKey(const string16& key)
108 : type_(WebIDBKeyTypeString), 73 : type_(WebIDBKeyTypeString),
109 string_(key), 74 string_(key),
110 size_estimate_(kOverheadSize + 75 size_estimate_(kOverheadSize +
111 (key.length() * sizeof(string16::value_type))) {} 76 (key.length() * sizeof(string16::value_type))) {}
112 77
113 IndexedDBKey::IndexedDBKey(const WebIDBKey& key)
114 : type_(key.keyType()),
115 array_(CopyKeyArray(key)),
116 string_(key.keyType() == WebIDBKeyTypeString
117 ? static_cast<string16>(key.string())
118 : string16()),
119 date_(key.keyType() == WebIDBKeyTypeDate ? key.date() : 0),
120 number_(key.keyType() == WebIDBKeyTypeNumber ? key.number() : 0),
121 size_estimate_(CalculateKeySize(key)) {}
122
123 IndexedDBKey::~IndexedDBKey() {} 78 IndexedDBKey::~IndexedDBKey() {}
124 79
125 int IndexedDBKey::Compare(const IndexedDBKey& other) const { 80 int IndexedDBKey::Compare(const IndexedDBKey& other) const {
126 DCHECK(IsValid()); 81 DCHECK(IsValid());
127 DCHECK(other.IsValid()); 82 DCHECK(other.IsValid());
128 if (type_ != other.type_) 83 if (type_ != other.type_)
129 return type_ > other.type_ ? -1 : 1; 84 return type_ > other.type_ ? -1 : 1;
130 85
131 switch (type_) { 86 switch (type_) {
132 case WebIDBKeyTypeArray: 87 case WebIDBKeyTypeArray:
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 if (type_ == WebIDBKeyTypeArray) { 125 if (type_ == WebIDBKeyTypeArray) {
171 for (size_t i = 0; i < array_.size(); i++) { 126 for (size_t i = 0; i < array_.size(); i++) {
172 if (!array_[i].IsValid()) 127 if (!array_[i].IsValid())
173 return false; 128 return false;
174 } 129 }
175 } 130 }
176 131
177 return true; 132 return true;
178 } 133 }
179 134
180 IndexedDBKey::operator WebIDBKey() const {
181 switch (type_) {
182 case WebIDBKeyTypeArray:
183 return WebIDBKey::createArray(array_);
184 case WebIDBKeyTypeString:
185 return WebIDBKey::createString(string_);
186 case WebIDBKeyTypeDate:
187 return WebIDBKey::createDate(date_);
188 case WebIDBKeyTypeNumber:
189 return WebIDBKey::createNumber(number_);
190 case WebIDBKeyTypeInvalid:
191 return WebIDBKey::createInvalid();
192 case WebIDBKeyTypeNull:
193 return WebIDBKey::createNull();
194 case WebIDBKeyTypeMin:
195 NOTREACHED();
196 return WebIDBKey::createInvalid();
197 }
198 NOTREACHED();
199 return WebIDBKey::createInvalid();
200 }
201
202 } // namespace content 135 } // namespace content
OLDNEW
« no previous file with comments | « content/common/indexed_db/indexed_db_key.h ('k') | content/common/indexed_db/indexed_db_key_path.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698