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_API_STRING_ORDINAL_H_ | 5 #ifndef SYNC_API_STRING_ORDINAL_H_ |
6 #define SYNC_API_STRING_ORDINAL_H_ | 6 #define SYNC_API_STRING_ORDINAL_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "sync/internal_api/public/base/ordinal.h" | 9 #include "sync/internal_api/public/base/ordinal.h" |
10 | 10 |
11 namespace syncer { | 11 namespace syncer { |
12 | 12 |
13 // A StringOrdinal is an Ordinal with range 'a'-'z' for printability | 13 // A StringOrdinal is an Ordinal with range 'a'-'z' for printability |
14 // of its internal byte string representation. (Think of | 14 // of its internal byte string representation. (Think of |
15 // StringOrdinal as being short for PrintableStringOrdinal.) It | 15 // StringOrdinal as being short for PrintableStringOrdinal.) It |
16 // should be used for data types that want to maintain one or more | 16 // should be used for data types that want to maintain one or more |
17 // orderings for nodes. | 17 // orderings for nodes. |
18 // | 18 // |
19 // Since StringOrdinals contain only printable characters, it is safe | 19 // Since StringOrdinals contain only printable characters, it is safe |
20 // to store as a string in a protobuf. | 20 // to store as a string in a protobuf. |
21 | 21 |
22 struct StringOrdinalTraits { | 22 struct StringOrdinalTraits { |
23 static const uint8 kZeroDigit = 'a'; | 23 static const uint8 kZeroDigit = 'a'; |
24 static const uint8 kMaxDigit = 'z'; | 24 static const uint8 kMaxDigit = 'z'; |
25 static const size_t kMinLength = 1; | 25 static const size_t kMinLength = 1; |
26 }; | 26 }; |
27 | 27 |
28 typedef Ordinal<StringOrdinalTraits> StringOrdinal; | 28 typedef Ordinal<StringOrdinalTraits> StringOrdinal; |
29 | 29 |
30 COMPILE_ASSERT(StringOrdinal::kZeroDigit == 'a', | 30 static_assert(StringOrdinal::kZeroDigit == 'a', |
31 StringOrdinalHasCorrectZeroDigit); | 31 "StringOrdinal has incorrect zero digit"); |
32 COMPILE_ASSERT(StringOrdinal::kOneDigit == 'b', | 32 static_assert(StringOrdinal::kOneDigit == 'b', |
33 StringOrdinalHasCorrectOneDigit); | 33 "StringOrdinal has incorrect one digit"); |
34 COMPILE_ASSERT(StringOrdinal::kMidDigit == 'n', | 34 static_assert(StringOrdinal::kMidDigit == 'n', |
35 StringOrdinalHasCorrectMidDigit); | 35 "StringOrdinal has incorrect mid digit"); |
36 COMPILE_ASSERT(StringOrdinal::kMaxDigit == 'z', | 36 static_assert(StringOrdinal::kMaxDigit == 'z', |
37 StringOrdinalHasCorrectMaxDigit); | 37 "StringOrdinal has incorrect max digit"); |
38 COMPILE_ASSERT(StringOrdinal::kMidDigitValue == 13, | 38 static_assert(StringOrdinal::kMidDigitValue == 13, |
39 StringOrdinalHasCorrectMidDigitValue); | 39 "StringOrdinal has incorrect mid digit value"); |
40 COMPILE_ASSERT(StringOrdinal::kMaxDigitValue == 25, | 40 static_assert(StringOrdinal::kMaxDigitValue == 25, |
41 StringOrdinalHasCorrectMaxDigitValue); | 41 "StringOrdinal has incorrect max digit value"); |
42 COMPILE_ASSERT(StringOrdinal::kRadix == 26, | 42 static_assert(StringOrdinal::kRadix == 26, |
43 StringOrdinalHasCorrectRadix); | 43 "StringOrdinal has incorrect radix"); |
44 | 44 |
45 } // namespace syncer | 45 } // namespace syncer |
46 | 46 |
47 #endif // SYNC_API_STRING_ORDINAL_H_ | 47 #endif // SYNC_API_STRING_ORDINAL_H_ |
OLD | NEW |