00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "MultiNodeStatistics.h"
00032 #include "dtn/Node.h"
00033
00034 #include <iostream>
00035
00036 MultiNodeStatistics::MultiNodeStatistics() :
00037 Statistics(0)
00038 {
00039 }
00040
00041 unsigned long int
00042 MultiNodeStatistics::used() const
00043 {
00044 unsigned long int total = 0;
00045 NodeList::const_iterator itr = m_nodes.begin();
00046 NodeList::const_iterator end = m_nodes.end();
00047 for ( ; itr != end ; ++itr )
00048 {
00049 if ( 0 != *itr )
00050 {
00051 total += (*itr)->usedPersistentCap();
00052 }
00053 }
00054
00055 return total;
00056 }
00057
00058 unsigned long int
00059 MultiNodeStatistics::capacity() const
00060 {
00061 unsigned long int total = 0;
00062 NodeList::const_iterator itr = m_nodes.begin();
00063 NodeList::const_iterator end = m_nodes.end();
00064 for ( ; itr != end ; ++itr )
00065 {
00066 if ( 0 != *itr )
00067 {
00068 total += (*itr)->persistentCap();
00069 }
00070 }
00071
00072 return total;
00073 }
00074
00075 double
00076 MultiNodeStatistics::maxUsed() const
00077 {
00078 double retval = 0;
00079 NodeList::const_iterator itr = m_nodes.begin();
00080 NodeList::const_iterator end = m_nodes.end();
00081 for ( ; itr != end ; ++itr )
00082 {
00083 if ( 0 != *itr )
00084 {
00085 if ( (*itr)->persistentCap() > 0 )
00086 {
00087 double f =
00088 (double)((*itr)->usedPersistentCap()) / (*itr)->persistentCap();
00089 if ( f > retval ) retval = f;
00090 }
00091 }
00092 }
00093
00094 return retval;
00095 }
00096
00097 void
00098 MultiNodeStatistics::persistentStore( const DTN::Bundle& b )
00099 {
00100 NodeList::const_iterator itr = m_nodes.begin();
00101 NodeList::const_iterator end = m_nodes.end();
00102 for ( ; itr != end ; ++itr )
00103 {
00104 if ( 0 != *itr )
00105 {
00106 unsigned long int cap = (*itr)->persistentCap();
00107 unsigned long int used = (*itr)->usedPersistentCap();
00108 if ( used >= cap )
00109 {
00110 m_since.setExhausted();
00111 m_total.setExhausted();
00112 return;
00113 }
00114 }
00115 }
00116 }
00117
00118 void
00119 MultiNodeStatistics::addNode( DTN::Node* n )
00120 {
00121 if ( 0 == n ) return;
00122 m_nodes.push_back( n );
00123 }