/*******************************************************************************
 * 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;

/*****************************************************************************
*              Interface Generator v1
*
*   Tout ce qu'un generateur aleatoire 
*    comme HomogeneousMarkov, HeterogeneousMarkov et CountedNCFG
*    doit implementer pour etre utilises comme generateurs
******************************************************************************/

import java.util.Vector;
import java.util.List;

/**
 * Interface définissant les opérations requise pour un générateur.
 * @author Frédéric Sarron.
 */

public interface Generator
{
		/** 
		 * Génération d'une chaine de caractere
		 * @param size Le nombre de symboles de la séquence à generer
		 */
		public StringBuffer generateRandomWord(int size)
				throws GenerationException;

		/** 
		 * generation tokenizee : chaine d'entier representant les indexes
		 * des symboles dans le generateur
		 * @param size Le nombre de symboles de la séquence à generer
		 */
		public Vector generateTokenizedRandomWord(int size)
				throws GenerationException;

		/**
		 * Renvoie le nombre de symboles terminaux
		 * suivant la generation.
		 * @return Les nombre de symboles
		 */
		public int numberOfterminalsSymbols();

		/** 
		 * Renvoie true ssi la chaine de caracteres donnee
		 * est bien le nom d'un des symbols terminaux
		 * @param name La représentation littérale d'un symbole
		 * @return True si <code>name</code> est un terminal,
		 * false sinon.
		 */
		public boolean isTerminalSymbol(String name);

		/**
		 * Renvoie l'index du symbole dont le nom est donne en argument.
		 * @param name Le nom d'un symbole.
		 * @return L'index du symbole si <code>name</code> représente 
		 * bien un symbole
		 */
		public int symbolIndex(String name);

		/** 
		 * Renvoie le nom du symbole d'index donné en argument
		 */
		public String symbolName(int index);
}
