Skip to content

Commit

Permalink
temp test concepts
Browse files Browse the repository at this point in the history
  • Loading branch information
PraneethJain committed May 30, 2024
1 parent f51b304 commit 8906b0b
Showing 1 changed file with 25 additions and 24 deletions.
49 changes: 25 additions & 24 deletions include/jlcxx/stl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define JLCXX_STL_HPP

#include <type_traits>
#include <concepts>
#include <valarray>
#include <vector>
#include <deque>
Expand Down Expand Up @@ -257,36 +258,36 @@ struct WrapSet
}
};

template <typename T, typename = void>
struct has_less_than_operator : std::false_type {};
// template <typename T, typename = void>
// struct has_less_than_operator : std::false_type {};

template <typename T>
struct has_less_than_operator<T, std::void_t<decltype(std::declval<T>() < std::declval<T>())>>
: std::true_type {};
// template <typename T>
// struct has_less_than_operator<T, std::void_t<decltype(std::declval<T>() < std::declval<T>())>>
// : std::true_type {};

template <typename T>
constexpr bool has_less_than_operator_v = has_less_than_operator<T>::value;
// template <typename T>
// constexpr bool has_less_than_operator_v = has_less_than_operator<T>::value;

template <typename T, typename = void>
struct is_container : std::false_type {};
// template <typename T, typename = void>
// struct is_container : std::false_type {};

template <typename T>
struct is_container<T, std::void_t<typename T::value_type>> : std::true_type {};
// template <typename T>
// struct is_container<T, std::void_t<typename T::value_type>> : std::true_type {};

template <typename T, typename = void>
struct container_has_less_than_operator : std::false_type {};
// template <typename T, typename = void>
// struct container_has_less_than_operator : std::false_type {};

template <typename T>
struct container_has_less_than_operator<T, std::enable_if_t<is_container<T>::value>>
: std::conditional_t<
has_less_than_operator<typename T::value_type>::value ||
container_has_less_than_operator<typename T::value_type>::value,
std::true_type,
std::false_type> {};
// template <typename T>
// struct container_has_less_than_operator<T, std::enable_if_t<is_container<T>::value>>
// : std::conditional_t<
// has_less_than_operator<typename T::value_type>::value ||
// container_has_less_than_operator<typename T::value_type>::value,
// std::true_type,
// std::false_type> {};

template <typename T>
struct container_has_less_than_operator<T, std::enable_if_t<!is_container<T>::value>>
: has_less_than_operator<T> {};
// template <typename T>
// struct container_has_less_than_operator<T, std::enable_if_t<!is_container<T>::value>>
// : has_less_than_operator<T> {};

template<typename T>
inline void apply_stl(jlcxx::Module& mod)
Expand All @@ -295,7 +296,7 @@ inline void apply_stl(jlcxx::Module& mod)
TypeWrapper1(mod, StlWrappers::instance().valarray).apply<std::valarray<T>>(WrapValArray());
TypeWrapper1(mod, StlWrappers::instance().deque).apply<std::deque<T>>(WrapDeque());
TypeWrapper1(mod, StlWrappers::instance().queue).apply<std::queue<T>>(WrapQueue());
if constexpr(container_has_less_than_operator<T>::value)
if constexpr (std::totally_ordered<T>)
{
TypeWrapper1(mod, StlWrappers::instance().set).apply<std::set<T>>(WrapSet());
}
Expand Down

0 comments on commit 8906b0b

Please sign in to comment.