X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=inline;f=src%2F3dengfx%2Fsrc%2Fcommon%2Fpsort.hpp;fp=src%2F3dengfx%2Fsrc%2Fcommon%2Fpsort.hpp;h=3944753d4caa71c1816ce8ec50a4d2e6004c07a0;hb=6e23259dbabaeb1711a2a5ca25b9cb421f693759;hp=0000000000000000000000000000000000000000;hpb=fe068fa879814784c45e0cb2e65dac489e8f5594;p=summerhack diff --git a/src/3dengfx/src/common/psort.hpp b/src/3dengfx/src/common/psort.hpp new file mode 100644 index 0000000..3944753 --- /dev/null +++ b/src/3dengfx/src/common/psort.hpp @@ -0,0 +1,77 @@ +/* +Copyright (C) 2005 John Tsiombikas + +This program 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 program 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. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* Priority sort template function + * + * Author: Mihalis Georgoulopoulos 2005 + */ + +#include +#include + +#ifndef _PSORT_HEADER_ +#define _PSORT_HEADER_ + +#define SORT_LOHI false +#define SORT_HILO true + +template int less(const T* a, const T* b) +{ + return (*a < *b); +} + +template int greater(const T* a, const T* b) +{ + return !(*a < *b); +} + +template void sort(T *elements, P *priorities, unsigned int n, bool hilo) +{ + int (*criterion)(const P*, const P*); + + if (hilo) + criterion = greater; + else + criterion = less; + + P **pointers = new P*[n]; + for (unsigned int i=0; i