/*
  crossword -- a crossword game
  Copyright (C) 2000 Falk Hueffner

  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

  $Id: Move.hh,v 1.4 2000/11/28 23:41:47 falk Exp $
*/

#ifndef MOVE_HH
#define MOVE_HH

#include <iostream>
#include <vector>

#include "Pos.hh"
#include "Tile.hh"

class Put {			// FIXME ist this a good name?
public:
    Put(Pos np, Tile nt) : p(np), t(nt) { }
    Pos pos() const { return p; }
    Tile tile() const { return t; }
    bool operator <(const Put& other) const {
	if (p == other.p)
	    return t < other.t;
	else
	    return p < other.p;
    }

private:
    Pos p;
    Tile t;
};

typedef std::vector<Put> Move;

inline ostream& operator<<(ostream& out, const Move& m) {
    out << '{';
    for (Move::const_iterator i = m.begin(); i != m.end(); ++i) {
	if (i != m.begin())
	    out << ' ';
	out << i->tile() << '@' << PPos(i->pos());
    }
    return out << '}';
}

#endif

