/***************************************
*                                      *
*   Copyright (c) 1998 Jean-Eric Pin   *
*   All rights reserved.               *
*                                      *
*   TAB = 2 spaces                     *
*                                      *
***************************************/

/*-------------------------------------------------------------------
 * TableDeS.c    Jean-Eric Pin 17/04/97
 *
 * Calcul de la table de multiplication du semigroupe.
 *-------------------------------------------------------------------
 */     

#include <stdlib.h>
#include <stdio.h>
#include "Globales.h"
#include "Main.h"
#include "Initialisation.h"
#include "Memoire.h"
#include "Reduction.h"
#include "TableDeS.h"

extern unsigned long CalculsEffectues;
extern unsigned long NbElements;
extern unsigned long **TableDeS;
extern ProduitRapide_ ProduitRapide;

/****************************************************
*
* ProduitTable. OK
*
****************************************************/

unsigned long ProduitTable(unsigned long n1, unsigned long n2)
{  
  return(TableDeS[n1][n2]);
}

/****************************************************
*
* CalculTableDeS. OK
*
****************************************************/

void CalculTableDeS(void)
{
  unsigned long u, v;
  
  if (!(CalculsEffectues & CALCUL_TABLE_DE_S))
  {
    TableDeS = AlloueMemoireTableDeS();
    for (u = IDENTITE; u <= NbElements; u++)
      for (v = IDENTITE; v <= NbElements; v++)
        TableDeS[u][v] = ProduitParReduction(u, v);
    CalculsEffectues |= CALCUL_TABLE_DE_S;    /* On prend note : la table de multiplication a ete calculee. */
    ProduitRapide = ProduitTable;
  }
}