Skip to content

Commit

Permalink
update doc
Browse files Browse the repository at this point in the history
  • Loading branch information
Neargye committed Nov 19, 2024
1 parent 84990c6 commit 06741ec
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 7 deletions.
17 changes: 15 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,24 @@ If you like this project, please consider donating to one of the funds that help

## [Features & Examples](example/)

* Enum value to string
* Basic

```cpp
#include <magic_enum/magic_enum.hpp>
//....
#include <iostream>

enum class Color : { RED = -10, BLUE = 0, GREEN = 10 };

int main() {
Color c1 = Color::RED;
std::cout << magic_enum::enum_name(c1) << std::endl; // RED
return 0;
}
```
* Enum value to string
```cpp
Color color = Color::RED;
auto color_name = magic_enum::enum_name(color);
// color_name -> "RED"
Expand Down
50 changes: 45 additions & 5 deletions doc/reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ template <typename E, typename BinaryPredicate>
constexpr optional<E> enum_cast(string_view value, BinaryPredicate p) noexcept(is_nothrow_invocable_v<BinaryPredicate>);
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Obtains enum value from string or integer.

* Returns `optional<E>`, using `has_value()` to check contains enum value and `value()` to get the enum value.
Expand Down Expand Up @@ -125,6 +127,8 @@ template <typename E, size_t I>
constexpr E enum_value() noexcept;
```
* Defined in header `<magic_enum/magic_enum.hpp>`
* Returns enum value at specified index.
* `enum_value(value)` no bounds checking is performed: the behavior is undefined if `index >= number of enum values`.
* `enum_value<value>()` check if `I >= number of enum values`, occurs the compilation error `magic_enum::enum_value out of range`.
Expand All @@ -149,6 +153,8 @@ template <typename E>
constexpr array<E, N> enum_values() noexcept;
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Returns `array<E, N>` with all enum values where `N = number of enum values`, sorted by enum value.

* Examples
Expand All @@ -166,6 +172,8 @@ template <typename E>
constexpr size_t enum_count() noexcept;
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Returns number of enum values.

* Examples
Expand All @@ -185,6 +193,8 @@ template <typename E>
constexpr underlying_type_t<E> enum_underlying(E value) noexcept;
```
* Defined in header `<magic_enum/magic_enum.hpp>`
* Returns integer value from enum value.
* Examples
Expand All @@ -205,6 +215,8 @@ template <auto V>
constexpr string_view enum_name() noexcept;
```
* Defined in header `<magic_enum/magic_enum.hpp>`
* Returns name from enum value as `string_view` with null-terminated string.
* If enum value does not have name or [out of range](limitations.md), `enum_name(value)` returns empty string.
* If enum value does not have name, `enum_name<value>()` occurs the compilation error `magic_enum::enum_name enum value does not have a name`.
Expand Down Expand Up @@ -232,6 +244,8 @@ template <typename E>
constexpr array<string_view, N> enum_names() noexcept;
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Returns `array<string_view, N>` with all names where `N = number of enum values`, sorted by enum value.

* Examples
Expand All @@ -249,6 +263,8 @@ template <typename E>
constexpr array<pair<E, string_view>, N> enum_entries() noexcept;
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Returns `array<pair<E, string_view>, N>` with all pairs (value, name) where `N = number of enum values`, sorted by enum value.

* Examples
Expand All @@ -270,6 +286,8 @@ template <auto V>
constexpr size_t enum_index() noexcept;
```
* Defined in header `<magic_enum/magic_enum.hpp>`
* Obtains index in enum values from enum value.
* `enum_index(value)` returns `optional<size_t>` with index.
* `enum_index<value>()` returns index. If enum value does not have a index, occurs the compilation error `magic_enum::enum_index enum value does not have a index`.
Expand Down Expand Up @@ -303,6 +321,8 @@ template <typename E, typename BinaryPredicate>
constexpr bool enum_contains(string_view value, BinaryPredicate p) noexcept(is_nothrow_invocable_v<BinaryPredicate>);
```
* Defined in header `<magic_enum/magic_enum.hpp>`
* Checks whether enum contains enumerator with such value.
* Returns true is enum contains value, otherwise false.
Expand All @@ -327,6 +347,8 @@ template <typename E>
constexpr bool enum_reflected(underlying_type_t<E> value) noexcept;
```
* Defined in header `<magic_enum/magic_enum.hpp>`
* Returns true if the enum value is in the range of values that can be reflected.
## `enum_type_name`
Expand All @@ -336,6 +358,8 @@ template <typename E>
constexpr string_view enum_type_name() noexcept;
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Returns type name of enum as `string_view` null-terminated string.

* Examples
Expand All @@ -353,7 +377,7 @@ template <typename... Es>
constexpr optional<enum_fuse_t> enum_fuse(Es... values) noexcept;
```
* You should add the required file `<magic_enum_fuse.hpp>`.
* Defined in header `<magic_enum/magic_enum_fuse.hpp>`
* Returns a typesafe bijective mix of several enum values. This can be used to emulate 2D switch/case statements.
Expand Down Expand Up @@ -384,7 +408,7 @@ template <typename Result, typename E, typename Lambda>
constexpr Result enum_switch(Lambda&& lambda, E value, Result&& result);
```
* You should add the required file `<magic_enum_switch.hpp>`.
* Defined in header `<magic_enum/magic_enum_switch.hpp>`
* Examples
Expand All @@ -404,6 +428,8 @@ template <typename E, typename Lambda>
constexpr auto enum_for_each(Lambda&& lambda);
```
* Defined in header `<magic_enum/magic_enum_utility.hpp>`
* Examples
```cpp
Expand Down Expand Up @@ -442,7 +468,7 @@ template <typename E, typename BinaryPredicate>
constexpr bool enum_flags_contains(string_view value, BinaryPredicate p) noexcept(is_nothrow_invocable_v<BinaryPredicate>);
```
* You should add the required file `<magic_enum_flags.hpp>`.
* Defined in header `<magic_enum/magic_enum_flags.hpp>`
* For enum-flags add `is_flags` to specialization `enum_range` for necessary enum type. Specialization of `enum_range` must be injected in `namespace magic_enum::customize`.
```cpp
Expand Down Expand Up @@ -496,6 +522,8 @@ template <typename T>
inline constexpr bool is_unscoped_enum_v = is_unscoped_enum<T>::value;
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Checks whether type is an [Unscoped enumeration](https://en.cppreference.com/w/cpp/language/enum#Unscoped_enumeration).

* Provides the member constant value which is equal to true, if T is an [Unscoped enumeration](https://en.cppreference.com/w/cpp/language/enum#Unscoped_enumeration) type.</br>
Expand All @@ -521,6 +549,8 @@ template <typename T>
inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::value;
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Checks whether type is an [Scoped enumeration](https://en.cppreference.com/w/cpp/language/enum#Scoped_enumerations).

* Provides the member constant value which is equal to true, if T is an [Scoped enumeration](https://en.cppreference.com/w/cpp/language/enum#Scoped_enumerations) type.</br>
Expand All @@ -546,6 +576,8 @@ template <typename T>
using underlying_type_t = typename underlying_type<T>::type;
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Improved UB-free "SFINAE-friendly" [underlying_type](https://en.cppreference.com/w/cpp/types/underlying_type).

* If T is a complete enumeration type, provides a member typedef type that names the underlying type of T.</br>
Expand All @@ -571,7 +603,7 @@ template <typename Char, typename Traits, typename E>
basic_ostream<Char, Traits>& operator<<(basic_ostream<Char, Traits>& os, optional<E> value);
```

* You should add the required file `<magic_enum_iostream.hpp>`.
* Defined in header `<magic_enum/magic_enum_iostream.hpp>`

* Out-of-the-box ostream operators for all enums.

Expand All @@ -590,7 +622,7 @@ template <typename Char, typename Traits, typename E>
basic_istream<Char, Traits>& operator>>(basic_istream<Char, Traits>& is, E& value);
```

* You should add the required file `<magic_enum_iostream.hpp>`.
* Defined in header `<magic_enum/magic_enum_iostream.hpp>`

* Out-of-the-box istream operators for all enums.

Expand Down Expand Up @@ -627,6 +659,8 @@ template <typename E>
constexpr E& operator^=(E& lhs, E rhs) noexcept;
```

* Defined in header `<magic_enum/magic_enum.hpp>`

* Out-of-the-box bitwise operators for all enums.

* Examples
Expand Down Expand Up @@ -712,6 +746,8 @@ struct array {
}
```

* Defined in header `<magic_enum/magic_enum_containers.hpp>`

* STL like array for all enums.

* Examples
Expand Down Expand Up @@ -824,6 +860,8 @@ class bitset {
}
```
* Defined in header `<magic_enum/magic_enum_containers.hpp>`
* STL like bitset for all enums.
* Examples
Expand Down Expand Up @@ -975,6 +1013,8 @@ class set {
}
```
* Defined in header `<magic_enum/magic_enum_containers.hpp>`
* STL like set for all enums.
* Examples
Expand Down

0 comments on commit 06741ec

Please sign in to comment.