#include <Game.h>
#include <DeedIndex.h>
#include <CardIndex.h>
#include <CardPtr.h>
#include <SpaceLoop.h>
#include <PlayerLoop.h>
#include <Bank.h>

Game::Game() : Base(this)
{
  deeds   = new DeedIndex;
  cards   = new CardIndex;
  chest   = new CardPtrDeque;
  chance  = new CardPtrDeque;
  spaces  = new SpaceLoop;
  players = new PlayerLoop;
  bank    = new Bank;
}

Game::~Game()
{
  theGame = 0;
  delete deeds;
  delete cards;
  delete chest;
  delete chance;
  delete spaces;
  delete players;
  delete bank;
}

char* Game::classname() const
{
  return "Game";
}

IOstatus Game::readContents()
{
  if (deeds->read()   != ok) expected("DeedIndex");
  if (cards->read()   != ok) expected("CardIndex");
  if (chest->read()   != ok) expected("CardPtrDeque chest");
  if (chance->read()  != ok) expected("CardPtrDeque chance");
  if (spaces->read()  != ok) expected("SpaceLoop");
  if (players->read() != ok) expected("PlayerLoop");
  if (bank->read()    != ok) expected("Bank");
  return ok;
}

IOstatus Game::writeContents() const
{
  if (deeds->write()   != ok) die("Writing DeedIndex");
  if (cards->write()   != ok) die("Writing CardIndex");
  if (chest->write()   != ok) die("Writing CardPtrDeque chest");
  if (chance->write()  != ok) die("Writing CardPtrDeque chance");
  if (spaces->write()  != ok) die("Writing SpaceLoop");
  if (players->write() != ok) die("Writing PlayerLoop");
  if (bank->write()    != ok) die("Writing Bank");
  return ok;
}
