BLI_math_rotation: properly name the quaternion power function.
[blender.git] / source / blender / blenlib / intern / sort_utils.c
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2013 Blender Foundation.
19  * All rights reserved.
20  *
21  * ***** END GPL LICENSE BLOCK *****
22  */
23
24 /** \file blender/blenlib/intern/sort_utils.c
25  *  \ingroup bli
26  *
27  * Utility functions for sorting common types.
28  */
29
30 #include "BLI_sort_utils.h"  /* own include */
31
32 struct SortAnyByFloat {
33         float sort_value;
34 };
35
36 struct SortAnyByInt {
37         int sort_value;
38 };
39
40 struct SortAnyByPtr {
41         const void *sort_value;
42 };
43
44 int BLI_sortutil_cmp_float(const void *a_, const void *b_)
45 {
46         const struct SortAnyByFloat *a = a_;
47         const struct SortAnyByFloat *b = b_;
48         if      (a->sort_value > b->sort_value) return  1;
49         else if (a->sort_value < b->sort_value) return -1;
50         else                                    return  0;
51 }
52
53 int BLI_sortutil_cmp_float_reverse(const void *a_, const void *b_)
54 {
55         const struct SortAnyByFloat *a = a_;
56         const struct SortAnyByFloat *b = b_;
57         if      (a->sort_value < b->sort_value) return  1;
58         else if (a->sort_value > b->sort_value) return -1;
59         else                                    return  0;
60 }
61
62 int BLI_sortutil_cmp_int(const void *a_, const void *b_)
63 {
64         const struct SortAnyByInt *a = a_;
65         const struct SortAnyByInt *b = b_;
66         if      (a->sort_value > b->sort_value) return  1;
67         else if (a->sort_value < b->sort_value) return -1;
68         else                                    return  0;
69 }
70
71 int BLI_sortutil_cmp_int_reverse(const void *a_, const void *b_)
72 {
73         const struct SortAnyByInt *a = a_;
74         const struct SortAnyByInt *b = b_;
75         if      (a->sort_value < b->sort_value) return  1;
76         else if (a->sort_value > b->sort_value) return -1;
77         else                                    return  0;
78 }
79
80 int BLI_sortutil_cmp_ptr(const void *a_, const void *b_)
81 {
82         const struct SortAnyByPtr *a = a_;
83         const struct SortAnyByPtr *b = b_;
84         if      (a->sort_value > b->sort_value) return  1;
85         else if (a->sort_value < b->sort_value) return -1;
86         else                                    return  0;
87 }
88
89 int BLI_sortutil_cmp_ptr_reverse(const void *a_, const void *b_)
90 {
91         const struct SortAnyByPtr *a = a_;
92         const struct SortAnyByPtr *b = b_;
93         if      (a->sort_value < b->sort_value) return  1;
94         else if (a->sort_value > b->sort_value) return -1;
95         else                                    return  0;
96 }