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