General Purpose library for Freestanding C++ and POSIX systems
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 

72 行
2.0 KiB

#pragma once
#include <cstdint>
#include <cstddef>
#include <cstdlib>
#include <type_traits>
namespace gp_config{
namespace memory_module{
enum class memory_mode_t{
other,
clib,
buffer,
arena_buffer
};
constexpr memory_mode_t memory_mode = memory_mode_t::clib;
template<memory_mode_t T = memory_mode_t::other>
constexpr void*(*memory_allocator)(std::size_t)=nullptr;
template<memory_mode_t T = memory_mode_t::other>
constexpr void(*memory_deallocator)(void*)=nullptr;
// C Standard library memory usage
template<>
constexpr void*(*memory_allocator<memory_mode_t::clib>)(std::size_t) = malloc;
template<>
constexpr void(*memory_deallocator<memory_mode_t::clib>)(void*) = free;
// Buffer memory usage only
template<>
constexpr void*(*memory_allocator<memory_mode_t::buffer>)(std::size_t) = nullptr;
template<>
constexpr void(*memory_deallocator<memory_mode_t::buffer>)(void*) = nullptr;
// Buffer of arena memory usage
template<>
constexpr void*(*memory_allocator<memory_mode_t::arena_buffer>)(std::size_t) = nullptr;
template<>
constexpr void(*memory_deallocator<memory_mode_t::arena_buffer>)(void*) = nullptr;
constexpr bool is_ok =
( memory_allocator<memory_mode> != nullptr )
&& ( memory_deallocator<memory_mode> != nullptr );
}
constexpr bool has_exceptions = true;
constexpr bool has_buffer_bounds = true;
// Value of 8 is considered not cryptographically secure
// Value of 12 offers a good compromise of performance and robustness
// Value of 20 offers maximum robustness
constexpr size_t arc4random_strength = 20;
struct assert_failure{
assert_failure(const char* reason)
: what_str{reason}
{}
const char* what_str;
const char* what() {return what_str;}
};
constexpr size_t assert_buffer_size = 0;
constexpr auto assertion = [](bool pred, const char* reason) -> void{
if constexpr (has_exceptions)
if(!pred) throw assert_failure(reason);
};
}
enum class gp_errorcodes : int {
infinite_skipstone = 3000
};