- Added More Documentation
Going to continue passes on documentation before implementing more functions of the standard library.
This commit is contained in:
parent
1c67c13a27
commit
079b0b27ee
@ -815,7 +815,7 @@ FILE_VERSION_FILTER =
|
|||||||
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
|
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
|
||||||
# tag is left empty.
|
# tag is left empty.
|
||||||
|
|
||||||
LAYOUT_FILE =
|
LAYOUT_FILE = /home/medusa/Documents/Work/Personal/fennec/doxy/DoxyLayout.xml
|
||||||
|
|
||||||
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
||||||
# the reference definitions. This must be a list of .bib files. The .bib
|
# the reference definitions. This must be a list of .bib files. The .bib
|
||||||
|
@ -815,7 +815,7 @@ FILE_VERSION_FILTER =
|
|||||||
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
|
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
|
||||||
# tag is left empty.
|
# tag is left empty.
|
||||||
|
|
||||||
LAYOUT_FILE =
|
LAYOUT_FILE = @PROJECT_SOURCE_DIR@/doxy/DoxyLayout.xml
|
||||||
|
|
||||||
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
||||||
# the reference definitions. This must be a list of .bib files. The .bib
|
# the reference definitions. This must be a list of .bib files. The .bib
|
||||||
|
@ -28,10 +28,56 @@
|
|||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
|
||||||
|
|
||||||
#ifndef FENNEC_LANG_BITS_H
|
#ifndef FENNEC_LANG_BITS_H
|
||||||
#define FENNEC_LANG_BITS_H
|
#define FENNEC_LANG_BITS_H
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \page fennec_lang_bit_manipulation Bit Manipulation
|
||||||
|
///
|
||||||
|
/// This header contains definitions for manipulating the bits of a provided object or pointer.
|
||||||
|
///
|
||||||
|
/// <table width="100%" class="fieldtable" id="table_fennec_math_common_sign_functions">
|
||||||
|
/// <tr><th style="vertical-align: top">Syntax
|
||||||
|
/// <th style="vertical-align: top">Description
|
||||||
|
///
|
||||||
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
|
/// \ref fennec::bit_cast "ToT bit_cast(const FromT& x)"
|
||||||
|
/// <td width="50%" style="vertical-align: top">
|
||||||
|
/// \copydetails fennec::bit_cast
|
||||||
|
///
|
||||||
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
|
/// \ref fennec::bit_and "void* bit_and(void* arr, const void* mask, size_t n)"
|
||||||
|
/// <td width="50%" style="vertical-align: top">
|
||||||
|
/// \copydetails fennec::bit_and
|
||||||
|
///
|
||||||
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
|
/// \ref fennec::bit_and_s "void* bit_and_s(void* arr, size_t n0, const void* mask, size_t n1)"
|
||||||
|
/// <td width="50%" style="vertical-align: top">
|
||||||
|
/// \copydetails fennec::bit_and_s
|
||||||
|
///
|
||||||
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
|
/// \ref fennec::bit_or "void* bit_or(void* arr, const void* mask, size_t n)"
|
||||||
|
/// <td width="50%" style="vertical-align: top">
|
||||||
|
/// \copydetails fennec::bit_or
|
||||||
|
///
|
||||||
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
|
/// \ref fennec::bit_or_s "void* bit_or_s(void* arr, size_t n0, const void* mask, size_t n1)"
|
||||||
|
/// <td width="50%" style="vertical-align: top">
|
||||||
|
/// \copydetails fennec::bit_or_s
|
||||||
|
///
|
||||||
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
|
/// \ref fennec::bit_xor "void* bit_xor(void* arr, const void* mask, size_t n)"
|
||||||
|
/// <td width="50%" style="vertical-align: top">
|
||||||
|
/// \copydetails fennec::bit_xor
|
||||||
|
///
|
||||||
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
|
/// \ref fennec::bit_xor_s "void* bit_xor_s(void* arr, size_t n0, const void* mask, size_t n1)"
|
||||||
|
/// <td width="50%" style="vertical-align: top">
|
||||||
|
/// \copydetails fennec::bit_xor_s
|
||||||
|
/// </table>
|
||||||
|
///
|
||||||
|
///
|
||||||
|
|
||||||
#include <fennec/lang/intrinsics.h>
|
#include <fennec/lang/intrinsics.h>
|
||||||
#include <fennec/memory/memory.h>
|
#include <fennec/memory/memory.h>
|
||||||
#include <fennec/lang/detail/__bits.h>
|
#include <fennec/lang/detail/__bits.h>
|
||||||
@ -40,11 +86,13 @@ namespace fennec
|
|||||||
{
|
{
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief perform a bitcast of FromT to ToT
|
/// \brief Perform a bitcast of FromT to ToT
|
||||||
|
///
|
||||||
|
/// \details Perform a bitcast of FromT to ToT
|
||||||
/// \tparam ToT Type to cast to
|
/// \tparam ToT Type to cast to
|
||||||
/// \tparam FromT Type of the value
|
/// \tparam FromT Type of the value
|
||||||
/// \param from Value to bit cast
|
/// \param from Value to bit cast
|
||||||
/// \return A value containing a bitwise copy of the input
|
/// \returns A value containing a bitwise copy of the input
|
||||||
template<typename ToT, typename FromT> requires(sizeof(ToT) == sizeof(FromT))
|
template<typename ToT, typename FromT> requires(sizeof(ToT) == sizeof(FromT))
|
||||||
constexpr ToT bit_cast(const FromT& from)
|
constexpr ToT bit_cast(const FromT& from)
|
||||||
{
|
{
|
||||||
@ -63,11 +111,13 @@ constexpr ToT bit_cast(const FromT& from)
|
|||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief perform a bit-wise and over an array of bytes
|
/// \brief Perform a bit-wise and over an array of bytes
|
||||||
|
///
|
||||||
|
/// \details Perform a bitcast of FromT to ToT
|
||||||
/// \param arr the array of bytes to modify
|
/// \param arr the array of bytes to modify
|
||||||
/// \param mask the mask to and against arr
|
/// \param mask the mask to and against arr
|
||||||
/// \param n the number of bytes
|
/// \param n the number of bytes
|
||||||
/// \returns the pointer arr
|
/// \returns the pointer \f$arr\f$
|
||||||
constexpr void* bit_and(void* arr, const void* mask, size_t n)
|
constexpr void* bit_and(void* arr, const void* mask, size_t n)
|
||||||
{
|
{
|
||||||
if (arr == mask) return arr;
|
if (arr == mask) return arr;
|
||||||
@ -84,8 +134,10 @@ constexpr void* bit_and(void* arr, const void* mask, size_t n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief safe version of fennec::bit_and
|
/// \brief Safe version of fennec::bit_and
|
||||||
/// \copydoc fennec::bit_and
|
///
|
||||||
|
/// \details Safe version of fennec::bit_and
|
||||||
|
/// \copydetails fennec::bit_and
|
||||||
/// \param n0 the size of arr in bytes
|
/// \param n0 the size of arr in bytes
|
||||||
/// \param n1 the size of mask in bytes
|
/// \param n1 the size of mask in bytes
|
||||||
constexpr void* bit_and_s(void* arr, size_t n0, const void* mask, size_t n1)
|
constexpr void* bit_and_s(void* arr, size_t n0, const void* mask, size_t n1)
|
||||||
@ -96,7 +148,9 @@ constexpr void* bit_and_s(void* arr, size_t n0, const void* mask, size_t n1)
|
|||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief perform a bit-wise or over an array of bytes
|
/// \brief Perform a bit-wise or over an array of bytes
|
||||||
|
///
|
||||||
|
/// \details Perform a bit-wise or over an array of bytes
|
||||||
/// \param arr the array of bytes to modify
|
/// \param arr the array of bytes to modify
|
||||||
/// \param mask the mask to or against arr
|
/// \param mask the mask to or against arr
|
||||||
/// \param n the number of bytes
|
/// \param n the number of bytes
|
||||||
@ -117,8 +171,10 @@ constexpr void* bit_or(void* arr, const void* mask, size_t n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief safe version of fennec::bit_or
|
/// \brief Safe version of fennec::bit_or
|
||||||
/// \copydoc fennec::bit_or
|
///
|
||||||
|
/// \details Safe version of fennec::bit_or
|
||||||
|
/// \copydetails fennec::bit_or
|
||||||
/// \param n0 the size of arr in bytes
|
/// \param n0 the size of arr in bytes
|
||||||
/// \param n1 the size of mask in bytes
|
/// \param n1 the size of mask in bytes
|
||||||
constexpr void* bit_or_s(void* arr, size_t n0, const void* mask, size_t n1)
|
constexpr void* bit_or_s(void* arr, size_t n0, const void* mask, size_t n1)
|
||||||
@ -129,7 +185,9 @@ constexpr void* bit_or_s(void* arr, size_t n0, const void* mask, size_t n1)
|
|||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief perform a bit-wise or over an array of bytes
|
/// \brief Perform a bit-wise or over an array of bytes
|
||||||
|
///
|
||||||
|
/// \details Perform a bit-wise or over an array of bytes
|
||||||
/// \param arr the array of bytes to modify
|
/// \param arr the array of bytes to modify
|
||||||
/// \param mask the mask to or against arr
|
/// \param mask the mask to or against arr
|
||||||
/// \param n the number of bytes
|
/// \param n the number of bytes
|
||||||
@ -150,8 +208,10 @@ constexpr void* bit_xor(void* arr, const void* mask, size_t n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief safe version of fennec::bit_xor
|
/// \brief Safe version of fennec::bit_xor
|
||||||
/// \copydoc fennec::bit_xor
|
///
|
||||||
|
/// \details Safe version of fennec::bit_xor
|
||||||
|
/// \copydetails fennec::bit_xor
|
||||||
/// \param n0 the size of arr in bytes
|
/// \param n0 the size of arr in bytes
|
||||||
/// \param n1 the size of mask in bytes
|
/// \param n1 the size of mask in bytes
|
||||||
constexpr void* bit_xor_s(void* arr, size_t n0, const void* mask, size_t n1)
|
constexpr void* bit_xor_s(void* arr, size_t n0, const void* mask, size_t n1)
|
||||||
|
@ -32,6 +32,28 @@
|
|||||||
#ifndef FENNEC_LANG_CONDITIONAL_TYPES_H
|
#ifndef FENNEC_LANG_CONDITIONAL_TYPES_H
|
||||||
#define FENNEC_LANG_CONDITIONAL_TYPES_H
|
#define FENNEC_LANG_CONDITIONAL_TYPES_H
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \page fennec_lang_conditional_types Conditional Types
|
||||||
|
///
|
||||||
|
/// <table width="100%" class="fieldtable" id="table_fennec_math_common_sign_functions">
|
||||||
|
/// <tr><th style="vertical-align: top">Syntax
|
||||||
|
/// <th style="vertical-align: top">Description
|
||||||
|
///
|
||||||
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
|
/// \ref fennec::conditional "conditional<bool_t B, TrueT, FalseT>::type"<br>
|
||||||
|
/// \ref fennec::conditional_t "conditional_t<bool_t B, TrueT, FalseT>"
|
||||||
|
/// <td width="50%" style="vertical-align: top">
|
||||||
|
/// \copydetails fennec::conditional
|
||||||
|
///
|
||||||
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
|
/// \ref fennec::detect "detect<DefaultT, DetectT<...>, ArgsT...>::type"<br>
|
||||||
|
/// \ref fennec::detect_t "detect_t<DefaultT, DetectT<...>, ArgsT...>"
|
||||||
|
/// <td width="50%" style="vertical-align: top">
|
||||||
|
/// \copydetails fennec::detect
|
||||||
|
/// </table>
|
||||||
|
///
|
||||||
|
///
|
||||||
|
|
||||||
#include <fennec/lang/type_transforms.h>
|
#include <fennec/lang/type_transforms.h>
|
||||||
#include <fennec/lang/types.h>
|
#include <fennec/lang/types.h>
|
||||||
|
|
||||||
@ -44,19 +66,20 @@ namespace fennec
|
|||||||
///
|
///
|
||||||
/// \brief select between two types based on a condition
|
/// \brief select between two types based on a condition
|
||||||
///
|
///
|
||||||
/// \details
|
/// \details Selects between \p TrueT and \p FalseT based on the boolean value \p b.
|
||||||
|
/// The chosen type is stored in `conditional::type`.
|
||||||
/// \tparam B the value of the condition
|
/// \tparam B the value of the condition
|
||||||
/// \tparam T type to use when \f$B == true\f$
|
/// \tparam TrueT type to use when \f$B == true\f$
|
||||||
/// \tparam F type to use when \f$B == false\f$
|
/// \tparam FalseT type to use when \f$B == false\f$
|
||||||
template<bool_t B, typename T, typename F>
|
template<bool_t B, typename TrueT, typename FalseT>
|
||||||
struct conditional;
|
struct conditional;
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief Shorthand for ```typename conditional<ConditionV, TrueT, FalseT>::type```
|
/// \brief Shorthand for ```typename conditional<ConditionV, TrueT, FalseT>::type```
|
||||||
template<bool_t B, typename T, typename F>
|
template<bool_t B, typename TrueT, typename FalseT>
|
||||||
using conditional_t
|
using conditional_t
|
||||||
= typename conditional<B, T, F>::type;
|
= typename conditional<B, TrueT, FalseT>::type;
|
||||||
|
|
||||||
|
|
||||||
// specialization of fennec::conditional for `true` case
|
// specialization of fennec::conditional for `true` case
|
||||||
@ -76,8 +99,8 @@ struct conditional<false, T, F>
|
|||||||
///
|
///
|
||||||
/// \brief Detect whether `DetectT<ArgsT...>` is a valid type
|
/// \brief Detect whether `DetectT<ArgsT...>` is a valid type
|
||||||
///
|
///
|
||||||
/// \details The chosen type is stored in `detect::type` and
|
/// \details Selects `DetectT<ArgsT...>` if it exists, otherwise selects `DefaultT` The chosen type is stored in `detect::type` and
|
||||||
/// a boolean value is stored in `detect::is_detected` representing whether `DetectT<ArgsT>`
|
/// a boolean value is stored in `detect::is_detected` representing whether `DetectT<ArgsT...>` is found.
|
||||||
/// \tparam DefaultT Default type
|
/// \tparam DefaultT Default type
|
||||||
/// \tparam DetectT Type to detect
|
/// \tparam DetectT Type to detect
|
||||||
/// \tparam ArgsT Any template arguments for `DetectT<ArgsT>`
|
/// \tparam ArgsT Any template arguments for `DetectT<ArgsT>`
|
||||||
@ -102,6 +125,9 @@ struct detect<DefaultT, DetectT, ArgsT...>
|
|||||||
{
|
{
|
||||||
using type = DetectT<ArgsT...>;
|
using type = DetectT<ArgsT...>;
|
||||||
static constexpr bool is_detected = true;
|
static constexpr bool is_detected = true;
|
||||||
|
|
||||||
|
|
||||||
|
// fennec::enable_if ===================================================================================================
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,20 @@
|
|||||||
///
|
///
|
||||||
/// This library implements the parts of the C++ stdlib that relate to built-in types and metaprogramming.
|
/// This library implements the parts of the C++ stdlib that relate to built-in types and metaprogramming.
|
||||||
///
|
///
|
||||||
/// \subpage
|
/// - \subpage fennec_lang_bit_manipulation
|
||||||
|
/// - \subpage fennec_lang_metaprogramming
|
||||||
|
///
|
||||||
|
///
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \page fennec_lang_metaprogramming Metaprogramming
|
||||||
|
///
|
||||||
|
/// Metaprogramming is a method of obtaining information about the structure of the code at compile time.
|
||||||
|
/// This includes getting traits of types, such as with \ref fennec::numeric_limits. You may even programmatically
|
||||||
|
/// enable functions based on the info of the types that the function uses.
|
||||||
|
///
|
||||||
|
/// - \subpage fennec_lang_conditional_types
|
||||||
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
|
||||||
|
@ -51,37 +51,37 @@
|
|||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::pow(fennec::genType, fennec::genType) "genFType pow(genFType x, genFType y)"
|
/// \ref fennec::pow(fennec::genType, fennec::genType) "genFType pow(genFType x, genFType y)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::pow(fennec::genType, fennec::genType)
|
/// \copydetails fennec::pow(fennec::genType, fennec::genType)
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||||
/// \ref fennec::exp(fennec::genType)"genFType exp(genFType x)"
|
/// \ref fennec::exp(fennec::genType)"genFType exp(genFType x)"
|
||||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||||
/// \copydoc fennec::exp(fennec::genType)
|
/// \copydetails fennec::exp(fennec::genType)
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::exp2(fennec::genType) "genFType exp2(genFType x)"
|
/// \ref fennec::exp2(fennec::genType) "genFType exp2(genFType x)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::exp2(fennec::genType)
|
/// \copydetails fennec::exp2(fennec::genType)
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||||
/// \ref fennec::log(fennec::genType) "genFType log(genFType x)"
|
/// \ref fennec::log(fennec::genType) "genFType log(genFType x)"
|
||||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||||
/// \copydoc fennec::log(fennec::genType)
|
/// \copydetails fennec::log(fennec::genType)
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::log2(fennec::genType) "genFType log2(genFType x)"
|
/// \ref fennec::log2(fennec::genType) "genFType log2(genFType x)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::log2(fennec::genType)
|
/// \copydetails fennec::log2(fennec::genType)
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
/// <tr><td width="50%" style="vertical-align: top" class="odd_c"> <br>
|
||||||
/// \ref fennec::sqrt(fennec::genType) "genFType sqrt(genFType x)"
|
/// \ref fennec::sqrt(fennec::genType) "genFType sqrt(genFType x)"
|
||||||
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
/// <td width="50%" style="vertical-align: top" class="odd_c">
|
||||||
/// \copydoc fennec::sqrt(fennec::genType)
|
/// \copydetails fennec::sqrt(fennec::genType)
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::inversesqrt(fennec::genType) "genFType inversesqrt(genFType x)"
|
/// \ref fennec::inversesqrt(fennec::genType) "genFType inversesqrt(genFType x)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::inversesqrt(fennec::genType)
|
/// \copydetails fennec::inversesqrt(fennec::genType)
|
||||||
///
|
///
|
||||||
/// </table>
|
/// </table>
|
||||||
///
|
///
|
||||||
|
@ -45,27 +45,43 @@
|
|||||||
/// The overarching goal of this math library is to implement the math types and functions of the
|
/// The overarching goal of this math library is to implement the math types and functions of the
|
||||||
/// [OpenGL 4.6 Shading Language Specification](https://registry.khronos.org/OpenGL/specs/gl/GLSLangSpec.4.60.pdf).
|
/// [OpenGL 4.6 Shading Language Specification](https://registry.khronos.org/OpenGL/specs/gl/GLSLangSpec.4.60.pdf).
|
||||||
///
|
///
|
||||||
/// \section fennec_math_topics Topics
|
/// - \subpage fennec_math_topics "Topics"
|
||||||
|
/// - \ref fennec_math_set_theory
|
||||||
|
/// - \subpage fennec_math_data_types "Data Types"
|
||||||
|
/// - \ref fennec_math_scalar
|
||||||
|
/// - \ref fennec_math_vector
|
||||||
|
/// - \ref fennec_math_matrix
|
||||||
|
/// - \subpage fennec_math_functions "Functions"
|
||||||
|
/// - \ref fennec_math_set_theory
|
||||||
|
/// - \ref fennec_math_common
|
||||||
|
/// - \ref fennec_math_exponential
|
||||||
|
/// - \ref fennec_math_geometric
|
||||||
|
/// - \ref fennec_math_relational
|
||||||
|
/// - \ref fennec_math_trigonometric
|
||||||
|
///
|
||||||
|
///
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \page fennec_math_topics Topics
|
||||||
/// - \subpage fennec_math_set_theory
|
/// - \subpage fennec_math_set_theory
|
||||||
///
|
///
|
||||||
/// \section fennec_math_data_types Data Types
|
|
||||||
///
|
///
|
||||||
|
/// \page fennec_math_data_types Data Types
|
||||||
/// - \subpage fennec_math_scalar
|
/// - \subpage fennec_math_scalar
|
||||||
/// - \subpage fennec_math_vector
|
/// - \subpage fennec_math_vector
|
||||||
/// - \subpage fennec_math_matrix
|
/// - \subpage fennec_math_matrix
|
||||||
///
|
///
|
||||||
/// \section fennec_math_functions Functions
|
|
||||||
///
|
///
|
||||||
|
/// \page fennec_math_functions Functions
|
||||||
|
/// - \subpage fennec_math_set_theory
|
||||||
/// - \subpage fennec_math_common
|
/// - \subpage fennec_math_common
|
||||||
/// - \subpage fennec_math_exponential
|
/// - \subpage fennec_math_exponential
|
||||||
/// - \subpage fennec_math_geometric
|
/// - \subpage fennec_math_geometric
|
||||||
/// - \subpage fennec_math_relational
|
/// - \subpage fennec_math_relational
|
||||||
/// - \subpage fennec_math_trigonometric
|
/// - \subpage fennec_math_trigonometric
|
||||||
///
|
///
|
||||||
///
|
|
||||||
///
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
/// \ref fennec::lessThan "bvec lessThan(ivec x, ivec y)"<br>
|
/// \ref fennec::lessThan "bvec lessThan(ivec x, ivec y)"<br>
|
||||||
/// \ref fennec::lessThan "bvec lessThan(uvec x, uvec y)"
|
/// \ref fennec::lessThan "bvec lessThan(uvec x, uvec y)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::lessThan
|
/// \copydetails fennec::lessThan
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::lessThanEqual "bvec lessThanEqual(vec x, vec y)"<br>
|
/// \ref fennec::lessThanEqual "bvec lessThanEqual(vec x, vec y)"<br>
|
||||||
@ -56,7 +56,7 @@
|
|||||||
/// \ref fennec::lessThanEqual "bvec lessThanEqual(ivec x, ivec y)"<br>
|
/// \ref fennec::lessThanEqual "bvec lessThanEqual(ivec x, ivec y)"<br>
|
||||||
/// \ref fennec::lessThanEqual "bvec lessThanEqual(uvec x, uvec y)"
|
/// \ref fennec::lessThanEqual "bvec lessThanEqual(uvec x, uvec y)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::lessThanEqual
|
/// \copydetails fennec::lessThanEqual
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::greaterThan "bvec greaterThan(vec x, vec y)"<br>
|
/// \ref fennec::greaterThan "bvec greaterThan(vec x, vec y)"<br>
|
||||||
@ -64,7 +64,7 @@
|
|||||||
/// \ref fennec::greaterThan "bvec greaterThan(ivec x, ivec y)"<br>
|
/// \ref fennec::greaterThan "bvec greaterThan(ivec x, ivec y)"<br>
|
||||||
/// \ref fennec::greaterThan "bvec greaterThan(uvec x, uvec y)"
|
/// \ref fennec::greaterThan "bvec greaterThan(uvec x, uvec y)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::greaterThan
|
/// \copydetails fennec::greaterThan
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::greaterThanEqual "bvec greaterThanEqual(vec x, vec y)"<br>
|
/// \ref fennec::greaterThanEqual "bvec greaterThanEqual(vec x, vec y)"<br>
|
||||||
@ -72,7 +72,7 @@
|
|||||||
/// \ref fennec::greaterThanEqual "bvec greaterThanEqual(ivec x, ivec y)"<br>
|
/// \ref fennec::greaterThanEqual "bvec greaterThanEqual(ivec x, ivec y)"<br>
|
||||||
/// \ref fennec::greaterThanEqual "bvec greaterThanEqual(uvec x, uvec y)"
|
/// \ref fennec::greaterThanEqual "bvec greaterThanEqual(uvec x, uvec y)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::greaterThanEqual
|
/// \copydetails fennec::greaterThanEqual
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::equal "bvec equal(vec x, vec y)"<br>
|
/// \ref fennec::equal "bvec equal(vec x, vec y)"<br>
|
||||||
@ -80,7 +80,7 @@
|
|||||||
/// \ref fennec::equal "bvec equal(ivec x, ivec y)"<br>
|
/// \ref fennec::equal "bvec equal(ivec x, ivec y)"<br>
|
||||||
/// \ref fennec::equal "bvec equal(uvec x, uvec y)"
|
/// \ref fennec::equal "bvec equal(uvec x, uvec y)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::equal
|
/// \copydetails fennec::equal
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::notEqual "bvec notEqual(vec x, vec y)"<br>
|
/// \ref fennec::notEqual "bvec notEqual(vec x, vec y)"<br>
|
||||||
@ -88,22 +88,25 @@
|
|||||||
/// \ref fennec::notEqual "bvec notEqual(ivec x, ivec y)"<br>
|
/// \ref fennec::notEqual "bvec notEqual(ivec x, ivec y)"<br>
|
||||||
/// \ref fennec::notEqual "bvec notEqual(uvec x, uvec y)"
|
/// \ref fennec::notEqual "bvec notEqual(uvec x, uvec y)"
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::notEqual
|
/// \copydetails fennec::notEqual
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::any "bool any(bvec x)"<br>
|
/// \ref fennec::any "bool any(bvec x)"<br>
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::any
|
/// \copydetails fennec::any
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::all "bool all(bvec x)"<br>
|
/// \ref fennec::all "bool all(bvec x)"<br>
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::all
|
/// \copydetails fennec::all
|
||||||
///
|
///
|
||||||
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
/// <tr><td width="50%" style="vertical-align: top"> <br>
|
||||||
/// \ref fennec::operator! "bool not(bvec x)"<br>
|
/// \ref fennec_vector_not "bool not(bvec x)"<br>
|
||||||
/// <td width="50%" style="vertical-align: top">
|
/// <td width="50%" style="vertical-align: top">
|
||||||
/// \copydoc fennec::operator!
|
/// \details
|
||||||
|
/// \returns the component-wise logical complement of \f$x\f$. <br>
|
||||||
|
/// \param x the boolean vector to inverse <br>
|
||||||
|
///
|
||||||
/// </table>
|
/// </table>
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
@ -199,13 +202,14 @@ constexpr genBType all(const vector<genBType, i...>& x)
|
|||||||
{ return (x[i] && ...); }
|
{ return (x[i] && ...); }
|
||||||
|
|
||||||
///
|
///
|
||||||
|
/// \anchor fennec_vector_not
|
||||||
/// \brief Returns the component-wise logical complement of \f$x\f$.
|
/// \brief Returns the component-wise logical complement of \f$x\f$.
|
||||||
///
|
///
|
||||||
/// \details
|
/// \details
|
||||||
/// \returns the component-wise logical complement of \f$x\f$.
|
/// \returns the component-wise logical complement of \f$x\f$.
|
||||||
/// \param x the boolean vector to inverse
|
/// \param x the boolean vector to inverse
|
||||||
template<typename genBType = bool_t, size_t...i>
|
template<typename genBType = bool_t, size_t...i>
|
||||||
constexpr genBType operator!(const vector<genBType, i...>& x)
|
constexpr genBType operator not(const vector<genBType, i...>& x)
|
||||||
{ return vector<genBType, i...>((!x[i]) ...); }
|
{ return vector<genBType, i...>((!x[i]) ...); }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user