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