5#include "sinr-output-stats.h"
8#include "ns3/rng-seed-manager.h"
21 m_tableName = tableName;
25 ret = m_db->SpinExec(
"CREATE TABLE IF NOT EXISTS " + tableName +
27 "CellId INTEGER NOT NULL, "
28 "BwpId INTEGER NOT NULL,"
29 "Rnti INTEGER NOT NULL,"
30 "AvgSinr DOUBLE NOT NULL,"
31 "Seed INTEGER NOT NULL,"
32 "Run INTEGER NOT NULL);");
35 SinrOutputStats::DeleteWhere(m_db,
36 RngSeedManager::GetSeed(),
37 RngSeedManager::GetRun(),
44 m_sinrCache.emplace_back(cellId, bwpId, rnti, avgSinr);
47 if (m_sinrCache.size() *
sizeof(SinrResultCache) > 1000000)
60SinrOutputStats::DeleteWhere(SQLiteOutput* p, uint32_t seed, uint32_t run,
const std::string& table)
64 ret = p->SpinPrepare(&stmt,
"DELETE FROM \"" + table +
"\" WHERE SEED = ? AND RUN = ?;");
65 NS_ABORT_IF(ret ==
false);
66 ret = p->Bind(stmt, 1, seed);
67 NS_ABORT_IF(ret ==
false);
68 ret = p->Bind(stmt, 2, run);
70 ret = p->SpinExec(stmt);
71 NS_ABORT_IF(ret ==
false);
75SinrOutputStats::WriteCache()
77 bool ret = m_db->SpinExec(
"BEGIN TRANSACTION;");
78 for (
const auto& v : m_sinrCache)
81 ret = m_db->SpinPrepare(&stmt,
"INSERT INTO " + m_tableName +
" VALUES (?,?,?,?,?,?);");
83 ret = m_db->Bind(stmt, 1, v.cellId);
85 ret = m_db->Bind(stmt, 2, v.bwpId);
87 ret = m_db->Bind(stmt, 3, v.rnti);
89 ret = m_db->Bind(stmt, 4, v.avgSinr);
91 ret = m_db->Bind(stmt, 5, RngSeedManager::GetSeed());
93 ret = m_db->Bind(stmt, 6,
static_cast<uint32_t
>(RngSeedManager::GetRun()));
96 ret = m_db->SpinExec(stmt);
100 ret = m_db->SpinExec(
"END TRANSACTION;");
SinrOutputStats()
Constructor.
void SaveSinr(uint16_t cellId, uint16_t rnti, double avgSinr, uint16_t bwpId)
Store the SINR values.
void SetDb(SQLiteOutput *db, const std::string &tableName="sinr")
Install the output database.
void EmptyCache()
Force the cache write to disk, emptying the cache itself.