constexpr type_id get_varint_type()

in include/ylt/struct_pack/type_id.hpp [84:127]


constexpr type_id get_varint_type() {
  if constexpr (is_enable_fast_varint_coding(parent_tag)) {
    if constexpr (std::is_same_v<var_int32_t, T> ||
                  std::is_same_v<int32_t, T>) {
      return type_id::fast_vint32_t;
    }
    else if constexpr (std::is_same_v<var_int64_t, T> ||
                       std::is_same_v<int64_t, T>) {
      return type_id::fast_vint64_t;
    }
    else if constexpr (std::is_same_v<var_uint32_t, T> ||
                       std::is_same_v<uint32_t, T>) {
      return type_id::fast_vuint32_t;
    }
    else if constexpr (std::is_same_v<var_uint64_t, T> ||
                       std::is_same_v<uint64_t, T>) {
      return type_id::fast_vuint64_t;
    }
    else {
      static_assert(!sizeof(T), "unsupported varint type!");
    }
  }
  else {
    if constexpr (std::is_same_v<var_int32_t, T> ||
                  std::is_same_v<int32_t, T>) {
      return type_id::vint32_t;
    }
    else if constexpr (std::is_same_v<var_int64_t, T> ||
                       std::is_same_v<int64_t, T>) {
      return type_id::vint64_t;
    }
    else if constexpr (std::is_same_v<var_uint32_t, T> ||
                       std::is_same_v<uint32_t, T>) {
      return type_id::vuint32_t;
    }
    else if constexpr (std::is_same_v<var_uint64_t, T> ||
                       std::is_same_v<uint64_t, T>) {
      return type_id::vuint64_t;
    }
    else {
      static_assert(!sizeof(T), "unsupported varint type!");
    }
  }
}