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

Unified Diff: third_party/cacheinvalidation/src/google/cacheinvalidation/impl/proto-helpers.h

Issue 1162033004: Pull cacheinvalidations code directory into chromium repo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: third_party/cacheinvalidation/src/google/cacheinvalidation/impl/proto-helpers.h
diff --git a/third_party/cacheinvalidation/src/google/cacheinvalidation/impl/proto-helpers.h b/third_party/cacheinvalidation/src/google/cacheinvalidation/impl/proto-helpers.h
new file mode 100644
index 0000000000000000000000000000000000000000..aa6023eb583d0b5451716bce561e1ec4777b43a9
--- /dev/null
+++ b/third_party/cacheinvalidation/src/google/cacheinvalidation/impl/proto-helpers.h
@@ -0,0 +1,143 @@
+// Copyright 2012 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Helper utilities for dealing with protocol buffers.
+
+#ifndef GOOGLE_CACHEINVALIDATION_IMPL_PROTO_HELPERS_H_
+#define GOOGLE_CACHEINVALIDATION_IMPL_PROTO_HELPERS_H_
+
+#include <sstream>
+#include <string>
+
+#include "google/cacheinvalidation/client_protocol.pb.h"
+#include "google/cacheinvalidation/deps/logging.h"
+#include "google/cacheinvalidation/deps/stl-namespace.h"
+#include "google/cacheinvalidation/impl/client-protocol-namespace-fix.h"
+#include "google/cacheinvalidation/impl/constants.h"
+
+namespace invalidation {
+
+using INVALIDATION_STL_NAMESPACE::string;
+using ::ipc::invalidation::ProtocolVersion;
+
+// Functor to compare various protocol messages.
+struct ProtoCompareLess {
+ bool operator()(const ObjectIdP& object_id1,
+ const ObjectIdP& object_id2) const {
+ // If the sources differ, then the one with the smaller source is the
+ // smaller object id.
+ int source_diff = object_id1.source() - object_id2.source();
+ if (source_diff != 0) {
+ return source_diff < 0;
+ }
+ // Otherwise, the one with the smaller name is the smaller object id.
+ return object_id1.name().compare(object_id2.name()) < 0;
+ }
+
+ bool operator()(const InvalidationP& inv1,
+ const InvalidationP& inv2) const {
+ const ProtoCompareLess& compare_less_than = *this;
+ // If the object ids differ, then the one with the smaller object id is the
+ // smaller invalidation.
+ if (compare_less_than(inv1.object_id(), inv2.object_id())) {
+ return true;
+ }
+ if (compare_less_than(inv2.object_id(), inv1.object_id())) {
+ return false;
+ }
+
+ // Otherwise, the object ids are the same, so we need to look at the
+ // versions.
+
+ // We define an unknown version to be less than a known version.
+ int64 known_version_diff =
+ inv1.is_known_version() - inv2.is_known_version();
+ if (known_version_diff != 0) {
+ return known_version_diff < 0;
+ }
+
+ // Otherwise, they're both known both unknown, so the one with the smaller
+ // version is the smaller invalidation.
+ return inv1.version() < inv2.version();
+ }
+
+ bool operator()(const RegistrationSubtree& reg_subtree1,
+ const RegistrationSubtree& reg_subtree2) const {
+ const RepeatedPtrField<ObjectIdP>& objects1 =
+ reg_subtree1.registered_object();
+ const RepeatedPtrField<ObjectIdP>& objects2 =
+ reg_subtree2.registered_object();
+ // If they have different numbers of objects, the one with fewer is smaller.
+ if (objects1.size() != objects2.size()) {
+ return objects1.size() < objects2.size();
+ }
+ // Otherwise, compare the object ids in order.
+ RepeatedPtrField<ObjectIdP>::const_iterator iter1, iter2;
+ const ProtoCompareLess& compare_less_than = *this;
+ for (iter1 = objects1.begin(), iter2 = objects2.begin();
+ iter1 != objects1.end(); ++iter1, ++iter2) {
+ if (compare_less_than(*iter1, *iter2)) {
+ return true;
+ }
+ if (compare_less_than(*iter2, *iter1)) {
+ return false;
+ }
+ }
+ // The registration subtrees are the same.
+ return false;
+ }
+};
+
+// Other protocol message utilities.
+class ProtoHelpers {
+ public:
+ // Converts a value to a printable/readable string format.
+ template<typename T>
+ static string ToString(const T& value);
+
+ // Initializes |reg| to be a (un) registration for object |oid|.
+ static void InitRegistrationP(const ObjectIdP& oid,
+ RegistrationP::OpType op_type, RegistrationP* reg);
+
+ static void InitInitializeMessage(
+ const ApplicationClientIdP& application_client_id, const string& nonce,
+ InitializeMessage* init_msg);
+
+ // Initializes |protocol_version| to the current protocol version.
+ static void InitProtocolVersion(ProtocolVersion* protocol_version);
+
+ // Initializes |client_version| to the current client version.
+ static void InitClientVersion(const string& platform,
+ const string& application_info, ClientVersion* client_version);
+
+ // Initializes |config_version| to the current config version.
+ static void InitConfigVersion(Version* config_version);
+
+ // Initializes |rate_limit| with the given window interval and count of
+ // messages.
+ static void InitRateLimitP(int window_ms, int count, RateLimitP *rate_limit);
+
+ private:
+ static const int NUM_CHARS = 256;
+ static char CHAR_OCTAL_STRINGS1[NUM_CHARS];
+ static char CHAR_OCTAL_STRINGS2[NUM_CHARS];
+ static char CHAR_OCTAL_STRINGS3[NUM_CHARS];
+
+ // Have the above arrays been initialized or not.
+ static bool is_initialized;
+};
+
+} // namespace invalidation
+
+#endif // GOOGLE_CACHEINVALIDATION_IMPL_PROTO_HELPERS_H_

Powered by Google App Engine
This is Rietveld 408576698