/*******************************************************************************
 * GenRGenS v.1.0, Generation of Random Genomic Sequences                      *
 * Copyright (C) 2001  Alain Denise/Yann Ponty                                 *
 *                                                                             *
 * This program is free software; you can redistribute it and/or               *
 * modify it under the terms of the GNU General Public License                 *
 * as published by the Free Software Foundation; either version 2              *
 * of the License, or (at your option) any later version.                      *
 *                                                                             *
 * This program is distributed in the hope that it will be useful,             *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of              *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               *
 * GNU General Public License for more details.                                *
 *                                                                             *
 * You should have received a copy of the GNU General Public License           *
 * along with this program; if not, write to the Free Software                 *
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. *
 *******************************************************************************/

package GenRGenS.utility;

/** 
 * Cette classe encapsule un tableau d'entiers, fournissant
 * une fonction <code>equals</code> traduisant une relation 
 * d'églité non disponible à partir des simples objets physiques.
 */
public class IntArray
{
		int[] contenu;
		
		/**
		 * Créé une instance de <code>IntArray</code> à partir d'un
		 * tableau d'entiers.
		 *
		 * Attention : on ne recopie pas le tableau ->
		 * tout changement opere dans une instance de IntArray
		 * modifie egalement le tableau-source
		 * @param valeurs Le tableau d'entiers contenu de la nouvelle instance
		 */
		public IntArray(int[] valeurs)
		{ contenu=valeurs; };
		
		/**
		 * Affecte un nouveau tableau interne à l'instance de <code>IntArray</code>
		 * @param valeurs Le nouveau "contenu" de l'instance de <code>IntArray</code>
		 */
		public void set(int[] valeurs)
		{	contenu=valeurs; };
		
		/**
		 * Renvoie le tableau interne à l'instance de <code>IntArray</code>
		 * @return Le "contenu" de l'instance de <code>IntArray</code>
		 */
		public int[] get()
		{	return(contenu); };
		
		
		/**
		 * Teste l'égalité "sémantique" entre 2 instances de BigDecimal.
		 * Methode "equals" surchargée par rapport à sa version primitive de Object.
		 * Elle est destinée à être utilisée par java.util.Hashtbl.
		 * @param obj L'objet au contenu duquel comparer l'instance de <code>IntArray</code>
		 * @return True si les deux contenus sont identiques, false sinon.
		 * @see java.util.Hashtable
		 * @see java.lang.Object
		 */
		public boolean equals(Object obj)
		{
				if (obj==null ||
						!(obj instanceof IntArray) ||
						contenu.length !=	((IntArray) obj).contenu.length)
						return(false);						
				else
						{
								for (int i=0;i<contenu.length;i++)
                    {
										if (contenu[i]!=((IntArray) obj).contenu[i])
												return(false);
                    }
								return(true);
						}
		}
		
		/**
		 * Renvoie le code de hashage de l'instance de <code>IntArray</code>,
		 * dont on veut qu'il "distribue" bien dans l'ensemble des entiers.
		 * @return Le code de hashage de cet objet.
		 */
		public int hashCode()
		{
				int temp=0;
				for (int i=0;i<contenu.length;i++) temp+=i;
				return(temp%Integer.MAX_VALUE);
		}

		/**
		 * Renvoie la représentation littérale de cet instance.
		 * @return La chaîne représentant cet objet.
		 */
		public String toString()
		{
				String temp="["+contenu[0];
				for (int i=1;i<contenu.length;i++)
						temp+=";"+contenu[i];
				return(temp+"]");
		};
		
}
