/*
 * ============================================================================
 * Project maven-homepage-plugin
 * Copyright (c) 2006-2007 by Andre Winkler. All rights reserved.
 * ============================================================================
 * $Id: collection.js 635 2007-01-13 00:24:00Z andrewinkler $
 * Version: $LastChangedRevision: 635 $ $LastChangedDate: 2007-01-13 01:24:00 +0100 (Sa, 13 Jan 2007) $
 * Author:  by Andre Winkler, $LastChangedBy: andrewinkler $
 */

/**
 * Implementiert eine Set-Collection. Jedes Element kommt in dieser Collection
 * nur einmal vor. Die Elemente des Sets besitzen eine Index-Reihenfolge.
 */
function Set() {
  this.set = new Array();
}

/**
 * Liefert die Anzahl aller Elemente.
 *
 * @return Die Anzahl aller Elemente.
 */
Set.prototype.size = function() {
  return this.set.length;
}

/**
 * Liefert das Element an Position 'index'.
 *
 * @param index Index Position.
 * @return Das Element an Position 'index'.
 */
Set.prototype.get = function(index) {
  return this.set[index];
}

/**
 * Fuegt ein neues Element hinzu. Falls diese in dem Set bereits vorhanden
 * ist, wird die Einfuegeoperation nicht ausgefuehrt.
 *
 * @param Das hinzuzufuegende Element.
 */
Set.prototype.add = function(item) {
  for (var index = 0; index < this.set.length; index++) {
    if (this.set[index] == item) {
      return;
    }
  }
  this.set.push(item);
}

/**
 * Entfernt ein Element aus dem Set. Kann das zu entfernende Element nicht
 * gefunden werden, liefert diese Methode false zurueck.
 *
 * @param item Das zu entfernende Element.
 */
Set.prototype.remove = function(item) {
  if (this.set.length == 0) {
    return false;
  } else {
    if (this.set[0] == item) {
      this.set.shift();
      return true;
    } else if (this.set[this.set.length - 1] == item) {
      this.set.pop();
      return true;
    } else if (this.set.length > 1) {
      for (var index = 1; index < this.set.length - 1; index++) {
        if (this.set[index] == item) {
          this.set.splice(index, 1);
          return true;
        }
      }
      return false;
    } else {
      return false;
    }
  }
}

/**
 * Loescht alle Elemente aus dem Set.
 */
Set.prototype.clear = function() {
  this.set = new Array();
}

Set.prototype.debug = function() {
  var value = "";
  for (var i = 0; i < this.set.length; i++) {
    value = value + "\n" + this.set[i];
  }
  return value;
}
