Returned by reverseIterator.
pub fn ReverseIterator(comptime T: type) type
pub fn ReverseIterator(comptime T: type) type {
const ptr = switch (@typeInfo(T)) {
.pointer => |ptr| ptr,
else => @compileError("expected slice or pointer to array, found '" ++ @typeName(T) ++ "'"),
};
switch (ptr.size) {
.slice => {},
.one => if (@typeInfo(ptr.child) != .array) @compileError("expected slice or pointer to array, found '" ++ @typeName(T) ++ "'"),
.many, .c => @compileError("expected slice or pointer to array, found '" ++ @typeName(T) ++ "'"),
}
const Element = std.meta.Elem(T);
const Pointer = @Pointer(.many, ptr.attrs, Element, std.meta.sentinel(T));
const ElementPointer = @Pointer(.one, ptr.attrs, Element, null);
return struct {
ptr: Pointer,
index: usize,
pub fn next(self: *@This()) ?Element {
if (self.index == 0) return null;
self.index -= 1;
return self.ptr[self.index];
}
pub fn nextPtr(self: *@This()) ?ElementPointer {
if (self.index == 0) return null;
self.index -= 1;
return &self.ptr[self.index];
}
};
}