| OLD | NEW |
| 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_ORDINAL_H_ | 5 #ifndef SYNC_INTERNAL_API_PUBLIC_BASE_ORDINAL_H_ |
| 6 #define SYNC_INTERNAL_API_PUBLIC_BASE_ORDINAL_H_ | 6 #define SYNC_INTERNAL_API_PUBLIC_BASE_ORDINAL_H_ |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <cstddef> | 9 #include <cstddef> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 EqualsFn(); | 71 EqualsFn(); |
| 72 | 72 |
| 73 bool operator()(const Ordinal<Traits>& lhs, | 73 bool operator()(const Ordinal<Traits>& lhs, |
| 74 const Ordinal<Traits>& rhs) const; | 74 const Ordinal<Traits>& rhs) const; |
| 75 }; | 75 }; |
| 76 | 76 |
| 77 // Creates an Ordinal from the given string of bytes. The Ordinal | 77 // Creates an Ordinal from the given string of bytes. The Ordinal |
| 78 // may be valid or invalid. | 78 // may be valid or invalid. |
| 79 explicit Ordinal(const std::string& bytes); | 79 explicit Ordinal(const std::string& bytes); |
| 80 | 80 |
| 81 // Creates an invalid Ordinal. | 81 // Creates a valid initial Ordinal. |
| 82 Ordinal(); | 82 Ordinal(); |
| 83 | 83 |
| 84 // Creates a valid initial Ordinal. This is called to create the first | 84 // Creates a valid initial Ordinal. This is called to create the first |
| 85 // element of Ordinal list (i.e. before we have any other values we can | 85 // element of Ordinal list (i.e. before we have any other values we can |
| 86 // generate from). | 86 // generate from). |
| 87 static Ordinal CreateInitialOrdinal(); | 87 static Ordinal CreateInitialOrdinal(); |
| 88 | 88 |
| 89 // Returns true iff this Ordinal is valid. This takes constant | 89 // Returns true iff this Ordinal is valid. This takes constant |
| 90 // time. | 90 // time. |
| 91 bool IsValid() const; | 91 bool IsValid() const; |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 const Ordinal<Traits>& rhs) const { | 225 const Ordinal<Traits>& rhs) const { |
| 226 return lhs.Equals(rhs); | 226 return lhs.Equals(rhs); |
| 227 } | 227 } |
| 228 | 228 |
| 229 template <typename Traits> | 229 template <typename Traits> |
| 230 Ordinal<Traits>::Ordinal(const std::string& bytes) | 230 Ordinal<Traits>::Ordinal(const std::string& bytes) |
| 231 : bytes_(bytes), | 231 : bytes_(bytes), |
| 232 is_valid_(IsValidOrdinalBytes(bytes_)) {} | 232 is_valid_(IsValidOrdinalBytes(bytes_)) {} |
| 233 | 233 |
| 234 template <typename Traits> | 234 template <typename Traits> |
| 235 Ordinal<Traits>::Ordinal() : is_valid_(false) {} | 235 Ordinal<Traits>::Ordinal() |
| 236 : bytes_(Traits::kMinLength, kZeroDigit), |
| 237 is_valid_(true){ |
| 238 bytes_[0] = kMidDigit; |
| 239 } |
| 236 | 240 |
| 237 template <typename Traits> | 241 template <typename Traits> |
| 238 Ordinal<Traits> Ordinal<Traits>::CreateInitialOrdinal() { | 242 Ordinal<Traits> Ordinal<Traits>::CreateInitialOrdinal() { |
| 239 std::string bytes(Traits::kMinLength, kZeroDigit); | 243 std::string bytes(Traits::kMinLength, kZeroDigit); |
| 240 bytes[0] = kMidDigit; | 244 bytes[0] = kMidDigit; |
| 241 return Ordinal(bytes); | 245 return Ordinal(bytes); |
| 242 } | 246 } |
| 243 | 247 |
| 244 template <typename Traits> | 248 template <typename Traits> |
| 245 bool Ordinal<Traits>::IsValid() const { | 249 bool Ordinal<Traits>::IsValid() const { |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 DCHECK_LT(midpoint, end_bytes); | 481 DCHECK_LT(midpoint, end_bytes); |
| 478 | 482 |
| 479 Ordinal<Traits> midpoint_ordinal(midpoint); | 483 Ordinal<Traits> midpoint_ordinal(midpoint); |
| 480 DCHECK(midpoint_ordinal.IsValid()); | 484 DCHECK(midpoint_ordinal.IsValid()); |
| 481 return midpoint_ordinal; | 485 return midpoint_ordinal; |
| 482 } | 486 } |
| 483 | 487 |
| 484 } // namespace syncer | 488 } // namespace syncer |
| 485 | 489 |
| 486 #endif // SYNC_INTERNAL_API_PUBLIC_BASE_ORDINAL_H_ | 490 #endif // SYNC_INTERNAL_API_PUBLIC_BASE_ORDINAL_H_ |
| OLD | NEW |