// pack.h : this is implementation of card pack -
// can shuffle cards and give to client the most "upper" card

#include "card.h"
#include <vector>
#include <algorithm>
#include <functional>

class Pack {

  const int PACK_SIZE = 52;

  typedef vector<Card> CardVector;
  typedef CardVector::iterator CardVectorIt;

  CardVector* PackCards;
  CardVectorIt start,it,end;

public:

  Pack() {
    PackCards = new CardVector(PACK_SIZE);

    start = PackCards->begin();
    end   = PackCards->end();
    it = start;

    for (int s = int(HEART); s <= int(SPADE); s++) {
      for (int v = int(D2); v <= int(ACE); v++) {

	*it = Card(CardVal(v),CardSuit(s));
	it ++;
      }
    }
    it = start;
  }

  void do_shuffle() {
    random_shuffle(start,end);
    it = start;
  }

  Card  give_card() {CardVectorIt tmp = it; it++; return *tmp;}

};
