#pragma once

#ifdef _WIN64
#pragma warning(disable: 4530)
#endif // _WIN64


#include <stdint.h>
#include <assert.h>
#include <typeinfo>
#include <memory>
#include <unordered_map>
#include <string>
#include <mutex>
#include <cstring>

//#define USESTDFUNC
#if defined USESTDFUNC
#include <functional>
#endif


#if defined(_WIN64)
#include <DirectXMath.h>
#endif

#ifndef DISABLE_COPY
#define DISABLE_COPY(T)                     \
    explicit T(const T&) = delete;          \
    T& operator=(const T&) = delete; 
#endif

#ifndef DISABLE_MOVE
#define DISABLE_MOVE(T)             \
    explicit T(T&&) = delete;       \
    T& operator=(T&&) = delete
#endif

#ifndef DISABLE_COPY_AND_MOVE
#define DISABLE_COPY_AND_MOVE(T) DISABLE_COPY(T) DISABLE_MOVE(T);
#endif

#ifdef _DEBUG
#define DEBUG_OP(x) x
#else
#define DEBUG_OP(x)
#endif

//Common Header
#include "XEnginType.h"
#include "..\Utilities\Math.h"
#include "..\Utilities\MathTypes.h"
#include "..\Utilities\Utilities.h"
#include "Id.h"

