/*****************************************************************************
 *	Keyboard.h  															 *
 *																			 *
 *	XFX::Input::Keyboard class definition file. 							 *
 *	Copyright (c) XFX Team. All Rights Reserved.							 *
 *****************************************************************************/
#ifndef _XFX_INPUT_KEYBOARD_
#define _XFX_INPUT_KEYBOARD_

#include "Enums.h"

namespace XFX
{
	namespace Input
	{
		/**
		 * Represents a state of keystrokes recorded by a keyboard input device.
		 */
		struct KeyboardState
		{
			KeyboardState();
			KeyboardState(Keys_t keys[]);
			KeyboardState(const KeyboardState &obj);
				
			Keys_t* GetPressedKeys();
			bool IsKeyDown(Keys_t key);
			bool IsKeyUp(Keys_t key);

			/**
			 * Returns the state of a particular key.
			 *
			 * @param key
			 * Enumerated value representing the key to query.
			 */
			const KeyState_t operator[](const Keys_t key) const;

		private:
			Keys_t* pressedKeys;
		};

		/**
		 * Allows retrieval of keystrokes from a keyboard input device.
		 */
		class Keyboard
		{
		private:
			Keyboard(); //Private constructor to prevent instantiation.

		public:
			static KeyboardState GetState();
		};
	}
}

#endif //_XFX_INPUT_KEYBOARD_