aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorrtk0c <[email protected]>2022-05-24 21:47:55 -0700
committerrtk0c <[email protected]>2022-05-24 21:47:55 -0700
commitd18a28a9659092952aef70a30a47726e7c16d31a (patch)
treeb1d6304e631961a797225912ed1ef7ee55864f86 /source
parent123f741e3f5374b93ac39887b62bfa0d66762ae2 (diff)
Changeset: 38 Branch comment: [] Add infrastructure for codegen
Diffstat (limited to 'source')
-rw-r--r--source/CMakeLists.txt2
-rw-r--r--source/Macros.hpp29
-rw-r--r--source/RapidJsonHelper.hpp110
-rw-r--r--source/ScopeGuard.hpp60
-rw-r--r--source/Utils.cpp87
-rw-r--r--source/Utils.hpp61
-rw-r--r--source/YCombinator.hpp14
-rw-r--r--source/stb_implementation.c11
8 files changed, 0 insertions, 374 deletions
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 6ca2cd5..b5de147 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -31,9 +31,7 @@ PRIVATE
)
set(ProjectBrussel_SINGLE_UNIT_SRC
- stb_implementation.c
main.cpp
- Utils.cpp # May include platform headers
)
target_sources(${PROJECT_NAME} PRIVATE ${ProjectBrussel_SINGLE_UNIT_SRC})
set_source_files_properties(${ProjectBrussel_SINGLE_UNIT_SRC}
diff --git a/source/Macros.hpp b/source/Macros.hpp
deleted file mode 100644
index b5d05fa..0000000
--- a/source/Macros.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#pragma once
-
-#define STRINGIFY_IMPL(text) #text
-#define STRINGIFY(text) STRINGIFY_IMPL(text)
-
-#define CONCAT_IMPL(a, b) a##b
-#define CONCAT(a, b) CONCAT_IMPL(a, b)
-#define CONCAT_3(a, b, c) CONCAT(a, CONCAT(b, c))
-#define CONCAT_4(a, b, c, d) CONCAT(CONCAT(a, b), CONCAT(c, d))
-
-#define UNIQUE_NAME(prefix) CONCAT(prefix, __COUNTER__)
-#define UNIQUE_NAME_LINE(prefix) CONCAT(prefix, __LINE__)
-#define DISCARD UNIQUE_NAME(_discard)
-
-#define UNUSED(x) (void)x;
-
-#if defined(_MSC_VER)
-# define UNREACHABLE __assume(0)
-#elif defined(__GNUC__) || defined(__clang__)
-# define UNREACHABLE __builtin_unreachable()
-#else
-# define UNREACHABLE
-#endif
-
-#if _WIN32
-# define PLATFORM_PATH_STR "%ls"
-#else
-# define PLATFORM_PATH_STR "%s"
-#endif
diff --git a/source/RapidJsonHelper.hpp b/source/RapidJsonHelper.hpp
deleted file mode 100644
index 75cd93a..0000000
--- a/source/RapidJsonHelper.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-#pragma once
-
-#include <rapidjson/document.h>
-#include <cstring>
-#include <string>
-#include <string_view>
-
-#define BRUSSEL_JSON_GET(object, name, type, out, failAction) \
- { \
- auto it = (object).FindMember(name); \
- if (it == (object).MemberEnd()) failAction; \
- auto& value = it->value; \
- if (!value.Is<type>()) failAction; \
- (out) = value.Get<type>(); \
- }
-
-#define BRUSSEL_JSON_GET_DEFAULT(object, name, type, out, theDefault) \
- do { \
- auto it = (object).FindMember(name); \
- if (it == (object).MemberEnd()) { \
- (out) = theDefault; \
- break; \
- } \
- auto& value = it->value; \
- if (!value.Is<type>()) { \
- (out) = theDefault; \
- break; \
- } \
- (out) = value.Get<type>(); \
- } while (0);
-
-namespace rapidjson {
-
-inline const Value* GetProperty(const Value& value, std::string_view name) {
- for (auto it = value.MemberBegin(); it != value.MemberEnd(); ++it) {
- if (it->name.GetStringLength() != name.size()) continue;
- if (std::memcmp(it->name.GetString(), name.data(), name.size())) continue;
-
- return &it->value;
- }
- return nullptr;
-}
-
-inline const Value* GetProperty(const Value& value, Type type, std::string_view name) {
- for (auto it = value.MemberBegin(); it != value.MemberEnd(); ++it) {
- if (it->name.GetStringLength() != name.size()) continue;
- if (it->value.GetType() != type) continue;
- if (std::memcmp(it->name.GetString(), name.data(), name.size())) continue;
-
- return &it->value;
- }
- return nullptr;
-}
-
-inline std::string_view AsStringView(const Value& value) {
- return std::string_view(value.GetString(), value.GetStringLength());
-}
-
-inline std::string_view AsStringView(const GenericStringRef<char>& strRef) {
- return std::string_view(strRef.s, strRef.length);
-}
-
-inline std::string AsString(const Value& value) {
- return std::string(value.GetString(), value.GetStringLength());
-}
-
-inline std::string AsString(const GenericStringRef<char>& strRef) {
- return std::string(strRef.s, strRef.length);
-}
-
-// RapidJson itself already provides std::string and const char* overloads
-inline GenericStringRef<char> StringRef(std::string_view str) {
- return GenericStringRef<char>(
- str.data() ? str.data() : "",
- str.size());
-}
-
-template <class TIter, class TSentienl>
-rapidjson::Value WriteVectorPrimitives(rapidjson::Document& root, TIter begin, TSentienl end) {
- using TElement = typename TIter::value_type;
-
- rapidjson::Value list;
- while (begin != end) {
- if constexpr (std::is_same_v<TElement, std::string>) {
- auto& elm = *begin;
- list.PushBack(rapidjson::Value(elm.c_str(), elm.size()), root.GetAllocator());
- } else {
- list.PushBack(*begin, root.GetAllocator());
- }
- ++begin;
- }
- return list;
-}
-
-template <class TContainer>
-bool ReadVectorPrimitives(const rapidjson::Value& value, TContainer& list) {
- using TElement = typename TContainer::value_type;
-
- if (!value.IsArray()) return false;
-
- list.reserve(value.Size());
- for (auto& elm : value.GetArray()) {
- if (!elm.Is<TElement>()) return {};
- list.push_back(elm.Get<TElement>());
- }
-
- return true;
-}
-
-} // namespace rapidjson
diff --git a/source/ScopeGuard.hpp b/source/ScopeGuard.hpp
deleted file mode 100644
index 28f3385..0000000
--- a/source/ScopeGuard.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#pragma once
-
-#include "Macros.hpp"
-
-#include <utility>
-
-template <class TCleanupFunc>
-class ScopeGuard {
-private:
- TCleanupFunc mFunc;
- bool mDismissed = false;
-
-public:
- /// Specifically left this implicit so that constructs like
- /// \code
- /// ScopeGuard sg = [&]() { res.Cleanup(); };
- /// \endcode
- /// would work. It is highly discourage and unlikely that one would want to use ScopeGuard as a function
- /// parameter, so the normal argument that implicit conversion are harmful doesn't really apply here.
- // Deliberately not explicit to allow usages like: ScopeGuard var = lambda;
- ScopeGuard(TCleanupFunc&& function) noexcept
- : mFunc{ std::move(function) } {
- }
-
- ~ScopeGuard() noexcept {
- if (!mDismissed) {
- mFunc();
- }
- }
-
- ScopeGuard(const ScopeGuard&) = delete;
- ScopeGuard& operator=(const ScopeGuard&) = delete;
-
- ScopeGuard(ScopeGuard&& that) noexcept
- : mFunc{ std::move(that.mFunc) } {
- that.Cancel();
- }
-
- ScopeGuard& operator=(ScopeGuard&& that) noexcept {
- if (!mDismissed) {
- mFunc();
- }
- this->mFunc = std::move(that.mFunc);
- this->cancelled = std::exchange(that.cancelled, true);
- }
-
- void Dismiss() noexcept {
- mDismissed = true;
- }
-};
-
-template <class T>
-auto GuardDeletion(T* ptr) {
- return ScopeGuard([ptr]() {
- delete ptr;
- });
-}
-
-#define SCOPE_GUARD(name) ScopeGuard name = [&]()
-#define DEFER ScopeGuard UNIQUE_NAME(scopeGuard) = [&]()
diff --git a/source/Utils.cpp b/source/Utils.cpp
deleted file mode 100644
index 53b3863..0000000
--- a/source/Utils.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "Utils.hpp"
-
-#ifdef _WIN32
-# include <Windows.h>
-#endif
-
-#ifdef _WIN32
-# define BRUSSEL_MODE_STRING(string) L##string
-#else
-# define BRUSSEL_MODE_STRING(string) string
-#endif
-
-#if _WIN32
-using FopenModeString = const wchar_t*;
-#else
-using FopenModeString = const char*;
-#endif
-
-static FopenModeString GetModeString(Utils::IoMode mode, bool binary) {
- using namespace Utils;
- if (binary) {
- switch (mode) {
- case Read: return BRUSSEL_MODE_STRING("rb");
- case WriteTruncate: return BRUSSEL_MODE_STRING("wb");
- case WriteAppend: return BRUSSEL_MODE_STRING("ab");
- }
- } else {
- switch (mode) {
- case Read: return BRUSSEL_MODE_STRING("r");
- case WriteTruncate: return BRUSSEL_MODE_STRING("w");
- case WriteAppend: return BRUSSEL_MODE_STRING("a");
- }
- }
- return nullptr;
-}
-
-FILE* Utils::OpenCstdioFile(const std::filesystem::path& path, IoMode mode, bool binary) {
-#ifdef _WIN32
- // std::filesystem::path::c_str() returns `const wchar_t*` under Windows, because NT uses UTF-16 natively
- // NOTE: _wfopen() only affects the type of path parameter, otherwise the file stream created is identical to the one by fopen()
- return _wfopen(path.c_str(), ::GetModeString(mode, binary));
-#else
- return fopen(path.c_str(), ::GetModeString(mode, binary));
-#endif
-}
-
-FILE* Utils::OpenCstdioFile(const char* path, IoMode mode, bool binary) {
-#ifdef _WIN32
- // On Windows, fopen() accepts ANSI codepage encoded path, convert our UTF-8 string to UTF-16 to ensure that no matter what the locale is, the path continues to work
- WCHAR platformPath[MAX_PATH];
- if (MultiByteToWideChar(CP_UTF8, 0, path, -1, platformPath, MAX_PATH) == 0) {
- return nullptr;
- }
- return _wfopen(platformPath, ::GetModeString(mode, binary));
-#else
- return fopen(path, ::GetModeString(mode, binary));
-#endif
-}
-
-bool Utils::InRangeInclusive(int n, int lower, int upper) {
- if (lower > upper) {
- std::swap(lower, upper);
- }
- return n >= lower && n <= upper;
-}
-
-bool Utils::LineContains(glm::ivec2 p1, glm::ivec2 p2, glm::ivec2 candidate) {
- bool verticalLine = p1.x == p2.x && InRangeInclusive(candidate.x, p1.x, p2.x);
- bool horizontalLine = p1.y == p2.y && InRangeInclusive(candidate.y, p1.y, p2.y);
- return verticalLine && horizontalLine;
-}
-
-bool Utils::IsColinear(glm::ivec2 p1, glm::ivec2 p2) {
- return p1.x == p2.x || p1.y == p2.y;
-}
-
-std::string Utils::MakeRandomNumberedName(const char* tag) {
- int n = std::rand();
-#define RNG_NAME_PATTERN "Unnamed %s #%d", tag, n
- // NOTE: does not include null-terminator
- int size = snprintf(nullptr, 0, RNG_NAME_PATTERN);
- std::string result;
- result.resize(size); // std::string::resize handles storage for null-terminator alreaedy
- snprintf(result.data(), size, RNG_NAME_PATTERN);
-#undef RNG_NAME_PATTERN
- return result;
-}
diff --git a/source/Utils.hpp b/source/Utils.hpp
deleted file mode 100644
index 9f28aad..0000000
--- a/source/Utils.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#pragma once
-
-#include <robin_hood.h>
-#include <cstdio>
-#include <cstring>
-#include <filesystem>
-#include <glm/glm.hpp>
-
-namespace Utils {
-
-enum IoMode {
- Read,
- WriteTruncate,
- WriteAppend,
-};
-
-FILE* OpenCstdioFile(const std::filesystem::path& path, IoMode mode, bool binary = false);
-FILE* OpenCstdioFile(const char* path, IoMode mode, bool binary = false);
-
-constexpr float Abs(float v) noexcept {
- return v < 0.0f ? -v : v;
-}
-
-bool InRangeInclusive(int n, int lower, int upper);
-bool LineContains(glm::ivec2 p1, glm::ivec2 p2, glm::ivec2 candidate);
-
-bool IsColinear(glm::ivec2 p1, glm::ivec2 p2);
-
-template <class T>
-void HashCombine(std::size_t& seed, const T& v) {
- seed ^= std::hash<T>{}(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
-}
-
-std::string MakeRandomNumberedName(const char* tag);
-
-} // namespace Utils
-
-struct StringHash {
- using is_transparent = void;
-
- std::size_t operator()(const std::string& key) const { return robin_hood::hash_bytes(key.c_str(), key.size()); }
- std::size_t operator()(std::string_view key) const { return robin_hood::hash_bytes(key.data(), key.size()); }
- std::size_t operator()(const char* key) const { return robin_hood::hash_bytes(key, std::strlen(key)); }
-};
-
-struct StringEqual {
- using is_transparent = int;
-
- bool operator()(std::string_view lhs, const std::string& rhs) const {
- const std::string_view view = rhs;
- return lhs == view;
- }
-
- bool operator()(const char* lhs, const std::string& rhs) const {
- return std::strcmp(lhs, rhs.c_str()) == 0;
- }
-
- bool operator()(const std::string& lhs, const std::string& rhs) const {
- return lhs == rhs;
- }
-};
diff --git a/source/YCombinator.hpp b/source/YCombinator.hpp
deleted file mode 100644
index b1d2350..0000000
--- a/source/YCombinator.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-template <class Func>
-struct YCombinator {
- // NOTE: implicit constructor allows initializing this
- Func func;
-
- template <class... Ts>
- decltype(auto) operator()(Ts&&... args) const {
- // NOTE: static_cast<Ts>(args)... is equivalent to std::forward<Ts>(args)...
- // written this way so that we don't have to include <utility>, as well as reducing template instanciations to help compile time
- return func(*this, static_cast<Ts>(args)...);
- }
-};
diff --git a/source/stb_implementation.c b/source/stb_implementation.c
deleted file mode 100644
index 078ca5d..0000000
--- a/source/stb_implementation.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#define STB_RECT_PACK_IMPLEMENTATION
-#include <stb_rect_pack.h>
-
-#define STB_TRUETYPE_IMPLEMENTATION
-#include <stb_truetype.h>
-
-#define STB_IMAGE_IMPLEMENTATION
-#include <stb_image.h>
-
-#define STB_SPRINTF_IMPLEMENTATION
-#include <stb_sprintf.h>