Objects/sliceobjectImpl

Source   Edit  

Types

Indices[T] = tuple[start, stop, stride: T]
Source   Edit  
ToNimSliceState = enum
  tnssInvalidStep = -1,     ## step is not 1 or -1
  tnssOk, tnssOverflow       ## overflow in start, stop or step
Source   Edit  

Procs

proc indices(slice: PySliceObject; size: int): Indices[int] {....raises: [],
    tags: [RootEffect, WriteIOEffect], forbids: [].}

PySlice_Unpack and adjust_slice_indexes

result is clamped, as CPython does.

Source   Edit  
proc indices(slice: PySliceObject; size: PyIntObject | int;
             res: var Indices[int]): bool
returns false on overflow Source   Edit  
proc indices(slice: PySliceObject; size: PyIntObject): Indices[PyIntObject] {.
    ...raises: [], tags: [RootEffect], forbids: [].}
Source   Edit  
proc indicesPySliceObjectMethod(selfNoCast: PyObject;
                                args: openArray[PyObject] = @[];
                                kwargs: PyKwArgType = nil): PyObject {.cdecl,
    ...raises: [], tags: [RootEffect], forbids: [].}
Source   Edit  
proc newPySliceObjectMagic(args: openArray[PyObject] = @[];
                           kwargs: PyKwArgType = nil): PyObject {.cdecl,
    ...raises: [], tags: [RootEffect], forbids: [].}
Source   Edit  
proc reprPySliceObjectMagic(selfNoCast: PyObject): PyObject {.cdecl, ...raises: [],
    tags: [RootEffect], forbids: [].}
Source   Edit  
proc startAsInt[I: PyIntObject | int](slice: PySliceObject; size: I): I
Source   Edit  
proc stepAsInt(slice: PySliceObject): int {....raises: [],
    tags: [RootEffect, WriteIOEffect], forbids: [].}
Source   Edit  
proc stepAsLong(slice: PySliceObject): PyIntObject {....raises: [], tags: [],
    forbids: [].}
Source   Edit  
proc stopAsInt[I: PyIntObject | int](slice: PySliceObject; size: I): I
Source   Edit  
proc toNimSlice(slice: PySliceObject; size: PyIntObject | int;
                res: var Slice[int]): ToNimSliceState
Source   Edit  
proc toNimSlice(tup: Indices[int]; size: int; res: var Slice[int]): bool {.
    ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc toNimSlice(tup: Indices[PyIntObject]; size: PyIntObject | int;
                res: var Slice[int]): ToNimSliceState
Source   Edit  

Methods

method `$`(self: PySliceObject): string {....raises: [], tags: [RootEffect],
    forbids: [].}
Source   Edit  

Iterators

iterator iterInt(ind: Indices[int]): int {....raises: [], tags: [], forbids: [].}
Source   Edit