maths: move functions inline, remove ipp
This commit is contained in:
parent
eb2722bfa4
commit
486cefc4c6
@ -168,7 +168,6 @@ UTIL_FILES = \
|
|||||||
log.ipp \
|
log.ipp \
|
||||||
maths.cpp \
|
maths.cpp \
|
||||||
maths.hpp \
|
maths.hpp \
|
||||||
maths.ipp \
|
|
||||||
matrix.cpp \
|
matrix.cpp \
|
||||||
matrix2.cpp \
|
matrix2.cpp \
|
||||||
matrix3.cpp \
|
matrix3.cpp \
|
||||||
|
29
maths.hpp
29
maths.hpp
@ -59,7 +59,10 @@ namespace util {
|
|||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
template <typename T>
|
template <typename T>
|
||||||
constexpr T
|
constexpr T
|
||||||
pow [[gnu::const]] (T x, unsigned y);
|
pow [[gnu::const]] (T x, unsigned y)
|
||||||
|
{
|
||||||
|
return y == 0 ? T{1} : x * pow (x, y - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
@ -133,9 +136,24 @@ namespace util {
|
|||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
constexpr int sign (int);
|
template <typename T>
|
||||||
constexpr float sign (float);
|
constexpr std::enable_if_t<
|
||||||
constexpr double sign (double);
|
std::is_signed<T>::value && std::is_integral<T>::value, T
|
||||||
|
>
|
||||||
|
sign (T t)
|
||||||
|
{
|
||||||
|
return t < 0 ? -1 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
template <typename T>
|
||||||
|
constexpr std::enable_if_t<
|
||||||
|
std::is_floating_point<T>::value, T
|
||||||
|
>
|
||||||
|
sign (T t)
|
||||||
|
{
|
||||||
|
return std::signbit (t) ? -1 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -546,7 +564,4 @@ namespace util {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//#include "types/string.hpp"
|
|
||||||
#include "maths.ipp"
|
|
||||||
|
|
||||||
#endif // __MATHS_HPP
|
#endif // __MATHS_HPP
|
||||||
|
64
maths.ipp
64
maths.ipp
@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*
|
|
||||||
* Copyright 2014 Danny Robson <danny@nerdcruft.net>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __UTIL_MATHS_IPP
|
|
||||||
#define __UTIL_MATHS_IPP
|
|
||||||
#else
|
|
||||||
#error "Include only once"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <type_traits>
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
template <typename T>
|
|
||||||
constexpr T
|
|
||||||
util::pow (T x, unsigned y)
|
|
||||||
{
|
|
||||||
if (y == 0)
|
|
||||||
return T(1);
|
|
||||||
|
|
||||||
return x * util::pow (x, y - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// Return a unit type with a sign that matches the provided value
|
|
||||||
///
|
|
||||||
/// We were using __builtin_signbit for the potential speedboost, but it causes
|
|
||||||
/// problems with constexpr under clang. If you need speed then you'll probably
|
|
||||||
/// have to handcode something.
|
|
||||||
constexpr int
|
|
||||||
util::sign (int v)
|
|
||||||
{
|
|
||||||
return std::signbit (v) ? -1 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
constexpr float
|
|
||||||
util::sign (float v)
|
|
||||||
{
|
|
||||||
return std::signbit (v) ? -1.f : 1.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
constexpr double
|
|
||||||
util::sign (double v)
|
|
||||||
{
|
|
||||||
return std::signbit (v) ? -1. : 1.f;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user