]> git.llucax.com Git - mecon/meconlib.git/commitdiff
Se modifica Intervalo::seSuperpone() para que no tome como superpuestos a
authorLeandro Lucarella <llucax@gmail.com>
Thu, 29 Apr 2004 23:06:08 +0000 (23:06 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Thu, 29 Apr 2004 23:06:08 +0000 (23:06 +0000)
intervalos adyacentes y se hace un metodo Intervalo::esAdyacente() para hacer
ese chequeo.

lib/MECON/Tiempo/Banda.php
lib/MECON/Tiempo/Intervalo.php

index fefffaf6afccef31fdc71809ed1cc6d1544e5708..a235e03a64d9b552613d1c0818ced0f032f4cbb9 100644 (file)
@@ -263,7 +263,7 @@ class MECON_Tiempo_Banda {
         // recorre el vector de intervalos
         foreach( $this->intervalos as $i ) {
             // si se superpone con alguno, fusionar con ese
-            if($i->seSuperpone($intervalo)) {
+            if($i->seSuperpone($intervalo) || $i->esAdyacente($intervalo)) {
                 $intervalo->fusionar($i);
             } else {
                 if($i->inicio->greater($intervalo->inicio) && ! $insertado) {
index 3fff5b402d6c19eca00e79d21102ceb419f45eb4..c20c7d8414d2d13ac2f477720ddf6333dd68d7cb 100644 (file)
@@ -115,38 +115,58 @@ class MECON_Tiempo_Intervalo {
         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.
+    /**
+     * 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 ($i->fin->greater($this->inicio) &&
-                    $this->fin->greater($i->inicio))
-            {
+            if ($i->fin->greater($this->inicio) && $this->fin->greater($i->inicio)) {
                 return true;
             }
-            if ($this->fin->greater($i->inicio) &&
-                    $i->fin->greater($this->inicio))
-            {
+            if ($this->fin->greater($i->inicio) && $i->fin->greater($this->inicio)) {
                 return true;
             }
         }
         return false;
     }
 
-    function fusionar($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 ($i->fin->equal($this->inicio) || $this->fin->equal($i->inicio)) {
+            return true;
+        }
+        return false;
+    }
+
+    function fusionar($i)
     {
-        if (!$this->seSuperpone($f)) {
+        if (!$this->seSuperpone($i) && !$this->esAdyacente($i)) {
             return false;
         }
-        if ($f->fin->greater($this->fin)) {
-            $this->fin = $f->fin;
+        if ($i->fin->greater($this->fin)) {
+            $this->fin = $i->fin;
         }
-        if ($f->inicio->lower($this->inicio)) {
-            $this->inicio = $f->inicio;
+        if ($i->inicio->lower($this->inicio)) {
+            $this->inicio = $i->inicio;
         }
         return true;
     }