Files
Juliet/Juliet/include/Core/Common/CoreUtils.h
2025-02-18 21:12:36 -05:00

67 lines
2.1 KiB
C++

#pragma once
#include <algorithm>
#include <Core/Common/CoreTypes.h>
#include <Juliet.h>
namespace Juliet
{
#if _DEBUG
#define Assert(expression) \
do \
{ \
if (!(expression)) \
{ \
Juliet::JulietAssert("Assertion Failed: " #expression); \
} \
} \
while (0)
#else
#define Assert(Expression)
#endif
extern void JULIET_API JulietAssert(const char* expression);
#define ZeroStruct(structInstance) ZeroSize(sizeof(structInstance), &(structInstance))
#define ZeroArray(array) ZeroSize(sizeof((array)), (array))
#define ZeroDynArray(Count, Pointer) ZeroSize((Count) * sizeof((Pointer)[0]), Pointer)
inline void ZeroSize(size_t size, void* ptr)
{
auto Byte = (uint8*)ptr;
while (size--)
{
*Byte++ = 0;
}
}
#define MemCopy memcpy
template <typename Type>
constexpr Type Min(Type lhs, Type rhs)
{
return rhs < lhs ? rhs : lhs;
}
template <typename Type>
constexpr Type Max(Type lhs, Type rhs)
{
return lhs < rhs ? rhs : lhs;
}
template <typename Type>
constexpr Type Clamp(Type val, Type min, Type max)
{
if (val < min)
{
return min;
}
if (val > max)
{
return max;
}
return val;
}
} // namespace Juliet