From ec9ce614d87a47137cfbbb0f6d13aa30e4a1239c Mon Sep 17 00:00:00 2001 From: Holden Rohrer Date: Sat, 14 Aug 2021 17:37:56 -0400 Subject: completed save/load feature --- source/spots.d | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'source/spots.d') diff --git a/source/spots.d b/source/spots.d index f57ba8f..49b9c85 100644 --- a/source/spots.d +++ b/source/spots.d @@ -28,16 +28,17 @@ struct Spot _contents = c; } + import std.format : format, formattedRead; + string toString() { - import std.format : format; - return format("'%c'", _contents); + return format!`'%c'`(_contents); } - void fromString(S)(S s) if (isSomeString!S) + void fromString(Range)(auto ref Range s) { - _contents = cast(char) s[1]; + s.formattedRead!`'%c'`(_contents); } @property contents() @@ -165,7 +166,7 @@ class OverlaySource : SpotSource _base.save(f); foreach (coord; _overlay.keys()) { - f.writefln!"%s, %s: %s"(coord[0], coord[1], _overlay[coord]); + f.writefln!"%s %s: %s"(coord[0], coord[1], _overlay[coord]); } f.write(terminator); } @@ -173,21 +174,23 @@ class OverlaySource : SpotSource void load(File f) { import std.conv : to; - import std.algorithm.iteration; + import std.algorithm; + //_overlay = _overlay.init; _base.load(f); foreach (char[] line; f.lines) { if (line == terminator) break; - auto trim = line.filter!(a => a == ' ' || a == '\r' || a == '\n').array; - auto parts = trim.splitter(':'); - auto ints = parts.moveFront.splitter(',').map!(to!BigInt); + + auto ints = line.until(':').array.splitter(' ').map!(to!BigInt); BigInt[2] coord; - coord[0] = ints.moveFront; + coord[0] = ints.front; + ints.popFront; coord[1] = ints.front; + auto s = new Spot(); - (*s).fromString(parts.front); + (*s).fromString(line.find(':').find('\'')); _overlay[coord] = *s; } } -- cgit