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