aboutsummaryrefslogtreecommitdiff
path: root/source/spots.d
diff options
context:
space:
mode:
authorHolden Rohrer <hr@hrhr.dev>2021-08-14 17:37:56 -0400
committerHolden Rohrer <hr@hrhr.dev>2021-08-14 17:37:56 -0400
commitec9ce614d87a47137cfbbb0f6d13aa30e4a1239c (patch)
treeda72922bf13fce52a1954121eaf27164cb51d6aa /source/spots.d
parenta770dd88e6c55ac7fd67c243ad30f04425e3e175 (diff)
completed save/load feature
Diffstat (limited to 'source/spots.d')
-rw-r--r--source/spots.d25
1 files changed, 14 insertions, 11 deletions
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;
}
}