
#include "sopnamsp.h"
#include "ntupintf.h"
#include <stdlib.h>
#include <stdio.h>
#include "pexceptions.h"

/*!
   \class SOPHYA::NTupleInterface
   \ingroup HiStats
   Interface class (pure virtual) defining generic operations on NTuple,
   a 2-dimensional data set with named columns
*/

//++
// Class	NTupleInterface
// Lib	        HiStats
// include	ntupintf.h
//
//	Interface permettant de construire des vues NTuples (tableau lignes-colonnes) 
//	pour differents objets. Toutes les methodes ont une implementation par defaut. 
//--

//++
// NTupleInterface()
//	Constructeur.
// virtual ~NTupleInterface()
//	Destructeur
// uint_4  NbLines() const 
//	Nombre de lignes du tableau
// uint_4  NbColumns() const 
//	Nombre de colonnes du tableau
// r_8 *  GetLineD(int n) const
//	Renvoie un tableau avec le contenu de la ligne "n"
// r_8	GetCell(int n, int k) const
//	Renvoie le contenu de la cellule correspondant a la ligne "n"
//	et colonne "k"
// r_8  GetCell(int n, string const & nom) const
//	Renvoie le contenu de la cellule correspondant a la ligne "n"
//	pour la colonne identifiee par "nom"
// string  GetCelltoString(int n, int k) const
//	Renvoie le contenu de la cellule correspondant a la ligne "n"
//	et colonne "k", sous forme de chaine de caracteres.
// string  GetCell(int n, string const & nom) const
//	Renvoie le contenu de la cellule correspondant a la ligne "n"
//	pour la colonne identifiee par "nom", sous forme de chaine de caracteres.
// void GetMinMax(int k, double& min, double& max)  const
//	Renvoie la valeur mini et maxi de la colonne numero "k"
// void	GetMinMax(string const & nom, double& min, double& max)
//	Renvoie la valeur mini et maxi de la colonne identifiee par "nom"
// int  ColumnIndex(string const & nom)  const
//	Renvoie le numero de colonne identifiee par "nom". Renvoie -1 (negatif)
//	si colonne "nom" n'existe pas.
// string ColumnName(int k) const
//	Renvoie le nom de la colonne numero "k"
// string VarList_C(const char* nomx=NULL) const
//	Renvoie une chaine avec les declarations "C" pour les
//	variables avec les noms de colonnes
// string  LineHeaderToString()
//	Renvoie une chaine avec les noms de colonnes, utilisables pour l'impression
// string  LineToString(int n)
//	Renvoie une chaine avec le contenu de la ligne "n", utilisable pour l'impression
//--

/* --Methode-- */
NTupleInterface::NTupleInterface()
{
}
/* --Methode-- */
NTupleInterface::~NTupleInterface()
{
}

//! Retuns the number of lines (rows) of the data set
/* --Methode-- */
sa_size_t NTupleInterface::NbLines() const
{
return(0);
}

//! Retuns the number of columns of the data set 
/* --Methode-- */
sa_size_t NTupleInterface::NbColumns() const
{
return(0);
}

//! Retuns the content of a given line 
/*! 
   An array (double *) containg all cells of a given line, converted to 
   float values is returned
*/
/* --Methode-- */
r_8 * NTupleInterface::GetLineD(sa_size_t ) const
{
  throw NotAvailableOperation("NTupleInterface::GetLineD(sa_size_t ) must be redefined in derived classes");
}

//! Returns the content of a given cell
/*!
    The cell is identified by the line and column number. Its content is
    converted to a floating value.
*/
/* --Methode-- */
r_8 NTupleInterface::GetCell(sa_size_t , sa_size_t ) const
{
return(0.);
}

//! Returns the content of a given cell
/*!
    The cell is identified by the line number and column name. Its content is
    converted to a floating value.
*/
/* --Methode-- */
r_8 NTupleInterface::GetCell(sa_size_t n, string const & nom) const
{
return(GetCell(n, ColumnIndex(nom)));
}

//! Returns the string representation of a given cell
/*!
    The cell is identified by the line and column number. Its content is
    converted to a string.
*/
string NTupleInterface::GetCelltoString(sa_size_t n, sa_size_t k) const
{
char strg[64];
//sprintf(strg,"C%d= %g\n", k, GetCell(n, k));
sprintf(strg,"%g\n", GetCell(n, k));
return(strg);
}

//! Returns the string representation of a given cell
/*!
    The cell is identified by the line number and column name. Its content is
    converted to a string.
*/
string NTupleInterface::GetCelltoString(sa_size_t n, string const & nom) const
{
return(GetCelltoString(n, ColumnIndex(nom)));
}

//! Returns the minimum and maximum values for a given column
/* --Methode-- */
void NTupleInterface::GetMinMax(sa_size_t , double& min, double& max)   const
{
min = max = 0.;
}

/* --Methode-- */
//! Returns the minimum and maximum values for a given named column
void NTupleInterface::GetMinMax(string const & nom, double& min, double& max)   const
{
  GetMinMax(ColumnIndex(nom), min, max);
}

/* --Methode-- */
//! Returns the column index given the column name
sa_size_t NTupleInterface::ColumnIndex(string const & nom)  const
{
return(-1);
}

/* --Methode-- */
//! Returns the column name corresponding to a column index.
string NTupleInterface::ColumnName(sa_size_t k) const
{
return("");
}

/* --Methode-- */
string NTupleInterface::VarList_C(const char*) const
{
return("");
}

/* --Methode-- */
string NTupleInterface::LineHeaderToString() const
{
return("");
}

/* --Methode-- */
string NTupleInterface::LineToString(sa_size_t ) const
{
return("");
}



