diff --git a/CMakeLists.txt b/CMakeLists.txt index 42b13c4..8e4a28c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,11 +44,11 @@ add_library(fennec STATIC include/fennec/lang/type_transforms.h include/fennec/lang/types.h include/fennec/lang/utility.h - include/fennec/lang/variadics.h + include/fennec/lang/type_sequences.h include/fennec/lang/detail/__numeric_transforms.h include/fennec/lang/detail/__type_traits.h - include/fennec/lang/detail/__variadics.h + include/fennec/lang/detail/__type_sequences.h # MEMORY =============================================================================================================== diff --git a/include/fennec/lang/bits.h b/include/fennec/lang/bits.h index ca28fae..8d7d65f 100644 --- a/include/fennec/lang/bits.h +++ b/include/fennec/lang/bits.h @@ -18,7 +18,7 @@ /// /// \file bits.h -/// \brief bit-wise operations +/// \brief \ref fennec_lang_bit_manipulation /// /// /// \details diff --git a/include/fennec/lang/conditional_types.h b/include/fennec/lang/conditional_types.h index 80cd310..f7b11aa 100644 --- a/include/fennec/lang/conditional_types.h +++ b/include/fennec/lang/conditional_types.h @@ -18,7 +18,7 @@ /// /// \file conditional_types.h -/// \brief metaprogramming to conditionally set a type +/// \brief \ref fennec_lang_conditional_types /// /// /// \details diff --git a/include/fennec/lang/constants.h b/include/fennec/lang/constants.h index e6433c2..353e9ae 100644 --- a/include/fennec/lang/constants.h +++ b/include/fennec/lang/constants.h @@ -18,7 +18,7 @@ /// /// \file constants.h -/// \brief metaprogramming constants +/// \brief \ref fennec_lang_constants /// /// /// \details diff --git a/include/fennec/lang/detail/__variadics.h b/include/fennec/lang/detail/__type_sequences.h similarity index 89% rename from include/fennec/lang/detail/__variadics.h rename to include/fennec/lang/detail/__type_sequences.h index 0459983..848521e 100644 --- a/include/fennec/lang/detail/__variadics.h +++ b/include/fennec/lang/detail/__type_sequences.h @@ -16,8 +16,8 @@ // along with this program. If not, see . // ===================================================================================================================== -#ifndef FENNEC_LANG_DETAIL_VARIADICS_H -#define FENNEC_LANG_DETAIL_VARIADICS_H +#ifndef FENNEC_LANG_DETAIL_TYPE_SEQUENCES_H +#define FENNEC_LANG_DETAIL_TYPE_SEQUENCES_H #include @@ -33,4 +33,4 @@ template struct __first_element : type_trans } -#endif // FENNEC_LANG_DETAIL_VARIADICS_H +#endif // FENNEC_LANG_DETAIL_TYPE_SEQUENCES_H diff --git a/include/fennec/lang/intrinsics.h b/include/fennec/lang/intrinsics.h index 0c9af6f..6b1a84d 100644 --- a/include/fennec/lang/intrinsics.h +++ b/include/fennec/lang/intrinsics.h @@ -18,8 +18,7 @@ /// /// \file intrinsics.h -/// \brief This header contains definitions for compiler intrinsics necessary for implementing functions of the -/// C++ stdlib. +/// \brief \ref fennec_lang_intrinsics /// /// \copyright Copyright © 2025 Medusa Slockbower ([GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)) /// @@ -34,6 +33,8 @@ /// \brief This header contains definitions for compiler intrinsics necessary for implementing functions of the /// C++ stdlib. /// +/// \code{.cpp}#include \endcode +/// /// /// ///
Syntax diff --git a/include/fennec/lang/lang.h b/include/fennec/lang/lang.h index 33b2256..d86dbe1 100644 --- a/include/fennec/lang/lang.h +++ b/include/fennec/lang/lang.h @@ -18,7 +18,7 @@ /// /// \file lang.h -/// \brief fennec C++ language library +/// \brief fennec C++ Language Library /// /// /// \details @@ -41,6 +41,7 @@ /// - \subpage fennec_lang_limits /// - \subpage fennec_lang_metaprogramming /// - \subpage fennec_lang_types +/// - \subpage fennec_lang_utility /// /// @@ -55,7 +56,9 @@ /// - \subpage fennec_lang_conditional_types /// - \subpage fennec_lang_numeric_transforms /// - \subpage fennec_lang_sequences +/// - \subpage fennec_lang_type_sequences /// - \subpage fennec_lang_type_traits +/// - \subpage fennec_lang_type_transforms /// /// diff --git a/include/fennec/lang/limits.h b/include/fennec/lang/limits.h index f73836c..deca9ed 100644 --- a/include/fennec/lang/limits.h +++ b/include/fennec/lang/limits.h @@ -18,7 +18,7 @@ /// /// \file limits.h -/// \brief contains the limits of builtin data types to C++ +/// \brief \ref fennec_lang_limits /// /// /// \details diff --git a/include/fennec/lang/numeric_transforms.h b/include/fennec/lang/numeric_transforms.h index 3fa1ebf..77b7b23 100644 --- a/include/fennec/lang/numeric_transforms.h +++ b/include/fennec/lang/numeric_transforms.h @@ -18,7 +18,7 @@ /// /// \file numeric_transforms.h -/// \brief modify numeric types at compile time +/// \brief \ref fennec_lang_numeric_transforms /// /// /// \details diff --git a/include/fennec/lang/sequences.h b/include/fennec/lang/sequences.h index 2b33f0a..3a68b95 100644 --- a/include/fennec/lang/sequences.h +++ b/include/fennec/lang/sequences.h @@ -18,7 +18,7 @@ /// /// \file sequences.h -/// \brief metaprogramming sequences +/// \brief \ref fennec_lang_sequences /// /// /// \details diff --git a/include/fennec/lang/variadics.h b/include/fennec/lang/type_sequences.h similarity index 63% rename from include/fennec/lang/variadics.h rename to include/fennec/lang/type_sequences.h index 057edb8..824d655 100644 --- a/include/fennec/lang/variadics.h +++ b/include/fennec/lang/type_sequences.h @@ -17,8 +17,8 @@ // ===================================================================================================================== /// -/// \file variadics.h -/// \brief basic types of the c++ language +/// \file type_sequences.h +/// \brief \ref fennec_lang_type_sequences /// /// /// \details @@ -28,10 +28,35 @@ /// /// -#ifndef FENNEC_LANG_VARIADICS_H -#define FENNEC_LANG_VARIADICS_H +#ifndef FENNEC_LANG_TYPE_SEQUENCES_H +#define FENNEC_LANG_TYPE_SEQUENCES_H -#include +/// +/// \page fennec_lang_type_sequences Type Sequences +/// +/// \brief This header is part of the metaprogramming library. It defines structures for sequences of types, used during compile time. +/// +/// \code #include \endcode +/// +/// +///
Syntax +/// Description +/// +///

+/// \ref fennec::first_element "typename first_element::type"
+/// \ref fennec::first_element_t "first_element_t" +///
+/// \copydoc fennec::first_element +/// +///

+/// \ref fennec::replace_first_element "typename replace_first_element::type"
+///
+/// \copydoc fennec::replace_first_element +/// +///
+/// + +#include namespace fennec { diff --git a/include/fennec/lang/type_traits.h b/include/fennec/lang/type_traits.h index cd8586f..fe393b3 100644 --- a/include/fennec/lang/type_traits.h +++ b/include/fennec/lang/type_traits.h @@ -18,7 +18,7 @@ /// /// \file type_traits.h -/// \brief get info about types at compile-time +/// \brief \ref fennec_lang_type_traits /// /// /// \details @@ -92,6 +92,18 @@ ///
/// \copydetails fennec::is_same /// +///

+/// \ref fennec::can_convert "can_convert::value"
+/// \ref fennec::can_convert_v "can_convert_v" +///
+/// \copydetails fennec::can_convert +/// +///

+/// \ref fennec::is_constructible "is_constructible::value"
+/// \ref fennec::is_constructible_v "is_constructible_v" +///
+/// \copydoc fennec::is_constructible +/// ///
/// @@ -157,7 +169,7 @@ template constexpr bool_t is_integral_v /// /// \brief check if \p T is of a signed integral /// -/// \details +/// \details Checks if type `T` is a signed type i.e. `T(-1) < T(0)` and stores it in `is_same::value`. /// \tparam T type to check template struct is_signed : detail::__is_signed> {}; @@ -172,7 +184,7 @@ template constexpr bool_t is_signed_v /// /// \brief check if \p T is of an unsigned integral /// -/// \details +/// \details Checks if type `T` is an unsigned type i.e. `T(-1) > T(0)` and stores it in `is_same::value`. /// \tparam T type to check template struct is_unsigned : detail::__is_unsigned> {}; @@ -190,7 +202,7 @@ template constexpr bool_t is_unsigned_v /// /// \brief check if \p T is of a floating point type /// -/// \details +/// \details Checks if type `T` is a floating point type and store it in `is_same::value`. /// \tparam T type to check template struct is_floating_point : detail::__is_floating_point>{}; @@ -208,7 +220,7 @@ template constexpr bool_t is_floating_point_v /// /// \brief check if \p T is an arithmetic type /// -/// \details +/// \details Checks if type `T` is a built-in type with arithmetic operators and store it in `is_same::value`. /// \tparam T type to check template struct is_arithmetic : bool_constant or is_floating_point_v>{}; @@ -224,8 +236,9 @@ template constexpr bool_t is_arithmetic_v /// /// \brief check if the two types are identical /// -/// \details -/// \tparam T type to check +/// \details Checks if `T0` and `T1` are identical and store it in `is_same::value` +/// \tparam T0 first type to check +/// \tparam T1 second type to check template struct is_same : false_type {}; @@ -243,17 +256,19 @@ template constexpr bool_t is_same_v /// /// \brief check if type `T0` can be converted `T1` -/// \tparam T0 First type -/// \tparam T1 Second type -template struct can_convert - : bool_constant {}; +/// +/// \details Checks if `TypeT0` +/// \tparam FromT First type +/// \tparam ToT Second type +template struct is_convertible + : bool_constant {}; /// -/// \brief shorthand -/// \param T0 First type -/// \param T1 Second type -template using can_convert_v - = typename can_convert::type; +/// \brief shorthand for `can_convert::value` +/// \param FromT First type +/// \param ToT Second type +template using is_convertible_v + = typename is_convertible::type; // fennec::is_constructible =============================================================================================== @@ -266,6 +281,8 @@ template using can_convert_v template struct is_constructible : bool_constant {}; +/// +/// \brief Shorthand for `is_constructible::value` template constexpr bool_t is_constructible_v = is_constructible{}; diff --git a/include/fennec/lang/type_transforms.h b/include/fennec/lang/type_transforms.h index fca11af..b9af62e 100644 --- a/include/fennec/lang/type_transforms.h +++ b/include/fennec/lang/type_transforms.h @@ -18,7 +18,7 @@ /// /// \file type_transforms.h -/// \brief modify types at compile time +/// \brief \ref fennec_lang_type_transforms /// /// /// \details @@ -31,6 +31,100 @@ #ifndef FENNEC_LANG_TYPE_TRANSFORMS_H #define FENNEC_LANG_TYPE_TRANSFORMS_H +/// +/// \page fennec_lang_type_transforms Type Transforms +/// +/// \brief Part of the fennec metaprogramming library. This header defines structures for copying types with different traits +/// or rather, transform them, at compile time. +/// +/// \code #include \endcode +/// +/// +/// +///
Syntax +/// Description +/// +///

+/// \ref fennec::type_transform "type_transform::type"
+///
+/// \copydetails fennec::type_transform +/// +///

+/// \ref fennec::add_pointer "add_pointer::type"
+/// \ref fennec::add_pointer_t "add_pointer_t" +///
+/// \copydetails fennec::add_pointer +/// +///

+/// \ref fennec::remove_pointer "remove_pointer::type"
+/// \ref fennec::remove_pointer_t "remove_pointer_t" +///
+/// \copydetails fennec::remove_pointer +/// +///

+/// \ref fennec::add_reference "add_reference::type"
+/// \ref fennec::add_reference_t "add_reference_t" +///
+/// \copydetails fennec::add_reference +/// +///

+/// \ref fennec::remove_reference "remove_reference::type"
+/// \ref fennec::remove_reference_t "remove_reference_t" +///
+/// \copydetails fennec::remove_reference +/// +///

+/// \ref fennec::add_const "add_const::type"
+/// \ref fennec::add_const_t "add_const_t" +///
+/// \copydetails fennec::add_const +/// +///

+/// \ref fennec::remove_const "remove_const::type"
+/// \ref fennec::remove_const_t "remove_const_t" +///
+/// \copydetails fennec::remove_const +/// +///

+/// \ref fennec::add_volatile "add_volatile::type"
+/// \ref fennec::add_volatile_t "add_volatile_t" +///
+/// \copydetails fennec::add_volatile +/// +///

+/// \ref fennec::remove_volatile "remove_volatile::type"
+/// \ref fennec::remove_volatile_t "remove_volatile_t" +///
+/// \copydetails fennec::remove_volatile +/// +///

+/// \ref fennec::add_cv "add_cv::type"
+/// \ref fennec::add_cv_t "add_cv_t" +///
+/// \copydetails fennec::add_cv +/// +///

+/// \ref fennec::remove_cv "remove_cv::type"
+/// \ref fennec::remove_cv_t "remove_cv_t" +///
+/// \copydetails fennec::remove_cv +/// +///

+/// \ref fennec::add_cvr "add_cvr::type"
+/// \ref fennec::add_cvr_t "add_cvr_t" +///
+/// \copydetails fennec::add_cvr +/// +///

+/// \ref fennec::remove_cvr "remove_cvr::type"
+/// \ref fennec::remove_cvr_t "remove_cvr_t" +///
+/// \copydetails fennec::remove_cvr +/// +///
+/// + + namespace fennec { @@ -40,7 +134,7 @@ namespace fennec /// \struct fennec::type_transform /// \brief Base Class for Type Transformations /// -/// \details resembles a transformation from one type to T, the result is stored in the typedef type_transform::type +/// \details resembles a transformation from one type to T, the result is stored in the member type_transform::type /// \tparam T Resultant Type template struct type_transform { diff --git a/include/fennec/lang/types.h b/include/fennec/lang/types.h index 9895724..208de41 100644 --- a/include/fennec/lang/types.h +++ b/include/fennec/lang/types.h @@ -18,7 +18,7 @@ /// /// \file types.h -/// \brief basic types of the c++ language +/// \brief \ref fennec_lang_types /// /// /// \details @@ -34,10 +34,10 @@ /// /// \page fennec_lang_types Types /// -/// \brief This header contains definitions for built-in types. +/// \brief This header contains definitions for the built-in types of the C++ language. /// /// -///
Member +///
Type /// Description /// ///
Basic Types diff --git a/include/fennec/lang/utility.h b/include/fennec/lang/utility.h index 7aee5b6..24da281 100644 --- a/include/fennec/lang/utility.h +++ b/include/fennec/lang/utility.h @@ -18,7 +18,7 @@ /// /// \file utility.h -/// \brief common utility functions related to the c++ language +/// \brief \ref fennec_lang_utility /// /// /// \details @@ -31,46 +31,67 @@ #ifndef FENNEC_LANG_UTILITY_H #define FENNEC_LANG_UTILITY_H +/// +/// \page fennec_lang_utility Utility +/// +/// \brief This header contains common utility functions related to the C++ language. +/// +/// \code #include \endcode +/// +/// +///
Syntax +/// Description +/// +///

+/// \ref fennec::forward "T&& forward(x)"
+///
+/// \copydetails fennec::forward +/// +///

+/// \ref fennec::move "T&& move(x)"
+///
+/// \copydetails fennec::move +/// +///

+/// \ref fennec::copy "const T& copy(x)"
+///
+/// \copydetails fennec::copy +/// +///
+/// + #include namespace fennec { /// +/// \brief forwards reference types to extend their lifetime /// -/// \details +/// \details forwards reference types to extend their lifetime /// \tparam T base type of the object /// \param x reference to the object /// \returns template constexpr T&& forward(remove_reference_t& x) noexcept { return x; } -/// -/// -/// \brief forwards reference types to extend their lifetime -/// -/// \details -/// \tparam T base type of the object -/// \param x reference to the object -/// \returns +// specialization for T&& template constexpr T&& forward(remove_reference_t&& x) noexcept { return x; } -/// /// /// \brief produces an x-value type to indicate \p x may be "moved" /// -/// \details +/// \details produces an x-value type to indicate \p x may be "moved" /// \tparam T base type of the object /// \param x object to be moved /// \returns `static_cast&&>(x)` template constexpr remove_reference_t&& move(T&& x) noexcept { return static_cast&&>(x); } -/// /// /// \brief produces an r-value type to indicate \p x may be "copied" /// -/// \details +/// \details produces an r-value type to indicate \p x may be "copied" /// \tparam T base type of the object /// \param x object to be copied /// \returns const r-value diff --git a/include/fennec/math/math.h b/include/fennec/math/math.h index 6722664..00ad64e 100644 --- a/include/fennec/math/math.h +++ b/include/fennec/math/math.h @@ -18,7 +18,7 @@ /// /// \file math.h -/// \brief main math header which includes the main modules +/// \brief fennec Math Library /// /// /// \details This header includes the following modules of \ref fennec_math : diff --git a/include/fennec/math/swizzle.h b/include/fennec/math/swizzle.h index e307322..23c75c4 100644 --- a/include/fennec/math/swizzle.h +++ b/include/fennec/math/swizzle.h @@ -18,7 +18,7 @@ /// /// \file swizzle.h -/// \brief part of the \ref fennec_math_vector, +/// \brief \ref fennec_math_swizzle /// /// /// \details diff --git a/include/fennec/math/vector_traits.h b/include/fennec/math/vector_traits.h index f1f606a..d9c6847 100644 --- a/include/fennec/math/vector_traits.h +++ b/include/fennec/math/vector_traits.h @@ -18,7 +18,7 @@ /// /// \file vector_traits.h -/// \brief part of the \ref fennec_math_vector +/// \brief /// /// /// \details this header implements functions to test vector types at compile time @@ -31,6 +31,39 @@ #ifndef FENNEC_MATH_VECTOR_TRAITS_H #define FENNEC_MATH_VECTOR_TRAITS_H +/// +/// \page fennec_math_vector_traits Vector Traits +/// +/// \brief Part of the fennec math library. This header defines structures for metaprogramming with vectors. +/// +/// \code #include \endcode +/// +/// +/// +///
Syntax +/// Description +/// +///

+/// \ref fennec::is_vector "is_vector::value"
+/// \ref fennec::is_vector_v "is_vector_v" +///
+/// \copydetails fennec::is_vector +/// +///

+/// \ref fennec::component_count "component_count::value"
+/// \ref fennec::component_count_v "component_count_v" +///
+/// \copydetails fennec::component_count +/// +///

+/// \ref fennec::total_component_count "total_component_count::value"
+/// \ref fennec::total_component_count_v "total_component_count_v" +///
+/// \copydetails fennec::total_component_count +/// +///
+/// + #include namespace fennec diff --git a/include/fennec/memory/detail/__ptr_traits.h b/include/fennec/memory/detail/__ptr_traits.h index 5a1324f..66043ab 100644 --- a/include/fennec/memory/detail/__ptr_traits.h +++ b/include/fennec/memory/detail/__ptr_traits.h @@ -22,7 +22,7 @@ #include #include #include -#include +#include namespace fennec { diff --git a/include/fennec/memory/pointers.h b/include/fennec/memory/pointers.h index 5664cb9..fa334fb 100644 --- a/include/fennec/memory/pointers.h +++ b/include/fennec/memory/pointers.h @@ -34,7 +34,7 @@ struct default_delete /// /// \brief Conversion Constructor /// \tparam ConvT of other deleter - template requires requires { can_convert{}.value == true; } + template requires requires { is_convertible{}.value == true; } constexpr default_delete(const default_delete&) noexcept {} /// @@ -58,13 +58,13 @@ struct default_delete /// /// \brief Conversion Constructor /// \tparam ConvT of other deleter - template requires requires { can_convert{}.value == true; } + template requires requires { is_convertible{}.value == true; } constexpr default_delete(const default_delete&) noexcept {} /// /// \brief Function Call Operator, calls `delete` on `ptr` /// \param ptr Memory resource to delete - template requires requires { can_convert{}.value == true; } + template requires requires { is_convertible{}.value == true; } constexpr void operator()(TypeT* ptr) const noexcept { static_assert(not is_void_v, "cannot delete a pointer to an incomplete type");