mirror of
https://github.com/Expand-sys/CCash
synced 2026-03-22 20:47:10 +11:00
⚡ optimizing GetLogsRange
This commit is contained in:
parent
af551ef8b4
commit
f2da8cdbc2
1 changed files with 68 additions and 21 deletions
89
src/log.cpp
89
src/log.cpp
|
|
@ -82,40 +82,87 @@ std::string Log::GetLogsRange(size_t start, size_t length) noexcept
|
||||||
if (start > data.size()) { return "[]"; }
|
if (start > data.size()) { return "[]"; }
|
||||||
if (start == 0 && length == MAX_LOG_SIZE) { return log_snapshot_v2; }
|
if (start == 0 && length == MAX_LOG_SIZE) { return log_snapshot_v2; }
|
||||||
if (log_flag_v2.GetChangeState() && data.size()) { GetLogsV2(); }
|
if (log_flag_v2.GetChangeState() && data.size()) { GetLogsV2(); }
|
||||||
if ((start + length + 1) >= data.size()) { length = data.size() - start; }
|
|
||||||
|
|
||||||
size_t log_index_n = 0, i = 0;
|
size_t log_index_n, i;
|
||||||
while(i < log_snapshot_v2.size())
|
if (start < (0.5 * MAX_LOG_SIZE))
|
||||||
{
|
{
|
||||||
if (log_index_n == start)
|
// std::cout << "a\n";
|
||||||
{
|
i = 0;
|
||||||
log_index_n = i;
|
log_index_n = 0;
|
||||||
break;
|
|
||||||
}
|
|
||||||
i += (41 + min_name_size);
|
|
||||||
while (log_snapshot_v2[i] != ',') { ++i; }
|
|
||||||
++log_index_n;
|
|
||||||
}
|
|
||||||
size_t log_index_m = log_snapshot_v2.size() - log_index_n;
|
|
||||||
if ((start + length + 1) != data.size())
|
|
||||||
{
|
|
||||||
log_index_m = 0;
|
|
||||||
while(i < log_snapshot_v2.size())
|
while(i < log_snapshot_v2.size())
|
||||||
{
|
{
|
||||||
if (log_index_m == length)
|
if (log_index_n == start)
|
||||||
{
|
{
|
||||||
log_index_m = i + 1;
|
log_index_n = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
i += (41 + min_name_size);
|
i += (41 + min_name_size);
|
||||||
while (log_snapshot_v2[i] != ',') { ++i; }
|
while (log_snapshot_v2[i] != ',') { ++i; }
|
||||||
++log_index_m;
|
++log_index_n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// std::cout << "b\n";
|
||||||
|
i = log_snapshot_v2.size();
|
||||||
|
log_index_n = data.size();
|
||||||
|
while(i --> 0)
|
||||||
|
{
|
||||||
|
if (log_index_n == start)
|
||||||
|
{
|
||||||
|
log_index_n = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i -= (41 + min_name_size);
|
||||||
|
while (log_snapshot_v2[i] != ',') { --i; }
|
||||||
|
--log_index_n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string res(log_snapshot_v2.substr(log_index_n, log_index_m - log_index_n));
|
size_t log_index_m = std::string::npos;
|
||||||
|
if ((start + length) < data.size())
|
||||||
|
{
|
||||||
|
if (length < (0.5 * MAX_LOG_SIZE))
|
||||||
|
{
|
||||||
|
// std::cout << "c\n";
|
||||||
|
log_index_m = 0;
|
||||||
|
while(i < log_snapshot_v2.size())
|
||||||
|
{
|
||||||
|
if (log_index_m == length)
|
||||||
|
{
|
||||||
|
log_index_m = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i += (41 + min_name_size);
|
||||||
|
while (log_snapshot_v2[i] != ',') { ++i; }
|
||||||
|
++log_index_m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// std::cout << "d\n";
|
||||||
|
i = log_snapshot_v2.size();
|
||||||
|
log_index_m = data.size();
|
||||||
|
while(i --> 0)
|
||||||
|
{
|
||||||
|
if (log_index_m == length)
|
||||||
|
{
|
||||||
|
log_index_m = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i -= (41 + min_name_size);
|
||||||
|
while (log_snapshot_v2[i] != ',') { --i; }
|
||||||
|
--log_index_m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log_index_m -= log_index_n;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string res(log_snapshot_v2.substr(log_index_n, log_index_m));
|
||||||
res[0] = '[';
|
res[0] = '[';
|
||||||
res[log_index_m - log_index_n - 1] = ']';
|
res[res.size() - 1] = ']';
|
||||||
|
// std::cout << res << '\n';
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue