#include <config.h>
#include <distributions/DistTab.h>
#include <distributions/Distribution.h>
#include <distributions/DBern.h>
#include <distributions/DBeta.h>
#include <distributions/DBin.h>
#include <distributions/DCat.h>
#include <distributions/DChisqr.h>
#include <distributions/DDexp.h>
#include <distributions/DDirch.h>
#include <distributions/DExp.h>
#include <distributions/DGamma.h>
#include <distributions/DInterval.h>
#include <distributions/DLnorm.h>
#include <distributions/DLogis.h>
#include <distributions/DMNorm.h>
#include <distributions/DMState.h>
#include <distributions/DMulti.h>
#include <distributions/DNegBin.h>
#include <distributions/DNorm.h>
#include <distributions/DPar.h>
#include <distributions/DPois.h>
#include <distributions/DT.h>
#include <distributions/DUnif.h>
#include <distributions/DWeib.h>
#include <distributions/DWish.h>
#include <distributions/DHyper.h>
#include <distributions/DSum.h>
#include <distributions/DNormMix.h>
#include <sarray/SArray.h>

using std::map;
using std::string;

DistTab::DistTab()
{
  insert(new DBern);
  insert(new DBeta);	
  insert(new DBin);
  insert(new DCat);
  insert(new DChisqr);
  insert(new DDexp);
  insert(new DDirch);
  insert(new DExp);
  insert(new DGamma);
  insert(new DInterval);
  insert(new DLnorm);
  insert(new DLogis);
  insert(new DMNorm);
  insert(new DMState);
  insert(new DMulti);
  insert(new DNegBin);
  insert(new DNorm);
  insert(new DPar);
  insert(new DPois);
  insert(new DT);
  insert(new DUnif);
  insert(new DWeib);
  insert(new DWish);
  insert(new DHyper);
  insert(new DSum);
  insert(new DNormMix);
}

DistTab::~DistTab()
{
  map<const string, const Distribution*>::iterator p;
  for (p = _table.begin(); p != _table.end(); ++p) {
    delete p->second;
  }
}

bool DistTab::insert(Distribution const *dist)
{
  string const &name = dist->name();
  if (_table.find(name) == _table.end()) {
    _table[name] = dist;
    return true;
  }
  else {
    return false;
  }
}

bool DistTab::erase(string const &name)
{
  map<const string, const Distribution*>::iterator p = _table.find(name);
  if (p == _table.end()) {
    return false;
  }
  else {
    _table.erase(p);
    return true;
  }
}

Distribution const *DistTab::find(string const &name) const
{
  map<const string, const Distribution*>::const_iterator p = _table.find(name);

  if (p == _table.end())
    return 0;
  else
    return p->second;
}


syntax highlighted by Code2HTML, v. 0.9.1