Commit 2a24088cb94976e35dc48e85d9d5c7115e18d8b3

Authored by Benjamin Renard
1 parent 5446b8f0

Split some source files

php/classes/CatIntervalCacheObject.php 0 → 100644
... ... @@ -0,0 +1,105 @@
  1 +<?php
  2 +
  3 +class CatIntervalCacheObject extends IntervalCacheObject
  4 +{
  5 + // for catalog
  6 + private $params = array();
  7 +
  8 + public function toArray()
  9 + {
  10 + $result = array(
  11 + "cacheId" => $this->id,
  12 + "start" => $this->getStartToISO(),
  13 + "stop" => $this->getStopToISO()
  14 + );
  15 + if ($this->isNew)
  16 + $result["isNew"] = true;
  17 +
  18 + if ($this->isModified)
  19 + $result["isModified"] = true;
  20 +
  21 + for ($i = 0; $i < count($this->params); $i++)
  22 + {
  23 + $paramObject = array();
  24 + $index = 'param'.sprintf("%d",$i+2);
  25 + $result[$index] = $this->params[$i];
  26 + }
  27 + return $result;
  28 + }
  29 +
  30 + // for catalog
  31 + public function setParams($params)
  32 + {
  33 + $this->params = $params;
  34 + }
  35 +
  36 + public function getParams()
  37 + {
  38 + return $this->params;
  39 + }
  40 +
  41 + public function writeBin($handle, $paramsNumber, $paramsSizes, $paramsTypes)
  42 + {
  43 + fwrite($handle,pack('L6',$this->id,$this->index,$this->start,$this->stop,$this->isNew,$this->isModified));
  44 + for ($i = 0; $i < $paramsNumber; $i++)
  45 + {
  46 + if ($paramsTypes[$i] == '2') // string
  47 + {
  48 + fwrite($handle,pack('d', strlen($this->params[$i])));
  49 + fwrite($handle, $this->params[$i],strlen($this->params[$i]));
  50 + }
  51 + else
  52 + {
  53 + if ($paramsTypes[$i] == '1')
  54 + $paramString = TimeUtils::iso2stamp($this->params[$i]);
  55 + else
  56 + $paramString = $this->params[$i];
  57 +
  58 + $paramArray = explode(',',$paramString);
  59 + for ($j = 0; $j < $paramsSizes[$i]; $j++) fwrite($handle,pack('d', $paramArray[$j]));
  60 + }
  61 + }
  62 + }
  63 +
  64 + public function loadBin($handle, $paramsNumber, $paramsSizes, $paramsTypes)
  65 + {
  66 + $array = unpack('L6int',fread($handle,6*4));
  67 + $this->id = $array['int1'];
  68 + $this->index = $array['int2'];
  69 + $this->start = $array['int3'];
  70 + $this->stop = $array['int4'];
  71 + $this->isNew = $array['int5'];
  72 + $this->isModified = $array['int6'];
  73 +
  74 + for ($i = 0; $i < $paramsNumber; $i++) {
  75 + $this->params[$i] = null;
  76 +
  77 + for ($j = 0; $j < $paramsSizes[$i]; $j++)
  78 + {
  79 + $val = unpack('dval',fread($handle,8));
  80 +
  81 + if ($paramsTypes[$i] == '2') // string
  82 + {
  83 + $this->params[$i] = fread($handle,$val['val']);
  84 + }
  85 + else
  86 + {
  87 + if ($paramsTypes[$i] == '1')
  88 + $this->params[$i] .= TimeUtils::stamp2iso($val['val']);
  89 + else
  90 + $this->params[$i] .= $val['val'];
  91 +
  92 + if ($j != $paramsSizes[$i] - 1) $this->params[$i] .= ',';
  93 + }
  94 + }
  95 + }
  96 +
  97 + }
  98 +
  99 + public function dump()
  100 + {
  101 + echo " => Interval : id = ".$this->id.", index = ".$this->index.", start = ".$this->start.", stop = ".$this->stop.", isNew = ".$this->isNew.", isModified = ".$this->isModified.PHP_EOL;
  102 + }
  103 +}
  104 +
  105 + ?>
... ...
php/classes/CatalogCacheMgr.php
... ... @@ -4,307 +4,6 @@
4 4 * @class CatalogCacheMgr
5 5 */
6 6  
7   -
8   -class CatIntervalCacheObject extends IntervalCacheObject
9   -{
10   - // for catalog
11   - private $params = array();
12   -
13   - public function toArray()
14   - {
15   - $result = array(
16   - "cacheId" => $this->id,
17   - "start" => $this->getStartToISO(),
18   - "stop" => $this->getStopToISO()
19   - );
20   - if ($this->isNew)
21   - $result["isNew"] = true;
22   -
23   - if ($this->isModified)
24   - $result["isModified"] = true;
25   -
26   - for ($i = 0; $i < count($this->params); $i++)
27   - {
28   - $paramObject = array();
29   - $index = 'param'.sprintf("%d",$i+2);
30   - $result[$index] = $this->params[$i];
31   - }
32   - return $result;
33   - }
34   -
35   - // for catalog
36   - public function setParams($params)
37   - {
38   - $this->params = $params;
39   - }
40   -
41   - public function getParams()
42   - {
43   - return $this->params;
44   - }
45   -
46   - public function writeBin($handle, $paramsNumber, $paramsSizes, $paramsTypes)
47   - {
48   - fwrite($handle,pack('L6',$this->id,$this->index,$this->start,$this->stop,$this->isNew,$this->isModified));
49   - for ($i = 0; $i < $paramsNumber; $i++)
50   - {
51   - if ($paramsTypes[$i] == '2') // string
52   - {
53   - fwrite($handle,pack('d', strlen($this->params[$i])));
54   - fwrite($handle, $this->params[$i],strlen($this->params[$i]));
55   - }
56   - else
57   - {
58   - if ($paramsTypes[$i] == '1')
59   - $paramString = TimeUtils::iso2stamp($this->params[$i]);
60   - else
61   - $paramString = $this->params[$i];
62   -
63   - $paramArray = explode(',',$paramString);
64   - for ($j = 0; $j < $paramsSizes[$i]; $j++) fwrite($handle,pack('d', $paramArray[$j]));
65   - }
66   - }
67   - }
68   -
69   - public function loadBin($handle, $paramsNumber, $paramsSizes, $paramsTypes)
70   - {
71   - $array = unpack('L6int',fread($handle,6*4));
72   - $this->id = $array['int1'];
73   - $this->index = $array['int2'];
74   - $this->start = $array['int3'];
75   - $this->stop = $array['int4'];
76   - $this->isNew = $array['int5'];
77   - $this->isModified = $array['int6'];
78   -
79   - for ($i = 0; $i < $paramsNumber; $i++) {
80   - $this->params[$i] = null;
81   -
82   - for ($j = 0; $j < $paramsSizes[$i]; $j++)
83   - {
84   - $val = unpack('dval',fread($handle,8));
85   -
86   - if ($paramsTypes[$i] == '2') // string
87   - {
88   - $this->params[$i] = fread($handle,$val['val']);
89   - }
90   - else
91   - {
92   - if ($paramsTypes[$i] == '1')
93   - $this->params[$i] .= TimeUtils::stamp2iso($val['val']);
94   - else
95   - $this->params[$i] .= $val['val'];
96   -
97   - if ($j != $paramsSizes[$i] - 1) $this->params[$i] .= ',';
98   - }
99   - }
100   - }
101   -
102   - }
103   -
104   - public function dump()
105   - {
106   - echo " => Interval : id = ".$this->id.", index = ".$this->index.", start = ".$this->start.", stop = ".$this->stop.", isNew = ".$this->isNew.", isModified = ".$this->isModified.PHP_EOL;
107   - }
108   -}
109   -
110   -class CatalogCacheObject extends TimeTableCacheObject
111   -{
112   - private $paramsNumber;
113   - private $paramsSizes = array();
114   - private $paramsTypes = array();
115   -
116   - public function addInterval($startIso, $stopIso, $params, $isNew = false, $index = -1)
117   - {
118   - $interval = new CatIntervalCacheObject($this->lastId, count($this->intervals));
119   - ++$this->lastId;
120   - $interval->setStartFromISO($startIso);
121   - $interval->setStopFromISO($stopIso);
122   - // for catalog
123   - $interval->setParams($params);
124   -
125   - $interval->setIsNew($isNew);
126   - array_push($this->intervals, $interval);
127   -
128   - if ($index < 0)
129   - array_push($this->indexes, count($this->intervals) - 1);
130   - else
131   - array_splice($this->indexes, $index, 0, array(count($this->intervals) - 1));
132   -
133   - if ($isNew)
134   - $this->isModified = true;
135   -
136   - return $interval;
137   - }
138   -
139   - public function setParamsNumber($number)
140   - {
141   - $this->paramsNumber = $number;
142   - }
143   -
144   - public function setParamsSizes($params)
145   - {
146   - for ($i = 0; $i < $this->paramsNumber; $i++)
147   - $this->paramsSizes[$i] = $params[$i]['size'];
148   - }
149   -
150   - public function setParamsTypes($params)
151   - {
152   - for ($i = 0; $i < $this->paramsNumber; $i++)
153   - $this->paramsTypes[$i] = $params[$i]['type'];
154   - }
155   -
156   - public function writeBin($handle)
157   - {
158   - //Magic key ("TTC")
159   - fwrite($handle,pack('C3',ord('T'),ord('T'),ord('C')));
160   -
161   - //Version
162   - fwrite($handle,pack('L',TimeTableCacheObject::$format_version));
163   -
164   - //Token
165   - for ($i = 0; $i < TimeTableCacheObject::$token_len; ++$i)
166   - fwrite($handle,pack('C',ord($this->token[$i])));
167   -
168   - //Modified
169   - fwrite($handle,pack('L',$this->isModified));
170   -
171   - //Filter
172   - $this->filter->writeBin($handle);
173   -
174   - //Sort
175   - $this->sort->writeBin($handle);
176   -
177   - //Params Number
178   - fwrite($handle,pack('L',$this->paramsNumber));
179   -
180   - //Params Sizes
181   - for ($i = 0; $i < $this->paramsNumber; $i++)
182   - fwrite($handle,pack('L',$this->paramsSizes[$i]));
183   -
184   - //Params Types
185   - for ($i = 0; $i < $this->paramsNumber; $i++)
186   - fwrite($handle,pack('L',$this->paramsTypes[$i]));
187   -
188   - //Intervals
189   - fwrite($handle,pack('L2', count($this->intervals), $this->lastId));
190   -
191   -
192   - foreach($this->intervals as $interval)
193   - $interval->writeBin($handle,$this->paramsNumber,$this->paramsSizes, $this->paramsTypes);
194   -
195   - //Indexes
196   - fwrite($handle,pack('L',count($this->indexes)));
197   - foreach($this->indexes as $index)
198   - fwrite($handle,pack('L',$index));
199   - }
200   -
201   - public function loadBin($handle) {
202   - //Magic key ("TTC")
203   - if (!$res = unpack('C3key',fread($handle,3)))
204   - return false;
205   -
206   - if (($res['key1'] != ord('T')) || ($res['key2'] != ord('T')) || ($res['key3'] != ord('C')))
207   - return false;
208   -
209   - //Version
210   - if (!$res = unpack('Lversion',fread($handle,4)))
211   - return false;
212   - if (($res['version'] != TimeTableCacheObject::$format_version))
213   - return false;
214   -
215   - //Token
216   - $token = "";
217   - for ($i = 0; $i < TimeTableCacheObject::$token_len; ++$i)
218   - {
219   - if (!$res = unpack('Ctoken',fread($handle,1)))
220   - return false;
221   - $token .= chr($res['token']);
222   - }
223   - $this->token = $token;
224   -
225   - //Modified
226   - if (!$res = unpack('Lmodified',fread($handle,4)))
227   - return false;
228   - $this->isModified = $res['modified'];
229   -
230   - //Filter
231   - $this->filter->loadBin($handle);
232   -
233   - //Sort
234   - $this->sort->loadBin($handle);
235   -
236   - //ParamsNumber
237   - if (!$res = unpack('Lnumber',fread($handle,4)))
238   - return false;
239   - $this->paramsNumber = $res['number'];
240   -
241   - //ParamsSizes
242   - for ($i = 0; $i < $this->paramsNumber; $i++) {
243   - if (!$res = unpack('Lsize',fread($handle,4)))
244   - return false;
245   - $this->paramsSizes[$i] = $res['size'];
246   - }
247   - //ParamsTypes
248   - for ($i = 0; $i < $this->paramsNumber; $i++) {
249   - if (!$res = unpack('Ltype',fread($handle,4)))
250   - return false;
251   - $this->paramsTypes[$i] = $res['type'];
252   - }
253   - //Intervals
254   - $res = unpack('L2data',fread($handle,2*4));
255   - $nbIntervals = $res['data1'];
256   - $this->lastId = $res['data2'];
257   -
258   - for ($i = 0; $i < $nbIntervals; ++$i)
259   - {
260   - $interval = new CatIntervalCacheObject(-1);
261   - $interval->loadBin($handle, $this->paramsNumber, $this->paramsSizes, $this->paramsTypes);
262   - array_push($this->intervals, $interval);
263   - }
264   -
265   - //Indexes
266   - $res = unpack('Ldata',fread($handle,4));
267   - $nbIndexes = $res['data'];
268   - for ($i = 0; $i < $nbIndexes; ++$i)
269   - {
270   - $res = unpack('Lindex',fread($handle,4));
271   - array_push($this->indexes, $res['index']);
272   - }
273   -
274   - return true;
275   - }
276   -
277   - public function modifyIntervalFromId($obj) {
278   -
279   - foreach ($this->intervals as $interval)
280   - {
281   - if ($interval->getId() == $obj->cacheId)
282   - {
283   - foreach((array)$obj as $key => $val) {
284   -
285   - if ($key == 'start')
286   - $interval->setStartFromISO($val);
287   - else if ($key == 'stop')
288   - $interval->setStopFromISO($val);
289   - else {
290   - if (strpos($key, 'param') === false)
291   - continue;
292   - $params = $interval->getParams();
293   - $paramIndex = (int)substr($key,5);
294   - $params[$paramIndex-2] = $val;
295   - $interval->setParams($params);
296   - }
297   - }
298   - $interval->setIsModified(true);
299   - $this->isModified = true;
300   - return true;
301   - }
302   - }
303   -
304   - return false;
305   - }
306   -}
307   -
308 7 class CatalogCacheMgr extends TimeTableCacheMgr
309 8 {
310 9  
... ...
php/classes/CatalogCacheObject.php 0 → 100644
... ... @@ -0,0 +1,201 @@
  1 +<?php
  2 +
  3 +class CatalogCacheObject extends TimeTableCacheObject
  4 +{
  5 + private $paramsNumber;
  6 + private $paramsSizes = array();
  7 + private $paramsTypes = array();
  8 +
  9 + public function addInterval($startIso, $stopIso, $params, $isNew = false, $index = -1)
  10 + {
  11 + $interval = new CatIntervalCacheObject($this->lastId, count($this->intervals));
  12 + ++$this->lastId;
  13 + $interval->setStartFromISO($startIso);
  14 + $interval->setStopFromISO($stopIso);
  15 + // for catalog
  16 + $interval->setParams($params);
  17 +
  18 + $interval->setIsNew($isNew);
  19 + array_push($this->intervals, $interval);
  20 +
  21 + if ($index < 0)
  22 + array_push($this->indexes, count($this->intervals) - 1);
  23 + else
  24 + array_splice($this->indexes, $index, 0, array(count($this->intervals) - 1));
  25 +
  26 + if ($isNew)
  27 + $this->isModified = true;
  28 +
  29 + return $interval;
  30 + }
  31 +
  32 + public function setParamsNumber($number)
  33 + {
  34 + $this->paramsNumber = $number;
  35 + }
  36 +
  37 + public function setParamsSizes($params)
  38 + {
  39 + for ($i = 0; $i < $this->paramsNumber; $i++)
  40 + $this->paramsSizes[$i] = $params[$i]['size'];
  41 + }
  42 +
  43 + public function setParamsTypes($params)
  44 + {
  45 + for ($i = 0; $i < $this->paramsNumber; $i++)
  46 + $this->paramsTypes[$i] = $params[$i]['type'];
  47 + }
  48 +
  49 + public function writeBin($handle)
  50 + {
  51 + //Magic key ("TTC")
  52 + fwrite($handle,pack('C3',ord('T'),ord('T'),ord('C')));
  53 +
  54 + //Version
  55 + fwrite($handle,pack('L',TimeTableCacheObject::$format_version));
  56 +
  57 + //Token
  58 + for ($i = 0; $i < TimeTableCacheObject::$token_len; ++$i)
  59 + fwrite($handle,pack('C',ord($this->token[$i])));
  60 +
  61 + //Modified
  62 + fwrite($handle,pack('L',$this->isModified));
  63 +
  64 + //Filter
  65 + $this->filter->writeBin($handle);
  66 +
  67 + //Sort
  68 + $this->sort->writeBin($handle);
  69 +
  70 + //Params Number
  71 + fwrite($handle,pack('L',$this->paramsNumber));
  72 +
  73 + //Params Sizes
  74 + for ($i = 0; $i < $this->paramsNumber; $i++)
  75 + fwrite($handle,pack('L',$this->paramsSizes[$i]));
  76 +
  77 + //Params Types
  78 + for ($i = 0; $i < $this->paramsNumber; $i++)
  79 + fwrite($handle,pack('L',$this->paramsTypes[$i]));
  80 +
  81 + //Intervals
  82 + fwrite($handle,pack('L2', count($this->intervals), $this->lastId));
  83 +
  84 +
  85 + foreach($this->intervals as $interval)
  86 + $interval->writeBin($handle,$this->paramsNumber,$this->paramsSizes, $this->paramsTypes);
  87 +
  88 + //Indexes
  89 + fwrite($handle,pack('L',count($this->indexes)));
  90 + foreach($this->indexes as $index)
  91 + fwrite($handle,pack('L',$index));
  92 + }
  93 +
  94 + public function loadBin($handle) {
  95 + //Magic key ("TTC")
  96 + if (!$res = unpack('C3key',fread($handle,3)))
  97 + return false;
  98 +
  99 + if (($res['key1'] != ord('T')) || ($res['key2'] != ord('T')) || ($res['key3'] != ord('C')))
  100 + return false;
  101 +
  102 + //Version
  103 + if (!$res = unpack('Lversion',fread($handle,4)))
  104 + return false;
  105 + if (($res['version'] != TimeTableCacheObject::$format_version))
  106 + return false;
  107 +
  108 + //Token
  109 + $token = "";
  110 + for ($i = 0; $i < TimeTableCacheObject::$token_len; ++$i)
  111 + {
  112 + if (!$res = unpack('Ctoken',fread($handle,1)))
  113 + return false;
  114 + $token .= chr($res['token']);
  115 + }
  116 + $this->token = $token;
  117 +
  118 + //Modified
  119 + if (!$res = unpack('Lmodified',fread($handle,4)))
  120 + return false;
  121 + $this->isModified = $res['modified'];
  122 +
  123 + //Filter
  124 + $this->filter->loadBin($handle);
  125 +
  126 + //Sort
  127 + $this->sort->loadBin($handle);
  128 +
  129 + //ParamsNumber
  130 + if (!$res = unpack('Lnumber',fread($handle,4)))
  131 + return false;
  132 + $this->paramsNumber = $res['number'];
  133 +
  134 + //ParamsSizes
  135 + for ($i = 0; $i < $this->paramsNumber; $i++) {
  136 + if (!$res = unpack('Lsize',fread($handle,4)))
  137 + return false;
  138 + $this->paramsSizes[$i] = $res['size'];
  139 + }
  140 + //ParamsTypes
  141 + for ($i = 0; $i < $this->paramsNumber; $i++) {
  142 + if (!$res = unpack('Ltype',fread($handle,4)))
  143 + return false;
  144 + $this->paramsTypes[$i] = $res['type'];
  145 + }
  146 + //Intervals
  147 + $res = unpack('L2data',fread($handle,2*4));
  148 + $nbIntervals = $res['data1'];
  149 + $this->lastId = $res['data2'];
  150 +
  151 + for ($i = 0; $i < $nbIntervals; ++$i)
  152 + {
  153 + $interval = new CatIntervalCacheObject(-1);
  154 + $interval->loadBin($handle, $this->paramsNumber, $this->paramsSizes, $this->paramsTypes);
  155 + array_push($this->intervals, $interval);
  156 + }
  157 +
  158 + //Indexes
  159 + $res = unpack('Ldata',fread($handle,4));
  160 + $nbIndexes = $res['data'];
  161 + for ($i = 0; $i < $nbIndexes; ++$i)
  162 + {
  163 + $res = unpack('Lindex',fread($handle,4));
  164 + array_push($this->indexes, $res['index']);
  165 + }
  166 +
  167 + return true;
  168 + }
  169 +
  170 + public function modifyIntervalFromId($obj) {
  171 +
  172 + foreach ($this->intervals as $interval)
  173 + {
  174 + if ($interval->getId() == $obj->cacheId)
  175 + {
  176 + foreach((array)$obj as $key => $val) {
  177 +
  178 + if ($key == 'start')
  179 + $interval->setStartFromISO($val);
  180 + else if ($key == 'stop')
  181 + $interval->setStopFromISO($val);
  182 + else {
  183 + if (strpos($key, 'param') === false)
  184 + continue;
  185 + $params = $interval->getParams();
  186 + $paramIndex = (int)substr($key,5);
  187 + $params[$paramIndex-2] = $val;
  188 + $interval->setParams($params);
  189 + }
  190 + }
  191 + $interval->setIsModified(true);
  192 + $this->isModified = true;
  193 + return true;
  194 + }
  195 + }
  196 +
  197 + return false;
  198 + }
  199 +}
  200 +
  201 + ?>
... ...
php/classes/FilterCacheObject.php 0 → 100644
... ... @@ -0,0 +1,286 @@
  1 +<?php
  2 +
  3 +class FilterPartCacheObject
  4 +{
  5 + public static $TYPE_UNKNOWN = 0;
  6 + public static $TYPE_START = 1;
  7 + public static $TYPE_STOP = 2;
  8 + public static $TYPE_DURATION_SEC = 3;
  9 + public static $TYPE_DURATION_MIN = 4;
  10 + public static $TYPE_DURATION_HOUR = 5;
  11 +
  12 + public static $OPERATION_UNKNOWN = 0;
  13 + public static $OPERATION_LT = 1;
  14 + public static $OPERATION_GT = 2;
  15 + public static $OPERATION_EQ = 3;
  16 +
  17 + protected $type;
  18 + protected $op;
  19 + protected $value;
  20 +
  21 + function __construct() {
  22 + $this->type = self::$TYPE_UNKNOWN;
  23 + $this->op = self::$OPERATION_UNKNOWN;
  24 + $this->value = 0.;
  25 + }
  26 +
  27 + public function getType() {
  28 + return $this->type;
  29 + }
  30 +
  31 + public function getOp() {
  32 + return $this->op;
  33 + }
  34 +
  35 + public function getValue() {
  36 + return $this->value;
  37 + }
  38 +
  39 + public function isSame($part) {
  40 + return (($this->type == $part->getType()) && ($this->op == $part->getOp()) && ($this->value == $part->getValue()));
  41 + }
  42 +
  43 + public function toFiltered($interval) {
  44 + switch ($this->type) {
  45 + case self::$TYPE_START :
  46 + {
  47 + switch ($this->op) {
  48 + case self::$OPERATION_LT :
  49 + return ($interval->getStartToStamp() < $this->value);
  50 + case self::$OPERATION_GT :
  51 + return ($interval->getStartToStamp() > $this->value);
  52 + case self::$OPERATION_EQ :
  53 + return (!(($interval->getStartToStamp() >= $this->value) && ($interval->getStartToStamp() <= $this->value+86400)));
  54 + default :
  55 + return false;
  56 + }
  57 + }
  58 + break;
  59 + case self::$TYPE_STOP :
  60 + {
  61 + switch ($this->op) {
  62 + case self::$OPERATION_LT :
  63 + return ($interval->getStopToStamp() < $this->value);
  64 + case self::$OPERATION_GT :
  65 + return ($interval->getStopToStamp() > $this->value);
  66 + case self::$OPERATION_EQ :
  67 + return (!(($interval->getStopToStamp() >= $this->value) && ($interval->getStopToStamp() <= $this->value+86400)));
  68 + default :
  69 + return false;
  70 + }
  71 + }
  72 + break;
  73 + case self::$TYPE_DURATION_SEC :
  74 + case self::$TYPE_DURATION_MIN :
  75 + case self::$TYPE_DURATION_HOUR :
  76 + {
  77 + $value = $this->value;
  78 + if ($this->type == self::$TYPE_DURATION_MIN)
  79 + $value *= 60;
  80 + else if ($this->type == self::$TYPE_DURATION_HOUR)
  81 + $value *= 3600;
  82 + switch ($this->op) {
  83 + case self::$OPERATION_LT :
  84 + return ($interval->getDuration() < $value);
  85 + case self::$OPERATION_GT :
  86 + return ($interval->getDuration() > $value);
  87 + case self::$OPERATION_EQ :
  88 + return ($interval->getDuration() != $value);
  89 + default :
  90 + return false;
  91 + }
  92 + }
  93 + break;
  94 + default:
  95 + return false;
  96 + }
  97 + }
  98 +
  99 + public function loadFromObject($part_obj) {
  100 + $this->value = 0.;
  101 + switch ($part_obj->field)
  102 + {
  103 + case 'start' :
  104 + $this->value = TimeUtils::iso2stamp($part_obj->value);
  105 + $this->type = self::$TYPE_START;
  106 + break;
  107 + case 'stop' :
  108 + $this->value = TimeUtils::iso2stamp($part_obj->value);
  109 + $this->type = self::$TYPE_STOP;
  110 + break;
  111 + case 'durationMin' :
  112 + $this->value = $part_obj->value;
  113 + $this->type = self::$TYPE_DURATION_MIN;
  114 + break;
  115 + case 'durationHour' :
  116 + $this->value = $part_obj->value;
  117 + $this->type = self::$TYPE_DURATION_HOUR;
  118 + break;
  119 + case 'durationSec' :
  120 + $this->value = $part_obj->value;
  121 + $this->type = self::$TYPE_DURATION_SEC;
  122 + break;
  123 + default:
  124 + $this->value = 0.;
  125 + $this->type = self::$TYPE_UNKNOWN;
  126 + }
  127 +
  128 + switch ($part_obj->comparison)
  129 + {
  130 + case 'lt' :
  131 + $this->op = self::$OPERATION_LT;
  132 + break;
  133 + case 'gt' :
  134 + $this->op = self::$OPERATION_GT;
  135 + break;
  136 + case 'eq' :
  137 + $this->op = self::$OPERATION_EQ;
  138 + break;
  139 + default:
  140 + $this->op = self::$OPERATION_UNKNOWN;
  141 + }
  142 + }
  143 +
  144 + public function writeBin($handle) {
  145 + fwrite($handle,pack('L2',$this->type,$this->op));
  146 + fwrite($handle,pack('f',$this->value));
  147 + }
  148 +
  149 + public function loadBin($handle) {
  150 + $res = unpack('L2data',fread($handle,4*2));
  151 + $this->type = $res['data1'];
  152 + $this->op = $res['data2'];
  153 +
  154 + $res = unpack('fvalue',fread($handle,4));
  155 + $this->value = $res['value'];
  156 + }
  157 +
  158 + public function dump() {
  159 + echo " => FilterPartCacheObject : type = ";
  160 + switch ($this->type)
  161 + {
  162 + case self::$TYPE_START :
  163 + echo "start";
  164 + break;
  165 + case self::$TYPE_STOP :
  166 + echo "stop";
  167 + break;
  168 + case self::$TYPE_DURATION_SEC :
  169 + echo "duration seconde";
  170 + break;
  171 + case self::$TYPE_DURATION_MIN :
  172 + echo "duration minute";
  173 + break;
  174 + case self::$TYPE_DURATION_HOUR :
  175 + echo "duration hour";
  176 + break;
  177 + default:
  178 + echo "unknown";
  179 + }
  180 + echo ", operation = ";
  181 + switch ($this->op)
  182 + {
  183 + case self::$OPERATION_LT :
  184 + echo "lt";
  185 + break;
  186 + case self::$OPERATION_GT :
  187 + echo "gt";
  188 + break;
  189 + case self::$OPERATION_EQ :
  190 + echo "eq";
  191 + break;
  192 + default:
  193 + echo "unknown";
  194 + }
  195 + echo ", value = ".$this->value.PHP_EOL;
  196 + }
  197 +}
  198 +
  199 +class FilterCacheObject
  200 +{
  201 + protected $parts = array();
  202 +
  203 + function __construct() {
  204 +
  205 + }
  206 +
  207 + public function getParts() {
  208 + return $this->parts;
  209 + }
  210 +
  211 + public function reset() {
  212 + $this->parts = array();
  213 + }
  214 +
  215 + public function isEmpty() {
  216 + return (count($this->parts) == 0);
  217 + }
  218 +
  219 + public function loadFromJSON($filter_json) {
  220 + $this->reset();
  221 + $filter_obj = json_decode($filter_json);
  222 +
  223 + foreach ($filter_obj as $filter_part)
  224 + {
  225 + $part = new FilterPartCacheObject();
  226 + $part->loadFromObject($filter_part);
  227 + array_push($this->parts, $part);
  228 + }
  229 + }
  230 +
  231 + public function isSame($filter) {
  232 + if (count($this->parts) != count($filter->getParts()))
  233 + return false;
  234 +
  235 + $identique = true;
  236 + for ($i = 0; $i < count($this->parts); ++$i)
  237 + {
  238 + if (!$this->parts[$i]->isSame($filter->getParts()[$i]))
  239 + {
  240 + return false;
  241 + }
  242 + }
  243 +
  244 + return true;
  245 + }
  246 +
  247 + public function isSameFromJSON($filter_json) {
  248 + $filter = new FilterCacheObject();
  249 + $filter->loadFromJSON($filter_json);
  250 + return $this->isSame($filter);
  251 + }
  252 +
  253 + public function toFiltered($interval) {
  254 + foreach ($this->parts as $part)
  255 + {
  256 + if ($part->toFiltered($interval))
  257 + return true;
  258 + }
  259 + return false;
  260 + }
  261 +
  262 + public function writeBin($handle) {
  263 + fwrite($handle,pack('L',count($this->parts)));
  264 + foreach ($this->parts as $part)
  265 + $part->writeBin($handle);
  266 + }
  267 +
  268 + public function loadBin($handle) {
  269 + $this->reset();
  270 + $res = unpack('Lcount',fread($handle,4));
  271 + for ($i = 0; $i < $res['count']; ++$i)
  272 + {
  273 + $part = new FilterPartCacheObject();
  274 + $part->loadBin($handle);
  275 + array_push($this->parts, $part);
  276 + }
  277 + }
  278 +
  279 + public function dump() {
  280 + echo " => FilterCacheObject : number of parts = ".count($this->parts).PHP_EOL;
  281 + foreach ($this->parts as $part)
  282 + $part->dump();
  283 + }
  284 +}
  285 +
  286 + ?>
... ...
php/classes/SortCacheObject.php 0 → 100644
... ... @@ -0,0 +1,261 @@
  1 +<?php
  2 +
  3 +class SortPartCacheObject
  4 +{
  5 + public static $TYPE_UNKNOWN = 0;
  6 + public static $TYPE_START = 1;
  7 + public static $TYPE_STOP = 2;
  8 + public static $TYPE_DURATION_SEC = 3;
  9 + public static $TYPE_DURATION_MIN = 4;
  10 + public static $TYPE_DURATION_HOUR = 5;
  11 +
  12 + public static $DIRECTION_UNKNOWN = 0;
  13 + public static $DIRECTION_ASC = 1;
  14 + public static $DIRECTION_DES = 2;
  15 +
  16 + protected $type;
  17 + protected $dir;
  18 +
  19 + function __construct() {
  20 + $this->type = self::$TYPE_UNKNOWN;
  21 + $this->dir = self::$DIRECTION_UNKNOWN;
  22 + }
  23 +
  24 + public function getType() {
  25 + return $this->type;
  26 + }
  27 +
  28 + public function getDir() {
  29 + return $this->dir;
  30 + }
  31 +
  32 + public function isSame($part) {
  33 + return (($this->type == $part->getType()) && ($this->dir == $part->getDir()));
  34 + }
  35 +
  36 + public function compare($interval_a, $interval_b) {
  37 + switch ($this->type) {
  38 + case self::$TYPE_START :
  39 + {
  40 + switch ($this->dir) {
  41 + case self::$DIRECTION_ASC :
  42 + return ($interval_b->getStartToStamp() - $interval_a->getStartToStamp());
  43 + default :
  44 + return ($interval_a->getStartToStamp() - $interval_b->getStartToStamp());
  45 + }
  46 + }
  47 + break;
  48 + case self::$TYPE_STOP :
  49 + {
  50 + switch ($this->dir) {
  51 + case self::$DIRECTION_ASC :
  52 + return ($interval_b->getStopToStamp() - $interval_a->getStopToStamp());
  53 + default :
  54 + return ($interval_a->getStopToStamp() - $interval_b->getStopToStamp());
  55 + }
  56 + }
  57 + break;
  58 + case self::$TYPE_DURATION_SEC :
  59 + case self::$TYPE_DURATION_MIN :
  60 + case self::$TYPE_DURATION_HOUR :
  61 + {
  62 + switch ($this->dir) {
  63 + case self::$DIRECTION_ASC :
  64 + return ($interval_b->getDuration() - $interval_a->getDuration());
  65 + default :
  66 + return ($interval_a->getDuration() - $interval_b->getDuration());
  67 + }
  68 + }
  69 + break;
  70 + default :
  71 + return 0;
  72 + }
  73 + return 0;
  74 + }
  75 +
  76 + public function loadFromObject($part_obj) {
  77 + switch ($part_obj->property)
  78 + {
  79 + case 'start' :
  80 + $this->type = self::$TYPE_START;
  81 + break;
  82 + case 'stop' :
  83 + $this->type = self::$TYPE_STOP;
  84 + break;
  85 + case 'durationMin' :
  86 + $this->type = self::$TYPE_DURATION_MIN;
  87 + break;
  88 + case 'durationHour' :
  89 + $this->type = self::$TYPE_DURATION_HOUR;
  90 + break;
  91 + case 'durationSec' :
  92 + $this->type = self::$TYPE_DURATION_SEC;
  93 + break;
  94 + default:
  95 + $this->type = self::$TYPE_UNKNOWN;
  96 + }
  97 +
  98 + switch ($part_obj->direction)
  99 + {
  100 + case 'ASC' :
  101 + $this->dir = self::$DIRECTION_ASC;
  102 + break;
  103 + case 'DESC' :
  104 + $this->dir = self::$DIRECTION_DES;
  105 + break;
  106 + default:
  107 + $this->dir = self::$DIRECTION_UNKNOWN;
  108 + }
  109 + }
  110 +
  111 + public function writeBin($handle) {
  112 + fwrite($handle,pack('L2',$this->type,$this->dir));
  113 + }
  114 +
  115 + public function loadBin($handle) {
  116 + $res = unpack('L2data',fread($handle,4*2));
  117 + $this->type = $res['data1'];
  118 + $this->dir = $res['data2'];
  119 + }
  120 +
  121 + public function dump() {
  122 + echo " => SortPartCacheObject : type = ";
  123 + switch ($this->type)
  124 + {
  125 + case self::$TYPE_START :
  126 + echo "start";
  127 + break;
  128 + case self::$TYPE_STOP :
  129 + echo "stop";
  130 + break;
  131 + case self::$TYPE_DURATION_SEC :
  132 + echo "duration seconde";
  133 + break;
  134 + case self::$TYPE_DURATION_MIN :
  135 + echo "duration minute";
  136 + break;
  137 + case self::$TYPE_DURATION_HOUR :
  138 + echo "duration hour";
  139 + break;
  140 + default:
  141 + echo "unknown";
  142 + }
  143 + echo ", direction = ";
  144 + switch ($this->dir)
  145 + {
  146 + case self::$DIRECTION_ASC :
  147 + echo "ASC";
  148 + break;
  149 + case self::$DIRECTION_DES :
  150 + echo "DESC";
  151 + break;
  152 + default:
  153 + echo "unknown";
  154 + }
  155 + echo PHP_EOL;
  156 + }
  157 +}
  158 +
  159 +class SortCacheObject
  160 +{
  161 + protected $parts = array();
  162 +
  163 + function __construct() {
  164 + }
  165 +
  166 + public function getParts() {
  167 + return $this->parts;
  168 + }
  169 +
  170 + public function reset() {
  171 + $this->parts = array();
  172 + }
  173 +
  174 + public function isEmpty() {
  175 + return (count($this->parts) == 0);
  176 + }
  177 +
  178 + public function loadFromObject($sort_obj) {
  179 + $this->reset();
  180 + foreach ($sort_obj as $sort_part)
  181 + {
  182 + $part = new SortPartCacheObject();
  183 + $part->loadFromObject($sort_part);
  184 + array_push($this->parts, $part);
  185 + }
  186 + }
  187 +
  188 + public function isSameFromObject($sort_obj) {
  189 + $sort = new SortCacheObject();
  190 + $sort->loadFromObject($sort_obj);
  191 + return $this->isSame($sort);
  192 + }
  193 +
  194 + public function isSame($sort) {
  195 + if (count($this->parts) != count($sort->getParts()))
  196 + return false;
  197 +
  198 + $identique = true;
  199 + for ($i = 0; $i < count($this->parts); ++$i)
  200 + {
  201 + if (!$this->parts[$i]->isSame($sort->getParts()[$i]))
  202 + {
  203 + return false;
  204 + }
  205 + }
  206 +
  207 + return true;
  208 + }
  209 +
  210 + public function apply($intervals) {
  211 + $sorted_indexes = array();
  212 +
  213 + global $global_parts, $global_intervals;
  214 + $global_parts = $this->parts;
  215 + $global_intervals = $intervals;
  216 +
  217 + foreach ($intervals as $interval)
  218 + array_push($sorted_indexes, $interval->getIndex());
  219 +
  220 + if (count($global_parts) == 0)
  221 + return $sorted_indexes;
  222 +
  223 + usort($sorted_indexes, function ($index_a, $index_b) {
  224 + global $global_parts, $global_intervals;
  225 + foreach ($global_parts as $part)
  226 + {
  227 + $res = $part->compare($global_intervals[$index_a], $global_intervals[$index_b]);
  228 + if ($res != 0)
  229 + return $res;
  230 + }
  231 + return $index_a-$index_b;
  232 + });
  233 +
  234 + return $sorted_indexes;
  235 + }
  236 +
  237 + public function writeBin($handle) {
  238 + fwrite($handle,pack('L',count($this->parts)));
  239 + foreach ($this->parts as $part)
  240 + $part->writeBin($handle);
  241 + }
  242 +
  243 + public function loadBin($handle) {
  244 + $this->reset();
  245 + $res = unpack('Lcount',fread($handle,4));
  246 + for ($i = 0; $i < $res['count']; ++$i)
  247 + {
  248 + $part = new SortPartCacheObject();
  249 + $part->loadBin($handle);
  250 + array_push($this->parts, $part);
  251 + }
  252 + }
  253 +
  254 + public function dump() {
  255 + echo " => SortCacheObject : number of parts = ".count($this->parts).PHP_EOL;
  256 + foreach ($this->parts as $part)
  257 + $part->dump();
  258 + }
  259 +}
  260 +
  261 + ?>
... ...
php/classes/TimeTableCacheMgr.php
1 1 <?php
2 2  
3   -class SortPartCacheObject
4   -{
5   - public static $TYPE_UNKNOWN = 0;
6   - public static $TYPE_START = 1;
7   - public static $TYPE_STOP = 2;
8   - public static $TYPE_DURATION_SEC = 3;
9   - public static $TYPE_DURATION_MIN = 4;
10   - public static $TYPE_DURATION_HOUR = 5;
11   -
12   - public static $DIRECTION_UNKNOWN = 0;
13   - public static $DIRECTION_ASC = 1;
14   - public static $DIRECTION_DES = 2;
15   -
16   - protected $type;
17   - protected $dir;
18   -
19   - function __construct() {
20   - $this->type = self::$TYPE_UNKNOWN;
21   - $this->dir = self::$DIRECTION_UNKNOWN;
22   - }
23   -
24   - public function getType() {
25   - return $this->type;
26   - }
27   -
28   - public function getDir() {
29   - return $this->dir;
30   - }
31   -
32   - public function isSame($part) {
33   - return (($this->type == $part->getType()) && ($this->dir == $part->getDir()));
34   - }
35   -
36   - public function compare($interval_a, $interval_b) {
37   - switch ($this->type) {
38   - case self::$TYPE_START :
39   - {
40   - switch ($this->dir) {
41   - case self::$DIRECTION_ASC :
42   - return ($interval_b->getStartToStamp() - $interval_a->getStartToStamp());
43   - default :
44   - return ($interval_a->getStartToStamp() - $interval_b->getStartToStamp());
45   - }
46   - }
47   - break;
48   - case self::$TYPE_STOP :
49   - {
50   - switch ($this->dir) {
51   - case self::$DIRECTION_ASC :
52   - return ($interval_b->getStopToStamp() - $interval_a->getStopToStamp());
53   - default :
54   - return ($interval_a->getStopToStamp() - $interval_b->getStopToStamp());
55   - }
56   - }
57   - break;
58   - case self::$TYPE_DURATION_SEC :
59   - case self::$TYPE_DURATION_MIN :
60   - case self::$TYPE_DURATION_HOUR :
61   - {
62   - switch ($this->dir) {
63   - case self::$DIRECTION_ASC :
64   - return ($interval_b->getDuration() - $interval_a->getDuration());
65   - default :
66   - return ($interval_a->getDuration() - $interval_b->getDuration());
67   - }
68   - }
69   - break;
70   - default :
71   - return 0;
72   - }
73   - return 0;
74   - }
75   -
76   - public function loadFromObject($part_obj) {
77   - switch ($part_obj->property)
78   - {
79   - case 'start' :
80   - $this->type = self::$TYPE_START;
81   - break;
82   - case 'stop' :
83   - $this->type = self::$TYPE_STOP;
84   - break;
85   - case 'durationMin' :
86   - $this->type = self::$TYPE_DURATION_MIN;
87   - break;
88   - case 'durationHour' :
89   - $this->type = self::$TYPE_DURATION_HOUR;
90   - break;
91   - case 'durationSec' :
92   - $this->type = self::$TYPE_DURATION_SEC;
93   - break;
94   - default:
95   - $this->type = self::$TYPE_UNKNOWN;
96   - }
97   -
98   - switch ($part_obj->direction)
99   - {
100   - case 'ASC' :
101   - $this->dir = self::$DIRECTION_ASC;
102   - break;
103   - case 'DESC' :
104   - $this->dir = self::$DIRECTION_DES;
105   - break;
106   - default:
107   - $this->dir = self::$DIRECTION_UNKNOWN;
108   - }
109   - }
110   -
111   - public function writeBin($handle) {
112   - fwrite($handle,pack('L2',$this->type,$this->dir));
113   - }
114   -
115   - public function loadBin($handle) {
116   - $res = unpack('L2data',fread($handle,4*2));
117   - $this->type = $res['data1'];
118   - $this->dir = $res['data2'];
119   - }
120   -
121   - public function dump() {
122   - echo " => SortPartCacheObject : type = ";
123   - switch ($this->type)
124   - {
125   - case self::$TYPE_START :
126   - echo "start";
127   - break;
128   - case self::$TYPE_STOP :
129   - echo "stop";
130   - break;
131   - case self::$TYPE_DURATION_SEC :
132   - echo "duration seconde";
133   - break;
134   - case self::$TYPE_DURATION_MIN :
135   - echo "duration minute";
136   - break;
137   - case self::$TYPE_DURATION_HOUR :
138   - echo "duration hour";
139   - break;
140   - default:
141   - echo "unknown";
142   - }
143   - echo ", direction = ";
144   - switch ($this->dir)
145   - {
146   - case self::$DIRECTION_ASC :
147   - echo "ASC";
148   - break;
149   - case self::$DIRECTION_DES :
150   - echo "DESC";
151   - break;
152   - default:
153   - echo "unknown";
154   - }
155   - echo PHP_EOL;
156   - }
157   -}
158   -
159   -class SortCacheObject
160   -{
161   - protected $parts = array();
162   -
163   - function __construct() {
164   - }
165   -
166   - public function getParts() {
167   - return $this->parts;
168   - }
169   -
170   - public function reset() {
171   - $this->parts = array();
172   - }
173   -
174   - public function isEmpty() {
175   - return (count($this->parts) == 0);
176   - }
177   -
178   - public function loadFromObject($sort_obj) {
179   - $this->reset();
180   - foreach ($sort_obj as $sort_part)
181   - {
182   - $part = new SortPartCacheObject();
183   - $part->loadFromObject($sort_part);
184   - array_push($this->parts, $part);
185   - }
186   - }
187   -
188   - public function isSameFromObject($sort_obj) {
189   - $sort = new SortCacheObject();
190   - $sort->loadFromObject($sort_obj);
191   - return $this->isSame($sort);
192   - }
193   -
194   - public function isSame($sort) {
195   - if (count($this->parts) != count($sort->getParts()))
196   - return false;
197   -
198   - $identique = true;
199   - for ($i = 0; $i < count($this->parts); ++$i)
200   - {
201   - if (!$this->parts[$i]->isSame($sort->getParts()[$i]))
202   - {
203   - return false;
204   - }
205   - }
206   -
207   - return true;
208   - }
209   -
210   - public function apply($intervals) {
211   - $sorted_indexes = array();
212   -
213   - global $global_parts, $global_intervals;
214   - $global_parts = $this->parts;
215   - $global_intervals = $intervals;
216   -
217   - foreach ($intervals as $interval)
218   - array_push($sorted_indexes, $interval->getIndex());
219   -
220   - if (count($global_parts) == 0)
221   - return $sorted_indexes;
222   -
223   - usort($sorted_indexes, function ($index_a, $index_b) {
224   - global $global_parts, $global_intervals;
225   - foreach ($global_parts as $part)
226   - {
227   - $res = $part->compare($global_intervals[$index_a], $global_intervals[$index_b]);
228   - if ($res != 0)
229   - return $res;
230   - }
231   - return $index_a-$index_b;
232   - });
233   -
234   - return $sorted_indexes;
235   - }
236   -
237   - public function writeBin($handle) {
238   - fwrite($handle,pack('L',count($this->parts)));
239   - foreach ($this->parts as $part)
240   - $part->writeBin($handle);
241   - }
242   -
243   - public function loadBin($handle) {
244   - $this->reset();
245   - $res = unpack('Lcount',fread($handle,4));
246   - for ($i = 0; $i < $res['count']; ++$i)
247   - {
248   - $part = new SortPartCacheObject();
249   - $part->loadBin($handle);
250   - array_push($this->parts, $part);
251   - }
252   - }
253   -
254   - public function dump() {
255   - echo " => SortCacheObject : number of parts = ".count($this->parts).PHP_EOL;
256   - foreach ($this->parts as $part)
257   - $part->dump();
258   - }
259   -}
260   -
261   -class FilterPartCacheObject
262   -{
263   - public static $TYPE_UNKNOWN = 0;
264   - public static $TYPE_START = 1;
265   - public static $TYPE_STOP = 2;
266   - public static $TYPE_DURATION_SEC = 3;
267   - public static $TYPE_DURATION_MIN = 4;
268   - public static $TYPE_DURATION_HOUR = 5;
269   -
270   - public static $OPERATION_UNKNOWN = 0;
271   - public static $OPERATION_LT = 1;
272   - public static $OPERATION_GT = 2;
273   - public static $OPERATION_EQ = 3;
274   -
275   - protected $type;
276   - protected $op;
277   - protected $value;
278   -
279   - function __construct() {
280   - $this->type = self::$TYPE_UNKNOWN;
281   - $this->op = self::$OPERATION_UNKNOWN;
282   - $this->value = 0.;
283   - }
284   -
285   - public function getType() {
286   - return $this->type;
287   - }
288   -
289   - public function getOp() {
290   - return $this->op;
291   - }
292   -
293   - public function getValue() {
294   - return $this->value;
295   - }
296   -
297   - public function isSame($part) {
298   - return (($this->type == $part->getType()) && ($this->op == $part->getOp()) && ($this->value == $part->getValue()));
299   - }
300   -
301   - public function toFiltered($interval) {
302   - switch ($this->type) {
303   - case self::$TYPE_START :
304   - {
305   - switch ($this->op) {
306   - case self::$OPERATION_LT :
307   - return ($interval->getStartToStamp() < $this->value);
308   - case self::$OPERATION_GT :
309   - return ($interval->getStartToStamp() > $this->value);
310   - case self::$OPERATION_EQ :
311   - return (!(($interval->getStartToStamp() >= $this->value) && ($interval->getStartToStamp() <= $this->value+86400)));
312   - default :
313   - return false;
314   - }
315   - }
316   - break;
317   - case self::$TYPE_STOP :
318   - {
319   - switch ($this->op) {
320   - case self::$OPERATION_LT :
321   - return ($interval->getStopToStamp() < $this->value);
322   - case self::$OPERATION_GT :
323   - return ($interval->getStopToStamp() > $this->value);
324   - case self::$OPERATION_EQ :
325   - return (!(($interval->getStopToStamp() >= $this->value) && ($interval->getStopToStamp() <= $this->value+86400)));
326   - default :
327   - return false;
328   - }
329   - }
330   - break;
331   - case self::$TYPE_DURATION_SEC :
332   - case self::$TYPE_DURATION_MIN :
333   - case self::$TYPE_DURATION_HOUR :
334   - {
335   - $value = $this->value;
336   - if ($this->type == self::$TYPE_DURATION_MIN)
337   - $value *= 60;
338   - else if ($this->type == self::$TYPE_DURATION_HOUR)
339   - $value *= 3600;
340   - switch ($this->op) {
341   - case self::$OPERATION_LT :
342   - return ($interval->getDuration() < $value);
343   - case self::$OPERATION_GT :
344   - return ($interval->getDuration() > $value);
345   - case self::$OPERATION_EQ :
346   - return ($interval->getDuration() != $value);
347   - default :
348   - return false;
349   - }
350   - }
351   - break;
352   - default:
353   - return false;
354   - }
355   - }
356   -
357   - public function loadFromObject($part_obj) {
358   - $this->value = 0.;
359   - switch ($part_obj->field)
360   - {
361   - case 'start' :
362   - $this->value = TimeUtils::iso2stamp($part_obj->value);
363   - $this->type = self::$TYPE_START;
364   - break;
365   - case 'stop' :
366   - $this->value = TimeUtils::iso2stamp($part_obj->value);
367   - $this->type = self::$TYPE_STOP;
368   - break;
369   - case 'durationMin' :
370   - $this->value = $part_obj->value;
371   - $this->type = self::$TYPE_DURATION_MIN;
372   - break;
373   - case 'durationHour' :
374   - $this->value = $part_obj->value;
375   - $this->type = self::$TYPE_DURATION_HOUR;
376   - break;
377   - case 'durationSec' :
378   - $this->value = $part_obj->value;
379   - $this->type = self::$TYPE_DURATION_SEC;
380   - break;
381   - default:
382   - $this->value = 0.;
383   - $this->type = self::$TYPE_UNKNOWN;
384   - }
385   -
386   - switch ($part_obj->comparison)
387   - {
388   - case 'lt' :
389   - $this->op = self::$OPERATION_LT;
390   - break;
391   - case 'gt' :
392   - $this->op = self::$OPERATION_GT;
393   - break;
394   - case 'eq' :
395   - $this->op = self::$OPERATION_EQ;
396   - break;
397   - default:
398   - $this->op = self::$OPERATION_UNKNOWN;
399   - }
400   - }
401   -
402   - public function writeBin($handle) {
403   - fwrite($handle,pack('L2',$this->type,$this->op));
404   - fwrite($handle,pack('f',$this->value));
405   - }
406   -
407   - public function loadBin($handle) {
408   - $res = unpack('L2data',fread($handle,4*2));
409   - $this->type = $res['data1'];
410   - $this->op = $res['data2'];
411   -
412   - $res = unpack('fvalue',fread($handle,4));
413   - $this->value = $res['value'];
414   - }
415   -
416   - public function dump() {
417   - echo " => FilterPartCacheObject : type = ";
418   - switch ($this->type)
419   - {
420   - case self::$TYPE_START :
421   - echo "start";
422   - break;
423   - case self::$TYPE_STOP :
424   - echo "stop";
425   - break;
426   - case self::$TYPE_DURATION_SEC :
427   - echo "duration seconde";
428   - break;
429   - case self::$TYPE_DURATION_MIN :
430   - echo "duration minute";
431   - break;
432   - case self::$TYPE_DURATION_HOUR :
433   - echo "duration hour";
434   - break;
435   - default:
436   - echo "unknown";
437   - }
438   - echo ", operation = ";
439   - switch ($this->op)
440   - {
441   - case self::$OPERATION_LT :
442   - echo "lt";
443   - break;
444   - case self::$OPERATION_GT :
445   - echo "gt";
446   - break;
447   - case self::$OPERATION_EQ :
448   - echo "eq";
449   - break;
450   - default:
451   - echo "unknown";
452   - }
453   - echo ", value = ".$this->value.PHP_EOL;
454   - }
455   -}
456   -
457   -class FilterCacheObject
458   -{
459   - protected $parts = array();
460   -
461   - function __construct() {
462   -
463   - }
464   -
465   - public function getParts() {
466   - return $this->parts;
467   - }
468   -
469   - public function reset() {
470   - $this->parts = array();
471   - }
472   -
473   - public function isEmpty() {
474   - return (count($this->parts) == 0);
475   - }
476   -
477   - public function loadFromJSON($filter_json) {
478   - $this->reset();
479   - $filter_obj = json_decode($filter_json);
480   -
481   - foreach ($filter_obj as $filter_part)
482   - {
483   - $part = new FilterPartCacheObject();
484   - $part->loadFromObject($filter_part);
485   - array_push($this->parts, $part);
486   - }
487   - }
488   -
489   - public function isSame($filter) {
490   - if (count($this->parts) != count($filter->getParts()))
491   - return false;
492   -
493   - $identique = true;
494   - for ($i = 0; $i < count($this->parts); ++$i)
495   - {
496   - if (!$this->parts[$i]->isSame($filter->getParts()[$i]))
497   - {
498   - return false;
499   - }
500   - }
501   -
502   - return true;
503   - }
504   -
505   - public function isSameFromJSON($filter_json) {
506   - $filter = new FilterCacheObject();
507   - $filter->loadFromJSON($filter_json);
508   - return $this->isSame($filter);
509   - }
510   -
511   - public function toFiltered($interval) {
512   - foreach ($this->parts as $part)
513   - {
514   - if ($part->toFiltered($interval))
515   - return true;
516   - }
517   - return false;
518   - }
519   -
520   - public function writeBin($handle) {
521   - fwrite($handle,pack('L',count($this->parts)));
522   - foreach ($this->parts as $part)
523   - $part->writeBin($handle);
524   - }
525   -
526   - public function loadBin($handle) {
527   - $this->reset();
528   - $res = unpack('Lcount',fread($handle,4));
529   - for ($i = 0; $i < $res['count']; ++$i)
530   - {
531   - $part = new FilterPartCacheObject();
532   - $part->loadBin($handle);
533   - array_push($this->parts, $part);
534   - }
535   - }
536   -
537   - public function dump() {
538   - echo " => FilterCacheObject : number of parts = ".count($this->parts).PHP_EOL;
539   - foreach ($this->parts as $part)
540   - $part->dump();
541   - }
542   -}
543   -
544 3 class TimeTableCacheMgr
545 4 {
546 5 protected static $cache_file = "cacheTT";
... ...