Fix something
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user