add Position::DoSet et al.

This commit is contained in:
Mathieu Lacage
2007-07-02 10:50:18 +02:00
parent 8894524474
commit 418adb52a4
6 changed files with 66 additions and 102 deletions

View File

@@ -55,6 +55,41 @@ Position::GetZ (void) const
return z;
}
void
Position::Set (double x, double y, double z)
{
DoSet (x, y, z);
}
void
Position::SetXY (double x, double y)
{
double currentX, currentY, currentZ;
DoGet (currentX, currentY, currentZ);
DoSet (x, y, currentZ);
}
void
Position::SetX (double x)
{
double currentX, currentY, currentZ;
DoGet (currentX, currentY, currentZ);
DoSet (x, currentY, currentZ);
}
void
Position::SetY (double y)
{
double currentX, currentY, currentZ;
DoGet (currentX, currentY, currentZ);
DoSet (currentX, y, currentZ);
}
void
Position::SetZ (double z)
{
double currentX, currentY, currentZ;
DoGet (currentX, currentY, currentZ);
DoSet (currentX, currentY, z);
}
double
Position::GetDistanceFrom (const Position &position) const
{

View File

@@ -66,6 +66,12 @@ public:
* Unit is meters
*/
double GetZ (void) const;
void Set (double x, double y, double z);
void SetXY (double x, double y);
void SetX (double x);
void SetY (double y);
void SetZ (double z);
/**
* \param position a reference to another position object instance
* \returns the distance between the two objects.
@@ -85,6 +91,7 @@ private:
* Unit is meters
*/
virtual void DoGet (double &x, double &y, double &z) const = 0;
virtual void DoSet (double x, double y, double z) const = 0;
};
}; // namespace ns3

View File

@@ -33,8 +33,19 @@ StaticPosition::StaticPosition (double x, double y, double z)
StaticPosition::~StaticPosition ()
{}
void
StaticPosition::NotifyPositionChange (void) const
{}
void
StaticPosition::Set (double x, double y, double z)
StaticPosition::DoGet (double &x, double &y, double &z) const
{
x = m_x;
y = m_y;
z = m_z;
}
void
StaticPosition::DoSet (double x, double y, double z)
{
bool mustNotify = false;
if (x != m_x ||
@@ -51,59 +62,6 @@ StaticPosition::Set (double x, double y, double z)
NotifyPositionChange ();
}
}
void
StaticPosition::SetX (double x)
{
bool mustNotify = false;
if (x != m_x)
{
mustNotify = true;
}
m_x = x;
if (mustNotify)
{
NotifyPositionChange ();
}
}
void
StaticPosition::SetY (double y)
{
bool mustNotify = false;
if (y != m_y)
{
mustNotify = true;
}
m_y = y;
if (mustNotify)
{
NotifyPositionChange ();
}
}
void
StaticPosition::SetZ (double z)
{
bool mustNotify = false;
if (z != m_z)
{
mustNotify = true;
}
m_z = z;
if (mustNotify)
{
NotifyPositionChange ();
}
}
void
StaticPosition::NotifyPositionChange (void) const
{}
void
StaticPosition::DoGet (double &x, double &y, double &z) const
{
x = m_x;
y = m_y;
z = m_z;
}
}; // namespace ns3

View File

@@ -49,33 +49,6 @@ public:
StaticPosition (double x, double y, double z);
virtual ~StaticPosition ();
/**
* \param x x coordinate
* \param y y coordinate
* \param z z coordinate
*
* Set all 3 coordinates at the same time.
* Unit is meters
*/
void Set (double x, double y, double z);
/**
* \param x x coordinate
*
* Set x coordinate. Unit is meters
*/
void SetX (double x);
/**
* \param y y coordinate
*
* Set y coordinate. Unit is meters
*/
void SetY (double y);
/**
* \param z z coordinate
*
* Set z coordinate. Unit is meters
*/
void SetZ (double z);
private:
/**
* Subclasses must override this virtual method to be notified
@@ -85,6 +58,7 @@ private:
*/
virtual void NotifyPositionChange (void) const;
virtual void DoGet (double &x, double &y, double &z) const;
virtual void DoSet (double x, double y, double z);
double m_x;
double m_y;
double m_z;

View File

@@ -57,15 +57,6 @@ StaticSpeedPosition::StaticSpeedPosition (double x, double y, double z,
StaticSpeedPosition::~StaticSpeedPosition ()
{}
void
StaticSpeedPosition::SetPosition (double x, double y, double z)
{
Update ();
m_x = x;
m_y = y;
m_z = z;
}
void
StaticSpeedPosition::SetSpeed (double dx, double dy, double dz)
{
@@ -87,12 +78,20 @@ StaticSpeedPosition::Update (void) const
}
void
StaticSpeedPosition::RealGet (double &x, double &y, double &z) const
StaticSpeedPosition::DoGet (double &x, double &y, double &z) const
{
Update ();
x = m_x;
y = m_y;
z = m_z;
}
void
StaticSpeedPosition::DoSet (double x, double y, double z)
{
Update ();
m_x = x;
m_y = y;
m_z = z;
}
}; // namespace ns3

View File

@@ -62,16 +62,6 @@ public:
double dx, double dy, double dz);
virtual ~StaticSpeedPosition ();
/**
* \param x x coordinate
* \param y y coordinate
* \param z z coordinate
*
* Set the current position now to (x,y,z)
* Unit is meters
*/
void SetPosition (double x, double y, double z);
/*
* \param dx x coordinate speed
* \param dy y coordinate speed
@@ -82,7 +72,8 @@ public:
*/
void SetSpeed (double dx, double dy, double dz);
private:
virtual void RealGet (double &x, double &y, double &z) const;
virtual void DoGet (double &x, double &y, double &z) const;
virtual void DoSet (double x, double y, double z);
void Update (void) const;
mutable double m_x;
mutable double m_y;