22 #include "ns3/abort.h"    23 #include "ns3/unused.h"    25 #include "ns3/nstime.h"    34   int rc = sqlite3_open (name.c_str (), &
m_db);
    42   rc = sqlite3_close_v2 (
m_db);
    50   SpinExec (
"PRAGMA journal_mode = MEMORY");
   104   return sqlite3_column_int (stmt, pos);
   111   return static_cast<uint32_t
> (sqlite3_column_int (stmt, pos));
   118   return sqlite3_column_double (stmt, pos);
   136   if (sqlite3_bind_double (stmt, pos, value.
GetSeconds ()) == SQLITE_OK)
   147   if (sqlite3_bind_double (stmt, pos, value) == SQLITE_OK)
   158   if (sqlite3_bind_int (stmt, pos, static_cast<int> (value)) == SQLITE_OK)
   169   if (sqlite3_bind_int64 (stmt, pos, value) == SQLITE_OK)
   180   if (sqlite3_bind_int64 (stmt, pos, value) == SQLITE_OK)
   191   if (sqlite3_bind_int (stmt, pos, static_cast<int> (value)) == SQLITE_OK)
   202   if (sqlite3_bind_int (stmt, pos, static_cast<int> (value)) == SQLITE_OK)
   213   if (sqlite3_bind_int (stmt, pos, value) == SQLITE_OK)
   224   if (sqlite3_bind_text (stmt, pos, value.c_str (), -1, SQLITE_STATIC) == SQLITE_OK)
   236   sem_t *sem = sem_open (
m_semName.c_str (), O_CREAT, S_IRUSR | S_IWUSR, 1);
   239                    "FAILED to open system semaphore, errno: " << errno);
   241   if (sem_wait (sem) == 0)
   243       rc = sqlite3_prepare_v2 (db, 
cmd.c_str (),
   244                                static_cast<int> (
cmd.size ()),
   273       rc = sqlite3_prepare_v2 (db, 
cmd.c_str (),
   274                                static_cast<int> (
cmd.size ()),
   277   while (rc == SQLITE_BUSY || rc == SQLITE_LOCKED);
   287       rc = sqlite3_step (stmt);
   289   while (rc == SQLITE_BUSY || rc == SQLITE_LOCKED);
   300       rc = sqlite3_finalize (stmt);
   302   while (rc == SQLITE_BUSY || rc == SQLITE_LOCKED);
   313       rc = sqlite3_reset (stmt);
   315   while (rc == SQLITE_BUSY || rc == SQLITE_LOCKED);
   328                           sem_t *sem, 
bool hardExit)
   330   if (rc != SQLITE_OK && rc != SQLITE_DONE)
   343           std::cerr << sqlite3_errmsg (db) << std::endl;
   381   ret = 
CheckError (db, rc, 
"", 
nullptr, 
false);
   395   int rc = SQLITE_ERROR;
   397   sem_t *sem = sem_open (
m_semName.c_str (), O_CREAT, S_IRUSR | S_IWUSR, 1);
   400                    "FAILED to open system semaphore, errno: " << errno);
   402   if (sem_wait (sem) == 0)
   431   int rc = SQLITE_ERROR;
   433   sem_t *sem = sem_open (
m_semName.c_str (), O_CREAT, S_IRUSR | S_IWUSR, 1);
   436                    "FAILED to open system semaphore, errno: " << errno);
   438   if (sem_wait (sem) == 0)
 static bool CheckError(sqlite3 *db, int rc, const std::string &cmd, sem_t *sem, bool hardExit)
Check any error in the db. 
Simulation virtual time values and global simulation resolution. 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message. 
static void Error(sqlite3 *db, const std::string &cmd)
Fail, printing an error message from sqlite. 
SQLiteOutput(const std::string &name, const std::string &semName)
SQLiteOutput constructor. 
double GetSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit. 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
bool SpinExec(const std::string &cmd) const
Execute a command until the return value is OK or an ERROR. 
#define NS_UNUSED(x)
Mark a local variable as unused. 
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate. 
void SetJournalInMemory()
Instruct SQLite to store the journal in memory. 
static int SpinStep(sqlite3_stmt *stmt)
Execute a step operation on a statement until the result is ok or an error. 
std::string m_semName
System semaphore name. 
static int SpinFinalize(sqlite3_stmt *stmt)
Finalize a statement until the result is ok or an error. 
bool WaitPrepare(sqlite3_stmt **stmt, const std::string &cmd) const
Prepare a statement, waiting on a system semaphore. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
bool SpinPrepare(sqlite3_stmt **stmt, const std::string &cmd) const
Prepare a statement. 
T RetrieveColumn(sqlite3_stmt *stmt, int pos) const
Retrieve a value from an executed statement. 
~SQLiteOutput()
Destructor. 
bool Bind(sqlite3_stmt *stmt, int pos, const T &value) const
Bind a value to a sqlite statement. 
#define NS_ABORT_MSG_UNLESS(cond, msg)
Abnormal program termination if a condition is false, with a message. 
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message. 
static int SpinReset(sqlite3_stmt *stmt)
Reset a statement until the result is ok or an error. 
sqlite3 * m_db
Database pointer. 
bool WaitExec(const std::string &cmd) const
Execute a command, waiting on a system semaphore.