Refactor PD::Li Pools system, Upgrade PD::Pool and add better logging
- Add ResetFast to Pool using c++20 concept - Add Put function to Pool - Use Pool Index instead of pointers in Command - Add accessor to Li Pools to prevent wrong command usage - Add Command Formatter - Use ResetFast for all Pools - Add Reset func to Li::Vertex (for ResetFast) - Add Pool Expandor and Put funcs to Lithium pools - Add getters for GfxDriverBase to PD::Li Pools
This commit is contained in:
+42
-2
@@ -23,6 +23,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
*/
|
||||
|
||||
#if defined(__GNUG__) && !defined(_MSC_VER)
|
||||
#include <cxxabi.h>
|
||||
#endif
|
||||
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <cmath>
|
||||
@@ -39,6 +43,11 @@ SOFTWARE.
|
||||
#include <vector>
|
||||
|
||||
namespace PD {
|
||||
enum class LogLevel {
|
||||
Info,
|
||||
Warning,
|
||||
Error,
|
||||
};
|
||||
[[noreturn]] inline void Throw(const std::string& msg) {
|
||||
throw std::runtime_error(msg);
|
||||
}
|
||||
@@ -47,17 +56,48 @@ using u16 = unsigned short;
|
||||
using u32 = unsigned int;
|
||||
using u64 = unsigned long long;
|
||||
using ptr = uintptr_t;
|
||||
PD_API void Log(const std::string& txt);
|
||||
PD_API void Log(const std::string& txt, LogLevel lvl = LogLevel::Info);
|
||||
template <typename... Args>
|
||||
void Log(std::format_string<Args...> fmt, Args&&... args) {
|
||||
std::string msg = std::format(fmt, std::forward<Args>(args)...);
|
||||
Log(msg);
|
||||
Log(msg, LogLevel::Info);
|
||||
}
|
||||
template <typename... Args>
|
||||
void Log(LogLevel lvl, std::format_string<Args...> fmt, Args&&... args) {
|
||||
std::string msg = std::format(fmt, std::forward<Args>(args)...);
|
||||
Log(msg, lvl);
|
||||
}
|
||||
template <typename T>
|
||||
std::string TypeName() {
|
||||
#if defined(__GNUG__) && !defined(_MSC_VER)
|
||||
int res = 0;
|
||||
std::unique_ptr<char, void (*)(void*)> up{
|
||||
abi::__cxa_demangle(typeid(T).name(), nullptr, nullptr, &res), std::free};
|
||||
return (res == 0) ? up.get() : typeid(T).name();
|
||||
#else
|
||||
return typeid(T).name(); // no demangler available :/
|
||||
#endif
|
||||
}
|
||||
} // namespace PD
|
||||
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
#define PDPRETTYFUNC __PRETTY_FUNCTION__
|
||||
#elif defined(_MSC_VER)
|
||||
#define PDPRETTYFUNC __FUNCSIG__
|
||||
#else
|
||||
#define PDPRETTYFUNC __FUNCTION__
|
||||
#endif
|
||||
#ifdef PD_DEBUG
|
||||
#define PDLOG(fmt, ...) \
|
||||
PD::Log("[{}:{}]: " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
|
||||
#define PDWARN(fmt, ...) \
|
||||
PD::Log(PD::LogLevel::Warning, "[{}:{}]: " fmt, __FILE__, __LINE__, \
|
||||
##__VA_ARGS__)
|
||||
#define PDERR(fmt, ...) \
|
||||
PD::Log(PD::LogLevel::Error, "[{}:{}]: " fmt, __FILE__, __LINE__, \
|
||||
##__VA_ARGS__)
|
||||
#else
|
||||
#define PDLOG(fmt, ...)
|
||||
#define PDWARN(fmt, ...)
|
||||
#define PDERR(fmt, ...)
|
||||
#endif
|
||||
Reference in New Issue
Block a user