SUMO - Simulation of Urban MObility
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
TrackerValueDesc.cpp
Go to the documentation of this file.
1
/****************************************************************************/
10
// Storage for a tracked value
11
/****************************************************************************/
12
// SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
13
// Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
14
/****************************************************************************/
15
//
16
// This file is part of SUMO.
17
// SUMO is free software: you can redistribute it and/or modify
18
// it under the terms of the GNU General Public License as published by
19
// the Free Software Foundation, either version 3 of the License, or
20
// (at your option) any later version.
21
//
22
/****************************************************************************/
23
// ===========================================================================
24
// included modules
25
// ===========================================================================
26
#ifdef _MSC_VER
27
#include <
windows_config.h
>
28
#else
29
#include <
config.h
>
30
#endif
31
32
#include <string>
33
#include <vector>
34
#include <
utils/common/RGBColor.h
>
35
#include <
utils/gui/globjects/GUIGlObject.h
>
36
#include "
TrackerValueDesc.h
"
37
38
#ifdef CHECK_MEMORY_LEAKS
39
#include <
foreign/nvwa/debug_new.h
>
40
#endif // CHECK_MEMORY_LEAKS
41
42
43
// ===========================================================================
44
// method definitions
45
// ===========================================================================
46
TrackerValueDesc::TrackerValueDesc
(
const
std::string& name,
47
const
RGBColor
& col,
48
SUMOTime
recordBegin)
49
: myName(name), myActiveCol(col), myInactiveCol(col),
50
myMin(0), myMax(0),
51
myAggregationInterval(
TIME2STEPS
(1) /
DELTA_T
), myInvalidValue(-1), myValidNo(0),
52
myRecordingBegin(recordBegin), myTmpLastAggValue(0) {}
53
54
55
TrackerValueDesc::~TrackerValueDesc
() {
56
// just to quit cleanly on a failure
57
if
(
myLock
.
locked
()) {
58
myLock
.
unlock
();
59
}
60
}
61
62
63
void
64
TrackerValueDesc::addValue
(
SUMOReal
value) {
65
if
(
myValues
.size() == 0) {
66
myMin
= value;
67
myMax
= value;
68
}
else
{
69
myMin
= value <
myMin
? value :
myMin
;
70
myMax
= value >
myMax
? value :
myMax
;
71
}
72
AbstractMutex::ScopedLocker
locker(
myLock
);
73
myValues
.push_back(value);
74
if
(value !=
myInvalidValue
) {
75
myTmpLastAggValue
+= value;
76
myValidNo
++;
77
}
78
const
SUMOReal
avg =
myValidNo
== 0 ?
static_cast<
SUMOReal
>
(0) :
myTmpLastAggValue
/ static_cast<SUMOReal>(
myValidNo
);
79
if
(
myAggregationInterval
== 1 ||
myValues
.size() %
myAggregationInterval
== 1) {
80
myAggregatedValues
.push_back(avg);
81
}
else
{
82
myAggregatedValues
.back() = avg;
83
}
84
if
(
myValues
.size() %
myAggregationInterval
== 0) {
85
myTmpLastAggValue
= 0;
86
myValidNo
= 0;
87
}
88
}
89
90
91
SUMOReal
92
TrackerValueDesc::getRange
()
const
{
93
return
myMax
-
myMin
;
94
}
95
96
97
SUMOReal
98
TrackerValueDesc::getMin
()
const
{
99
return
myMin
;
100
}
101
102
103
SUMOReal
104
TrackerValueDesc::getMax
()
const
{
105
return
myMax
;
106
}
107
108
109
SUMOReal
110
TrackerValueDesc::getYCenter
()
const
{
111
return
(
myMin
+
myMax
) / 2.0f;
112
}
113
114
115
const
RGBColor
&
116
TrackerValueDesc::getColor
()
const
{
117
return
myActiveCol
;
118
}
119
120
121
const
std::vector<SUMOReal>&
122
TrackerValueDesc::getValues
() {
123
myLock
.
lock
();
124
return
myValues
;
125
}
126
127
128
const
std::vector<SUMOReal>&
129
TrackerValueDesc::getAggregatedValues
() {
130
myLock
.
lock
();
131
return
myAggregatedValues
;
132
}
133
134
135
const
std::string&
136
TrackerValueDesc::getName
()
const
{
137
return
myName
;
138
}
139
140
void
141
TrackerValueDesc::unlockValues
() {
142
myLock
.
unlock
();
143
}
144
145
146
void
147
TrackerValueDesc::setAggregationSpan
(
SUMOTime
as) {
148
AbstractMutex::ScopedLocker
locker(
myLock
);
149
if
(
myAggregationInterval
!= as /
DELTA_T
) {
150
myAggregationInterval
= as /
DELTA_T
;
151
// ok, the aggregation has changed,
152
// let's recompute the list of aggregated values
153
myAggregatedValues
.clear();
154
std::vector<SUMOReal>::const_iterator i =
myValues
.begin();
155
while
(i !=
myValues
.end()) {
156
myTmpLastAggValue
= 0;
157
myValidNo
= 0;
158
for
(
int
j = 0; j <
myAggregationInterval
&& i !=
myValues
.end(); j++, ++i) {
159
if
((*i) !=
myInvalidValue
) {
160
myTmpLastAggValue
+= (*i);
161
myValidNo
++;
162
}
163
}
164
if
(
myValidNo
== 0) {
165
myAggregatedValues
.push_back(0);
166
}
else
{
167
myAggregatedValues
.push_back(
myTmpLastAggValue
/ static_cast<SUMOReal>(
myValidNo
));
168
}
169
}
170
}
171
}
172
173
174
SUMOTime
175
TrackerValueDesc::getAggregationSpan
()
const
{
176
return
(
SUMOTime
)(
myAggregationInterval
) *
DELTA_T
;
177
}
178
179
180
SUMOTime
181
TrackerValueDesc::getRecordingBegin
()
const
{
182
return
myRecordingBegin
;
183
}
184
185
186
187
/****************************************************************************/
188
build
buildd
sumo-0.17.1~dfsg
src
utils
gui
tracker
TrackerValueDesc.cpp
Generated on Sun Jun 16 2013 17:30:20 for SUMO - Simulation of Urban MObility by
1.8.3.1