Revision: 22143 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22143 Author: jaguarandi Date: 2009-08-02 14:11:14 +0200 (Sun, 02 Aug 2009)
Log Message: ----------- changed to STL sort Modified Paths: -------------- branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp Modified: branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp =================================================================== --- branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp 2009-08-02 11:36:12 UTC (rev 22142) +++ branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/rayobject_rtbuild.cpp 2009-08-02 12:11:14 UTC (rev 22143) @@ -1,6 +1,7 @@ #include <assert.h> #include <math.h> #include <stdlib.h> +#include <algorithm> #include "rayobject_rtbuild.h" #include "MEM_guardedalloc.h" @@ -198,34 +199,20 @@ float bb[6]; }; -//Ugly.. but using qsort and no globals its the cleaner I can get -#define costobject_cmp(axis) costobject_cmp##axis -#define define_costobject_cmp(axis) \ -int costobject_cmp(axis)(const CostObject *a, const CostObject *b) \ -{ \ - if(a->bb[axis] < b->bb[axis]) return -1; \ - if(a->bb[axis] > b->bb[axis]) return 1; \ - if(a->obj < b->obj) return -1; \ - if(a->obj > b->obj) return 1; \ - return 0; \ -} +template<class Obj,int Axis> +bool obj_bb_compare(const Obj &a, const Obj &b) +{ + if(a.bb[Axis] != b.bb[Axis]) + return a.bb[Axis] < b.bb[Axis]; + return a.obj < b.obj; +} -define_costobject_cmp(0) -define_costobject_cmp(1) -define_costobject_cmp(2) -define_costobject_cmp(3) -define_costobject_cmp(4) -define_costobject_cmp(5) - void costobject_sort(CostObject *begin, CostObject *end, int axis) { - //TODO introsort - if(axis == 0) qsort(begin, end-begin, sizeof(*begin), (int(*)(const void *, const void *)) costobject_cmp(0)); - else if(axis == 1) qsort(begin, end-begin, sizeof(*begin), (int(*)(const void *, const void *)) costobject_cmp(1)); - else if(axis == 2) qsort(begin, end-begin, sizeof(*begin), (int(*)(const void *, const void *)) costobject_cmp(2)); - else if(axis == 3) qsort(begin, end-begin, sizeof(*begin), (int(*)(const void *, const void *)) costobject_cmp(3)); - else if(axis == 4) qsort(begin, end-begin, sizeof(*begin), (int(*)(const void *, const void *)) costobject_cmp(4)); - else if(axis == 5) qsort(begin, end-begin, sizeof(*begin), (int(*)(const void *, const void *)) costobject_cmp(5)); + if(axis == 0) return std::sort(begin, end, obj_bb_compare<CostObject,0> ); + if(axis == 1) return std::sort(begin, end, obj_bb_compare<CostObject,1> ); + if(axis == 2) return std::sort(begin, end, obj_bb_compare<CostObject,2> ); + assert(false); } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs