Remove hash from StringData
Maintaining the hash value of strings is not worth it as we only use it for buffer reload, but pay for it on any buffer modifications.
This commit is contained in:
parent
1048036d3c
commit
072064407a
|
@ -249,7 +249,7 @@ void Buffer::reload(StringView data, timespec fs_timestamp)
|
|||
auto diff = find_diff(m_lines.begin(), m_lines.size(),
|
||||
parsed_lines.lines.begin(), (int)parsed_lines.lines.size(),
|
||||
[](const StringDataPtr& lhs, const StringDataPtr& rhs)
|
||||
{ return lhs->hash == rhs->hash and lhs->strview() == rhs->strview(); });
|
||||
{ return lhs->strview() == rhs->strview(); });
|
||||
|
||||
auto it = m_lines.begin();
|
||||
for (auto& d : diff)
|
||||
|
@ -476,7 +476,7 @@ BufferCoord Buffer::do_insert(BufferCoord pos, StringView content)
|
|||
|
||||
auto line_it = m_lines.begin() + (int)pos.line;
|
||||
auto new_lines_it = new_lines.begin();
|
||||
if (not append_lines)
|
||||
if (not append_lines) // replace first line with new first line
|
||||
*line_it++ = std::move(*new_lines_it++);
|
||||
|
||||
m_lines.insert(line_it,
|
||||
|
|
|
@ -13,7 +13,6 @@ struct StringData : UseMemoryDomain<MemoryDomain::SharedString>
|
|||
{
|
||||
int refcount;
|
||||
int length;
|
||||
uint32_t hash;
|
||||
|
||||
StringData(int ref, int len) : refcount(ref), length(len) {}
|
||||
|
||||
|
@ -26,8 +25,8 @@ struct StringData : UseMemoryDomain<MemoryDomain::SharedString>
|
|||
|
||||
struct PtrPolicy
|
||||
{
|
||||
static void inc_ref(StringData* r, void*) { ++r->refcount; }
|
||||
static void dec_ref(StringData* r, void*) { if (--r->refcount == 0) delete r; }
|
||||
static void inc_ref(StringData* r, void*) noexcept { ++r->refcount; }
|
||||
static void dec_ref(StringData* r, void*) noexcept { if (--r->refcount == 0) destroy(r); }
|
||||
static void ptr_moved(StringData*, void*, void*) noexcept {}
|
||||
};
|
||||
|
||||
|
@ -40,7 +39,6 @@ struct StringData : UseMemoryDomain<MemoryDomain::SharedString>
|
|||
if (back != 0)
|
||||
res->data()[len-1] = back;
|
||||
res->data()[len] = 0;
|
||||
res->hash = hash_data(res->data(), res->length);
|
||||
return RefPtr<StringData, PtrPolicy>{res};
|
||||
}
|
||||
|
||||
|
@ -48,17 +46,6 @@ struct StringData : UseMemoryDomain<MemoryDomain::SharedString>
|
|||
{
|
||||
StringData::operator delete(s, sizeof(StringData) + s->length + 1);
|
||||
}
|
||||
|
||||
friend void inc_ref_count(StringData* s, void*)
|
||||
{
|
||||
++s->refcount;
|
||||
}
|
||||
|
||||
friend void dec_ref_count(StringData* s, void*)
|
||||
{
|
||||
if (--s->refcount == 0)
|
||||
StringData::destroy(s);
|
||||
}
|
||||
};
|
||||
|
||||
using StringDataPtr = RefPtr<StringData, StringData::PtrPolicy>;
|
||||
|
|
Loading…
Reference in New Issue
Block a user