// Description: Set concept
#ifndef PASTELSYS_SET_CONCEPT_H
#define PASTELSYS_SET_CONCEPT_H
#include "pastel/sys/mytypes.h"
#include "pastel/sys/type_traits/remove_cvref.h"
#include <range/v3/range/concepts.hpp>
namespace Pastel
{
template <typename T>
concept Range_Concept = ranges::forward_range<T>;
template <Range_Concept Range>
using Range_Iterator =
typename ranges::iterator_t<Range>;
template <Range_Concept Range>
using Range_Value = ranges::range_value_t<Range>;
template <Range_Concept Range>
bool isEmptyRange(Range&& set)
{
return ranges::empty(set);
}
template <ranges::sized_range Range>
integer rangeSize(Range&& set)
{
return ranges::size(std::forward<Range>(set));
}
template <Range_Concept Range>
integer rangeDistance(Range&& set)
{
return ranges::distance(std::forward<Range>(set));
}
template <typename T, typename E>
concept RangeOf =
Range_Concept<T> &&
std::is_same_v<Range_Value<T>, E>;
}
#endif