76#ifndef OR_TOOLS_MATH_OPT_CPP_ENUMS_H_
77#define OR_TOOLS_MATH_OPT_CPP_ENUMS_H_
82#include "absl/strings/string_view.h"
83#include "absl/types/span.h"
197std::optional<typename EnumProto<P>::Cpp>
EnumFromProto(
const P proto_value);
230 typename = std::enable_if_t<Enum<E>::kIsImplemented>>
233 if (opt_str.has_value()) {
236 out <<
"<invalid enum (" <<
static_cast<std::underlying_type_t<E>
>(
value)
249 typename = std::enable_if_t<Enum<E>::kIsImplemented>>
250std::ostream&
operator<<(std::ostream& out,
const std::optional<E> opt_value) {
251 if (opt_value.has_value()) {
254 out <<
"<unspecified>";
275std::optional<typename EnumProto<P>::Cpp>
EnumFromProto(
const P proto_value) {
285 CHECK(opt_str.has_value())
286 <<
"invalid value: " <<
static_cast<std::underlying_type_t<E>
>(
value);
319#define MATH_OPT_DEFINE_ENUM(CppEnum, proto_unspecified_value) \
321 struct Enum<CppEnum> { \
322 static constexpr bool kIsImplemented = true; \
323 using Proto = CppEnum##Proto; \
324 static constexpr Proto kProtoUnspecifiedValue = proto_unspecified_value; \
325 static std::optional<absl::string_view> ToOptString(CppEnum value); \
326 static absl::Span<const CppEnum> AllValues(); \
330 struct EnumProto<CppEnum##Proto> { \
331 using Cpp = CppEnum; \
332 static constexpr CppEnum##Proto kMin = CppEnum##Proto##_MIN; \
333 static constexpr CppEnum##Proto kMax = CppEnum##Proto##_MAX; \
334 static constexpr ProtoEnumIsValid kIsValid = CppEnum##Proto##_IsValid; \
std::optional< E > EnumFromString(const absl::string_view str)
absl::string_view EnumToString(const E value)
std::ostream & operator<<(std::ostream &out, const E value)
bool(*)(int) ProtoEnumIsValid
std::optional< absl::string_view > EnumToOptString(const E value)
std::optional< typename EnumProto< P >::Cpp > EnumFromProto(const P proto_value)
Enum< E >::Proto EnumToProto(const std::optional< E > value)
static std::optional< absl::string_view > ToOptString(E value)
static constexpr bool kIsImplemented
static absl::Span< const E > AllValues()
static constexpr Proto kProtoUnspecifiedValue
static constexpr ProtoEnumIsValid kIsValid