#include <cstdarg>

#include "vtr_util.h"
#include "vpr_error.h"

/* Date:June 15th, 2013
 * Author: Daniel Chen
 * Purpose: Used to throw any internal VPR error or architecture
 *			file error and output the appropriate file name,
 *			line number, and the error message. Does not return
 *			anything but throw an exception which will be caught
 *			main.c.
 */
void vpr_throw(enum e_vpr_error type,
		const char* psz_file_name,
		unsigned int line_num,
		const char* psz_message,
		...) {

	// Make a variable argument list
	va_list va_args;

	// Initialize variable argument list
	va_start(va_args, psz_message);

    //Format the message
    std::string msg = vtr::vstring_fmt(psz_message, va_args);

	// Reset variable argument list
	va_end(va_args);

    throw VprError(type, msg, psz_file_name, line_num);
}

void vvpr_throw(enum e_vpr_error type,
		const char* psz_file_name,
		unsigned int line_num,
		const char* psz_message,
		va_list va_args) {

    //Format the message
    std::string msg = vtr::vstring_fmt(psz_message, va_args);

    throw VprError(type, msg, psz_file_name, line_num);
}
