%PDF- %PDF-
Direktori : /proc/thread-self/root/lib/python3/dist-packages/pythran/pythonic/include/builtins/ |
Current File : //proc/thread-self/root/lib/python3/dist-packages/pythran/pythonic/include/builtins/range.hpp |
#ifndef PYTHONIC_INCLUDE_BUILTIN_RANGE_HPP #define PYTHONIC_INCLUDE_BUILTIN_RANGE_HPP #include "pythonic/include/types/list.hpp" #include "pythonic/include/utils/functor.hpp" PYTHONIC_NS_BEGIN namespace builtins { namespace { struct range_iterator : std::iterator<std::random_access_iterator_tag, long, ptrdiff_t, long *, long /*no ref here*/> { long value_; long step_; range_iterator() = default; range_iterator(long v, long s); long operator*() const; range_iterator &operator++(); range_iterator &operator--(); range_iterator operator++(int); range_iterator operator--(int); range_iterator &operator+=(long n); range_iterator &operator-=(long n); bool operator!=(range_iterator const &other) const; bool operator==(range_iterator const &other) const; bool operator<(range_iterator const &other) const; long operator-(range_iterator const &other) const; }; } struct range { using value_type = long; using iterator = range_iterator; using const_iterator = range_iterator; using reverse_iterator = range_iterator; using const_reverse_iterator = range_iterator; using dtype = long; static constexpr long value = 1; long begin_; long end_; long step_; range() = default; range(long b, long e, long s = 1); range(long e); iterator begin() const; iterator end() const; reverse_iterator rbegin() const; reverse_iterator rend() const; long size() const; long operator[](long i) const; }; DEFINE_FUNCTOR(pythonic::builtins, range); } PYTHONIC_NS_END namespace std { template <size_t I> long get(pythonic::builtins::range const &); template <size_t I> struct tuple_element<I, pythonic::builtins::range> { typedef long type; }; } /* type inference stuff {*/ #include "pythonic/include/types/combined.hpp" template <class E> struct __combined<E, pythonic::builtins::range> { using type = typename __combined<E, container<long>>::type; }; #endif