wireless_comm_signal.hpp

00001 
00002 #ifndef WIRELESS_COMM_SIGNAL_H
00003 #define WIRELESS_COMM_SIGNAL_H
00004 
00005 #include <boost/shared_ptr.hpp>
00006 
00007 #include "signal.hpp"
00008 #include "packet.hpp"
00009 
00010 class SimTime;
00011 
00015 class WirelessCommSignal : public Signal {
00016    friend ostream& operator<< (ostream& s, const WirelessCommSignal& rhs);
00017 public:
00019    typedef boost::shared_ptr<WirelessCommSignal> WirelessCommSignalPtr;
00020 
00025    static inline WirelessCommSignalPtr create(
00026       const Location& location, double dbStrength, 
00027       double wavelength, double transmitterGain,
00028       PacketPtr packet);
00029    
00034    static inline WirelessCommSignalPtr create(
00035       const WirelessCommSignal& rhs);
00036 
00041    inline PacketPtr getPacketPtr() const;
00042 
00047    inline double getWavelength() const;
00048 
00053    inline double getTransmitterGain() const;
00054 
00059    SimTime getDuration() const;
00060 
00065    inline void setChannelId(t_uint channelId);
00066 
00071    inline t_uint getChannelId() const;
00072 
00073 protected:
00074 
00076    WirelessCommSignal(const Location& location, double dbStrength, 
00077       double wavelength, double transmitterGain, 
00078       PacketPtr packet);
00079 
00081    WirelessCommSignal(const WirelessCommSignal& rhs);
00082 
00083    virtual SignalPtr clone() const;
00084 
00085 private:
00086 
00088    static const t_uint m_DEFAULT_CHANNEL_ID = 0;
00089 
00092    PacketPtr m_packetPtr;
00093 
00096    double m_wavelength;
00097 
00100    double m_transmitterGain;
00101 
00104    t_uint m_channelId;
00105 
00107    WirelessCommSignal& operator= (const WirelessCommSignal& rhs);
00108 
00109 };
00110 typedef boost::shared_ptr<WirelessCommSignal> WirelessCommSignalPtr;
00111 typedef boost::shared_ptr<WirelessCommSignal const> 
00112    ConstWirelessCommSignalPtr;
00113 
00115 // Inline Functions
00117 
00118 inline WirelessCommSignalPtr WirelessCommSignal::create(
00119    const Location& location, double dbStrength,
00120    double wavelength, double transmitterGain,
00121    PacketPtr packet)
00122 {
00123    WirelessCommSignalPtr p(new WirelessCommSignal(location, 
00124       dbStrength, wavelength, transmitterGain, packet));
00125    return p;
00126 }
00127 
00128 inline WirelessCommSignalPtr WirelessCommSignal::create(
00129    const WirelessCommSignal& rhs)
00130 {
00131    WirelessCommSignalPtr p = 
00132       boost::dynamic_pointer_cast<WirelessCommSignal>(rhs.clone());
00133    // If the shared_ptr is empty, then the cast failed.
00134    assert(p.get() != 0);
00135    return p;
00136 }
00137 
00138 inline PacketPtr WirelessCommSignal::getPacketPtr() const
00139 {
00140    return m_packetPtr;
00141 }
00142 
00143 inline double WirelessCommSignal::getWavelength() const
00144 {
00145    return m_wavelength;
00146 }
00147 
00148 inline double WirelessCommSignal::getTransmitterGain() const
00149 {
00150    return m_transmitterGain;
00151 }
00152 
00153 inline void WirelessCommSignal::setChannelId(t_uint channelId)
00154 {
00155    m_channelId = channelId;
00156 }
00157 
00158 inline t_uint WirelessCommSignal::getChannelId() const
00159 {
00160    return m_channelId;
00161 }
00162 
00164 // Overloaded Operators
00166 
00167 inline ostream& operator<< (ostream& s, const WirelessCommSignal& rhs)
00168 {
00169    return s << "Wireless signal state (" << 
00170       static_cast<Signal>(rhs) << "), packet=(" << 
00171       *(rhs.m_packetPtr) << ")";
00172 }
00173 
00174 // The assignment operator is now disabled via a private modifier.
00175 /*
00176 inline WirelessCommSignal& WirelessCommSignal::operator= 
00177    (const WirelessCommSignal& rhs)
00178 {
00179    if(this == &rhs)
00180       return *this;
00181 
00182    Signal::operator=(rhs);
00183    m_packetPtr = Packet::create(*rhs.m_packetPtr);
00184 
00185    return *this;
00186 }
00187 */
00188 
00189 #endif // WIRELESS_COMM_SIGNAL_H
00190 

Generated on Tue Dec 12 17:04:39 2006 for rfidsim by  doxygen 1.4.7