Skip to content

Commit 2827cb9

Browse files
author
Alexandre Hoffmann
committed
pre-commit added
1 parent 39ceaa7 commit 2827cb9

File tree

3 files changed

+44
-41
lines changed

3 files changed

+44
-41
lines changed

include/xtensor/views/xslice.hpp

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,8 @@ namespace xt
6262

6363
template <class S>
6464
using is_xslice = std::is_base_of<xslice<S>, S>;
65-
66-
template <class E, class R = void>
67-
using disable_xslice = typename std::enable_if<!is_xslice<E>::value, R>::type;
65+
66+
template<class S> concept xslice_concept = is_xslice<S>::value;
6867

6968
template <class... E>
7069
using has_xslice = std::disjunction<is_xslice<E>...>;
@@ -850,60 +849,64 @@ namespace xt
850849
******************************************************/
851850

852851
template <class S>
853-
inline disable_xslice<S, std::size_t> get_size(const S&) noexcept
854-
{
855-
return 1;
856-
}
857-
858-
template <class S>
859-
inline auto get_size(const xslice<S>& slice) noexcept
852+
inline std::size_t get_size(const S& slice) noexcept
860853
{
861-
return slice.derived_cast().size();
854+
if constexpr (is_xslice<S>::value)
855+
{
856+
return 1;
857+
}
858+
else
859+
{
860+
return slice.size();
861+
}
862862
}
863863

864864
/*******************************************************
865865
* homogeneous step_size for integral types and slices *
866866
*******************************************************/
867867

868868
template <class S>
869-
inline disable_xslice<S, std::size_t> step_size(const S&, std::size_t) noexcept
870-
{
871-
return 0;
872-
}
873-
874-
template <class S>
875-
inline disable_xslice<S, std::size_t> step_size(const S&, std::size_t, std::size_t) noexcept
876-
{
877-
return 0;
878-
}
879-
880-
template <class S>
881-
inline auto step_size(const xslice<S>& slice, std::size_t idx) noexcept
869+
inline std::size_t step_size(const S& slice, std::size_t idx) noexcept
882870
{
883-
return slice.derived_cast().step_size(idx);
871+
if constexpr (is_xslice<S>::value)
872+
{
873+
return slice.step_size(idx);
874+
}
875+
else
876+
{
877+
return 0;
878+
}
884879
}
885880

886881
template <class S>
887-
inline auto step_size(const xslice<S>& slice, std::size_t idx, std::size_t n) noexcept
882+
inline std::size_t step_size(const xslice<S>& slice, std::size_t idx, std::size_t n) noexcept
888883
{
889-
return slice.derived_cast().step_size(idx, n);
884+
if constexpr (is_xslice<S>::value)
885+
{
886+
return slice.step_size(idx, n);
887+
}
888+
else
889+
{
890+
return 0;
891+
}
890892
}
891893

892894
/*********************************************
893895
* homogeneous value for integral and slices *
894896
*********************************************/
895897

896-
template <class S, class I>
897-
inline disable_xslice<S, std::size_t> value(const S& s, I) noexcept
898-
{
899-
return static_cast<std::size_t>(s);
900-
}
901-
902898
template <class S, class I>
903899
inline auto value(const xslice<S>& slice, I i) noexcept
904900
{
905-
using ST = typename S::size_type;
906-
return slice.derived_cast()(static_cast<ST>(i));
901+
if constexpr (is_xslice<S>::value)
902+
{
903+
using ST = typename S::size_type;
904+
return slice(static_cast<ST>(i));
905+
}
906+
else
907+
{
908+
return static_cast<std::size_t>(slice);
909+
}
907910
}
908911

909912
/****************************************

include/xtensor/views/xview.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -696,8 +696,8 @@ namespace xt
696696
template <typename std::decay_t<CT>::size_type I, class T, class Arg, class... Args>
697697
size_type sliced_access(const xslice<T>& slice, Arg arg, Args... args) const;
698698

699-
template <typename std::decay_t<CT>::size_type I, class T, class... Args>
700-
disable_xslice<T, size_type> sliced_access(const T& squeeze, Args...) const;
699+
template <typename std::decay_t<CT>::size_type I, class T, class... Args> requires (!xslice_concept<T>)
700+
size_type sliced_access(const T& squeeze, Args...) const;
701701

702702
using base_index_type = xindex_type_t<typename xexpression_type::shape_type>;
703703

@@ -1627,8 +1627,8 @@ namespace xt
16271627
}
16281628

16291629
template <class CT, class... S>
1630-
template <typename std::decay_t<CT>::size_type I, class T, class... Args>
1631-
inline auto xview<CT, S...>::sliced_access(const T& squeeze, Args...) const -> disable_xslice<T, size_type>
1630+
template <typename std::decay_t<CT>::size_type I, class T, class... Args> requires (!xslice_concept<T>)
1631+
inline auto xview<CT, S...>::sliced_access(const T& squeeze, Args...) const -> size_type
16321632
{
16331633
return static_cast<size_type>(squeeze);
16341634
}

include/xtensor/views/xview_utils.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ namespace xt
4747
template <class... S>
4848
constexpr std::size_t newaxis_skip(std::size_t i);
4949

50-
template <class S, class It>
51-
inline disable_xslice<S, std::size_t> get_slice_value(const S& s, It&) noexcept
50+
template <class S, class It> requires (!xslice_concept<S>)
51+
inline std::size_t get_slice_value(const S& s, It&) noexcept
5252
{
5353
return static_cast<std::size_t>(s);
5454
}

0 commit comments

Comments
 (0)