Skip to content

Commit

Permalink
Use std::variant
Browse files Browse the repository at this point in the history
  • Loading branch information
cpreh committed Dec 8, 2018
1 parent 3a9ac3b commit 2d848b1
Show file tree
Hide file tree
Showing 30 changed files with 394 additions and 1,535 deletions.
15 changes: 4 additions & 11 deletions doc/CMakeLists.txt
Expand Up @@ -638,7 +638,6 @@ set(
libs/core/include/fcppt/cyclic_iterator_impl.hpp
libs/core/include/fcppt/default_deleter.hpp
libs/core/include/fcppt/default_deleter_fwd.hpp
libs/core/include/fcppt/detail/call_destructor.hpp
libs/core/include/fcppt/detail/char_type.hpp
libs/core/include/fcppt/detail/check_cpp.hpp
libs/core/include/fcppt/detail/const.hpp
Expand All @@ -652,7 +651,6 @@ set(
libs/core/include/fcppt/detail/move_if_rvalue.hpp
libs/core/include/fcppt/detail/move_iterator_if_rvalue.hpp
libs/core/include/fcppt/detail/noncopyable.hpp
libs/core/include/fcppt/detail/placement_new.hpp
libs/core/include/fcppt/detail/strong_typedef_cast.hpp
libs/core/include/fcppt/detail/strong_typedef_tag.hpp
libs/core/include/fcppt/detail/tag_type.hpp
Expand Down Expand Up @@ -1443,19 +1441,16 @@ set(
libs/core/include/fcppt/variant/compare.hpp
libs/core/include/fcppt/variant/comparison.hpp
libs/core/include/fcppt/variant/current_type_name.hpp
libs/core/include/fcppt/variant/detail/apply.hpp
libs/core/include/fcppt/variant/detail/assert_type.hpp
libs/core/include/fcppt/variant/detail/disable_object.hpp
libs/core/include/fcppt/variant/detail/get_exn_impl.hpp
libs/core/include/fcppt/variant/detail/get_unsafe.hpp
libs/core/include/fcppt/variant/detail/index_of.hpp
libs/core/include/fcppt/variant/detail/nothrow_move_assignable.hpp
libs/core/include/fcppt/variant/detail/nothrow_move_constructible.hpp
libs/core/include/fcppt/variant/detail/type_info.hpp
libs/core/include/fcppt/variant/detail/get_unsafe_impl.hpp
libs/core/include/fcppt/variant/detail/has_type.hpp
libs/core/include/fcppt/variant/detail/std_type.hpp
libs/core/include/fcppt/variant/detail/std_type_impl.hpp
libs/core/include/fcppt/variant/detail/types_of.hpp
libs/core/include/fcppt/variant/dynamic_cast.hpp
libs/core/include/fcppt/variant/dynamic_cast_types.hpp
libs/core/include/fcppt/variant/equal.hpp
libs/core/include/fcppt/variant/exception.hpp
libs/core/include/fcppt/variant/exception_fwd.hpp
libs/core/include/fcppt/variant/get_exn.hpp
Expand All @@ -1464,9 +1459,7 @@ set(
libs/core/include/fcppt/variant/invalid_get.hpp
libs/core/include/fcppt/variant/invalid_get_fwd.hpp
libs/core/include/fcppt/variant/is_object.hpp
libs/core/include/fcppt/variant/less.hpp
libs/core/include/fcppt/variant/match.hpp
libs/core/include/fcppt/variant/not_equal.hpp
libs/core/include/fcppt/variant/object.hpp
libs/core/include/fcppt/variant/object_decl.hpp
libs/core/include/fcppt/variant/object_fwd.hpp
Expand Down
15 changes: 4 additions & 11 deletions libs/core/CMakeLists.txt
Expand Up @@ -426,7 +426,6 @@ set(
libs/core/include/fcppt/cyclic_iterator_impl.hpp
libs/core/include/fcppt/default_deleter.hpp
libs/core/include/fcppt/default_deleter_fwd.hpp
libs/core/include/fcppt/detail/call_destructor.hpp
libs/core/include/fcppt/detail/char_type.hpp
libs/core/include/fcppt/detail/check_cpp.hpp
libs/core/include/fcppt/detail/const.hpp
Expand All @@ -440,7 +439,6 @@ set(
libs/core/include/fcppt/detail/move_if_rvalue.hpp
libs/core/include/fcppt/detail/move_iterator_if_rvalue.hpp
libs/core/include/fcppt/detail/noncopyable.hpp
libs/core/include/fcppt/detail/placement_new.hpp
libs/core/include/fcppt/detail/strong_typedef_cast.hpp
libs/core/include/fcppt/detail/strong_typedef_tag.hpp
libs/core/include/fcppt/detail/tag_type.hpp
Expand Down Expand Up @@ -1231,19 +1229,16 @@ set(
libs/core/include/fcppt/variant/compare.hpp
libs/core/include/fcppt/variant/comparison.hpp
libs/core/include/fcppt/variant/current_type_name.hpp
libs/core/include/fcppt/variant/detail/apply.hpp
libs/core/include/fcppt/variant/detail/assert_type.hpp
libs/core/include/fcppt/variant/detail/disable_object.hpp
libs/core/include/fcppt/variant/detail/get_exn_impl.hpp
libs/core/include/fcppt/variant/detail/get_unsafe.hpp
libs/core/include/fcppt/variant/detail/index_of.hpp
libs/core/include/fcppt/variant/detail/nothrow_move_assignable.hpp
libs/core/include/fcppt/variant/detail/nothrow_move_constructible.hpp
libs/core/include/fcppt/variant/detail/type_info.hpp
libs/core/include/fcppt/variant/detail/get_unsafe_impl.hpp
libs/core/include/fcppt/variant/detail/has_type.hpp
libs/core/include/fcppt/variant/detail/std_type.hpp
libs/core/include/fcppt/variant/detail/std_type_impl.hpp
libs/core/include/fcppt/variant/detail/types_of.hpp
libs/core/include/fcppt/variant/dynamic_cast.hpp
libs/core/include/fcppt/variant/dynamic_cast_types.hpp
libs/core/include/fcppt/variant/equal.hpp
libs/core/include/fcppt/variant/exception.hpp
libs/core/include/fcppt/variant/exception_fwd.hpp
libs/core/include/fcppt/variant/get_exn.hpp
Expand All @@ -1252,9 +1247,7 @@ set(
libs/core/include/fcppt/variant/invalid_get.hpp
libs/core/include/fcppt/variant/invalid_get_fwd.hpp
libs/core/include/fcppt/variant/is_object.hpp
libs/core/include/fcppt/variant/less.hpp
libs/core/include/fcppt/variant/match.hpp
libs/core/include/fcppt/variant/not_equal.hpp
libs/core/include/fcppt/variant/object.hpp
libs/core/include/fcppt/variant/object_decl.hpp
libs/core/include/fcppt/variant/object_fwd.hpp
Expand Down
49 changes: 0 additions & 49 deletions libs/core/include/fcppt/detail/placement_new.hpp

This file was deleted.

36 changes: 4 additions & 32 deletions libs/core/include/fcppt/variant/apply.hpp
Expand Up @@ -7,20 +7,14 @@
#ifndef FCPPT_VARIANT_APPLY_HPP_INCLUDED
#define FCPPT_VARIANT_APPLY_HPP_INCLUDED

#include <fcppt/absurd.hpp>
#include <fcppt/move_if_rvalue.hpp>
#include <fcppt/type_traits/remove_cv_ref_t.hpp>
#include <fcppt/variant/is_object.hpp>
#include <fcppt/variant/types_of.hpp>
#include <fcppt/variant/detail/apply.hpp>
#include <fcppt/variant/detail/get_unsafe.hpp>
#include <fcppt/config/external_begin.hpp>
#include <brigand/algorithms/all.hpp>
#include <brigand/sequences/front.hpp>
#include <brigand/sequences/list.hpp>
#include <brigand/types/args.hpp>
#include <tuple>
#include <utility>
#include <variant>
#include <fcppt/config/external_end.hpp>


Expand Down Expand Up @@ -56,34 +50,12 @@ apply(
);

return
fcppt::variant::detail::apply(
std::visit(
_function,
&fcppt::absurd<
decltype(
_function(
fcppt::move_if_rvalue<
Variants
>(
fcppt::variant::detail::get_unsafe<
::brigand::front<
fcppt::variant::types_of<
fcppt::type_traits::remove_cv_ref_t<
Variants
>
>
>
>(
_variants
)
)...
)
)
>,
std::tuple<>{},
std::forward<
fcppt::move_if_rvalue<
Variants
>(
_variants
_variants.impl()
)...
);
}
Expand Down
95 changes: 93 additions & 2 deletions libs/core/include/fcppt/variant/comparison.hpp
Expand Up @@ -7,8 +7,99 @@
#ifndef FCPPT_VARIANT_COMPARISON_HPP_INCLUDED
#define FCPPT_VARIANT_COMPARISON_HPP_INCLUDED

#include <fcppt/variant/equal.hpp>
#include <fcppt/variant/not_equal.hpp>
#include <fcppt/variant/object_impl.hpp>


namespace fcppt
{
namespace variant
{

/**
\brief Compares two variants for equality
\ingroup fcpptvariant
Compares \a _left and \a _right for equality. The two variants are equal if they hold
the same type and the values compare equal. This function requires all possible
types of the variant to be equality comparable.
*/
template<
typename Types
>
bool
operator==(
fcppt::variant::object<
Types
> const &_left,
fcppt::variant::object<
Types
> const &_right
)
{
return
_left.impl()
==
_right.impl();
}

/**
\brief Compares two variants for inequality
\ingroup fcpptvariant
Compares \a _a and \a _b for inequality. Equal to <code>!(_a == _b)</code>.
This function requires all possible types of the variant to be equality
comparable.
*/
template<
typename Types
>
bool
operator!=(
fcppt::variant::object<
Types
> const &_a,
fcppt::variant::object<
Types
> const &_b
)
{
return
!(_a == _b);
}

/**
\brief Tests if one variant is less than another
\ingroup fcpptvariant
Tests if \a _left is less than \a _right. Let val_left be the value stored in
\a _left and val_right the value stored in \a _right. \a _left is less than \a
_right iff <code>(_left.type_index(), val_left)</code> is lexicographically
before <code>(_right.type_index(), val_right)</code>. This also implies that
every type of the variant must be less comparable.
*/
template<
typename Types
>
bool
operator<(
fcppt::variant::object<
Types
> const &_left,
fcppt::variant::object<
Types
> const &_right
)
{
return
_left.impl()
<
_right.impl();
}

}
}

#endif
23 changes: 4 additions & 19 deletions libs/core/include/fcppt/variant/current_type_name.hpp
Expand Up @@ -8,12 +8,10 @@
#define FCPPT_VARIANT_CURRENT_TYPE_NAME_HPP_INCLUDED

#include <fcppt/type_name_from_index.hpp>
#include <fcppt/use.hpp>
#include <fcppt/variant/apply.hpp>
#include <fcppt/variant/object_fwd.hpp>
#include <fcppt/variant/type_info.hpp>
#include <fcppt/config/external_begin.hpp>
#include <string>
#include <typeinfo>
#include <fcppt/config/external_end.hpp>


Expand All @@ -38,23 +36,10 @@ current_type_name(
)
{
return
fcppt::variant::apply(
[](
auto const &_element
fcppt::type_name_from_index(
fcppt::variant::type_info(
_variant
)
{
FCPPT_USE(
_element
);

return
fcppt::type_name_from_index(
typeid(
_element
)
);
},
_variant
);
}

Expand Down

0 comments on commit 2d848b1

Please sign in to comment.