| /////////////////////////////////////////////////////////////////////////////////////////////////// |
| // OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) |
| /////////////////////////////////////////////////////////////////////////////////////////////////// |
| // Created : 2009-10-26 |
| // Updated : 2011-06-07 |
| // Licence : This source is under MIT License |
| // File : glm/gtx/multiple.inl |
| /////////////////////////////////////////////////////////////////////////////////////////////////// |
| // Dependency: |
| // - GLM core |
| /////////////////////////////////////////////////////////////////////////////////////////////////// |
| |
| namespace glm{ |
| namespace detail |
| { |
| template <bool Signed> |
| struct higherMultiple |
| { |
| template <typename genType> |
| GLM_FUNC_QUALIFIER genType operator() |
| ( |
| genType const & Source, |
| genType const & Multiple |
| ) |
| { |
| if (Source > genType(0)) |
| { |
| genType Tmp = Source - genType(1); |
| return Tmp + (Multiple - (Tmp % Multiple)); |
| } |
| else |
| return Source + (-Source % Multiple); |
| } |
| }; |
| |
| template <> |
| struct higherMultiple<false> |
| { |
| template <typename genType> |
| GLM_FUNC_QUALIFIER genType operator() |
| ( |
| genType const & Source, |
| genType const & Multiple |
| ) |
| { |
| genType Tmp = Source - genType(1); |
| return Tmp + (Multiple - (Tmp % Multiple)); |
| } |
| }; |
| }//namespace detail |
| |
| ////////////////////// |
| // higherMultiple |
| |
| template <typename genType> |
| GLM_FUNC_QUALIFIER genType higherMultiple |
| ( |
| genType const & Source, |
| genType const & Multiple |
| ) |
| { |
| detail::higherMultiple<std::numeric_limits<genType>::is_signed> Compute; |
| return Compute(Source, Multiple); |
| } |
| |
| template <> |
| GLM_FUNC_QUALIFIER float higherMultiple |
| ( |
| float const & Source, |
| float const & Multiple |
| ) |
| { |
| if (Source > float(0)) |
| { |
| float Tmp = Source - float(1); |
| return Tmp + (Multiple - std::fmod(Tmp, Multiple)); |
| } |
| else |
| return Source + std::fmod(-Source, Multiple); |
| } |
| |
| template <> |
| GLM_FUNC_QUALIFIER double higherMultiple |
| ( |
| double const & Source, |
| double const & Multiple |
| ) |
| { |
| if (Source > double(0)) |
| { |
| double Tmp = Source - double(1); |
| return Tmp + (Multiple - std::fmod(Tmp, Multiple)); |
| } |
| else |
| return Source + std::fmod(-Source, Multiple); |
| } |
| |
| VECTORIZE_VEC_VEC(higherMultiple) |
| |
| ////////////////////// |
| // lowerMultiple |
| |
| template <typename genType> |
| GLM_FUNC_QUALIFIER genType lowerMultiple |
| ( |
| genType const & Source, |
| genType const & Multiple |
| ) |
| { |
| if (Source >= genType(0)) |
| return Source - Source % Multiple; |
| else |
| { |
| genType Tmp = Source + genType(1); |
| return Tmp - Tmp % Multiple - Multiple; |
| } |
| } |
| |
| template <> |
| GLM_FUNC_QUALIFIER float lowerMultiple |
| ( |
| float const & Source, |
| float const & Multiple |
| ) |
| { |
| if (Source >= float(0)) |
| return Source - std::fmod(Source, Multiple); |
| else |
| { |
| float Tmp = Source + float(1); |
| return Tmp - std::fmod(Tmp, Multiple) - Multiple; |
| } |
| } |
| |
| template <> |
| GLM_FUNC_QUALIFIER double lowerMultiple |
| ( |
| double const & Source, |
| double const & Multiple |
| ) |
| { |
| if (Source >= double(0)) |
| return Source - std::fmod(Source, Multiple); |
| else |
| { |
| double Tmp = Source + double(1); |
| return Tmp - std::fmod(Tmp, Multiple) - Multiple; |
| } |
| } |
| |
| VECTORIZE_VEC_VEC(lowerMultiple) |
| }//namespace glm |