#include "earray.h"

template <>
void earray<evar>::serial(estr& data) const
{
  serialuint(size(),data);
  if (size()==0) return;

  size_t i;
  for (i=0; i<size(); ++i)
    at(i).serial(data);
}

template <>
size_t earray<evar>::unserial(const estr& data,size_t i)
{
  clear();
  if (i==-1) return(i);
  unsigned int count;
  evar var;
//  T var;
  i=unserialuint(count,data,i);
  if (i==-1) return(-1);

  while(count && i<data.len()){
    i=var.unserial(data,i);
    if (i==-1) return(-1);
    add(var);
    var.clear();
    --count;
  }

  if (count) return(-1);

  return(i);
}

template <>
void earray<evar>::serial(const efile& f) const
{
  serialuint(size(),f);

  size_t i;
  for (i=0; i<size(); ++i)
    at(i).serial(f);
}

template <>
bool earray<evar>::unserial(const efile& f)
{
  clear();
  unsigned int count;

  if (!unserialuint(count,f)) return(false);

  evar var;
  while(count){
    if (!var.unserial(f)) return(false);
    add(var);
    var.clear();
    --count;
  }

  if (count) return(false);

  return(true);
}

template <>
void earray<evar>::addvar(evar& var)
{
  add(var);
}

template <>
evar earray<evar>::getvar(size_t i) const
{
  return(at(i));
}
