// Copyright (C) 1999 Jean-Marc Valin

#include "acoustic_model.h"
#include "ObjectParser.h"
#include "Object.h"

using namespace std;

namespace FD {

DECLARE_TYPE(AcousticModel)

void AcousticModel::toIDs()
{
   gmms.toIDs(gaussians);
   gaussians.toIDs(means, covariances);
}

void AcousticModel::toPtrs()
{
   gaussians.toPtrs(means, covariances);
   gmms.toPtrs(gaussians);
   
}

void AcousticModel::printOn(ostream &out) const
{
   out << "<AcousticModel " << endl;
   out << "<covariances " << covariances << ">" << endl;
   out << "<means " << means << ">" << endl;
   out << "<gaussians " << gaussians << ">" << endl;
   out << "<gmms " << gmms << ">" << endl;
   //out << "<states " << states << ">" << endl;
   //out << "<phones " << phones << ">" << endl;
   out << ">\n";
}

void AcousticModel::readFrom (istream &in)
{
   string tag;

   while (1)
   {
      char ch;
      in >> ch;
      if (ch == '>') break;
      else if (ch != '<') 
       throw new ParsingException ("AcousticModel::readFrom : Parse error: '<' expected");
      in >> tag;
      if (tag == "covariances")
         in >> covariances;
      else if (tag == "means")
         in >> means;
      else if (tag == "gaussians")
         in >> gaussians;
      else if (tag == "gmms")
         in >> gmms;
      //else if (tag == "states")
      //   in >> states;
      //else if (tag == "phones")
      //   in >> phones;
      else
         throw new ParsingException ("AcousticModel::readFrom : unknown argument: " + tag);

      if (!in) throw new ParsingException ("AcousticModel::readFrom : Parse error trying to build " + tag);

      in >> tag;
      if (tag != ">") 
         throw new ParsingException ("AcousticModel::readFrom : Parse error: '>' expected ");
   }
}

istream &operator >> (istream &in, AcousticModel &mdl)
{
   if (!isValidType(in, "AcousticModel")) return in;
   mdl.readFrom(in);
   return in;
}

}//namespace FD


syntax highlighted by Code2HTML, v. 0.9.1