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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
<?php
require($ADEI_ROOTDIR . "/classes/filters/nullcorrector.php");
interface SIMPLEDataFilter {
public function ProcessVector(&$data, &$time, &$values);
}
class DATAFilter {
var $resample;
var $limit;
var $mask;
var $filters;
function __construct(MASK $mask = NULL, $resample = 0, $limit = 0) {
$this->filters = array();
$this->resample = $resample;
$this->limit = $limit;
if (($mask)&&($mask->ids)) $this->mask = $mask;
else $this->mask = false;
}
function AddFilter(SIMPLEDataFilter $filter) {
array_push($this->filters, $filter);
}
function AddReaderFilters(READER $rdr, LOGGROUP $grp, array $filters) {
foreach ($filters as $filter => &$opts) {
if (!include_once("filters/" . strtolower($filter) . ".php")) {
throw new ADEIException(translate("Unsupported data filter is configured: \"%s\"", $filter));
}
$filter_class = "READER_$filter";
$this->AddFilter(new $filter_class($rdr, $grp, $opts));
}
}
function GetSamplingRate() {
return $this->resample;
}
function GetVectorsLimit() {
return $this->limit;
}
function GetItemMask() {
return $this->mask;
}
function MaskVector(&$data, &$time, &$values) {
if (isset($data['masked'])) return;
$mask = $this->GetItemMask();
if ($mask) {
$masked = array();
foreach ($mask->ids as $id)
array_push($masked, $values[$id]);
$values = $masked;
$data['masked'] = true;
}
}
function RealProcessVector(&$data, &$time, &$values, $auto_mask) {
if (!$opts) $opts = array();
foreach ($this->filters as $filter) {
if ($filter->ProcessVector($data, $time, $values)) return true;
}
if ($auto_mask) $this->MaskVector($data, $time, $values);
return false;
}
function ProcessVector($data, &$time, &$values, $auto_mask = true) {
return $this->RealProcessVector($data, $time, $values, $auto_mask);
}
function Process(Iterator $real_data, $filter_data) {
return new FILTERData($real_data, $this, $filter_data);
}
}
class SUPERDataFilter extends DATAFilter {
var $filter;
function __construct(DATAFilter $sub_filter, READER $rdr, LOGGROUP $grp, array $filters = NULL, MASK $mask = NULL, $resample = 0, $limit = 0) {
parent::__construct($rdr, $grp, $filters, $mask, $resample, $limit);
$this->filter = $sub_filter;
}
function GetSamplingRate() {
if ($this->resample) return $this->resample;
return $this->filter->GetSamplingRate();
}
function GetVectorsLimit() {
if ($this->limit) return $this->limit;
return $this->filter->GetVectorsLimit();
}
function GetItemMask() {
if ($this->mask) return $this->mask;
return $this->filter->GetItemMask();
}
function ProcessVector($data, &$time, &$values, $auto_mask = true) {
if (parent::RealProcessVector($data, $time, $values, false)) return true;
if ($this->filter->RealProcessVector($data, $time, $values, false)) return true;
if ($auto_mask) $this->MaskVector($data, $time, $values);
return false;
}
}
?>
|