summaryrefslogtreecommitdiff
path: root/src/line_modification.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2021-05-28 17:03:06 +1000
committerMaxime Coste <mawww@kakoune.org>2021-05-28 17:03:41 +1000
commite4a23a64faf56b5822fee13d976e038174408238 (patch)
tree16f2198e342de7e1237b98aa5795fe80114632e8 /src/line_modification.cc
parent38f85706ffabe33734a6759a3b19405b755fffb8 (diff)
Support opening files bigger than 2 GiB
The real technical limit is with lines bigger than 2 GiB and buffers with more than 2 Gi lines, refactor buffer loading to make it possible to load those files. Fix an overflow with the hash_data function at the same time
Diffstat (limited to 'src/line_modification.cc')
-rw-r--r--src/line_modification.cc12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/line_modification.cc b/src/line_modification.cc
index 3e84fe50..8551e394 100644
--- a/src/line_modification.cc
+++ b/src/line_modification.cc
@@ -201,8 +201,10 @@ void LineRangeSet::remove_range(LineRange range)
UnitTest test_line_modifications{[]()
{
+ auto make_lines = [](auto&&... lines) { return BufferLines{StringData::create({lines})...}; };
+
{
- Buffer buffer("test", Buffer::Flags::None, "line 1\nline 2\n");
+ Buffer buffer("test", Buffer::Flags::None, make_lines("line 1\n", "line 2\n"));
auto ts = buffer.timestamp();
buffer.erase({1, 0}, {2, 0});
@@ -211,7 +213,7 @@ UnitTest test_line_modifications{[]()
}
{
- Buffer buffer("test", Buffer::Flags::None, "line 1\nline 2\n");
+ Buffer buffer("test", Buffer::Flags::None, make_lines("line 1\n", "line 2\n"));
auto ts = buffer.timestamp();
buffer.insert({2, 0}, "line 3");
@@ -220,7 +222,7 @@ UnitTest test_line_modifications{[]()
}
{
- Buffer buffer("test", Buffer::Flags::None, "line 1\nline 2\nline 3\n");
+ Buffer buffer("test", Buffer::Flags::None, make_lines("line 1\n", "line 2\n", "line 3\n"));
auto ts = buffer.timestamp();
buffer.insert({1, 4}, "hoho\nhehe");
@@ -231,7 +233,7 @@ UnitTest test_line_modifications{[]()
}
{
- Buffer buffer("test", Buffer::Flags::None, "line 1\nline 2\nline 3\nline 4\n");
+ Buffer buffer("test", Buffer::Flags::None, make_lines("line 1\n", "line 2\n", "line 3\n", "line 4\n"));
auto ts = buffer.timestamp();
buffer.erase({0,0}, {3,0});
@@ -250,7 +252,7 @@ UnitTest test_line_modifications{[]()
}
{
- Buffer buffer("test", Buffer::Flags::None, "line 1\n");
+ Buffer buffer("test", Buffer::Flags::None, make_lines("line 1\n"));
auto ts = buffer.timestamp();
buffer.insert({0,0}, "n");
buffer.insert({0,1}, "e");