OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 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 // Keep this file in sync with syncable.h. | |
6 | |
7 #include "chrome/browser/sync/syncable/syncable_enum_conversions.h" | |
8 | |
9 #include "base/basictypes.h" | |
10 #include "base/logging.h" | |
11 | |
12 namespace syncable { | |
13 | |
14 // We can't tokenize expected_min/expected_max since it can be a | |
15 // general expression. | |
16 #define ASSERT_ENUM_BOUNDS(enum_min, enum_max, expected_min, expected_max) \ | |
17 COMPILE_ASSERT(static_cast<int>(enum_min) == \ | |
18 static_cast<int>(expected_min), \ | |
19 enum_min##_not_expected_min); \ | |
20 COMPILE_ASSERT(static_cast<int>(enum_max) == \ | |
21 static_cast<int>(expected_max), \ | |
22 enum_max##_not_expected_max); | |
23 | |
24 #define ENUM_CASE(enum_value) case enum_value: return #enum_value | |
25 | |
26 const char* GetMetahandleFieldString(MetahandleField metahandle_field) { | |
27 ASSERT_ENUM_BOUNDS(META_HANDLE, META_HANDLE, | |
28 INT64_FIELDS_BEGIN, BASE_VERSION - 1); | |
29 switch (metahandle_field) { | |
30 ENUM_CASE(META_HANDLE); | |
31 } | |
32 NOTREACHED(); | |
33 return ""; | |
34 } | |
35 | |
36 const char* GetBaseVersionString(BaseVersion base_version) { | |
37 ASSERT_ENUM_BOUNDS(BASE_VERSION, BASE_VERSION, | |
38 META_HANDLE + 1, SERVER_VERSION - 1); | |
39 switch (base_version) { | |
40 ENUM_CASE(BASE_VERSION); | |
41 } | |
42 NOTREACHED(); | |
43 return ""; | |
44 } | |
45 | |
46 const char* GetInt64FieldString(Int64Field int64_field) { | |
47 ASSERT_ENUM_BOUNDS(SERVER_VERSION, LOCAL_EXTERNAL_ID, | |
48 BASE_VERSION + 1, INT64_FIELDS_END - 1); | |
49 switch (int64_field) { | |
50 ENUM_CASE(SERVER_VERSION); | |
51 ENUM_CASE(SERVER_POSITION_IN_PARENT); | |
52 ENUM_CASE(LOCAL_EXTERNAL_ID); | |
53 case INT64_FIELDS_END: break; | |
54 } | |
55 NOTREACHED(); | |
56 return ""; | |
57 } | |
58 | |
59 const char* GetTimeFieldString(TimeField time_field) { | |
60 ASSERT_ENUM_BOUNDS(SERVER_VERSION, LOCAL_EXTERNAL_ID, | |
61 BASE_VERSION + 1, INT64_FIELDS_END - 1); | |
62 switch (time_field) { | |
63 ENUM_CASE(MTIME); | |
64 ENUM_CASE(SERVER_MTIME); | |
65 ENUM_CASE(CTIME); | |
66 ENUM_CASE(SERVER_CTIME); | |
67 case TIME_FIELDS_END: break; | |
68 } | |
69 NOTREACHED(); | |
70 return ""; | |
71 } | |
72 | |
73 const char* GetIdFieldString(IdField id_field) { | |
74 ASSERT_ENUM_BOUNDS(ID, NEXT_ID, | |
75 ID_FIELDS_BEGIN, ID_FIELDS_END - 1); | |
76 switch (id_field) { | |
77 ENUM_CASE(ID); | |
78 ENUM_CASE(PARENT_ID); | |
79 ENUM_CASE(SERVER_PARENT_ID); | |
80 ENUM_CASE(PREV_ID); | |
81 ENUM_CASE(NEXT_ID); | |
82 case ID_FIELDS_END: break; | |
83 } | |
84 NOTREACHED(); | |
85 return ""; | |
86 } | |
87 | |
88 const char* GetIndexedBitFieldString(IndexedBitField indexed_bit_field) { | |
89 ASSERT_ENUM_BOUNDS(IS_UNSYNCED, IS_UNAPPLIED_UPDATE, | |
90 BIT_FIELDS_BEGIN, INDEXED_BIT_FIELDS_END - 1); | |
91 switch (indexed_bit_field) { | |
92 ENUM_CASE(IS_UNSYNCED); | |
93 ENUM_CASE(IS_UNAPPLIED_UPDATE); | |
94 case INDEXED_BIT_FIELDS_END: break; | |
95 } | |
96 NOTREACHED(); | |
97 return ""; | |
98 } | |
99 | |
100 const char* GetIsDelFieldString(IsDelField is_del_field) { | |
101 ASSERT_ENUM_BOUNDS(IS_DEL, IS_DEL, | |
102 INDEXED_BIT_FIELDS_END, IS_DIR - 1); | |
103 switch (is_del_field) { | |
104 ENUM_CASE(IS_DEL); | |
105 } | |
106 NOTREACHED(); | |
107 return ""; | |
108 } | |
109 | |
110 const char* GetBitFieldString(BitField bit_field) { | |
111 ASSERT_ENUM_BOUNDS(IS_DIR, SERVER_IS_DEL, | |
112 IS_DEL + 1, BIT_FIELDS_END - 1); | |
113 switch (bit_field) { | |
114 ENUM_CASE(IS_DIR); | |
115 ENUM_CASE(SERVER_IS_DIR); | |
116 ENUM_CASE(SERVER_IS_DEL); | |
117 case BIT_FIELDS_END: break; | |
118 } | |
119 NOTREACHED(); | |
120 return ""; | |
121 } | |
122 | |
123 const char* GetStringFieldString(StringField string_field) { | |
124 ASSERT_ENUM_BOUNDS(NON_UNIQUE_NAME, UNIQUE_CLIENT_TAG, | |
125 STRING_FIELDS_BEGIN, STRING_FIELDS_END - 1); | |
126 switch (string_field) { | |
127 ENUM_CASE(NON_UNIQUE_NAME); | |
128 ENUM_CASE(SERVER_NON_UNIQUE_NAME); | |
129 ENUM_CASE(UNIQUE_SERVER_TAG); | |
130 ENUM_CASE(UNIQUE_CLIENT_TAG); | |
131 case STRING_FIELDS_END: break; | |
132 } | |
133 NOTREACHED(); | |
134 return ""; | |
135 } | |
136 | |
137 const char* GetProtoFieldString(ProtoField proto_field) { | |
138 ASSERT_ENUM_BOUNDS(SPECIFICS, BASE_SERVER_SPECIFICS, | |
139 PROTO_FIELDS_BEGIN, PROTO_FIELDS_END - 1); | |
140 switch (proto_field) { | |
141 ENUM_CASE(SPECIFICS); | |
142 ENUM_CASE(SERVER_SPECIFICS); | |
143 ENUM_CASE(BASE_SERVER_SPECIFICS); | |
144 case PROTO_FIELDS_END: break; | |
145 } | |
146 NOTREACHED(); | |
147 return ""; | |
148 } | |
149 | |
150 const char* GetBitTempString(BitTemp bit_temp) { | |
151 ASSERT_ENUM_BOUNDS(SYNCING, SYNCING, | |
152 BIT_TEMPS_BEGIN, BIT_TEMPS_END - 1); | |
153 switch (bit_temp) { | |
154 ENUM_CASE(SYNCING); | |
155 case BIT_TEMPS_END: break; | |
156 } | |
157 NOTREACHED(); | |
158 return ""; | |
159 } | |
160 | |
161 #undef ENUM_CASE | |
162 #undef ASSERT_ENUM_BOUNDS | |
163 | |
164 } // namespace syncable | |
OLD | NEW |