/* This file is part of cardwords
   (c) 1998 1999 Tobias Peters
   see file COPYING for the copyright terms.
   
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

// cardwords_cardcontainer.hh

#ifndef CARDWORDS_CARDCONTAINER_HH
#define CARDWORDS_CARDCONTAINER_HH

#include "cardwords_card.hh"

/* Card-Containers can differ from each other very much. Card-containers
   are:
   - pile: The pile holds all cards at the start of the game.
   .       Cards are drawn out of the pile after every move until
   .       the pile is empty.

   - hand: The hand holds a fixed number of cards. After cards
   .        have been moved to the table to lay a word, new cards
   .        will be drawn from the pile until the fixed number of
   .        cards is already on the hand.

   - table: The table has many cells that can hold cards. Some of them
   .        will never contain a card during a game. The occupied cells
   .        do not form a continuous range.

   Pile and hand can be described as one-dimensional containers with a
   default adding location: Adding a card to these will not require to
   specify a location where to add that card.
   Table is a two-dimensional container. Adding a card requires a spe-
   cific location where to add that card.

   CardWords_CardContainer is only an abstract base class for the classes
   CardWords_CardContainer1Dim and CardWords_CardContainer2Dim.
*/

class CardWords_CardContainer {
public:
  // remove a special card from the container:
  virtual void remove_card (CardWords_Card *) = 0;

  // remove all cards and put them into the pile:
  virtual void clear (class CardWords_CardContainer1Dim *pile) = 0;
};

#endif
