db_lmdb: slight speedup getting array data from the blockchain
This commit is contained in:
parent
99fbe1008b
commit
6f7a5fd4f7
|
@ -3160,6 +3160,7 @@ void BlockchainLMDB::get_output_tx_and_index_from_global(const std::vector<uint6
|
||||||
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
|
||||||
check_open();
|
check_open();
|
||||||
tx_out_indices.clear();
|
tx_out_indices.clear();
|
||||||
|
tx_out_indices.reserve(global_indices.size());
|
||||||
|
|
||||||
TXN_PREFIX_RDONLY();
|
TXN_PREFIX_RDONLY();
|
||||||
RCURSOR(output_txs);
|
RCURSOR(output_txs);
|
||||||
|
@ -3174,9 +3175,8 @@ void BlockchainLMDB::get_output_tx_and_index_from_global(const std::vector<uint6
|
||||||
else if (get_result)
|
else if (get_result)
|
||||||
throw0(DB_ERROR("DB error attempting to fetch output tx hash"));
|
throw0(DB_ERROR("DB error attempting to fetch output tx hash"));
|
||||||
|
|
||||||
outtx *ot = (outtx *)v.mv_data;
|
const outtx *ot = (const outtx *)v.mv_data;
|
||||||
auto result = tx_out_index(ot->tx_hash, ot->local_index);
|
tx_out_indices.push_back(tx_out_index(ot->tx_hash, ot->local_index));
|
||||||
tx_out_indices.push_back(result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TXN_POSTFIX_RDONLY();
|
TXN_POSTFIX_RDONLY();
|
||||||
|
@ -3188,6 +3188,7 @@ void BlockchainLMDB::get_output_key(const uint64_t &amount, const std::vector<ui
|
||||||
TIME_MEASURE_START(db3);
|
TIME_MEASURE_START(db3);
|
||||||
check_open();
|
check_open();
|
||||||
outputs.clear();
|
outputs.clear();
|
||||||
|
outputs.reserve(offsets.size());
|
||||||
|
|
||||||
TXN_PREFIX_RDONLY();
|
TXN_PREFIX_RDONLY();
|
||||||
|
|
||||||
|
@ -3211,19 +3212,19 @@ void BlockchainLMDB::get_output_key(const uint64_t &amount, const std::vector<ui
|
||||||
else if (get_result)
|
else if (get_result)
|
||||||
throw0(DB_ERROR(lmdb_error("Error attempting to retrieve an output pubkey from the db", get_result).c_str()));
|
throw0(DB_ERROR(lmdb_error("Error attempting to retrieve an output pubkey from the db", get_result).c_str()));
|
||||||
|
|
||||||
output_data_t data;
|
|
||||||
if (amount == 0)
|
if (amount == 0)
|
||||||
{
|
{
|
||||||
const outkey *okp = (const outkey *)v.mv_data;
|
const outkey *okp = (const outkey *)v.mv_data;
|
||||||
data = okp->data;
|
outputs.push_back(okp->data);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const pre_rct_outkey *okp = (const pre_rct_outkey *)v.mv_data;
|
const pre_rct_outkey *okp = (const pre_rct_outkey *)v.mv_data;
|
||||||
|
outputs.resize(outputs.size() + 1);
|
||||||
|
output_data_t &data = outputs.back();
|
||||||
memcpy(&data, &okp->data, sizeof(pre_rct_output_data_t));
|
memcpy(&data, &okp->data, sizeof(pre_rct_output_data_t));
|
||||||
data.commitment = rct::zeroCommit(amount);
|
data.commitment = rct::zeroCommit(amount);
|
||||||
}
|
}
|
||||||
outputs.push_back(data);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TXN_POSTFIX_RDONLY();
|
TXN_POSTFIX_RDONLY();
|
||||||
|
@ -3239,6 +3240,7 @@ void BlockchainLMDB::get_output_tx_and_index(const uint64_t& amount, const std::
|
||||||
indices.clear();
|
indices.clear();
|
||||||
|
|
||||||
std::vector <uint64_t> tx_indices;
|
std::vector <uint64_t> tx_indices;
|
||||||
|
tx_indices.reserve(offsets.size());
|
||||||
TXN_PREFIX_RDONLY();
|
TXN_PREFIX_RDONLY();
|
||||||
|
|
||||||
RCURSOR(output_amounts);
|
RCURSOR(output_amounts);
|
||||||
|
|
Loading…
Reference in New Issue