123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #ifndef BOOST_PFR_OPS_FIELDS_HPP
- #define BOOST_PFR_OPS_FIELDS_HPP
- #pragma once
- #include <boost/pfr/detail/config.hpp>
- #include <boost/pfr/core.hpp>
- #include <boost/pfr/detail/functional.hpp>
- namespace boost { namespace pfr {
-
-
-
-
-
- template <class T, class U>
- constexpr bool eq_fields(const T& lhs, const U& rhs) noexcept {
- return detail::binary_visit<detail::equal_impl>(lhs, rhs);
- }
-
-
-
-
-
- template <class T, class U>
- constexpr bool ne_fields(const T& lhs, const U& rhs) noexcept {
- return detail::binary_visit<detail::not_equal_impl>(lhs, rhs);
- }
-
-
-
-
-
- template <class T, class U>
- constexpr bool gt_fields(const T& lhs, const U& rhs) noexcept {
- return detail::binary_visit<detail::greater_impl>(lhs, rhs);
- }
-
-
-
-
-
- template <class T, class U>
- constexpr bool lt_fields(const T& lhs, const U& rhs) noexcept {
- return detail::binary_visit<detail::less_impl>(lhs, rhs);
- }
-
-
-
-
-
- template <class T, class U>
- constexpr bool ge_fields(const T& lhs, const U& rhs) noexcept {
- return detail::binary_visit<detail::greater_equal_impl>(lhs, rhs);
- }
-
-
-
-
-
- template <class T, class U>
- constexpr bool le_fields(const T& lhs, const U& rhs) noexcept {
- return detail::binary_visit<detail::less_equal_impl>(lhs, rhs);
- }
-
-
-
- template <class T>
- std::size_t hash_fields(const T& x) {
- constexpr std::size_t fields_count_val = boost::pfr::detail::fields_count<std::remove_reference_t<T>>();
- #if BOOST_PFR_USE_CPP17 || BOOST_PFR_USE_LOOPHOLE
- return detail::hash_impl<0, fields_count_val>::compute(detail::tie_as_tuple(x));
- #else
- std::size_t result = 0;
- ::boost::pfr::detail::for_each_field_dispatcher(
- x,
- [&result](const auto& lhs) {
-
-
- constexpr std::size_t fields_count_val_lambda = boost::pfr::detail::fields_count<std::remove_reference_t<T>>();
- result = detail::hash_impl<0, fields_count_val_lambda>::compute(lhs);
- },
- detail::make_index_sequence<fields_count_val>{}
- );
- return result;
- #endif
- }
- }}
- #endif
|