diff --git a/CMakeLists.txt b/CMakeLists.txt index b0e2c8d..0aa6ac2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.20) include(cmake/color.cmake) -set(BLT_VERSION 0.20.0) +set(BLT_VERSION 0.20.1) set(BLT_TEST_VERSION 0.0.1) set(BLT_TARGET BLT) diff --git a/include/blt/meta/config_generator.h b/include/blt/meta/config_generator.h new file mode 100644 index 0000000..4598847 --- /dev/null +++ b/include/blt/meta/config_generator.h @@ -0,0 +1,78 @@ +#pragma once +/* + * Copyright (C) 2024 Brett Terpstra + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef BLT_CONFIG_GENERATOR_H +#define BLT_CONFIG_GENERATOR_H + +#include + +namespace blt +{ +#define BLT_MAKE_VARIABLE(TYPE, NAME) \ + TYPE _##NAME{}; + +#define INTERNAL_BLT_MAKE_GETTER(TYPE, NAME) \ + TYPE& get_##NAME() { return _##NAME; } \ + const TYPE& get_##NAME() const { return _##NAME; } + +#define INTERNAL_BLT_MAKE_SETTER(TYPE, NAME) \ + auto& set_##NAME(const TYPE& new_##NAME) \ + { \ + _##NAME = new_##NAME; \ + return *this; \ + } \ + auto& set_##NAME(TYPE new_##NAME) \ + { \ + _##NAME = std::move(new_##NAME); \ + return *this; \ + } + +#define BLT_MAKE_GETTER(TYPE, NAME) \ + private: \ + BLT_MAKE_VARIABLE(TYPE, NAME) \ + public: \ + INTERNAL_BLT_MAKE_GETTER(TYPE, NAME) + +#define BLT_MAKE_SETTER(TYPE, NAME) \ + private: \ + BLT_MAKE_VARIABLE(TYPE, NAME) \ + public: \ + INTERNAL_BLT_MAKE_SETTER(TYPE, NAME) + +#define BLT_MAKE_FRIEND(FRIEND) friend FRIEND; + +//#define BLT_MAKE_ARG(TYPE, NAME) TYPE, NAME +//#define INTERNAL_BLT_ARG_INPUT(TYPE, NAME) TYPE NAME +//#define INTERNAL_BLT_ARG_ASSIGNMENT(TYPE, NAME) _##NAME(NAME) +//#define BLT_MAKE_CONSTRUCTOR(OBJECT, ...) OBJECT() + +#define BLT_MAKE_GETTER_AND_SETTER(TYPE, NAME) \ + private: \ + BLT_MAKE_VARIABLE(TYPE, NAME) \ + public: \ + INTERNAL_BLT_MAKE_GETTER(TYPE, NAME) \ + INTERNAL_BLT_MAKE_SETTER(TYPE, NAME) + +#define BLT_MAKE_CONFIG_TYPE(OBJECT, ...) \ + class OBJECT { \ + __VA_ARGS__ \ + }; \ + +} + +#endif //BLT_CONFIG_GENERATOR_H diff --git a/include/blt/std/meta.h b/include/blt/meta/meta.h similarity index 100% rename from include/blt/std/meta.h rename to include/blt/meta/meta.h diff --git a/include/blt/std/ranges.h b/include/blt/std/ranges.h index e2352e7..3de45b2 100644 --- a/include/blt/std/ranges.h +++ b/include/blt/std/ranges.h @@ -9,7 +9,7 @@ #define BLT_RANGES_H #include -#include +#include #include #include #include