]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/Tiempo/Intervalo.php
Se modifica Intervalo::seSuperpone() para que no tome como superpuestos a
[mecon/meconlib.git] / lib / MECON / Tiempo / Intervalo.php
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;
     }