meconlib
-------------------------------------------------------------------------------
This file is part of meconlib.
-
+
meconlib is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.
-
+
meconlib is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
* @version $Rev$
* @author Gonzalo Merayo <gmeray@mecon.gov.ar>
*/
-class Intervalo {
- /**
- *
- * Hora de inicio del intervalo
- *
- * @var object Hora
- */
- var $inicio;
-
- /**
- *
- * Hora de fin del intervalo
- *
- * @var object Hora
- */
- var $fin;
-
- /**
- * Constructor.
- *
- * @param Hora $inicio Hora de inicio (por defecto cero).
- * @param Hora $fin Hora de fin (por defecto cero).
- * @param bool $chequear Invierte el intervalo si la hora de
- * fin es anterior a la de inicio.
- *
- */
- function Intervalo( $inicio = null, $fin = null, $chequear = true ) {
- if (is_null($inicio)) $inicio = new Hora;
- if (is_null($fin)) $fin = new Hora;
- if(!is_a($inicio, 'hora')) return false;
- if(!is_a($fin, 'hora')) return false;
- $this->inicio = $inicio;
- $this->fin = $fin;
- if ($chequear) {
+class MECON_Tiempo_Intervalo {
+ /**
+ *
+ * Hora de inicio del intervalo
+ *
+ * @var object Hora
+ */
+ var $inicio;
+
+ /**
+ *
+ * Hora de fin del intervalo
+ *
+ * @var object Hora
+ */
+ var $fin;
+
+ /**
+ * Constructor.
+ *
+ * @param Hora $inicio Hora de inicio (por defecto cero).
+ * @param Hora $fin Hora de fin (por defecto cero).
+ * @param bool $chequear Invierte el intervalo si la hora de
+ * fin es anterior a la de inicio.
+ *
+ */
+ function MECON_Tiempo_Intervalo( $inicio = null, $fin = null, $chequear = true ) {
+ if (is_null($inicio))
+ $inicio = new MECON_Tiempo_Hora;
+ if (is_null($fin))
+ $fin = new MECON_Tiempo_Hora;
+ if(!is_a($inicio, 'mecon_tiempo_hora'))
+ return false;
+ if(!is_a($fin, 'mecon_tiempo_hora'))
+ return false;
+ $this->inicio = $inicio;
+ $this->fin = $fin;
+ if ($chequear) {
+ $this->_chequear();
+ }
+ }
+
+ function _chequear() {
+ $a = $this->fin;
+ if($a->lower($this->inicio)) {
+ $tmp = $this->fin;
+ $this->fin = $this->inicio;
+ $this->inicio = $tmp;
+ }
+ }
+
+ function invertido() {
+ return $this->fin->lower($this->inicio);
+ }
+
+ function setInicio( $inicio ) {
+ if(! is_a($inicio, 'mecon_tiempo_hora'))
+ return false;
+ $this->inicio = $inicio;
$this->_chequear();
}
- }
-
- function _chequear()
- {
- $a = $this->fin;
- if($a->lower($this->inicio))
- {
- $tmp = $this->fin;
- $this->fin = $this->inicio;
- $this->inicio = $tmp;
+
+ /**
+ *
+ * setFin
+ *
+ * @param var $fin
+ *
+ */
+ function setFin( $fin ) {
+ if(! is_a($fin,'mecon_tiempo_hora'))
+ return false;
+ $this->fin = $fin;
+ $this->_chequear();
}
- }
-
- function invertido()
- {
- return $this->fin->lower($this->inicio);
- }
-
- function setInicio( $inicio ) {
- if(! is_a($inicio, "hora")) return false;
- $this->inicio = $inicio;
- $this->_chequear();
- }
-
- /**
- *
- * setFin
- *
- * @param var $fin
- *
- */
- function setFin( $fin )
- {
- if(! is_a($fin, "hora")) return false;
- $this->fin = $fin;
- $this->_chequear();
- }
-
- function getDuracion()
- {
- $c = new Hora;
- $c->copy($this->fin);
- $c->subtract($this->inicio);
- return $c;
- }
-
- // XXX - Amplié el método para comparar con varios intervalos a la vez,
- // si el argumento no es un array, anda de todas maneras.
- function seSuperpone( $intervalos )
- {
- if (!is_array($intervalos)) $intervalos = array($intervalos);
- foreach ($intervalos as $i) {
- if (is_a($i, "intervalo")) {
- if ($i->fin->greaterEqual($this->inicio) &&
- $this->fin->greaterEqual($i->inicio)) return true;
- if ($this->fin->greaterEqual($i->inicio) &&
- $i->fin->greaterEqual($this->inicio)) return true;
- }
+
+ function getDuracion() {
+ $c = new MECON_Tiempo_Hora;
+ $c->copy($this->fin);
+ $c->subtract($this->inicio);
+ return $c;
}
- return false;
- }
-
- function fusionar( $f )
- {
- if(! is_a($f, "intervalo")) return false;
- if(! $this->seSuperpone( $f )) return false;
- if($f->fin->greater($this->fin))
- $this->fin = $f->fin;
- if($f->inicio->lower($this->inicio))
- $this->inicio = $f->inicio;
- return true;
- }
-
- function superponer( $i )
- {
- if(! is_a($i, "intervalo")) return false;
- $inicio = $this->inicio;
- $fin = $this->fin;
- if($this->inicio->lower($i->inicio)) $inicio = $i->inicio;
- if($this->fin->greater( $i->fin )) $fin = $i->fin;
- $fin->subtract($inicio);
- return $fin;
- }
-
- /**
- * Corta un intervalo, devolviendo el intervalo previo al punto de corte.
- * El intervalo actual queda con el intervalo posterior al punto de corte.
- * El punto de corte puede ser tanto una hora como un intervalo.
- *
- * @param mixed $c Donde cortar.
- *
- * @return object Intervalo Intervalo anterior al punto de corte.
- */
- function cortar($c)
- {
- if(is_a($c, 'hora')) {
- return $this->cortarHora($c);
- } elseif (is_a($c, 'intervalo')) {
- return $this->cortarIntervalo($c);
- } else {
+
+ // XXX - Amplié el método para comparar con varios intervalos a la vez,
+ // si el argumento no es un array, anda de todas maneras.
+ function seSuperpone( $intervalos ) {
+ if (!is_array($intervalos))
+ $intervalos = array($intervalos);
+ foreach ($intervalos as $i) {
+ if (is_a($i, 'mecon_tiempo_intervalo')) {
+ if ($i->fin->greaterEqual($this->inicio) &&
+ $this->fin->greaterEqual($i->inicio))
+ return true;
+ if ($this->fin->greaterEqual($i->inicio) &&
+ $i->fin->greaterEqual($this->inicio))
+ return true;
+ }
+ }
return false;
}
- }
-
- /**
- * Corta un intervalo, devolviendo el intervalo previo a la hora de corte.
- * El intervalo actual queda con el intervalo posterior a la hora de corte.
- *
- * @param mixed $h Donde cortar.
- *
- * @return object Intervalo Intervalo anterior a la hora de corte.
- */
- function cortarHora($h)
- {
- if (!is_a($h, 'hora')) return false;
- $class = get_class($this);
- $r = new $class;
- $r->copy($this);
- if($this->inicio->greater($h)) {
- $r->setFin($r->inicio);
- return $r;
+
+ function fusionar( $f ) {
+ if(! is_a($f, 'mecon_tiempo_intervalo'))
+ return false;
+ if(! $this->seSuperpone( $f ))
+ return false;
+ if($f->fin->greater($this->fin))
+ $this->fin = $f->fin;
+ if($f->inicio->lower($this->inicio))
+ $this->inicio = $f->inicio;
+ return true;
+ }
+
+ function superponer( $i ) {
+ if(! is_a($i, 'mecon_tiempo_intervalo'))
+ return false;
+ $inicio = $this->inicio;
+ $fin = $this->fin;
+ if($this->inicio->lower($i->inicio))
+ $inicio = $i->inicio;
+ if($this->fin->greater( $i->fin ))
+ $fin = $i->fin;
+ $fin->subtract($inicio);
+ return $fin;
+ }
+
+ /**
+ * Corta un intervalo, devolviendo el intervalo previo al punto de corte.
+ * El intervalo actual queda con el intervalo posterior al punto de corte.
+ * El punto de corte puede ser tanto una hora como un intervalo.
+ *
+ * @param mixed $c Donde cortar.
+ *
+ * @return object Intervalo Intervalo anterior al punto de corte.
+ */
+ function cortar($c) {
+ if(is_a($c, 'mecon_tiempo_hora')) {
+ return $this->cortarHora($c);
+ }
+ elseif (is_a($c, 'mecon_tiempo_intervalo')) {
+ return $this->cortarIntervalo($c);
+ }
+ else {
+ return false;
+ }
+ }
+
+ /**
+ * Corta un intervalo, devolviendo el intervalo previo a la hora de corte.
+ * El intervalo actual queda con el intervalo posterior a la hora de corte.
+ *
+ * @param mixed $h Donde cortar.
+ *
+ * @return object Intervalo Intervalo anterior a la hora de corte.
+ */
+ function cortarHora($h) {
+ if (!is_a($h, 'mecon_tiempo_hora'))
+ return false;
+ $class = get_class($this);
+ $r = new $class;
+ $r->copy($this);
+ if($this->inicio->greater($h)) {
+ $r->setFin($r->inicio);
+ return $r;
+ }
+ if($this->fin->lowerEqual($h)) {
+ $this->setInicio($this->fin);
+ } else {
+ $this->setInicio($h);
+ $r->setFin($h);
+ }
+ return $r;
}
- if($this->fin->lowerEqual($h)) {
- $this->setInicio($this->fin);
- }else{
- $this->setInicio($h);
- $r->setFin($h);
+
+ /**
+ * Corta un intervalo, devolviendo el intervalo previo al intervalo de corte.
+ * El intervalo actual queda con el intervalo posterior al intervalo de corte.
+ *
+ * @param mixed $i Donde cortar.
+ *
+ * @return object Intervalo Intervalo anterior al intervalo de corte.
+ */
+ function cortarIntervalo($i) {
+ if (!is_a($i, 'mecon_tiempo_intervalo'))
+ return false;
+ $ant = $this->cortarHora($i->inicio);
+ $this->cortarHora($i->fin);
+ return $ant;
}
- return $r;
- }
-
- /**
- * Corta un intervalo, devolviendo el intervalo previo al intervalo de corte.
- * El intervalo actual queda con el intervalo posterior al intervalo de corte.
- *
- * @param mixed $i Donde cortar.
- *
- * @return object Intervalo Intervalo anterior al intervalo de corte.
- */
- function cortarIntervalo($i)
- {
- if (!is_a($i, 'intervalo')) return false;
- $ant = $this->cortarHora($i->inicio);
- $this->cortarHora($i->fin);
- return $ant;
- }
function toString() {
return 'inicio: ' . $this->inicio->format() . ' | fin: ' . $this->fin->format();
}
function copy($int = null) {
- if (!(is_a($int, 'intervalo'))) return false;
- $this->inicio = new Hora($int->inicio->get());
- $this->fin = new Hora($int->fin->get());
- return true;
+ if (!(is_a($int, 'mecon_tiempo_intervalo')))
+ return false;
+ $this->inicio = new MECON_Tiempo_Hora($int->inicio->get
+ ());
+ $this->fin = new MECON_Tiempo_Hora($int->fin->get
+ ());
+ return true;
}
- function __clone() {
- $class = get_class($this);
- $i = new $class;
- $i->inicio = $this->inicio->__clone();
- $i->fin = $this->fin->__clone();
- return $i;
- }
+ function __clone() {
+ $class = get_class($this);
+ $i = new $class;
+ $i->inicio = $this->inicio->__clone();
+ $i->fin = $this->fin->__clone();
+ return $i;
+ }
}