#iterator #data-structures #algorithm


This library contains different iteration data structures for either iterating or for shifting iteratively forward and backward

1 unstable release

0.3.3 Jun 7, 2023
0.3.2 Apr 30, 2023
0.3.1 Mar 29, 2023
0.3.0 Mar 29, 2023

#775 in Algorithms

Download history 93/week @ 2023-05-30 147/week @ 2023-06-06 171/week @ 2023-06-13 191/week @ 2023-06-20 159/week @ 2023-06-27 223/week @ 2023-07-04 194/week @ 2023-07-11 162/week @ 2023-07-18 172/week @ 2023-07-25 158/week @ 2023-08-01 152/week @ 2023-08-08 148/week @ 2023-08-15 151/week @ 2023-08-22 163/week @ 2023-08-29 138/week @ 2023-09-05 132/week @ 2023-09-12

605 downloads per month


11K SLoC


This crate contains useful, generic, commonly needed functionality, data structures, and algorithms for iterating sequentially forward and backward via "shifting". These "shifters" allow for controlled traversal of tree-like data structures in a manner that permits easier detection of fast-failing scenarios, rather than checking collections of items.



  • SegmentPermutationShifter
    • Transforms unpositioned line segments into localized line segments
  • IndexShifter
    • Traverses a tree-like structure of items, indexing over them
  • ScalingSquareBreadthFirstSearchShifter
    • Progressively shifts over all possible depths of the internal tree of integers, only permitting reaching deeper children after first iterating over all permutations of children closer to the root in a square-like pattern
  • ShiftingSquareBreadthFirstSearchShifter
    • Similar to the ScalingSquareBreadthFirstSearchShifter, but the integers are now the items at the respective index
  • HyperGraphClicheShifter
    • Returns the fully connected cliche graphs as they exist in the provided hypergraph, but each stateful node is provided singularly as the shifter is traversed over


  • BinaryDensityIncrementer
    • Returns a collection of boolean values such that each subsequent iteration increases the total number of ones progressively starting from having zero true values to having all true values
  • BinaryValueIncrementer
    • Returns the binary representation of all integers from zero to the provided maximum power of two based on the provided length
  • LimitedIncrementer
    • A wrapper over another incrementer, only permitting a certain number of iterations as provided to the constructor
  • RoundRobinIncrementer
    • A wrapper over other incrementers that traverses around to each incrementer internally, giving each a chance to return a sequence of items
  • ShifterIncrementer
    • A wrapper over a shifter that traverses iteratively in a depth-first search pattern
  • ShiftingCellGroupDependencyIncrementer
    • A rather complex incrementer that compares groups of cell (pixels) to each other, disallowing overlaps (specific and general), and ensuring adjacency between non-wall cell groups and wall cell groups


  • PixelBoardRandomizer
    • When provided a PixelBoard, it randomizes where the pixels (cell groups) are located while avoiding overlap and maintaining adjacency between detected cell groups


Coming soon


None (at the moment)


~32K SLoC