Skip to content

Commit

Permalink
InStream is no longer aliased in the latest Zig standard library. Ren…
Browse files Browse the repository at this point in the history
…ame all instances of InStream to Reader

Closes zigimg#49
  • Loading branch information
mlarouche committed Feb 7, 2021
1 parent a82905e commit dca0b36
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 103 deletions.
4 changes: 2 additions & 2 deletions src/format_interface.zig
Expand Up @@ -9,7 +9,7 @@ pub const FormatInterface = struct {
writeForImage: WriteForImageFn,

pub const FormatFn = fn () image.ImageFormat;
pub const FormatDetectFn = fn (inStream: image.ImageInStream, seekStream: image.ImageSeekStream) anyerror!bool;
pub const ReadForImageFn = fn (allocator: *Allocator, inStream: image.ImageInStream, seekStream: image.ImageSeekStream, pixels: *?color.ColorStorage) anyerror!image.ImageInfo;
pub const FormatDetectFn = fn (reader: image.ImageReader, seekStream: image.ImageSeekStream) anyerror!bool;
pub const ReadForImageFn = fn (allocator: *Allocator, reader: image.ImageReader, seekStream: image.ImageSeekStream, pixels: *?color.ColorStorage) anyerror!image.ImageInfo;
pub const WriteForImageFn = fn (allocator: *Allocator, write_stream: image.ImageWriterStream, seek_stream: image.ImageSeekStream, pixels: color.ColorStorage, save_info: image.ImageSaveInfo) anyerror!void;
};
36 changes: 18 additions & 18 deletions src/formats/bmp.zig
Expand Up @@ -2,7 +2,7 @@ const Allocator = std.mem.Allocator;
const File = std.fs.File;
const FormatInterface = @import("../format_interface.zig").FormatInterface;
const ImageFormat = image.ImageFormat;
const ImageInStream = image.ImageInStream;
const ImageReader = image.ImageReader;
const ImageInfo = image.ImageInfo;
const ImageSeekStream = image.ImageSeekStream;
const PixelFormat = @import("../pixel_format.zig").PixelFormat;
Expand Down Expand Up @@ -161,20 +161,20 @@ pub const Bitmap = struct {
return ImageFormat.Bmp;
}

pub fn formatDetect(inStream: ImageInStream, seekStream: ImageSeekStream) !bool {
pub fn formatDetect(reader: ImageReader, seekStream: ImageSeekStream) !bool {
var magicNumberBuffer: [2]u8 = undefined;
_ = try inStream.read(magicNumberBuffer[0..]);
_ = try reader.read(magicNumberBuffer[0..]);
if (std.mem.eql(u8, magicNumberBuffer[0..], BitmapMagicHeader[0..])) {
return true;
}

return false;
}

pub fn readForImage(allocator: *Allocator, inStream: ImageInStream, seekStream: ImageSeekStream, pixels: *?color.ColorStorage) !ImageInfo {
pub fn readForImage(allocator: *Allocator, reader: ImageReader, seekStream: ImageSeekStream, pixels: *?color.ColorStorage) !ImageInfo {
var bmp = Self{};

try bmp.read(allocator, inStream, seekStream, pixels);
try bmp.read(allocator, reader, seekStream, pixels);

var imageInfo = ImageInfo{};
imageInfo.width = @intCast(usize, bmp.width());
Expand Down Expand Up @@ -213,23 +213,23 @@ pub const Bitmap = struct {
};
}

pub fn read(self: *Self, allocator: *Allocator, inStream: ImageInStream, seekStream: ImageSeekStream, pixelsOpt: *?color.ColorStorage) !void {
pub fn read(self: *Self, allocator: *Allocator, reader: ImageReader, seekStream: ImageSeekStream, pixelsOpt: *?color.ColorStorage) !void {
// Read file header
self.fileHeader = try readStructLittle(inStream, BitmapFileHeader);
self.fileHeader = try readStructLittle(reader, BitmapFileHeader);
if (!mem.eql(u8, self.fileHeader.magicHeader[0..], BitmapMagicHeader[0..])) {
return errors.ImageError.InvalidMagicHeader;
}

// Read header size to figure out the header type, also TODO: Use PeekableStream when I understand how to use it
const currentHeaderPos = try seekStream.getPos();
var headerSize = try inStream.readIntLittle(u32);
var headerSize = try reader.readIntLittle(u32);
try seekStream.seekTo(currentHeaderPos);

// Read info header
self.infoHeader = switch (headerSize) {
BitmapInfoHeaderWindows31.HeaderSize => BitmapInfoHeader{ .Windows31 = try readStructLittle(inStream, BitmapInfoHeaderWindows31) },
BitmapInfoHeaderV4.HeaderSize => BitmapInfoHeader{ .V4 = try readStructLittle(inStream, BitmapInfoHeaderV4) },
BitmapInfoHeaderV5.HeaderSize => BitmapInfoHeader{ .V5 = try readStructLittle(inStream, BitmapInfoHeaderV5) },
BitmapInfoHeaderWindows31.HeaderSize => BitmapInfoHeader{ .Windows31 = try readStructLittle(reader, BitmapInfoHeaderWindows31) },
BitmapInfoHeaderV4.HeaderSize => BitmapInfoHeader{ .V4 = try readStructLittle(reader, BitmapInfoHeaderV4) },
BitmapInfoHeaderV5.HeaderSize => BitmapInfoHeader{ .V5 = try readStructLittle(reader, BitmapInfoHeaderV5) },
else => return errors.ImageError.UnsupportedBitmapType,
};

Expand All @@ -243,7 +243,7 @@ pub const Bitmap = struct {
pixelsOpt.* = try color.ColorStorage.init(allocator, self.pixel_format, @intCast(usize, pixelWidth * pixelHeight));

if (pixelsOpt.*) |*pixels| {
try readPixels(inStream, pixelWidth, pixelHeight, self.pixel_format, pixels);
try readPixels(reader, pixelWidth, pixelHeight, self.pixel_format, pixels);
}
},
.V5 => |v5Header| {
Expand All @@ -254,7 +254,7 @@ pub const Bitmap = struct {
pixelsOpt.* = try color.ColorStorage.init(allocator, self.pixel_format, @intCast(usize, pixelWidth * pixelHeight));

if (pixelsOpt.*) |*pixels| {
try readPixels(inStream, pixelWidth, pixelHeight, self.pixel_format, pixels);
try readPixels(reader, pixelWidth, pixelHeight, self.pixel_format, pixels);
}
},
else => return errors.ImageError.UnsupportedBitmapType,
Expand All @@ -271,21 +271,21 @@ pub const Bitmap = struct {
}
}

fn readPixels(inStream: ImageInStream, pixelWidth: i32, pixelHeight: i32, pixelFormat: PixelFormat, pixels: *color.ColorStorage) !void {
fn readPixels(reader: ImageReader, pixelWidth: i32, pixelHeight: i32, pixelFormat: PixelFormat, pixels: *color.ColorStorage) !void {
return switch (pixelFormat) {
PixelFormat.Rgb24 => {
return readPixelsInternal(pixels.Rgb24, inStream, pixelWidth, pixelHeight);
return readPixelsInternal(pixels.Rgb24, reader, pixelWidth, pixelHeight);
},
PixelFormat.Argb32 => {
return readPixelsInternal(pixels.Argb32, inStream, pixelWidth, pixelHeight);
return readPixelsInternal(pixels.Argb32, reader, pixelWidth, pixelHeight);
},
else => {
return errors.ImageError.UnsupportedPixelFormat;
},
};
}

fn readPixelsInternal(pixels: anytype, inStream: ImageInStream, pixelWidth: i32, pixelHeight: i32) !void {
fn readPixelsInternal(pixels: anytype, reader: ImageReader, pixelWidth: i32, pixelHeight: i32) !void {
const ColorBufferType = @typeInfo(@TypeOf(pixels)).Pointer.child;

var x: i32 = 0;
Expand All @@ -295,7 +295,7 @@ pub const Bitmap = struct {

x = 0;
while (x < pixelWidth) : (x += 1) {
pixels[@intCast(usize, scanline + x)] = try readStructLittle(inStream, ColorBufferType);
pixels[@intCast(usize, scanline + x)] = try readStructLittle(reader, ColorBufferType);
}
}
}
Expand Down
46 changes: 23 additions & 23 deletions src/formats/netpbm.zig
Expand Up @@ -3,7 +3,7 @@
const Allocator = std.mem.Allocator;
const FormatInterface = @import("../format_interface.zig").FormatInterface;
const ImageFormat = image.ImageFormat;
const ImageInStream = image.ImageInStream;
const ImageReader = image.ImageReader;
const ImageInfo = image.ImageInfo;
const ImageSeekStream = image.ImageSeekStream;
const PixelFormat = @import("../pixel_format.zig").PixelFormat;
Expand Down Expand Up @@ -38,7 +38,7 @@ pub const Header = struct {
max_value: usize,
};

fn parseHeader(stream: ImageInStream) !Header {
fn parseHeader(stream: ImageReader) !Header {
var hdr: Header = undefined;

var magic: [2]u8 = undefined;
Expand Down Expand Up @@ -87,7 +87,7 @@ fn isWhitespace(b: u8) bool {
};
}

fn readNextByte(stream: ImageInStream) !u8 {
fn readNextByte(stream: ImageReader) !u8 {
while (true) {
var b = try stream.readByte();
switch (b) {
Expand All @@ -114,7 +114,7 @@ fn readNextByte(stream: ImageInStream) !u8 {

/// skips whitespace and comments, then reads a number from the stream.
/// this function reads one whitespace behind the number as a terminator.
fn parseNumber(stream: ImageInStream, buffer: []u8) !usize {
fn parseNumber(stream: ImageReader, buffer: []u8) !usize {
var inputLength: usize = 0;
while (true) {
var b = try readNextByte(stream);
Expand All @@ -133,7 +133,7 @@ fn parseNumber(stream: ImageInStream, buffer: []u8) !usize {
}
}

fn loadBinaryBitmap(header: Header, data: []color.Grayscale1, stream: ImageInStream) !void {
fn loadBinaryBitmap(header: Header, data: []color.Grayscale1, stream: ImageReader) !void {
var dataIndex: usize = 0;
const dataEnd = header.width * header.height;

Expand All @@ -147,7 +147,7 @@ fn loadBinaryBitmap(header: Header, data: []color.Grayscale1, stream: ImageInStr
}
}

fn loadAsciiBitmap(header: Header, data: []color.Grayscale1, stream: ImageInStream) !void {
fn loadAsciiBitmap(header: Header, data: []color.Grayscale1, stream: ImageReader) !void {
var dataIndex: usize = 0;
const dataEnd = header.width * header.height;

Expand All @@ -166,22 +166,22 @@ fn loadAsciiBitmap(header: Header, data: []color.Grayscale1, stream: ImageInStre
}
}

fn readLinearizedValue(stream: ImageInStream, maxValue: usize) !u8 {
fn readLinearizedValue(stream: ImageReader, maxValue: usize) !u8 {
return if (maxValue > 255)
@truncate(u8, 255 * @as(usize, try stream.readIntBig(u16)) / maxValue)
else
@truncate(u8, 255 * @as(usize, try stream.readByte()) / maxValue);
}

fn loadBinaryGraymap(header: Header, data: []color.Grayscale8, stream: ImageInStream) !void {
fn loadBinaryGraymap(header: Header, data: []color.Grayscale8, stream: ImageReader) !void {
var dataIndex: usize = 0;
const dataEnd = header.width * header.height;
while (dataIndex < dataEnd) : (dataIndex += 1) {
data[dataIndex] = color.Grayscale8{ .value = try readLinearizedValue(stream, header.max_value) };
}
}

fn loadAsciiGraymap(header: Header, data: []color.Grayscale8, stream: ImageInStream) !void {
fn loadAsciiGraymap(header: Header, data: []color.Grayscale8, stream: ImageReader) !void {
var readBuffer: [16]u8 = undefined;

var dataIndex: usize = 0;
Expand All @@ -194,7 +194,7 @@ fn loadAsciiGraymap(header: Header, data: []color.Grayscale8, stream: ImageInStr
}
}

fn loadBinaryRgbmap(header: Header, data: []color.Rgb24, stream: ImageInStream) !void {
fn loadBinaryRgbmap(header: Header, data: []color.Rgb24, stream: ImageReader) !void {
var dataIndex: usize = 0;
const dataEnd = header.width * header.height;

Expand All @@ -207,7 +207,7 @@ fn loadBinaryRgbmap(header: Header, data: []color.Rgb24, stream: ImageInStream)
}
}

fn loadAsciiRgbmap(header: Header, data: []color.Rgb24, stream: ImageInStream) !void {
fn loadAsciiRgbmap(header: Header, data: []color.Rgb24, stream: ImageReader) !void {
var readBuffer: [16]u8 = undefined;

var dataIndex: usize = 0;
Expand Down Expand Up @@ -250,9 +250,9 @@ fn Netpbm(comptime imageFormat: ImageFormat, comptime headerNumbers: []const u8)
return imageFormat;
}

pub fn formatDetect(inStream: ImageInStream, seekStream: ImageSeekStream) !bool {
pub fn formatDetect(reader: ImageReader, seekStream: ImageSeekStream) !bool {
var magicNumberBuffer: [2]u8 = undefined;
_ = try inStream.read(magicNumberBuffer[0..]);
_ = try reader.read(magicNumberBuffer[0..]);

if (magicNumberBuffer[0] != 'P') {
return false;
Expand All @@ -270,10 +270,10 @@ fn Netpbm(comptime imageFormat: ImageFormat, comptime headerNumbers: []const u8)
return found;
}

pub fn readForImage(allocator: *Allocator, inStream: ImageInStream, seekStream: ImageSeekStream, pixels: *?color.ColorStorage) !ImageInfo {
pub fn readForImage(allocator: *Allocator, reader: ImageReader, seekStream: ImageSeekStream, pixels: *?color.ColorStorage) !ImageInfo {
var netpbmFile = Self{};

try netpbmFile.read(allocator, inStream, seekStream, pixels);
try netpbmFile.read(allocator, reader, seekStream, pixels);

var imageInfo = ImageInfo{};
imageInfo.width = netpbmFile.header.width;
Expand Down Expand Up @@ -310,8 +310,8 @@ fn Netpbm(comptime imageFormat: ImageFormat, comptime headerNumbers: []const u8)
try netpbmFile.write(write_stream, seek_stream, pixels);
}

pub fn read(self: *Self, allocator: *Allocator, inStream: ImageInStream, seekStream: ImageSeekStream, pixelsOpt: *?color.ColorStorage) !void {
self.header = try parseHeader(inStream);
pub fn read(self: *Self, allocator: *Allocator, reader: ImageReader, seekStream: ImageSeekStream, pixelsOpt: *?color.ColorStorage) !void {
self.header = try parseHeader(reader);

self.pixel_format = switch (self.header.format) {
.Bitmap => PixelFormat.Grayscale1,
Expand All @@ -325,23 +325,23 @@ fn Netpbm(comptime imageFormat: ImageFormat, comptime headerNumbers: []const u8)
switch (self.header.format) {
.Bitmap => {
if (self.header.binary) {
try loadBinaryBitmap(self.header, pixels.Grayscale1, inStream);
try loadBinaryBitmap(self.header, pixels.Grayscale1, reader);
} else {
try loadAsciiBitmap(self.header, pixels.Grayscale1, inStream);
try loadAsciiBitmap(self.header, pixels.Grayscale1, reader);
}
},
.Grayscale => {
if (self.header.binary) {
try loadBinaryGraymap(self.header, pixels.Grayscale8, inStream);
try loadBinaryGraymap(self.header, pixels.Grayscale8, reader);
} else {
try loadAsciiGraymap(self.header, pixels.Grayscale8, inStream);
try loadAsciiGraymap(self.header, pixels.Grayscale8, reader);
}
},
.Rgb => {
if (self.header.binary) {
try loadBinaryRgbmap(self.header, pixels.Rgb24, inStream);
try loadBinaryRgbmap(self.header, pixels.Rgb24, reader);
} else {
try loadAsciiRgbmap(self.header, pixels.Rgb24, inStream);
try loadAsciiRgbmap(self.header, pixels.Rgb24, reader);
}
},
}
Expand Down
30 changes: 15 additions & 15 deletions src/formats/pcx.zig
Expand Up @@ -3,7 +3,7 @@
const Allocator = std.mem.Allocator;
const FormatInterface = @import("../format_interface.zig").FormatInterface;
const ImageFormat = image.ImageFormat;
const ImageInStream = image.ImageInStream;
const ImageReader = image.ImageReader;
const ImageInfo = image.ImageInfo;
const ImageSeekStream = image.ImageSeekStream;
const PixelFormat = @import("../pixel_format.zig").PixelFormat;
Expand Down Expand Up @@ -46,10 +46,10 @@ const RLEDecoder = struct {
remaining: usize,
};

stream: ImageInStream,
stream: ImageReader,
currentRun: ?Run,

fn init(stream: ImageInStream) RLEDecoder {
fn init(stream: ImageReader) RLEDecoder {
return RLEDecoder{
.stream = stream,
.currentRun = null,
Expand Down Expand Up @@ -115,9 +115,9 @@ pub const PCX = struct {
return ImageFormat.Pcx;
}

pub fn formatDetect(inStream: ImageInStream, seekStream: ImageSeekStream) !bool {
pub fn formatDetect(reader: ImageReader, seekStream: ImageSeekStream) !bool {
var magicNumberBuffer: [2]u8 = undefined;
_ = try inStream.read(magicNumberBuffer[0..]);
_ = try reader.read(magicNumberBuffer[0..]);

if (magicNumberBuffer[0] != 0x0A) {
return false;
Expand All @@ -130,10 +130,10 @@ pub const PCX = struct {
return true;
}

pub fn readForImage(allocator: *Allocator, inStream: ImageInStream, seekStream: ImageSeekStream, pixels: *?color.ColorStorage) !ImageInfo {
pub fn readForImage(allocator: *Allocator, reader: ImageReader, seekStream: ImageSeekStream, pixels: *?color.ColorStorage) !ImageInfo {
var pcx = PCX{};

try pcx.read(allocator, inStream, seekStream, pixels);
try pcx.read(allocator, reader, seekStream, pixels);

var imageInfo = ImageInfo{};
imageInfo.width = pcx.width;
Expand All @@ -145,9 +145,9 @@ pub const PCX = struct {

pub fn writeForImage(allocator: *Allocator, write_stream: image.ImageWriterStream, seek_stream: ImageSeekStream, pixels: color.ColorStorage, save_info: image.ImageSaveInfo) !void {}

pub fn read(self: *Self, allocator: *Allocator, inStream: ImageInStream, seekStream: ImageSeekStream, pixelsOpt: *?color.ColorStorage) !void {
self.header = try utils.readStructLittle(inStream, PCXHeader);
_ = try inStream.read(PCXHeader.padding[0..]);
pub fn read(self: *Self, allocator: *Allocator, reader: ImageReader, seekStream: ImageSeekStream, pixelsOpt: *?color.ColorStorage) !void {
self.header = try utils.readStructLittle(reader, PCXHeader);
_ = try reader.read(PCXHeader.padding[0..]);

if (self.header.id != 0x0A) {
return errors.ImageError.InvalidMagicHeader;
Expand Down Expand Up @@ -188,7 +188,7 @@ pub const PCX = struct {
pixelsOpt.* = try color.ColorStorage.init(allocator, self.pixel_format, self.width * self.height);

if (pixelsOpt.*) |pixels| {
var decoder = RLEDecoder.init(inStream);
var decoder = RLEDecoder.init(reader);

const scanlineLength = (self.header.stride * self.header.planes);

Expand Down Expand Up @@ -279,13 +279,13 @@ pub const PCX = struct {
const endPos = try seekStream.getEndPos();
try seekStream.seekTo(endPos - 769);

if ((try inStream.readByte()) != 0x0C)
if ((try reader.readByte()) != 0x0C)
return error.MissingPalette;

for (pal) |*c| {
c.R = color.toColorFloat(try inStream.readByte());
c.G = color.toColorFloat(try inStream.readByte());
c.B = color.toColorFloat(try inStream.readByte());
c.R = color.toColorFloat(try reader.readByte());
c.G = color.toColorFloat(try reader.readByte());
c.B = color.toColorFloat(try reader.readByte());
c.A = 1.0;
}
}
Expand Down

0 comments on commit dca0b36

Please sign in to comment.