#ifndef PYTHONIC_BUILTIN_TUPLE_HPP #define PYTHONIC_BUILTIN_TUPLE_HPP #include "pythonic/include/builtins/tuple.hpp" #include "pythonic/types/dynamic_tuple.hpp" #include "pythonic/types/tuple.hpp" #include "pythonic/utils/functor.hpp" PYTHONIC_NS_BEGIN namespace builtins { template std::tuple tuple(std::tuple const &t) { return t; } template /* this is far from perfect, but how to cope with the difference between python tuples && c++ ones ? */ typename std::enable_if < types::len_of::type>::type>:: value<0, types::dynamic_tuple::type>::type::iterator>::value_type>>::type tuple(Iterable &&i) { return {i.begin(), i.end()}; } template /* specialization if we are capable to statically compute the size of the input */ typename std::enable_if< types::len_of::type>::type>::value >= 0, types::array< typename std::iterator_traits< typename std::remove_cv::type>::type::iterator>::value_type, types::len_of::type>::type>::value>>::type tuple(StaticIterable &&i) { types::array< typename std::iterator_traits< typename std::remove_cv::type>::type::iterator>::value_type, types::len_of::type>::type>::value> res; std::copy(i.begin(), i.end(), res.begin()); return res; } } PYTHONIC_NS_END #endif