5 #ifndef VCCC_RANGES_DATA_HPP 
    6 #define VCCC_RANGES_DATA_HPP 
   23 using vccc::detail::return_category;
 
   26 struct data_member_check_2 : std::false_type {
 
   27   using category = return_category<0>;
 
   30 struct data_member_check_2<P*> : std::is_object<P> {
 
   31   using category = return_category<1, P*>;
 
   34 template<
typename T, 
typename = 
void>
 
   35 struct data_member_check : std::false_type {
 
   36   using category = return_category<0>;
 
   40     : data_member_check_2<decltype( vccc_decay_copy(std::declval<T>().data()) )> {};
 
   43 template<
typename T, 
typename = 
void>
 
   44 struct data_ranges_begin_check : std::false_type {
 
   45   using category = return_category<0>;
 
   48 struct data_ranges_begin_check<T, 
void_t<decltype( ranges::
begin(std::declval<T>()) )>>
 
   49     : contiguous_iterator<decltype( ranges::begin(std::declval<T>()) )>
 
   51   using category = return_category<2, decltype( vccc::to_address( ranges::begin(std::declval<T>()) ) )>;
 
   57           data_member_check<T>::value, typename data_member_check<T>::category,
 
   59           data_ranges_begin_check<T>::value, typename data_ranges_begin_check<T>::category,
 
   63 struct data_niebloid {
 
   64   template<
typename T, std::enable_if_t<disjunction<
 
   65       std::is_lvalue_reference<T&&>,
 
   66       ranges::enable_borrowed_range<remove_cvref_t<T>>
 
   68   constexpr 
typename data_category<T&&>::return_type
 
   69   operator()(T&& t)
 const {
 
   70     return (*
this)(std::forward<T>(t), data_category<T&&>{});
 
   74   template<
typename T, 
typename R>
 
   75   constexpr R operator()(T&& t, return_category<1, R>)
 const {
 
   79   template<
typename T, 
typename R>
 
   80   constexpr R operator()(T&& t, return_category<2, R>)
 const {
 
  108 using namespace niebloid;
 
#define vccc_decay_copy(x)
Definition: decay_copy.hpp:12
 
constexpr T * to_address(T *p) noexcept
Definition: to_address.hpp:37
 
constexpr VCCC_INLINE_OR_STATIC detail::data_niebloid data
obtains a pointer to the beginning of a contiguous range
Definition: data.hpp:103
 
constexpr VCCC_INLINE_OR_STATIC detail::begin_niebloid begin
returns an iterator to the beginning of a range
Definition: begin.hpp:116
 
#define VCCC_INLINE_OR_STATIC
Definition: inline_or_static.hpp:9
 
Definition: matrix.hpp:495
 
Definition: directory.h:12
 
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35