1
0

Fix something

This commit is contained in:
otya128
2016-12-28 17:31:30 +09:00
parent 88c015c34f
commit a887d91138

View File

@@ -158,6 +158,52 @@ unittest
slot.currentLine = 1; slot.currentLine = 1;
assert(slot.get() == "\n"); assert(slot.get() == "\n");
assert(slot.get() == ""); assert(slot.get() == "");
slot.set("A");
assert(slot.get() == "");
slot.currentLine = 1;
assert(slot.get() == "A\n");
assert(slot.get() == "\n");
assert(slot.get() == "");
slot.delete_(1);
slot.delete_(1);
slot.delete_(1);
slot.delete_(1);
slot.currentLine = 1;
slot.set("A");
slot.set("B");
slot.currentLine = 1;
slot.set("A");
slot.set("B");
slot.currentLine = 1;
assert(slot.get() == "A\n");
assert(slot.get() == "B\n");
assert(slot.get() == "\n");
assert(slot.get() == "");
assert(slot.size(SizeType.Line) == 3);
slot.delete_(-1);
assert(slot.size(SizeType.Line) == 0);
slot.currentLine = 1;
slot.set("A");
slot.set("B");
slot.delete_(1);
assert(slot.get() == "B\n");
assert(slot.get() == "");
slot.currentLine = -1;
assert(slot.get() == "B\n");
assert(slot.get() == "");
slot.currentLine = 1;
assert(slot.get() == "A\n");
assert(slot.get() == "B\n");
assert(slot.get() == "");
slot.currentLine = 2;
slot.delete_(1);
assert(slot.get() == "A\n");
assert(slot.get() == "");
} }
enum SizeType enum SizeType
@@ -171,6 +217,7 @@ struct Slot
{ {
private DList!wstring program; private DList!wstring program;
private DList!wstring.Range range; private DList!wstring.Range range;
private DList!wstring.Range range2;
wstring name; wstring name;
void init() void init()
{ {
@@ -238,6 +285,7 @@ struct Slot
return; return;
} }
range = program[]; range = program[];
range2 = range.save;
range.popFrontN(line - 1); range.popFrontN(line - 1);
} }
wstring get() wstring get()
@@ -247,6 +295,7 @@ struct Slot
return ""; return "";
} }
auto a = range.front; auto a = range.front;
range2 = range.save;
range.popFront(); range.popFront();
return a; return a;
} }
@@ -265,6 +314,7 @@ struct Slot
} }
else else
{ {
range2 = range.save;
range.put(l ~ "\n"); range.put(l ~ "\n");
} }
} }
@@ -272,7 +322,15 @@ struct Slot
{ {
if (range.empty) if (range.empty)
{ {
program.insertAfter(range, l ~ "\n"); if (!range2.empty)
{
range = range2;
program.insertBefore(range, l ~ "\n");
range2 = range.save;
range.popFront();
continue;
}
program.insertBefore(range, l ~ "\n");
} }
else else
{ {
@@ -307,6 +365,7 @@ struct Slot
range = backup; range = backup;
range.popFront(); range.popFront();
} }
range2 = range.save;
} }
void delete_(int count) void delete_(int count)
{ {
@@ -317,8 +376,32 @@ struct Slot
} }
else else
{ {
range = program.linearRemove(range.take(count)); if (range.empty)
{
for (int i = 0; i < count;i++)
{
program.removeBack();
}
}
else
{
range = program.linearRemove(range.take(count));
}
if (range.empty)
{
range = program[];
if (range.empty)
{
program.insertAfter(range, "\n"w);
range = program[];
}
else
{
currentLine = -1;
}
}
} }
range2 = range.save;
} }
int memorySize = 1048476;//WiiU..? int memorySize = 1048476;//WiiU..?
int size(SizeType type) int size(SizeType type)
@@ -326,7 +409,12 @@ struct Slot
switch(type) switch(type)
{ {
case SizeType.Line: case SizeType.Line:
return cast(int)program[].walkLength; {
auto a = cast(int)program[].walkLength;
if (a == 1 && program.front.length == 1 && program.front[0] == '\n'/*?*/)
return 0;
return a;
}
case SizeType.Char: case SizeType.Char:
return cast(int)program[].map!(x => x.length).sum; return cast(int)program[].map!(x => x.length).sum;
case SizeType.FreeChar: case SizeType.FreeChar: