Directory renaming. traits -> meta. cpputils_concepts.hpp -> traits.hpp · alessandro90/cpputils@6ebd1bf · GitHub
Skip to content

Commit 6ebd1bf

Browse files
committed
Directory renaming. traits -> meta. cpputils_concepts.hpp -> traits.hpp
1 parent ed3a082 commit 6ebd1bf

13 files changed

Lines changed: 273 additions & 206 deletions

File tree

‎README.md‎

Lines changed: 1 addition & 1 deletion

‎src/include/cpputils/cpputils.hpp‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
#include "types/number.hpp"
1111
#include "types/static_string.hpp"
1212

13-
#include "traits/cpputils_concepts.hpp"
14-
#include "traits/is_specialization_of.hpp"
15-
#include "traits/typelist.hpp"
13+
#include "meta/traits.hpp"
14+
#include "meta/typelist.hpp"
15+
1616

1717
#endif

‎src/include/cpputils/functional/enumerate.hpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#include "../internal/adaptors.hpp"
55
#include "../internal/iter_utils.hpp"
6-
#include "../traits/cpputils_concepts.hpp"
6+
#include "../meta/traits.hpp"
77
#include <concepts>
88
#include <cstddef>
99
#include <cstdint>

‎src/include/cpputils/functional/expected.hpp‎

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef CPPUTILS_EXPECTED_HPP
22
#define CPPUTILS_EXPECTED_HPP
33

4-
#include "../traits/is_specialization_of.hpp"
4+
#include "../meta/traits.hpp"
55
#include <concepts>
66
#include <exception>
77
#include <functional>
@@ -33,9 +33,9 @@ struct bad_expected_access_throw_policy {
3333

3434
template <typename Policy>
3535
concept expected_bad_access_policy = requires {
36-
Policy::bad_value_access();
37-
Policy::bad_error_access();
38-
};
36+
Policy::bad_value_access();
37+
Policy::bad_error_access();
38+
};
3939

4040
struct flag_value_t {};
4141
struct flag_error_t {};
@@ -46,7 +46,7 @@ inline constexpr auto flag_error = flag_error_t{};
4646
namespace detail {
4747

4848
template <template <typename> typename Condition, typename A, typename B>
49-
inline constexpr auto both_types_v = Condition<A>::value &&Condition<B>::value;
49+
inline constexpr auto both_types_v = Condition<A>::value && Condition<B>::value;
5050

5151
template <template <typename> typename Condition, typename A, typename B>
5252
inline constexpr auto one_of_v = Condition<A>::value || Condition<B>::value;
@@ -234,17 +234,17 @@ namespace detail {
234234
constexpr expected_data() = delete;
235235

236236
template <expected_arg_constructible<value_t> Arg>
237-
constexpr expected_data(flag_value_t, Arg &&v) requires(!is_specialization_v<Arg, expected_data>)
237+
constexpr expected_data(flag_value_t, Arg &&v) requires (!is_specialization_v<Arg, expected_data>)
238238
: m_val{get_arg(FWD(v))}
239239
, has_val{true} {}
240240

241241
template <expected_arg_constructible<error_t> Arg>
242-
constexpr expected_data(flag_error_t, Arg &&v) requires(!is_specialization_v<Arg, expected_data>)
242+
constexpr expected_data(flag_error_t, Arg &&v) requires (!is_specialization_v<Arg, expected_data>)
243243
: m_err{get_arg(FWD(v))} {}
244244

245245
constexpr expected_data(flag_value_t, std::in_place_t, auto &&...args) requires std::negation_v<std::is_pointer<value_t>> && std::constructible_from<value_t, decltype(args)...>
246-
: m_val{FWD(args)...},
247-
has_val{true} {}
246+
: m_val{FWD(args)...}
247+
, has_val{true} {}
248248

249249
constexpr expected_data(flag_error_t, std::in_place_t, auto &&...args) requires std::negation_v<std::is_pointer<error_t>> && std::constructible_from<error_t, decltype(args)...>
250250
: m_err{FWD(args)...} {}
@@ -264,7 +264,8 @@ namespace detail {
264264
constexpr expected_data(expected_data const &) requires both_types_v<std::is_trivially_copy_constructible, value_t, error_t>
265265
= default;
266266

267-
constexpr expected_data(expected_data const &other) requires has_non_default_copy_ctor_v<value_t, error_t> {
267+
constexpr expected_data(expected_data const &other) requires has_non_default_copy_ctor_v<value_t, error_t>
268+
{
268269
expected_resource_helper::initialize(*this, other);
269270
}
270271

@@ -276,32 +277,35 @@ namespace detail {
276277
constexpr expected_data(expected_data &&other) noexcept(
277278
noexcept(
278279
expected_resource_helper::initialize(std::declval<expected_data &>(),
279-
std::declval<std::remove_cvref_t<decltype(other)>>()))) requires has_non_default_move_ctor_v<value_t, error_t> {
280+
std::declval<std::remove_cvref_t<decltype(other)>>()))) requires has_non_default_move_ctor_v<value_t, error_t>
281+
{
280282
expected_resource_helper::initialize(*this, std::move(other));
281283
}
282284

283285
constexpr expected_data &operator=(expected_data const &) = delete;
284286

285287
constexpr expected_data &operator=(expected_data const &) requires both_types_v<std::is_trivially_copy_assignable, value_t, error_t> //
286-
&& both_types_v<std::is_trivially_destructible, value_t, error_t> //
287-
&& both_types_v<std::is_trivially_copy_constructible, value_t, error_t>
288+
&& both_types_v<std::is_trivially_destructible, value_t, error_t> //
289+
&& both_types_v<std::is_trivially_copy_constructible, value_t, error_t>
288290
= default;
289291

290-
constexpr expected_data &operator=(expected_data const &rhs) requires has_non_default_copy_assign_v<value_t, error_t> { // NOLINT(cert-oop54-cpp)
292+
constexpr expected_data &operator=(expected_data const &rhs) requires has_non_default_copy_assign_v<value_t, error_t>
293+
{ // NOLINT(cert-oop54-cpp)
291294
expected_resource_helper::copy(*this, rhs);
292295
return *this;
293296
}
294297

295298
constexpr expected_data &operator=(expected_data &&) noexcept = delete;
296299

297300
constexpr expected_data &operator=(expected_data &&) noexcept requires both_types_v<std::is_trivially_move_assignable, value_t, error_t> //
298-
&& both_types_v<std::is_trivially_destructible, value_t, error_t> //
299-
&& both_types_v<std::is_trivially_move_constructible, value_t, error_t>
301+
&& both_types_v<std::is_trivially_destructible, value_t, error_t> //
302+
&& both_types_v<std::is_trivially_move_constructible, value_t, error_t>
300303
= default;
301304

302305
constexpr expected_data &operator=(expected_data &&rhs) noexcept(
303306
noexcept(expected_resource_helper::copy(std::declval<expected_data &>(),
304-
std::declval<std::remove_cvref_t<decltype(rhs)>>))) requires has_non_default_move_assign_v<value_t, error_t> {
307+
std::declval<std::remove_cvref_t<decltype(rhs)>>))) requires has_non_default_move_assign_v<value_t, error_t>
308+
{
305309
expected_resource_helper::copy(*this, std::move(rhs));
306310
return *this;
307311
}
@@ -679,7 +683,8 @@ class expected
679683
}
680684

681685
static constexpr auto transform_error_impl(auto &&e, std::invocable<decltype(FWD(e).error_unchecked())> auto &&f) //
682-
requires is_specialization_v<std::invoke_result_t<decltype(f), decltype(FWD(e).error_unchecked())>, expected> {
686+
requires is_specialization_v<std::invoke_result_t<decltype(f), decltype(FWD(e).error_unchecked())>, expected>
687+
{
683688
using ret_t = std::invoke_result_t<decltype(f), decltype(FWD(e).error_unchecked())>;
684689
static_assert(std::is_same_v<typename base_expected::value_t, typename ret_t::value_t>);
685690
if (!e) { return std::invoke(FWD(f), FWD(e).error_unchecked()); }
@@ -700,7 +705,8 @@ class expected
700705
}
701706

702707
static constexpr auto value_or_else_impl(auto &&e, std::invocable<decltype(FWD(e).error_unchecked())> auto &&alternative) //
703-
requires std::is_convertible_v<decltype(FWD(e).value_unchecked()), decltype(std::invoke(FWD(alternative), FWD(e).error_unchecked()))> {
708+
requires std::is_convertible_v<decltype(FWD(e).value_unchecked()), decltype(std::invoke(FWD(alternative), FWD(e).error_unchecked()))>
709+
{
704710
if (e) { return FWD(e).value_unchecked(); }
705711
return std::invoke(FWD(alternative), FWD(e).error_unchecked());
706712
}
@@ -712,7 +718,8 @@ class expected
712718
}
713719

714720
static constexpr auto error_or_else_impl(auto &&e, std::invocable<decltype(FWD(e).value_unchecked())> auto &&alternative) //
715-
requires std::is_convertible_v<decltype(FWD(e).error_unchecked()), decltype(std::invoke(FWD(alternative), FWD(e).value_unchecked()))> {
721+
requires std::is_convertible_v<decltype(FWD(e).error_unchecked()), decltype(std::invoke(FWD(alternative), FWD(e).value_unchecked()))>
722+
{
716723
if (!e) { return FWD(e).error_unchecked(); }
717724
return std::invoke(FWD(alternative), FWD(e).value_unchecked());
718725
}

‎src/include/cpputils/functional/opt_ext.hpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
#ifndef CPPUTILS_OPTIONAL_EXTENSION_HPP
22
#define CPPUTILS_OPTIONAL_EXTENSION_HPP
33

4-
#include "../traits/cpputils_concepts.hpp"
5-
#include "../traits/is_specialization_of.hpp"
4+
#include "../meta/traits.hpp"
65
#include "expected.hpp"
76
#include <functional>
87
#include <optional>
98
#include <type_traits>
109
#include <utility>
1110

11+
1212
// Utility macros. #undef'd at end of file
1313
// NOLINTNEXTLINE
1414
#define FWD(x) std::forward<decltype(x)>(x)
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#ifndef CPPUTILS_TRAITS_HPP
2+
#define CPPUTILS_TRAITS_HPP
3+
4+
#include <concepts>
5+
#include <type_traits>
6+
7+
8+
namespace cpputils {
9+
namespace detail {
10+
template <typename, template <typename...> typename>
11+
struct is_specialization : public std::false_type {};
12+
13+
template <typename... Ts, template <typename...> typename U>
14+
struct is_specialization<U<Ts...>, U> : public std::true_type {};
15+
} // namespace detail
16+
17+
template <typename T, template <typename...> typename U>
18+
struct is_specialization
19+
: public detail::is_specialization<std::remove_cvref_t<T>, U> {};
20+
21+
template <typename T, template <typename...> typename U>
22+
inline constexpr auto is_specialization_v = is_specialization<T, U>::value;
23+
24+
template <typename T, template <typename...> typename Target>
25+
concept an = is_specialization_v<std::remove_cvref_t<T>, Target>;
26+
27+
namespace detail {
28+
template <typename T, typename Q>
29+
struct is_same_underlying_type
30+
: std::conditional_t<std::is_same_v<std::remove_cvref_t<T>, std::remove_cvref_t<Q>>,
31+
std::true_type,
32+
std::false_type> {};
33+
34+
template <typename T, typename Q>
35+
concept same_underlying_type = is_same_underlying_type<T, Q>::value;
36+
} // namespace detail
37+
38+
template <typename T>
39+
concept minimal_incrementable =
40+
requires (T t) {
41+
{ ++t } -> detail::same_underlying_type<T>;
42+
};
43+
44+
namespace tl {
45+
template <template <typename...> typename Target, typename... Args>
46+
concept specializable =
47+
requires () {
48+
typename Target<Args...>;
49+
};
50+
51+
template <typename T>
52+
concept predicate =
53+
requires (T) {
54+
{ T::value } -> std::convertible_to<bool>;
55+
};
56+
57+
template <typename T>
58+
concept transformation =
59+
requires () {
60+
typename T::type;
61+
};
62+
} // namespace tl
63+
} // namespace cpputils
64+
65+
66+
#endif
Lines changed: 29 additions & 19 deletions

0 commit comments

Comments
 (0)