![]() |
User Manual, Developers Guide and API Documentation |
![]() |
00001 /****************************************************************************** 00002 * WNS (Wireless Network Simulator) * 00003 * __________________________________________________________________________ * 00004 * * 00005 * Copyright (C) 2004-2006 * 00006 * Chair of Communication Networks (ComNets) * 00007 * Kopernikusstr. 16, D-52074 Aachen, Germany * 00008 * phone: ++49-241-80-27910 (phone), fax: ++49-241-80-22242 * 00009 * email: wns@comnets.rwth-aachen.de * 00010 * www: http://wns.comnets.rwth-aachen.de * 00011 ******************************************************************************/ 00012 00013 #include <GLUE/BERProvider.hpp> 00014 #include <GLUE/BERConsumer.hpp> 00015 00016 #include <WNS/Assure.hpp> 00017 00018 #include <iostream> 00019 #include <algorithm> 00020 00021 using namespace glue; 00022 00023 BERProvider::BERProvider() : 00024 berConsumers() 00025 { 00026 } // BERProvider 00027 00028 00029 BERProvider::~BERProvider() 00030 { 00031 while(!this->berConsumers.empty()) 00032 { 00033 BERConsumer* bc = *(this->berConsumers.begin()); 00034 bc->onBERProviderDeleted(); 00035 this->detachBERConsumer(bc); 00036 } 00037 } // ~BERProvider 00038 00039 00040 void 00041 BERProvider::attachBERConsumer(BERConsumer* berConsumer) 00042 { 00043 assure(std::find(berConsumers.begin(), 00044 berConsumers.end(), 00045 berConsumer) 00046 == berConsumers.end(), 00047 "BERConsumer is already added to PERProvider"); 00048 00049 berConsumer->setBERProvider(this); 00050 this->berConsumers.push_back(berConsumer); 00051 } // attachBERConsumer 00052 00053 00054 void 00055 BERProvider::detachBERConsumer(BERConsumer* berConsumer) 00056 { 00057 assure(std::find(berConsumers.begin(), 00058 berConsumers.end(), 00059 berConsumer) 00060 != berConsumers.end(), 00061 "unknown BERConsumer"); 00062 00063 berConsumer->setBERProvider(NULL); 00064 this->berConsumers.remove(berConsumer); 00065 } // detachBERConsumer 00066 00067 00068 void 00069 BERProvider::notifyBERConsumers(double BER, int packetSize) const 00070 { 00071 BERConsumerContainer::const_iterator itEnd = this->berConsumers.end(); 00072 for (BERConsumerContainer::const_iterator it = this->berConsumers.begin(); 00073 it != itEnd; 00074 ++it) 00075 { 00076 (*it)->onNewMeasurement(BER, packetSize); 00077 } 00078 } // notifyBERConsumers 00079 00080 00081 const BERProvider::BERConsumerContainer& 00082 BERProvider::getBERConsumersAttached() const 00083 { 00084 return this->berConsumers; 00085 } // getBERConsumersAttached 00086 00087 00088
1.5.5