00001 // 00002 // Copyright (C) 2009 Institut fuer Telematik, Universitaet Karlsruhe (TH) 00003 // 00004 // This program is free software; you can redistribute it and/or 00005 // modify it under the terms of the GNU General Public License 00006 // as published by the Free Software Foundation; either version 2 00007 // of the License, or (at your option) any later version. 00008 // 00009 // This program is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with this program; if not, write to the Free Software 00016 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00017 // 00018 00025 #ifndef PROXNODEHANDLE_H_ 00026 #define PROXNODEHANDLE_H_ 00027 00028 #include <cfloat> 00029 00030 #include "NodeHandle.h" 00031 00032 00033 struct Prox 00034 { 00035 static const Prox PROX_SELF; 00036 static const Prox PROX_UNKNOWN; 00037 static const Prox PROX_TIMEOUT; 00038 //static const Prox PROX_WAITING; 00039 00040 double proximity; // [0 - INF) 00041 double accuracy; // [0 - 1] 1: exact value, 0: no information available 00042 00043 operator double(); 00044 operator simtime_t(); 00045 00046 Prox(); 00047 Prox(simtime_t prox); 00048 Prox(simtime_t prox, double acc); 00049 Prox(double prox, double acc); 00050 00051 bool operator==(Prox p) const; 00052 bool operator!=(Prox p) const; 00053 00054 friend std::ostream& operator<<(std::ostream& os, const Prox& prox); 00055 }; 00056 00057 struct ProxKey 00058 { 00059 ProxKey(const Prox& prox, const OverlayKey& key) : prox(prox), key(key) { }; 00060 Prox prox; 00061 OverlayKey key; 00062 }; 00063 00064 00065 class ProxNodeHandle : public NodeHandle 00066 { 00067 protected: 00068 Prox prox; 00069 00070 public: 00071 static const ProxNodeHandle UNSPECIFIED_NODE; 00072 ProxNodeHandle(); 00073 ProxNodeHandle(const NodeHandle& nodeHandle); 00074 ProxNodeHandle(const NodeHandle& nodeHandle, const Prox& prox); 00075 virtual ~ProxNodeHandle(); 00076 00077 inline void setProx(Prox prox) { this->prox = prox; }; 00078 inline Prox getProx() const { return prox; }; 00079 }; 00080 00081 #endif /* PROXNODEHANDLE_H_ */