-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathApplication.cpp
executable file
·85 lines (72 loc) · 2.96 KB
/
Application.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//
// Application.cpp
// AggregationNS3
//
// Created by Alper Sinan Akyurek on 8/8/16.
// Copyright © 2016 Alper Sinan Akyurek. All rights reserved.
//
#include "Application.hpp"
#include "NoGainFunction.hpp"
Application::TApplicationId Application::globalIdCounter = 0;
Application::TApplicationMap Application::globalApplicationMap;
Application::Application( TGenerationPtr generation, TDeadlinePtr deadline ) : m_id( globalIdCounter ),
m_generationProcess( generation ),
m_deadlineProcess( deadline )
{
++globalIdCounter;
this->m_measurementQueue = ns3::Create<MeasurementQueue>();
this->m_generationProcess->SetId( this->m_id );
this->m_generationProcess->SetMeasurementQueue( this->m_measurementQueue );
this->SetMeasurementGainFunction( ns3::Create< NoGainFunction >() );
globalApplicationMap.insert( std::make_pair( this->m_id, this ) );
}
Application::Application( TGenerationPtr generation,
TDeadlinePtr deadline,
const TGainFunctionPtr & gainFunction ) : m_id( globalIdCounter ),
m_generationProcess( generation ),
m_deadlineProcess( deadline )
{
++globalIdCounter;
this->m_measurementQueue = ns3::Create<MeasurementQueue>();
this->m_generationProcess->SetId( this->m_id );
this->m_generationProcess->SetMeasurementQueue( this->m_measurementQueue );
this->SetMeasurementGainFunction( gainFunction );
globalApplicationMap.insert( std::make_pair( this->m_id, this ) );
}
void
Application::SetMeasurementGainFunction( const TGainFunctionPtr & gainFunction )
{
this->m_gainFunction = gainFunction;
this->m_gainFunction->SetProcesses( this->m_generationProcess, this->m_deadlineProcess );
}
void
Application::Print( void ) const
{
std::cout << "Application " << this->m_id << std::endl;
this->m_measurementQueue->Print();
}
GainFunction::TGain
Application::GetMeasurementGain( const GainFunction::TTransmissionTime & x ) const
{
return ( this->m_gainFunction->GetGain( x ) );
}
GainFunction::TGain
Application::GetMeasurementGainDerivative( const GainFunction::TTransmissionTime & x ) const
{
return ( this->m_gainFunction->GetGainDerivative( x ) );
}
void
Application::GetAllMeasurements( TMeasurementQueuePtr & measurementQueue )
{
for( auto i = this->m_measurementQueue->Begin(); i != this->m_measurementQueue->End(); ++i )
{
( *i )->SetDeadline( this->m_deadlineProcess->GetNextDeadline().GetSeconds() );
}
measurementQueue->Add( *( this->m_measurementQueue ) );
this->m_measurementQueue->Empty();
}
MeasurementQueue::TQueueSize
Application::GetNumberOfQueuedMeasurements( void ) const
{
return ( this->m_measurementQueue->Count() );
}