/usr/include/ns3.27/ns3/event-id.h is in libns3-dev 3.27+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* Copyright (c) 2005 INRIA
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
*/
#ifndef EVENT_ID_H
#define EVENT_ID_H
#include <stdint.h>
#include "ptr.h"
#include "event-impl.h"
/**
* \file
* \ingroup events
* ns3::EventId declarations.
*/
namespace ns3 {
class EventImpl;
/**
* \ingroup events
* \brief An identifier for simulation events.
*
* Each EventId identifies a unique event scheduled with one
* of the many Simulator::Schedule() methods. This EventId can
* be used to cancel or remove events after they are scheduled
* with Simulator::Cancel() or Simulator::Remove().
*
* The important thing to remember about this class is that
* every variable of this type is _always_ in a valid state,
* even when it has not been assigned an EventId coming from a
* Simulator::Schedule() method: calling Simulator::Cancel(), IsRunning(),
* IsExpired() or passing around instances of this object
* will not result in crashes or memory leaks.
*/
class EventId {
public:
/** Default constructor. This EventId does nothing. */
EventId ();
/**
* Construct a real event.
*
* \param [in] impl The implementation of this event.
* \param [in] ts The virtual time stamp this event should occur.
* \param [in] context The execution context for this event.
* \param [in] uid The unique id for this EventId.
*/
EventId (const Ptr<EventImpl> &impl, uint64_t ts, uint32_t context, uint32_t uid);
/**
* This method is syntactic sugar for the ns3::Simulator::Cancel
* method.
*/
void Cancel (void);
/**
* This method is syntactic sugar for the ns3::Simulator::IsExpired
* method.
* \returns \c true if the event has expired, \c false otherwise.
*/
bool IsExpired (void) const;
/**
* This method is syntactic sugar for !IsExpired().
*
* \returns \c true if the event has not expired, \c false otherwise.
*/
bool IsRunning (void) const;
public:
/**
* \name Scheduler Helpers.
* \brief These methods are normally invoked only by
* subclasses of the Scheduler base class.
*/
/**@{*/
/** \return The underlying EventImpl pointer. */
EventImpl *PeekEventImpl (void) const;
/** \return The virtual time stamp. */
uint64_t GetTs (void) const;
/** \return The event context. */
uint32_t GetContext (void) const;
/** \return The unique id. */
uint32_t GetUid (void) const;
/**@}*/
/**
* Test if two EventId's are equal.
* \param [in] a The first EventId.
* \param [in] b The second EventId.
* \return \c true if the \p a and \p b represent the same event.
*/
friend bool operator == (const EventId &a, const EventId &b);
/**
* Test if two EventId's are not equal.
* \param [in] a The first EventId.
* \param [in] b The second EventId.
* \return \c true if the \p a and \p b are not the same event.
*/
friend bool operator != (const EventId &a, const EventId &b);
/**
* Less than operator for two EventId's, based on time stamps.
* \param [in] a The first EventId.
* \param [in] b The second EventId.
* \return \c true if \p a occurs before \p b.
*/
friend bool operator < (const EventId &a, const EventId &b);
private:
Ptr<EventImpl> m_eventImpl; /**< The underlying event implementation. */
uint64_t m_ts; /**< The virtual time stamp. */
uint32_t m_context; /**< The context. */
uint32_t m_uid; /**< The unique id. */
};
/*************************************************
** Inline implementations
************************************************/
inline
bool
operator == (const EventId &a, const EventId &b)
{
return
a.m_uid == b.m_uid &&
a.m_context == b.m_context &&
a.m_ts == b.m_ts &&
a.m_eventImpl == b.m_eventImpl;
}
inline
bool
operator != (const EventId &a, const EventId &b)
{
return !(a == b);
}
inline
bool
operator < (const EventId &a, const EventId &b)
{
return (a.GetTs () < b.GetTs ());
}
} // namespace ns3
#endif /* EVENT_ID_H */
|