diff --git a/src/core/Buffer.cc b/src/core/Buffer.cc index d2daa35..cf5d390 100644 --- a/src/core/Buffer.cc +++ b/src/core/Buffer.cc @@ -212,15 +212,12 @@ void Buffer::erase_code_point(const Buffer::Iterator & position) } } -void Buffer::erase_range(const Buffer::Iterator & start, - const Buffer::Iterator & end) +void Buffer::erase_range(const Buffer::Range & range) { - if (start.valid() && (start < end)) + if (range.valid() && (range.size() > 0u)) { push_operation(); - size_t start_offset = start.offset(); - size_t end_offset = end.valid() ? end.offset() : m_gap_buffer->size(); - erase_data(start_offset, end_offset - start_offset, true); + erase_data(range.start_offset(), range.size(), true); pop_operation(); } } diff --git a/src/core/Buffer.h b/src/core/Buffer.h index a7b2af8..acae9f4 100644 --- a/src/core/Buffer.h +++ b/src/core/Buffer.h @@ -173,8 +173,7 @@ public: bool insert_mode() const { return m_insert_mode; } void insert_code_point(const Buffer::Iterator & position, uint32_t code_point); void erase_code_point(const Buffer::Iterator & position); - void erase_range(const Buffer::Iterator & start, - const Buffer::Iterator & end); + void erase_range(const Buffer::Range & range); std::shared_ptr filename() const { return m_filename; } Iterator begin() const { return Iterator(this); } std::shared_ptr beginp() const { return std::make_shared(this); } diff --git a/test/src/test_Buffer.cc b/test/src/test_Buffer.cc index a59ed5b..d5c18b6 100644 --- a/test/src/test_Buffer.cc +++ b/test/src/test_Buffer.cc @@ -142,14 +142,18 @@ TEST(BufferTest, allows_erasing_ranges) it2->go_next_line(); /* Invalid tests. */ - b.erase_range(b.end(), b.end()); + b.erase_range(Buffer::Range(b.endp(), b.endp())); EXPECT_EQ(ss("abc\ndef\n"), b.get_string()); - b.erase_range(*it, b.begin()); + b.erase_range(Buffer::Range(it, b.beginp())); + EXPECT_EQ(ss("abc\ndef\n"), b.get_string()); + + /* Zero-length test. */ + b.erase_range(Buffer::Range(it2, it2)); EXPECT_EQ(ss("abc\ndef\n"), b.get_string()); EXPECT_EQ(C('a'), **it); EXPECT_EQ(C('d'), **it2); - b.erase_range(*it, *it2); + b.erase_range(Buffer::Range(it, it2)); EXPECT_EQ(ss("def\n"), b.get_string()); EXPECT_EQ(*it, *it2); EXPECT_EQ(C('d'), **it); @@ -158,7 +162,7 @@ TEST(BufferTest, allows_erasing_ranges) it2->go_forward(); } EXPECT_EQ(C('d'), **it); - b.erase_range(*it, *it2); + b.erase_range(Buffer::Range(it, it2)); EXPECT_EQ(ss(""), b.get_string()); EXPECT_FALSE(it->valid()); EXPECT_FALSE(it2->valid());