47 template<
class enum_t = std::
nullptr_t>
111 if (to_int(this->
value) == to_int(
value.value))
return 0;
112 if (to_int(this->
value) < to_int(
value.value))
return -1;
131 template<
class attribute_t>
176 auto iterator = std::find_if(entries().
begin(), entries().
end(), [&](
auto value)->
bool {
return value.first == this->
value;});
177 if (iterator == entries().
end())
return string::format(
"{}", to_int(
value));
179 return iterator->second;
237 if (xtd::string::compare(str, item.second, ignore_case) == 0)
238 return static_cast<enum_type>(item.first);
249 auto iterator = std::find_if(entries().
begin(), entries().
end(), [&](
auto value)->
bool {
return value.first == this->
value;});
250 if (iterator == entries().
end())
return xtd::string::format(
"{}", to_int(
value));
251 return iterator->second;
255 xtd::array<xtd::string> values =
value.split(
',');
259 if (values.size() == 1) {
261 if (xtd::string::compare(
value, item.second, ignore_case) == 0)
262 return to_enum(item.first);
271 if (xtd::string::compare(str, item.second, ignore_case) == 0) {
273 result |= to_int(item.first);
281 return to_enum(result);
285 auto iterator = std::find_if(entries().
begin(), entries().
end(), [&](
auto value)->
bool {
return value.first == this->
value;});
286 if (to_int(
value) == 0 && iterator == entries().
end())
return "0";
288 iterator = std::find_if(entries().
begin(), entries().
end(), [&](
auto value)->
bool {
return value.first == to_enum(0);});
289 if (to_int(
value) == 0)
return iterator == entries().
end() ?
"0" : iterator->second;
294 std::reverse(reversed_entries.begin(), reversed_entries.end());
296 for (
auto item : reversed_entries) {
297 if (to_int(item.first) != 0 && (rest & to_int(item.first)) == to_int(item.first)) {
298 rest -= to_int(item.first);
300 str = item.second + str;
304 if (str.empty() || rest > 0)
return xtd::string::format(
"{}", to_int(
value));
309 template<
class attribute_t>
314 if (attribute_.has_value())
return attribute_.value();
316 return attribute_.value();
320 if (entries_.has_value())
return entries_.value();
322 return entries_.value();
325 static void init() noexcept {
330 inline static std::optional<xtd::enum_attribute> attribute_;
331 inline static std::optional<enum_collection<enum_type>> entries_;
357 template<
class enum_t>
364 template<
class enum_t>
373 template<
class enum_t>
382 template<
class enum_t>
391 template<
class enum_t>
400 template<
class enum_t>
409 template<
class enum_t>
418 template<
class enum_t>
427 template<
class enum_t>
438 template<
class enum_t>
444 template<
class enum_t>
450 template<
class enum_t>
456 template<
class enum_t>
462 template<
class enum_t>
463 static xtd::array<xtd::string> get_names() noexcept {
464 auto names = xtd::array<xtd::string> {};
472 template<
class enum_t>
473 static xtd::array<enum_t> get_values() noexcept {
474 auto values = xtd::array<enum_t> {};
482 template<
class enum_t>
483 static xtd::array<xtd::byte> get_values_as_byte() noexcept {
484 auto values = xtd::array<xtd::byte> {};
492 template<
class enum_t>
493 static xtd::array<int16> get_values_as_int16() noexcept {
494 auto values = xtd::array<xtd::int16> {};
502 template<
class enum_t>
503 static xtd::array<int32> get_values_as_int32() noexcept {
504 auto values = xtd::array<xtd::int32> {};
512 template<
class enum_t>
513 static xtd::array<int64> get_values_as_int64() noexcept {
514 auto values = xtd::array<xtd::int64> {};
522 template<
class enum_t>
523 static xtd::array<sbyte> get_values_as_sbyte() noexcept {
524 auto values = xtd::array<xtd::sbyte> {};
532 template<
class enum_t>
533 static xtd::array<uint16> get_values_as_uint16() noexcept {
534 auto values = xtd::array<xtd::uint16> {};
542 template<
class enum_t>
543 static xtd::array<uint32> get_values_as_uint32() noexcept {
544 auto values = xtd::array<xtd::uint32> {};
552 template<
class enum_t>
553 static xtd::array<uint64> get_values_as_uint64() noexcept {
554 auto values = xtd::array<xtd::uint64> {};
563 template<
class enum_t>
569 template<
class enum_t>
576 template<
class enum_t>
583 template<
class enum_t>
591 template<
class enum_t>
597 template<
class enum_t>
603 template<
class enum_t>
609 template<
class enum_t>
615 template<
class enum_t>
621 template<
class enum_t>
627 template<
class enum_t>
633 template<
class enum_t>
639 template<
class enum_t>
646 template<
class enum_t>
647 static bool try_parse(
const xtd::string&
value, enum_t& result)
noexcept {
return try_parse<enum_t>(
value,
false, result);}
654 template<
class enum_t>
655 static bool try_parse(
const xtd::string&
value,
bool ignore_case, enum_t& result)
noexcept {
668 template<
class enum_t>
672 if (fmt.empty()) fmt =
"G";
682 case 'X':
return __numeric_formatter(fmt.chars(),
static_cast<long long int>(value), std::locale());
686 case 'G':
return xtd::enum_object<>::get_name(value);
694template<
class enum_t>
695inline std::string __enum_to_string__(enum_t value)
noexcept {
699template<
class value_t>
700value_t __parse_enum(
const std::string& str) {
Contains xtd::array class.
Represents the base class for custom attributes.
Definition attribute.hpp:25
bool is_empty() const noexcept
Definition basic_string.hpp:1471
virtual const_iterator end() const
Returns an iterator to the element following the last element of the enumarable.
Definition enumerable_iterators.hpp:170
static xtd::size combine(args_t... values) noexcept
Combines values into a hash code.
Definition hash_code.hpp:70
static void throws(xtd::helpers::exception_case exception_case, const source_location &location=source_location::current())
Throws an exption with specified exception case.
Defines a generalized comparison method that a value type or class implements to create a type-specif...
Definition icomparable.hpp:21
Defines a generalized method that a value type or class implements to create a type-specific method f...
Definition iequatable.hpp:22
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:44
Contains xtd::enum_attribute enum class.
Contains xtd::enum_collection.
Contains xtd::enum_register.
Contains xtd::enum_set_attribute strcut.
@ format
The format is not valid.
Definition exception_case.hpp:49
#define static_
This keyword is use to represent a static object. A static object can't be instantiated (constructors...
Definition static.hpp:37
xtd::basic_string< char > string
Represents text as a sequence of UTF-8 code units.
Definition __string_definitions.hpp:43
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
int8_t sbyte
Represents a 8-bit signed integer.
Definition sbyte.hpp:23
int32_t int32
Represents a 32-bit signed integer.
Definition int32.hpp:23
uint8_t byte
Represents a 8-bit unsigned integer.
Definition byte.hpp:23
int64_t int64
Represents a 64-bit signed integer.
Definition int64.hpp:23
int16_t int16
Represents a 16-bit signed integer.
Definition int16.hpp:23
uint16_t uint16
Represents a 16-bit unsigned integer.
Definition uint16.hpp:23
uint32_t uint32
Represents a 32-bit unsigned integer.
Definition uint32.hpp:23
uint64_t uint64
Represents a 64-bit unsigned integer.
Definition uint64.hpp:23
enum_attribute
Specifies the enum attribute.
Definition enum_attribute.hpp:22
std::vector< std::pair< enum_t, xtd::string > > enum_collection
Represents a pair of an enum_t value and a string of an enum of type enum_t.
Definition enum_collection.hpp:24
value_t parse(const std::string &str)
Convert a string into a type.
Definition parse.hpp:34
@ flags
Enum flags attribute.
Definition enum_attribute.hpp:26
Contains xtd::icomparable interface.
Contains xtd::iequatable interface.
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
const_iterator begin() const
Returns an iterator to the beginning.
Definition read_only_span.hpp:183
const_iterator end() const
Returns an iterator to the end.
Definition read_only_span.hpp:213
Contains xtd::number_styles enum class.
Contains xtd::optional type.
Contains xtd::static_object class.
Contains xtd::string_comparison enum class.
Contains xtd::string_split_options enum class.
Provides the base class for enumerations.
Definition enum_object.hpp:48
bool has_flag(enum_type flag) const noexcept
Retrieves an array of the values of the constants in a specified enumeration.
Definition enum_object.hpp:90
bool equals(const object &obj) const noexcept override
Determines whether the specified object is equal to the current object.
Definition enum_object.hpp:119
int64 to_int64() const noexcept
Converts this instance to int64.
Definition enum_object.hpp:152
uint32 to_uint32() const noexcept
Converts this instance to unsigned int32.
Definition enum_object.hpp:164
xtd::string to_string(const xtd::string &format) const
Converts the value of this instance to its equivalent string representation using the specified forma...
Definition enum_object.hpp:198
uint16 to_uint16() const noexcept
Converts this instance to unsigned int16.
Definition enum_object.hpp:160
sbyte to_sbyte() const noexcept
Converts this instance to signed byte.
Definition enum_object.hpp:156
enum_t value_type
Represents the enumeration type.
Definition enum_object.hpp:55
xtd::size get_hash_code() const noexcept override
Serves as a hash function for a particular type.
Definition enum_object.hpp:136
xtd::string to_string() const noexcept override
Returns a xtd::string that represents the current object.
Definition enum_object.hpp:172
bool equals(const enum_object &value) const noexcept override
Determines whether the specified object is equal to the current object.
Definition enum_object.hpp:123
static enum_type parse(const xtd::string &str)
Converts the string to its enum_type equivalent.
Definition enum_object.hpp:227
enum_t enum_type
Represents the enumeration type.
Definition enum_object.hpp:53
xtd::byte to_byte() const noexcept
Converts this instance to byte.
Definition enum_object.hpp:140
uint64 to_uint64() const noexcept
Converts this instance to unsigned int64.
Definition enum_object.hpp:168
bool equals(attribute_t value) const noexcept
Indicates whether the current object is equal to another object with defferent type.
Definition enum_object.hpp:132
int32 to_int32() const noexcept
Converts this instance to int32.
Definition enum_object.hpp:148
enum_object() noexcept=default
Initializes a new instance of the xtd::enum_object class.
bool equals(enum_type value) const noexcept
Indicates whether the current object is equal to another object of the same type.
Definition enum_object.hpp:127
enum_type value
Gets or sets the value of the enum.
Definition enum_object.hpp:94
int16 to_int16() const noexcept
Converts this instance to int16.
Definition enum_object.hpp:144
int32 compare_to(const enum_object &value) const noexcept override
Compares the current instance with another object of the same type.
Definition enum_object.hpp:110
xtd::string to_string(const xtd::string &format, const std::locale &loc) const override
Converts the value of this instance to its equivalent string representation using the specified forma...