#ifndef XNA_XNAERROR_HPP
#define XNA_XNAERROR_HPP

namespace xna {
	enum class XnaErrorCode {
		NONE,
		ARGUMENT_OUT_OF_RANGE,
		ARGUMENT_IS_NULL,
		INVALID_OPERATION,
		FAILED_OPERATION,
		OVERFLOW_OPERATION,
		NULL_CAST,
		BAD_CAST,
		STREAM_ERROR,
		UNINTIALIZED_RESOURCE,
		END_OF_FILE,
		BAD_TYPE,
		WARNING_INITIALIZED_RESOURCE
	};

	inline void xna_error_apply(XnaErrorCode* source, XnaErrorCode const& value) {
		if (source != nullptr)
			*source = value;
	}

	inline bool xna_error_haserros(XnaErrorCode* source) {
		return source != nullptr && *source != XnaErrorCode::NONE;
	}

#define xna_error_nullarg	XnaErrorCode* err = nullptr	
#define xna_error_ptr_arg	XnaErrorCode* err
}

#endif