mirror of
https://gitlab.ibr.cs.tu-bs.de/tschuber/ns-3-leo.git
synced 2025-06-08 01:53:58 +02:00
Add wrapper for waypoints file
This commit is contained in:
parent
8ab0bc023e
commit
9ead83462b
5 changed files with 202 additions and 0 deletions
0
data/empty
Normal file
0
data/empty
Normal file
54
test/leo-input-fstream-container-test-suite.cc
Normal file
54
test/leo-input-fstream-container-test-suite.cc
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||||
|
|
||||||
|
#include "ns3/leo-module.h"
|
||||||
|
#include "ns3/test.h"
|
||||||
|
|
||||||
|
using namespace ns3;
|
||||||
|
|
||||||
|
class LeoFileInputTestCase : public TestCase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LeoFileInputTestCase ();
|
||||||
|
virtual ~LeoFileInputTestCase ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void DoRun (void);
|
||||||
|
};
|
||||||
|
|
||||||
|
LeoFileInputTestCase::LeoFileInputTestCase ()
|
||||||
|
: TestCase ("Test reading from empty file")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
LeoFileInputTestCase::~LeoFileInputTestCase ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
LeoFileInputTestCase::DoRun (void)
|
||||||
|
{
|
||||||
|
Ptr<LeoWaypointInputFileStreamContainer> container = CreateObject<LeoWaypointInputFileStreamContainer> ();
|
||||||
|
container->SetAttribute("File", StringValue ("contrib/leo/data/empty"));
|
||||||
|
container->SetAttribute("LastTime", TimeValue (Time (1)));
|
||||||
|
Waypoint wp;
|
||||||
|
|
||||||
|
bool res = container->GetNextSample(wp);
|
||||||
|
|
||||||
|
NS_TEST_ASSERT_MSG_EQ (res, false, "Reading from empty stream fails");
|
||||||
|
}
|
||||||
|
|
||||||
|
class LeoWaypointsTestSuite : public TestSuite
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LeoWaypointsTestSuite ();
|
||||||
|
};
|
||||||
|
|
||||||
|
LeoWaypointsTestSuite::LeoWaypointsTestSuite ()
|
||||||
|
: TestSuite ("leo-waypoints", UNIT)
|
||||||
|
{
|
||||||
|
// TestDuration for TestCase can be QUICK, EXTENSIVE or TAKES_FOREVER
|
||||||
|
AddTestCase (new LeoFileInputTestCase, TestCase::QUICK);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do not forget to allocate an instance of this TestSuite
|
||||||
|
static LeoWaypointsTestSuite leoWaypointsTestSuite;
|
103
utils/leo-input-fstream-container.cc
Normal file
103
utils/leo-input-fstream-container.cc
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
/* -*- 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<Object> ()
|
||||||
|
.AddConstructor<LeoWaypointInputFileStreamContainer> ()
|
||||||
|
.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");
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!m_input.eof () && sample.time < m_lastTime)
|
||||||
|
{
|
||||||
|
m_input >> sample;
|
||||||
|
}
|
||||||
|
m_lastTime = sample.time;
|
||||||
|
|
||||||
|
return m_input.good ();
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
42
utils/leo-input-fstream-container.h
Normal file
42
utils/leo-input-fstream-container.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||||
|
|
||||||
|
#ifndef LEO_INPUT_FSTREAM_CONTAINER
|
||||||
|
#define LEO_INPUT_FSTREAM_CONTAINER
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include "ns3/object.h"
|
||||||
|
#include "ns3/waypoint.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
namespace ns3
|
||||||
|
{
|
||||||
|
|
||||||
|
class LeoWaypointInputFileStreamContainer : public Object
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static TypeId GetTypeId (void);
|
||||||
|
|
||||||
|
LeoWaypointInputFileStreamContainer ();
|
||||||
|
virtual ~LeoWaypointInputFileStreamContainer ();
|
||||||
|
|
||||||
|
LeoWaypointInputFileStreamContainer (string filePath, Time lastTime);
|
||||||
|
|
||||||
|
bool GetNextSample (Waypoint &sample);
|
||||||
|
|
||||||
|
void SetFile (const string path);
|
||||||
|
string GetFile () const;
|
||||||
|
|
||||||
|
void SetLastTime (const Time lastTime);
|
||||||
|
Time GetLastTime () const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
string m_filePath;
|
||||||
|
Time m_lastTime;
|
||||||
|
ifstream m_input;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
3
wscript
3
wscript
|
@ -21,6 +21,7 @@ def build(bld):
|
||||||
'model/mock-net-device.cc',
|
'model/mock-net-device.cc',
|
||||||
'model/mock-channel.cc',
|
'model/mock-channel.cc',
|
||||||
'helper/nd-cache-helper.cc',
|
'helper/nd-cache-helper.cc',
|
||||||
|
'utils/leo-input-fstream-container.cc',
|
||||||
]
|
]
|
||||||
|
|
||||||
module_test = bld.create_ns3_module_test_library('leo')
|
module_test = bld.create_ns3_module_test_library('leo')
|
||||||
|
@ -29,6 +30,7 @@ def build(bld):
|
||||||
'test/isl-test-suite.cc',
|
'test/isl-test-suite.cc',
|
||||||
'test/isl-mock-channel-test-suite.cc',
|
'test/isl-mock-channel-test-suite.cc',
|
||||||
'test/leo-mock-channel-test-suite.cc',
|
'test/leo-mock-channel-test-suite.cc',
|
||||||
|
'test/leo-input-fstream-container-test-suite.cc',
|
||||||
]
|
]
|
||||||
|
|
||||||
headers = bld(features='ns3header')
|
headers = bld(features='ns3header')
|
||||||
|
@ -46,6 +48,7 @@ def build(bld):
|
||||||
'model/mock-net-device.h',
|
'model/mock-net-device.h',
|
||||||
'model/mock-channel.h',
|
'model/mock-channel.h',
|
||||||
'helper/nd-cache-helper.h',
|
'helper/nd-cache-helper.h',
|
||||||
|
'utils/leo-input-fstream-container.h',
|
||||||
]
|
]
|
||||||
|
|
||||||
if bld.env.ENABLE_EXAMPLES:
|
if bld.env.ENABLE_EXAMPLES:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue