string_ordinal.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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 11namespace 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 22struct StringOrdinalTraits { 23 static const uint8 kZeroDigit = 'a'; 24 static const uint8 kMaxDigit = 'z'; 25 static const size_t kMinLength = 1; 26}; 27 28typedef Ordinal<StringOrdinalTraits> StringOrdinal; 29 30COMPILE_ASSERT(StringOrdinal::kZeroDigit == 'a', 31 StringOrdinalHasCorrectZeroDigit); 32COMPILE_ASSERT(StringOrdinal::kOneDigit == 'b', 33 StringOrdinalHasCorrectOneDigit); 34COMPILE_ASSERT(StringOrdinal::kMidDigit == 'n', 35 StringOrdinalHasCorrectMidDigit); 36COMPILE_ASSERT(StringOrdinal::kMaxDigit == 'z', 37 StringOrdinalHasCorrectMaxDigit); 38COMPILE_ASSERT(StringOrdinal::kMidDigitValue == 13, 39 StringOrdinalHasCorrectMidDigitValue); 40COMPILE_ASSERT(StringOrdinal::kMaxDigitValue == 25, 41 StringOrdinalHasCorrectMaxDigitValue); 42COMPILE_ASSERT(StringOrdinal::kRadix == 26, 43 StringOrdinalHasCorrectRadix); 44 45} // namespace syncer 46 47#endif // SYNC_API_STRING_ORDINAL_H_ 48