// Copyright (C) 1999 Jean-Marc Valin

#include "mean.h"

using namespace std;

namespace FD {

DECLARE_TYPE(Mean)
//@implements GMM


void Mean::printOn (ostream &out) const
{
   out << "<Mean " << endl;
   out << "<dimension " << dimension << "> ";
   out << "<mode " << mode << "> ";
   if (mode == accum)
      out << "<accum_count " << accum_count << "> ";
   out << endl;
   out << "<data";
   for (int i=0;i<dimension;i++)
      out << " " << operator[] (i);
   out << "> >\n";
}

void Mean::readFrom (istream &in)
{
   dimension=-1;
   string tag;
   while (1)
   {
      char ch;
      in >> ch;
      if (ch == '>') break;
      in >> tag;
      if (tag == "dimension")
      { 
         in >> dimension;
         resize(dimension);
      }      
      else if (tag == "mode")
         in >> mode;
      else if (tag == "accum_count")
         in >> accum_count;
      else if (tag == "data")
      {
         if (dimension==-1)
            throw new ParsingException("Mean::readFrom : dimension must be specified before data");
         for (int i=0;i<dimension;i++)
            in >> operator[] (i);
      } else 
         throw new ParsingException ("Mean::readFrom : unknown argument: " + tag);
      if (!in) throw new ParsingException ("Mean::readFrom : Parse error trying to build " + tag);
      in >> tag;
      if (tag != ">") throw new ParsingException ("Mean::readFrom : Parse error: '>' expected ");
   }
}

istream &operator >> (istream &in, Mean &gauss)
{
   if (!isValidType(in, "Mean")) return in;
   
   gauss.readFrom(in);

   return in;
}
}//namespace FD


syntax highlighted by Code2HTML, v. 0.9.1