X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=ETL%2FETL%2F_misc.h;fp=ETL%2FETL%2F_misc.h;h=6c842653a53380aecdaad852fa53b18da868a202;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=0000000000000000000000000000000000000000;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/ETL/ETL/_misc.h b/ETL/ETL/_misc.h new file mode 100644 index 0000000..6c84265 --- /dev/null +++ b/ETL/ETL/_misc.h @@ -0,0 +1,103 @@ +/*! ======================================================================== +** Extended Template and Library +** Misc +** $Id$ +** +** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2007 Chris Moore +** +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. +** +** This package 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 +** General Public License for more details. +** +** === N O T E S =========================================================== +** +** ========================================================================= */ + +/* === S T A R T =========================================================== */ + +#ifndef __ETL__MISC_H_ +#define __ETL__MISC_H_ + +/* === H E A D E R S ======================================================= */ +#include + +#include + +/* === M A C R O S ========================================================= */ + +/* === T Y P E D E F S ===================================================== */ + +/* === C L A S S E S & S T R U C T S ======================================= */ + +_ETL_BEGIN_NAMESPACE + +template inline I +binary_find(I begin, I end, const T& value) +{ +#if 1 + I iter(begin+(end-begin)/2); + + while(end-begin>1 && !(*iter==value)) + { + ((*iter1 && !(*iter==value)) + { + ((*iter(x+0.5f); // <-- (a) fast, but rounds -1.333 to 0! + // return static_cast(rintf(x)); // <-- (b) slow, but correct + if (x>=0) return static_cast(x + 0.5); // <-- slower than (a), but correct, and faster than (b) + else return static_cast(x - 0.5); +} +inline int round_to_int(const double x) { + // return static_cast(x+0.5); + // return static_cast(rint(x)); + if (x>=0) return static_cast(x + 0.5); + else return static_cast(x - 0.5); +} + +inline int ceil_to_int(const float x) { return static_cast(ceil(x)); } +inline int ceil_to_int(const double x) { return static_cast(ceil(x)); } + +inline int floor_to_int(const float x) { return static_cast(x); } +inline int floor_to_int(const double x) { return static_cast(x); } + +_ETL_END_NAMESPACE + +/* === E X T E R N S ======================================================= */ + +/* === E N D =============================================================== */ + +#endif