| Server IP : 217.160.0.212 / Your IP : 216.73.216.141 Web Server : Apache System : Linux www 6.18.51-i1-ampere #1196 SMP Fri Sep 11 20:43:55 CEST 2026 aarch64 User : sws1073854427 ( 1073854427) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /lib/python3/dist-packages/pythran/pythonic/operator_/ |
Upload File : |
#ifndef PYTHONIC_OPERATOR_ITEMGETTER_HPP
#define PYTHONIC_OPERATOR_ITEMGETTER_HPP
#include "pythonic/include/operator_/itemgetter.hpp"
#include "pythonic/utils/functor.hpp"
#include "pythonic/types/tuple.hpp"
#include "pythonic/utils/int_.hpp"
PYTHONIC_NS_BEGIN
namespace operator_
{
itemgetter_return::itemgetter_return(long const &item) : i(item)
{
}
template <class A>
auto itemgetter_return::operator()(A const &a) const -> decltype(a[i])
{
return a[i];
}
itemgetter_return itemgetter(long item)
{
return itemgetter_return(item);
}
template <typename... Types>
itemgetter_tuple_return<Types...>::itemgetter_tuple_return(Types... items)
: items(items...)
{
}
template <typename... Types>
itemgetter_tuple_return<Types...>::itemgetter_tuple_return()
{
}
template <typename... Types>
template <class T, class A, size_t I>
void itemgetter_tuple_return<Types...>::helper(T &t, A const &a,
utils::int_<I>) const
{
std::get<I>(t) = a[std::get<I>(items)];
helper(t, a, utils::int_<I - 1>());
}
template <typename... Types>
template <class T, class A>
void itemgetter_tuple_return<Types...>::helper(T &t, A const &a,
utils::int_<0>) const
{
std::get<0>(t) = a[std::get<0>(items)];
}
template <typename... Types>
template <class A>
auto itemgetter_tuple_return<Types...>::operator()(A const &a) const
-> std::tuple<typename std::remove_cv<typename std::remove_reference<
decltype(a[std::declval<Types>()])>::type>::type...>
{
std::tuple<typename std::remove_cv<typename std::remove_reference<decltype(
a[std::declval<Types>()])>::type>::type...> t;
helper(t, a, utils::int_<sizeof...(Types)-1>());
return t;
}
template <class... L>
itemgetter_tuple_return<long, long, L...>
itemgetter(long const &item1, long const &item2, L... items)
{
return {item1, item2, items...};
}
}
PYTHONIC_NS_END
#endif