/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ #include "ns3/string.h" #include "ns3/time-data-calculators.h" #include "leo-input-fstream-container.h" namespace ns3 { TypeId LeoWaypointInputFileStreamContainer::GetTypeId (void) { static TypeId tid = TypeId ("ns3::LeoWaypointInputFileStreamContainer") .SetGroupName ("Leo") .SetParent () .AddConstructor () .AddAttribute ("File", "The path to the file opened in the stream", StringValue (), MakeStringAccessor (&LeoWaypointInputFileStreamContainer::m_filePath), MakeStringChecker ()) .AddAttribute ("LastTime", "The minimum point in time for returned samples", TimeValue (), MakeTimeAccessor (&LeoWaypointInputFileStreamContainer::m_lastTime), MakeTimeChecker ()) ; return tid; } LeoWaypointInputFileStreamContainer::LeoWaypointInputFileStreamContainer () : m_filePath (), m_input () { } LeoWaypointInputFileStreamContainer::LeoWaypointInputFileStreamContainer (string filePath, Time lastTime) : m_filePath (filePath), m_lastTime (lastTime) { } LeoWaypointInputFileStreamContainer::~LeoWaypointInputFileStreamContainer () { m_input.close (); } bool LeoWaypointInputFileStreamContainer::GetNextSample (Waypoint &sample) { if (!m_input.is_open ()) { m_input.open (m_filePath); } if (!m_input.is_open ()) { NS_ABORT_MSG ("Input stream is not open"); } if (m_input.bad ()) { NS_ABORT_MSG ("Input stream is bad"); } Time newLast = m_lastTime; while (m_input && sample.time < m_lastTime) { m_input >> sample; newLast = sample.time; } bool res = (newLast != m_lastTime) && m_input; m_lastTime = newLast; return res; } void LeoWaypointInputFileStreamContainer::SetFile (const string path) { m_input.close (); m_filePath = path; m_input.open (m_filePath); } string LeoWaypointInputFileStreamContainer::GetFile () const { return m_filePath; } void LeoWaypointInputFileStreamContainer::SetLastTime (const Time lastTime) { m_input.clear (); m_input.seekg (0, std::ios::beg); m_lastTime = lastTime; } Time LeoWaypointInputFileStreamContainer::GetLastTime () const { return m_lastTime; } };