/**
 * ==========================================================================
 * @brief 例外生成マクロ
 * ==========================================================================
 */
#ifndef __GFL_ERROR_H__
#define __GFL_ERROR_H__

#pragma once

#include <err/gfl_Exception.h>
#include <err/gfl_FileNotFoundException.h>
#include <err/gfl_IlligalArgumentException.h>
#include <err/gfl_IndexOutOfBoundsException.h>
#include <err/gfl_IOException.h>
#include <err/gfl_MemoryAllocateException.h>
#include <err/gfl_NullPointerException.h>

/**
 * @brief  基本例外クラス「gfl::err::Exception」の生成
 */
#define THROW_GFL_EXCEPTION(message)           (throw gfl::err::Exception(message,__FILE__,__LINE__,__func__))

/**
 * @brief  ファイルが存在しない時用例外クラス「gfl::err::FileNotFoundException」の生成
 */
#define THROW_GFL_FILE_NOT_FOUND_EXCEPTION(message)   (throw gfl::err::FileNotFoundException(message,__FILE__,__LINE__,__func__))

/**
 * @brief  不正引数用例外クラス「gfl::err::IlligalArgumentException」の生成
 */
#define THROW_GFL_ILLIGAL_EXCEPTION(message)   (throw gfl::err::IlligalArgumentException(message,__FILE__,__LINE__,__func__))

/**
 * @brief  配列・バッファオーバー用例外クラス「gfl::err::IndexOutOfBoundsException」の生成
 */
#define THROW_GFL_INDEX_OUT_OF_BOUNDS_EXCEPTION(message)   (throw gfl::err::IndexOutOfBoundsException(message,__FILE__,__LINE__,__func__))

/**
 * @brief  NULLポインタ参照用例外クラス「gfl::err::NullPointerException」の生成
 */
#define THROW_GFL_NULL_POINTER_EXCEPTION(message)   (throw gfl::err::NullPointerException(message,__FILE__,__LINE__,__func__))

/**
 * @brief  IOエラー用例外クラス「gfl::err::IOException」の生成
 */
#define THROW_GFL_IO_EXCEPTION(message)   (throw gfl::err::IOException(message,__FILE__,__LINE__,__func__))


/**
 * @brief  メモリアロケートエラー用例外クラス「gfl::err::MemoryAllocateException」の生成
 */
#define THROW_GFL_MEMORY_ALLOCATE_EXCEPTION(message)   (throw gfl::err::MemoryAllocateException(message,__FILE__,__LINE__,__func__))

#endif  // __GFL_ERROR_H__
