mirror of
https://github.com/Expand-sys/CCash
synced 2026-03-22 20:47:10 +11:00
121 lines
4.5 KiB
C++
121 lines
4.5 KiB
C++
#include "log.h"
|
|
|
|
void Log::AddTrans(const std::string &counterparty_str, bool receiving, uint32_t amount, time_t time) noexcept
|
|
{
|
|
#if USE_DEPRECATED_ENDPOINTS
|
|
log_flag.SetChangesOn();
|
|
#endif
|
|
log_flag_v2.SetChangesOn();
|
|
|
|
if (data.size() == MAX_LOG_SIZE)
|
|
{
|
|
data.pop_front();
|
|
}
|
|
data.emplace_back(counterparty_str, receiving, amount, time);
|
|
}
|
|
|
|
#if USE_DEPRECATED_ENDPOINTS
|
|
std::string Log::GetLogs(const std::string& name) noexcept
|
|
{
|
|
if (log_flag.GetChangeState() && data.size()) // if there are changes
|
|
{
|
|
log_snapshot.resize(0);
|
|
//re-generate snapshot
|
|
size_t predicted_size = ((57 + (2 * max_name_size)) * data.size()) + 1;
|
|
if (log_snapshot.capacity() < predicted_size)
|
|
{
|
|
log_snapshot.reserve(predicted_size);
|
|
}
|
|
log_snapshot = '['; //1
|
|
for (size_t i = 0; i < data.size(); ++i)
|
|
{
|
|
log_snapshot += "{\"to\":\""; //7
|
|
log_snapshot += data[i].receiving? name : data[i].counterparty; //max_name_size?
|
|
log_snapshot += "\",\"from\":\""; //10
|
|
log_snapshot += data[i].receiving? data[i].counterparty : name; //max_name_size?
|
|
log_snapshot += "\",\"amount\":"; //11
|
|
log_snapshot += std::to_string(data[i].amount); //10?
|
|
log_snapshot += ",\"time\":"; //8
|
|
log_snapshot += std::to_string(data[i].time); //10?
|
|
log_snapshot += "},"; //2
|
|
}
|
|
log_snapshot.back() = ']';
|
|
log_flag.SetChangesOff();
|
|
}
|
|
|
|
return log_snapshot;
|
|
}
|
|
#endif
|
|
|
|
std::string Log::GetLogsV2() noexcept
|
|
{
|
|
if (log_flag_v2.GetChangeState() && data.size()) // if there are changes
|
|
{
|
|
log_snapshot_v2.resize(0);
|
|
//re-generate snapshot
|
|
size_t predicted_size = ((59 + max_name_size) * data.size()) + 1;
|
|
if (log_snapshot_v2.capacity() < predicted_size)
|
|
{
|
|
log_snapshot_v2.reserve(predicted_size);
|
|
}
|
|
log_snapshot_v2 = '['; //1
|
|
for (size_t i = data.size(); i --> 0;)
|
|
{
|
|
log_snapshot_v2 += "{\"counterparty\":\""; //17
|
|
log_snapshot_v2 += data[i].counterparty; //max_name_size?
|
|
log_snapshot_v2 += "\",\"amount\":"; //11
|
|
if (!data[i].receiving) { log_snapshot_v2 += '-'; } //1
|
|
log_snapshot_v2 += std::to_string(data[i].amount); //10?
|
|
log_snapshot_v2 += ",\"time\":"; //8
|
|
log_snapshot_v2 += std::to_string(data[i].time); //10?
|
|
log_snapshot_v2 += "},"; //2
|
|
}
|
|
log_snapshot_v2.back() = ']';
|
|
log_flag_v2.SetChangesOff();
|
|
}
|
|
|
|
return log_snapshot_v2;
|
|
}
|
|
|
|
std::string Log::GetLogsRange(size_t start, size_t length) noexcept
|
|
{
|
|
if (start > data.size()) { return "[]"; }
|
|
if (start == 0 && length == MAX_LOG_SIZE) { return log_snapshot_v2; }
|
|
if (log_flag_v2.GetChangeState() && data.size()) { GetLogsV2(); }
|
|
if (length > data.size()) { length = data.size(); }
|
|
|
|
size_t log_index_n = 0, i = 0;
|
|
while(i < log_snapshot_v2.size())
|
|
{
|
|
if (log_index_n == start)
|
|
{
|
|
log_index_n = i;
|
|
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) != MAX_LOG_SIZE)
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
|
|
std::string res(log_snapshot_v2.substr(log_index_n, log_index_m - log_index_n));
|
|
res[0] = '[';
|
|
res[log_index_m - log_index_n - 1] = ']';
|
|
|
|
return res;
|
|
}
|