
#ifdef GNU
#define std
#include <iostream.h>
#else
#include <iostream>
#endif

//  Functions implementing the Animal class.  All are straightforward.

#include "Animal.h"

Animal::Animal( const std::string& name, int weight, const Date& start, int ndays )
  : name_(name), weight_(weight), start_(start), ndays_(ndays),
    cage_num_(-1)
{}

Animal::Animal( const Animal& old_animal )
  : name_(old_animal.name_), weight_(old_animal.weight_),
    start_(old_animal.start_), ndays_(old_animal.ndays_),
    cage_num_(old_animal.cage_num_)
{}

Animal::Animal( const std::string& name )
  : name_(name), weight_(-1),
    start_(Date(1,1)), ndays_(-1),
    cage_num_(-1)
{}


Animal::~Animal() 
{}


const std::string & 
Animal::Name() const
{
  return name_;
}


int
Animal::Weight() const
{
  return weight_;
}

const Date&
Animal::StartDate() const
{
  return start_;
}

int
Animal::NumDays() const
{
  return ndays_;
}

void
Animal::AssignCage( int cage_num )
{
  cage_num_ = cage_num;
}

int
Animal::GetCage() const
{
  return cage_num_;
}


bool
operator== ( const Animal& a1, const Animal& a2 )
{
  return a1.name_ == a2.name_;
}

std::ostream&
operator<< ( std::ostream& ostr, const Animal& a )
{
  ostr << a.name_ << ":  weight = " << a.weight_
       << ", start_day = " << a.start_
       << ", end_day = " << a.start_ + (a.ndays_-1);
  return ostr;
}
