// // libavg - Media Playback Engine. // Copyright (C) 2003-2014 Ulrich von Zadow // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // Current versions can be found at www.libavg.de // #ifndef _MathHelper_H_ #define _MathHelper_H_ #include "../api.h" #include #include #include #ifndef M_PI #define M_PI 3.14159265358979323846 #endif namespace avg { static const float PI = 3.14159265358979323846f; static const float EPSILON = 0.00001f; bool ispow2(int n); int nextpow2(int n); int safeCeil(float d); bool almostEqual(float d1, float d2, float epsilon=EPSILON); float invSqrt(float x); template T sqr(T d) { return d*d; } template int sgn(T val) { return int(val/fabs(val)); } template std::vector vectorFromCArray(int n, T* pData) { std::vector v; for (int i=0; i std::vector > vector2DFromCArray(int n, int m, T* pData) { std::vector > v(4, std::vector()); for (int i=0; i T round(T d) { return floor(d + 0.5f); } #endif } #endif