#ifndef __EXCEPTION_AMV
	#define __EXCEPTION_AMV

namespace amv	{

class exception	{
	const char *message;
	public:
		exception(const char *sourceMessage);
		virtual const char *what() const;

};

exception::exception(const char * sourceMessage):
message(sourceMessage)
{
}

const char *exception::what() const
{
return message;
}

class out_of_range: public exception	{
	public:
	out_of_range(const char *sourceMessage="Error de rango");

};

out_of_range::out_of_range(const char *sourceMessage):
exception(sourceMessage)
{
}

class bad_alloc: public exception	{
	public:
	bad_alloc(const char *sourceMessage="Error de asignación de memoria");

};

bad_alloc::bad_alloc(const char *sourceMessage):
exception(sourceMessage)
{
}

class overflow: public exception	{
	public:
	overflow(const char *sourceMessage="Error de desbordamiento positivo");

};

overflow::overflow(const char *sourceMessage):
exception(sourceMessage)
{
}

class underflow: public exception	{
	public:
	underflow(const char *sourceMessage="Error de desbordamiento negativo");

};

underflow::underflow(const char *sourceMessage):
exception(sourceMessage)
{
}

class division_by_zero: public exception	{
	public:
	division_by_zero(const char *sourceMessage="Error, división por cero");

};

division_by_zero::division_by_zero(const char *sourceMessage):
exception(sourceMessage)
{
}

}

#endif