// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// The following macros are used to declare a map from color id enum to the
// stringized name of the color id enum for use in extracting the color id enum
// in string format. This file is intended to be included just before and just
// after the declaration of the map.

#if !defined(COLOR_ID_FLAT_MAP_MACROS_DEFINED)
#define COLOR_ID_FLAT_MAP_MACROS_DEFINED

#if !defined(COLOR_ID_MAP_ENTRY)
#define COLOR_ID_MAP_ENTRY(enum_name, string_name) \
  { enum_name, string_name }
#endif

#define E1(enum_name) \
  COLOR_ID_MAP_ENTRY(enum_name, #enum_name)
#define E2(enum_name, old_enum_name) \
  COLOR_ID_MAP_ENTRY(enum_name, #enum_name)
#define E3(enum_name, old_enum_name, enum_value) \
  COLOR_ID_MAP_ENTRY(enum_name, #enum_name)
#define E_CPONLY(...) E(__VA_ARGS__)
#define GET_E(_1, _2, _3, macro_name, ...) macro_name
#define E(...) GET_E(__VA_ARGS__, E3, E2, E1)(__VA_ARGS__),

#else
#undef E1
#undef E2
#undef E3
#undef E_CPONLY
#undef GET_E
#undef E
#undef COLOR_ID_MAP_ENTRY
#undef COLOR_ID_FLAT_MAP_MACROS_DEFINED
#endif
