#ifndef CORE_DEBUG_H
#define CORE_DEBUG_H

namespace rde
{
namespace DataBreakpoint
{
	enum Enum
	{
		NONE,
		WRITE,
		READWRITE,
		EXECUTE
	};
	enum SizeEnum
	{
		BITS_8,
		BITS_16,
		BITS_32,
		BITS_64,	// possibly illegal for certain architectures.
	};
};
bool SetDataBreakpoint(const void* address, DataBreakpoint::Enum accessType, DataBreakpoint::SizeEnum dataSize);

// Finds out data size to match sizeof(T) 
// (must be 1/2/4/8 bytes).
template<typename T>
bool SetDataBreakpoint(const T& data, DataBreakpoint::Enum accessType)
{
	const size_t dataBytes = sizeof(T);
	DataBreakpoint::SizeEnum dataSize;
	if (dataBytes == 8)
		dataSize = DataBreakpoint::BITS_64;
	else if (dataBytes == 4)
		dataSize = DataBreakpoint::BITS_32;
	else if (dataBytes == 2)
		dataSize = DataBreakpoint::BITS_16;
	else if (dataBytes == 1)
		dataSize = DataBreakpoint::BITS_8;
	else
		return false;

	return SetDataBreakpoint(&data, accessType, dataSize);
}

} // rde

#endif


