Home | History | Annotate | Download | only in api
      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