#pragma once
#include <iostream>
#include "unordered_map_serialization.h"
#include "State.h"

class QState
{
private:
	State state;
	int action;

	friend std::ostream& operator<<(std::ostream&, const QState&);
	friend class boost::serialization::access;
	friend class StateActionHash;

	template<class Archive>
	void serialize(Archive & ar, const unsigned int version){

		ar & state;
		ar & action;
	}

public:
	QState();
	QState(State s, int a);
	State getState();
	int getAction();
	bool operator==(const QState &qState) const;
};

class StateActionHash
{
public:
	size_t operator()(const QState &qState) const;
};