/adei/ui

To get this branch, use:
bzr branch http://darksoft.org/webbzr/adei/ui
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;
 }
}


?>