X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/6449554c9fa98619baf3f157b16cef5caf5f876a..c0cc0ddabd54d39b68079ef97f414b799211aa67:/lib/MECON/Tiempo/Intervalo.php?ds=sidebyside diff --git a/lib/MECON/Tiempo/Intervalo.php b/lib/MECON/Tiempo/Intervalo.php index 3fff5b4..0cc2068 100644 --- a/lib/MECON/Tiempo/Intervalo.php +++ b/lib/MECON/Tiempo/Intervalo.php @@ -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: + *
+ * A B + * |-----------|------------| Adyacentes + * + * A B + * |-----------| |--------| No adyacentes + *+ * @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($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; }