{-# LINE 1 "lib/CPython/Types/Iterator.chs" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
module CPython.Types.Iterator
( SequenceIterator
, sequenceIteratorType
, sequenceIteratorNew
, CallableIterator
, callableIteratorType
, callableIteratorNew
) where
import qualified Foreign.Ptr as C2HSImp
import qualified System.IO.Unsafe as C2HSImp
import CPython.Internal
newtype SequenceIterator = SequenceIterator (ForeignPtr SequenceIterator)
instance Iterator SequenceIterator where
toIterator :: SequenceIterator -> SomeIterator
toIterator = SequenceIterator -> SomeIterator
forall a. Object a => a -> SomeIterator
unsafeCastToIterator
instance Object SequenceIterator where
toObject :: SequenceIterator -> SomeObject
toObject (SequenceIterator x :: ForeignPtr SequenceIterator
x) = ForeignPtr SequenceIterator -> SomeObject
forall a. Object a => ForeignPtr a -> SomeObject
SomeObject ForeignPtr SequenceIterator
x
fromForeignPtr :: ForeignPtr SequenceIterator -> SequenceIterator
fromForeignPtr = ForeignPtr SequenceIterator -> SequenceIterator
SequenceIterator
instance Concrete SequenceIterator where
concreteType :: SequenceIterator -> Type
concreteType _ = Type
sequenceIteratorType
newtype CallableIterator = CallableIterator (ForeignPtr CallableIterator)
instance Iterator CallableIterator where
toIterator :: CallableIterator -> SomeIterator
toIterator = CallableIterator -> SomeIterator
forall a. Object a => a -> SomeIterator
unsafeCastToIterator
instance Object CallableIterator where
toObject :: CallableIterator -> SomeObject
toObject (CallableIterator x :: ForeignPtr CallableIterator
x) = ForeignPtr CallableIterator -> SomeObject
forall a. Object a => ForeignPtr a -> SomeObject
SomeObject ForeignPtr CallableIterator
x
fromForeignPtr :: ForeignPtr CallableIterator -> CallableIterator
fromForeignPtr = ForeignPtr CallableIterator -> CallableIterator
CallableIterator
instance Concrete CallableIterator where
concreteType :: CallableIterator -> Type
concreteType _ = Type
callableIteratorType
callableIteratorType :: Type
sequenceIteratorType :: (Type)
sequenceIteratorType =
C2HSImp.unsafePerformIO $
sequenceIteratorType'_ >>= \res ->
peekStaticObject res >>= \res' ->
return (res')
{-# LINE 57 "lib/CPython/Types/Iterator.chs" #-}
callableIteratorType :: (Type)
callableIteratorType =
C2HSImp.unsafePerformIO $
callableIteratorType'_ >>= \res ->
peekStaticObject res >>= \res' ->
return (res')
{-# LINE 60 "lib/CPython/Types/Iterator.chs" #-}
sequenceIteratorNew :: Sequence seq => (seq) -> IO ((SequenceIterator))
sequenceIteratorNew a1 =
withObject a1 $ \a1' ->
sequenceIteratorNew'_ a1' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 68 "lib/CPython/Types/Iterator.chs" #-}
callableIteratorNew :: (Object callable, Object sentinel) => (callable) -> (sentinel) -> IO ((CallableIterator))
callableIteratorNew :: callable -> sentinel -> IO CallableIterator
callableIteratorNew a1 :: callable
a1 a2 :: sentinel
a2 =
callable -> (Ptr () -> IO CallableIterator) -> IO CallableIterator
forall obj a b. Object obj => obj -> (Ptr a -> IO b) -> IO b
withObject callable
a1 ((Ptr () -> IO CallableIterator) -> IO CallableIterator)
-> (Ptr () -> IO CallableIterator) -> IO CallableIterator
forall a b. (a -> b) -> a -> b
$ \a1' :: Ptr ()
a1' ->
sentinel -> (Ptr () -> IO CallableIterator) -> IO CallableIterator
forall obj a b. Object obj => obj -> (Ptr a -> IO b) -> IO b
withObject sentinel
a2 ((Ptr () -> IO CallableIterator) -> IO CallableIterator)
-> (Ptr () -> IO CallableIterator) -> IO CallableIterator
forall a b. (a -> b) -> a -> b
$ \a2' :: Ptr ()
a2' ->
Ptr () -> Ptr () -> IO (Ptr ())
callableIteratorNew'_ Ptr ()
a1' Ptr ()
a2' IO (Ptr ())
-> (Ptr () -> IO CallableIterator) -> IO CallableIterator
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: Ptr ()
res ->
Ptr () -> IO CallableIterator
forall obj a. Object obj => Ptr a -> IO obj
stealObject Ptr ()
res IO CallableIterator
-> (CallableIterator -> IO CallableIterator) -> IO CallableIterator
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res' :: CallableIterator
res' ->
CallableIterator -> IO CallableIterator
forall (m :: * -> *) a. Monad m => a -> m a
return (CallableIterator
res')
{-# LINE 78 "lib/CPython/Types/Iterator.chs" #-}
foreign import ccall unsafe "CPython/Types/Iterator.chs.h hscpython_PySeqIter_Type"
sequenceIteratorType'_ :: (IO (C2HSImp.Ptr ()))
foreign import ccall unsafe "CPython/Types/Iterator.chs.h hscpython_PyCallIter_Type"
callableIteratorType'_ :: (IO (C2HSImp.Ptr ()))
foreign import ccall safe "CPython/Types/Iterator.chs.h PySeqIter_New"
sequenceIteratorNew'_ :: ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))
foreign import ccall safe "CPython/Types/Iterator.chs.h PyCallIter_New"
callableIteratorNew'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))