// Copyright 2001 Google Inc. All Rights Reserved. // // 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. // // // This class is intended to contain a collection of useful (static) // mathematical functions, properly coded (by consulting numerical // recipes or another authoritative source first). #ifndef S2_UTIL_MATH_MATHUTIL_H_ #define S2_UTIL_MATH_MATHUTIL_H_ #include <type_traits> class MathUtil { … }; // ========================================================================= // #if (defined __i386__ || defined __x86_64__) && defined __GNUC__ // We define template specializations of Round() to get the more efficient // Intel versions when possible. Note that gcc does not currently support // partial specialization of templatized functions. template <> inline int32_t MathUtil::Round<int32_t, double>(double x) { … } template <> inline int32_t MathUtil::Round<int32_t, float>(float x) { … } template <> inline int64_t MathUtil::Round<int64_t, double>(double x) { … } template <> inline int64_t MathUtil::Round<int64_t, float>(float x) { … } #endif #endif // S2_UTIL_MATH_MATHUTIL_H_