![]() |
User Manual, Developers Guide and API Documentation |
![]() |
00001 /******************************************************************************* 00002 * This file is part of openWNS (open Wireless Network Simulator) 00003 * _____________________________________________________________________________ 00004 * 00005 * Copyright (C) 2004-2007 00006 * Chair of Communication Networks (ComNets) 00007 * Kopernikusstr. 5, D-52074 Aachen, Germany 00008 * phone: ++49-241-80-27910, 00009 * fax: ++49-241-80-22242 00010 * email: info@openwns.org 00011 * www: http://www.openwns.org 00012 * _____________________________________________________________________________ 00013 * 00014 * openWNS is free software; you can redistribute it and/or modify it under the 00015 * terms of the GNU Lesser General Public License version 2 as published by the 00016 * Free Software Foundation; 00017 * 00018 * openWNS is distributed in the hope that it will be useful, but WITHOUT ANY 00019 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 00020 * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 00021 * details. 00022 * 00023 * You should have received a copy of the GNU Lesser General Public License 00024 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00025 * 00026 ******************************************************************************/ 00027 00028 #include <RISE/transceiver/cache/propcacheentry.hpp> 00029 #include <RISE/transceiver/cache/idvectorcache.hpp> 00030 #include <RISE/transceiver/transmitter.hpp> 00031 #include <RISE/transceiver/receiver.hpp> 00032 #include <RISE/transmissionobjects/transmissionobject.hpp> 00033 #include <RISE/antenna/Antenna.hpp> 00034 #include <RISE/stations/station.hpp> 00035 #include <WNS/Position.hpp> 00036 #include <RISE/manager/systemmanager.hpp> 00037 #include <WNS/PowerRatio.hpp> 00038 00039 using namespace std; 00040 using namespace __gnu_cxx; 00041 using namespace rise; 00042 00043 IdVectorCache::IdVectorCache(receiver::ReceiverInterface* r) 00044 : PropagationCache(r, "IdVector"), 00045 pathlossShadowGain(CacheVector()) 00046 {} 00047 00048 IdVectorCache::~IdVectorCache() 00049 {} 00050 00051 wns::Ratio IdVectorCache::getLoss(Transmitter* t, double frequency) 00052 { 00053 unsigned long int tId = t->getTransmitterId(); 00054 if(!transmitters.contains(t)) 00055 attach(t, tId); 00056 PropCacheEntry& vectorEntry = pathlossShadowGain.at(tId); 00057 if(!vectorEntry.isValid()){ 00058 updatePropEntry(vectorEntry, t, frequency); 00059 } 00060 return vectorEntry.getTotalLoss(); 00061 } 00062 00063 void IdVectorCache::attach(Transmitter *t, unsigned long int tId) 00064 { 00065 transmitters.push_front(t); 00066 if(pathlossShadowGain.size() <= tId) 00067 { 00068 unsigned long int size = tId+1; 00069 pathlossShadowGain = vector<PropCacheEntry>(size); 00070 } 00071 00072 } 00073 00074 void IdVectorCache::invalidatePropagationEntries( Transmitter* t) 00075 { 00076 unsigned long int tId = t->getTransmitterId(); 00077 if(pathlossShadowGain.size() <= tId) 00078 attach(t, tId); 00079 PropCacheEntry& vectorEntry = pathlossShadowGain.at(tId); 00080 vectorEntry.setValid(false); 00081 } 00082 00083 void IdVectorCache::invalidatePropagationEntries() 00084 { 00085 TransmitterIterator itrTEnd = transmitters.end(); 00086 for(TransmitterIterator itrT = transmitters.begin(); 00087 itrT!=itrTEnd; 00088 ++itrT) 00089 { 00090 unsigned long int tId = (*itrT)->getTransmitterId(); 00091 PropCacheEntry& vectorEntry = pathlossShadowGain.at(tId); 00092 vectorEntry.setValid(false); 00093 } 00094 } 00095 00096
1.5.5