text: // Copyright (c) 2017 Computer Vision Center (CVC) at the Universitat Autonoma
  // de Barcelona (UAB).
  //
  // This work is licensed under the terms of the MIT license.
  // For a copy, see <https://opensource.org/licenses/MIT>.
  
  #pragma once
  
  #include <cstdint>
  
  namespace carla {
  namespace image {
  namespace detail {
  
      static constexpr
  #if __cplusplus >= 201703L // C++17
      inline
  #endif
      uint8_t CITYSCAPES_PALETTE_MAP[][3u] = {
          {  0u,   0u,   0u}, // unlabeled     =   0u,
          { 70u,  70u,  70u}, // building      =   1u,
          {190u, 153u, 153u}, // fence         =   2u,
          {250u, 170u, 160u}, // other         =   3u,
          {220u,  20u,  60u}, // pedestrian    =   4u,
          {153u, 153u, 153u}, // pole          =   5u,
          {153u, 153u, 153u}, // road line     =   6u,
          {128u,  64u, 128u}, // road          =   7u,
          {244u,  35u, 232u}, // sidewalk      =   8u,
          {107u, 142u,  35u}, // vegetation    =   9u,
          {  0u,   0u, 142u}, // car           =  10u,
          {102u, 102u, 156u}, // wall          =  11u,
          {220u, 220u,   0u}, // traffic sign  =  12u,
          // {  0u,   0u,  70u}, // truck
          // {  0u,   0u,  90u}, // caravan
          // {  0u,   0u, 110u}, // trailer
          // {  0u,   0u, 142u}, // license plate
          // {  0u,   0u, 230u}, // motorcycle
          // {  0u,  60u, 100u}, // bus
          // {  0u,  80u, 100u}, // train
          // { 70u, 130u, 180u}, // sky
          // { 81u,   0u,  81u}, // ground
          // {111u,  74u,   0u}, // dynamic
          // {119u,  11u,  32u}, // bicycle
          // {150u, 100u, 100u}, // bridge
          // {150u, 120u,  90u}, // tunnel
          // {152u, 251u, 152u}, // terrain
          // {153u, 153u, 153u}, // polegroup
          // {180u, 165u, 180u}, // guard rail
          // {230u, 150u, 140u}, // rail track
          // {250u, 170u,  30u}, // traffic light
          // {250u, 170u, 160u}, // parking
          // {255u,   0u,   0u}, // rider
      };
  
  } // namespace detail
  
    class CityScapesPalette {
    public:
  
      static constexpr auto GetNumberOfTags() {
        return sizeof(detail::CITYSCAPES_PALETTE_MAP) /
            sizeof(*detail::CITYSCAPES_PALETTE_MAP);
      }
  
      /// Return an RGB uint8_t array.
      ///
      /// @warning It overflows if @a tag is greater than GetNumberOfTags().
      static constexpr auto GetColor(uint8_t tag) {
        return detail::CITYSCAPES_PALETTE_MAP[tag % GetNumberOfTags()];
      }
    };
  
  } // namespace image
  } // namespace carla
  