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

Side by Side Diff: sync/internal_api/public/base/unique_position.h

Issue 11412211: [sync] Componentize sync: Part Final: Target 'sync' is now its own component (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase + Merge + Undo copyright changes Created 7 years, 10 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
« no previous file with comments | « sync/base/sync_export.h ('k') | sync/internal_api/public/delete_journal.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #ifndef SYNC_INTERNAL_API_PUBLIC_BASE_UNIQUE_POSITION_H_ 5 #ifndef SYNC_INTERNAL_API_PUBLIC_BASE_UNIQUE_POSITION_H_
6 #define SYNC_INTERNAL_API_PUBLIC_BASE_UNIQUE_POSITION_H_ 6 #define SYNC_INTERNAL_API_PUBLIC_BASE_UNIQUE_POSITION_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "sync/base/sync_export.h"
11 12
12 namespace sync_pb { 13 namespace sync_pb {
13 class UniquePosition; 14 class UniquePosition;
14 } 15 }
15 16
16 namespace syncer { 17 namespace syncer {
17 18
18 // A class to represent positions. 19 // A class to represent positions.
19 // 20 //
20 // Valid UniquePosition objects have the following properties: 21 // Valid UniquePosition objects have the following properties:
21 // 22 //
22 // - a < b and b < c implies a < c (transitivity); 23 // - a < b and b < c implies a < c (transitivity);
23 // - exactly one of a < b, b < a and a = b holds (trichotomy); 24 // - exactly one of a < b, b < a and a = b holds (trichotomy);
24 // - if a < b, there is a UniquePosition such that a < x < b (density); 25 // - if a < b, there is a UniquePosition such that a < x < b (density);
25 // - there are UniquePositions x and y such that x < a < y (unboundedness); 26 // - there are UniquePositions x and y such that x < a < y (unboundedness);
26 // - if a and b were constructed with different unique suffixes, then a != b. 27 // - if a and b were constructed with different unique suffixes, then a != b.
27 // 28 //
28 // As long as all UniquePositions used to sort a list were created with unique 29 // As long as all UniquePositions used to sort a list were created with unique
29 // suffixes, then if any item changes its position in the list, only its 30 // suffixes, then if any item changes its position in the list, only its
30 // UniquePosition value has to change to represent the new order, and all other 31 // UniquePosition value has to change to represent the new order, and all other
31 // values can stay the same. 32 // values can stay the same.
32 // 33 //
33 // Note that the unique suffixes must be exactly |kSuffixLength| bytes long. 34 // Note that the unique suffixes must be exactly |kSuffixLength| bytes long.
34 // 35 //
35 // The cost for all these features is potentially unbounded space usage. In 36 // The cost for all these features is potentially unbounded space usage. In
36 // practice, however, most ordinals should be not much longer than the suffix. 37 // practice, however, most ordinals should be not much longer than the suffix.
37 // 38 //
38 // This class currently has several bookmarks-related assumptions built in, 39 // This class currently has several bookmarks-related assumptions built in,
39 // though it could be adapted to be more generally useful. 40 // though it could be adapted to be more generally useful.
40 class UniquePosition { 41 class SYNC_EXPORT_PRIVATE UniquePosition {
41 public: 42 public:
42 static const size_t kSuffixLength; 43 static const size_t kSuffixLength;
43 44
44 static bool IsValidSuffix(const std::string& suffix); 45 static bool IsValidSuffix(const std::string& suffix);
45 static bool IsValidBytes(const std::string& bytes); 46 static bool IsValidBytes(const std::string& bytes);
46 47
47 // Returns an invalid position. 48 // Returns an invalid position.
48 static UniquePosition CreateInvalid(); 49 static UniquePosition CreateInvalid();
49 50
50 // Converts from a 'sync_pb::UniquePosition' protobuf to a UniquePosition. 51 // Converts from a 'sync_pb::UniquePosition' protobuf to a UniquePosition.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 explicit UniquePosition(const std::string& internal_rep); 114 explicit UniquePosition(const std::string& internal_rep);
114 UniquePosition(const std::string& prefix, const std::string& suffix); 115 UniquePosition(const std::string& prefix, const std::string& suffix);
115 116
116 std::string bytes_; 117 std::string bytes_;
117 bool is_valid_; 118 bool is_valid_;
118 }; 119 };
119 120
120 } // namespace syncer; 121 } // namespace syncer;
121 122
122 #endif // SYNC_INTERNAL_API_PUBLIC_BASE_UNIQUE_POSITION_H_ 123 #endif // SYNC_INTERNAL_API_PUBLIC_BASE_UNIQUE_POSITION_H_
OLDNEW
« no previous file with comments | « sync/base/sync_export.h ('k') | sync/internal_api/public/delete_journal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698