]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/Tiempo/Intervalo.php
- Correccion de bugs
[mecon/meconlib.git] / lib / MECON / Tiempo / Intervalo.php
index 01a005de29e5854bcddc94c78cc371d355768c09..0cc206852eee4534473a676a9a87afa4de9137a5 100644 (file)
@@ -59,15 +59,14 @@ class MECON_Tiempo_Intervalo {
      *                       fin es anterior a la de inicio.
      *                       
      */
-    function MECON_Tiempo_Intervalo( $inicio = null, $fin = null, $chequear = true ) {
-        if (is_null($inicio))
+    function MECON_Tiempo_Intervalo($inicio = null, $fin = null, $chequear = true)
+    {
+        if (!$inicio) {
             $inicio = new MECON_Tiempo_Hora;
-        if (is_null($fin))
+        }
+        if (!$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) {
@@ -75,7 +74,8 @@ class MECON_Tiempo_Intervalo {
         }
     }
 
-    function _chequear() {
+    function _chequear()
+    {
         $a = $this->fin;
         if($a->lower($this->inicio)) {
             $tmp = $this->fin;
@@ -84,13 +84,12 @@ class MECON_Tiempo_Intervalo {
         }
     }
 
-    function invertido() {
+    function invertido()
+    {
         return $this->fin->lower($this->inicio);
     }
 
-    function setInicio( $inicio ) {
-        if(! is_a($inicio, 'mecon_tiempo_hora'))
-            return false;
+    function setInicio($inicio) {
         $this->inicio = $inicio;
         $this->_chequear();
     }
@@ -102,59 +101,86 @@ class MECON_Tiempo_Intervalo {
      * @param var $fin
      *
      */
-    function setFin( $fin ) {
-        if(! is_a($fin,'mecon_tiempo_hora'))
-            return false;
+    function setFin($fin)
+    {
         $this->fin = $fin;
         $this->_chequear();
     }
 
-    function getDuracion() {
+    function getDuracion()
+    {
         $c = new MECON_Tiempo_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))
+    /**
+     * Chequea si el intervalo se superpone con otros.
+     * @param $intervalos Intervalo o array de Intervalo con los cuales chequear.
+     * @return true si se superpone con uno o más intervalos.
+     */
+    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;
+            if ($i->fin->greater($this->inicio) && $this->fin->greater($i->inicio)) {
+                return true;
+            }
+            if ($this->fin->greater($i->inicio) && $i->fin->greater($this->inicio)) {
+                return true;
             }
         }
         return false;
     }
 
-    function fusionar( $f ) {
-        if(! is_a($f, 'mecon_tiempo_intervalo'))
-            return false;
-        if(! $this->seSuperpone( $f ))
+    /**
+     * Chequea si el intervalo es adyacente a otro.
+     * Ejemplo:
+     * <pre>
+     *       A            B
+     * |-----------|------------|  Adyacentes
+     *
+     *       A              B
+     * |-----------|   |--------|  No adyacentes
+     * </pre>
+     * @param $intervalo Intervalo con el cual chequear.
+     * @return true si se son adyacentes.
+     */
+    function esAdyacente($intervalo)
+    {
+        if ($intervalo->fin->equal($this->inicio) || $this->fin->equal($intervalo->inicio)) {
+            return true;
+        }
+        return false;
+    }
+
+    function fusionar($i)
+    {
+        if (!$this->seSuperpone($i) && !$this->esAdyacente($i)) {
             return false;
-        if($f->fin->greater($this->fin))
-            $this->fin = $f->fin;
-        if($f->inicio->lower($this->inicio))
-            $this->inicio = $f->inicio;
+        }
+        if ($i->fin->greater($this->fin)) {
+            $this->fin = $i->fin;
+        }
+        if ($i->inicio->lower($this->inicio)) {
+            $this->inicio = $i->inicio;
+        }
         return true;
     }
 
-    function superponer( $i ) {
-        if(! is_a($i, 'mecon_tiempo_intervalo'))
-            return false;
+    function superponer($i)
+    {
         $inicio = $this->inicio;
         $fin = $this->fin;
-        if($this->inicio->lower($i->inicio))
+        if ($this->inicio->lower($i->inicio)) {
             $inicio = $i->inicio;
-        if($this->fin->greater( $i->fin   ))
+        }
+        if ($this->fin->greater($i->fin)) {
             $fin = $i->fin;
+        }
         $fin->subtract($inicio);
         return $fin;
     }
@@ -168,14 +194,13 @@ class MECON_Tiempo_Intervalo {
      *
      * @return object Intervalo Intervalo anterior al punto de corte.
      */
-    function cortar($c) {
+    function cortar($c)
+    {
         if(is_a($c, 'mecon_tiempo_hora')) {
             return $this->cortarHora($c);
-        }
-        elseif (is_a($c, 'mecon_tiempo_intervalo')) {
+        } elseif (is_a($c, 'mecon_tiempo_intervalo')) {
             return $this->cortarIntervalo($c);
-        }
-        else {
+        } else {
             return false;
         }
     }
@@ -188,9 +213,8 @@ class MECON_Tiempo_Intervalo {
      *
      * @return object Intervalo Intervalo anterior a la hora de corte.
      */
-    function cortarHora($h) {
-        if (!is_a($h, 'mecon_tiempo_hora'))
-            return false;
+    function cortarHora($h)
+    {
         $class = get_class($this);
         $r = new $class;
         $r->copy($this);
@@ -215,9 +239,8 @@ class MECON_Tiempo_Intervalo {
      *
      * @return object Intervalo Intervalo anterior al intervalo de corte.
      */
-    function cortarIntervalo($i) {
-        if (!is_a($i, 'mecon_tiempo_intervalo'))
-            return false;
+    function cortarIntervalo($i)
+    {
         $ant = $this->cortarHora($i->inicio);
         $this->cortarHora($i->fin);
         return $ant;
@@ -227,21 +250,18 @@ class MECON_Tiempo_Intervalo {
         return 'inicio: ' . $this->inicio->format() . ' | fin: ' . $this->fin->format();
     }
 
-    function copy($int = null) {
-        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
-                              ());
+    function copy($i)
+    {
+        $this->inicio = $i->inicio->__clone();
+        $this->fin    = $i->fin->__clone();
         return true;
     }
 
-    function __clone() {
+    function __clone()
+    {
         $class = get_class($this);
         $i = new $class;
-        $i->inicio = $this->inicio->__clone();
-        $i->fin    = $this->fin->__clone();
+        $i->copy($this);
         return $i;
     }