Provide sane defaults for equal, hash and compare functions
[platform/upstream/libgee.git] / gee / functions.vala
1 /* functions.vala
2  *
3  * Copyright (C) 2009  Maciej Piechotka
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
18  *
19  * Author:
20  *      Maciej Piechotka <uzytkownik2@gmail.com>
21  */
22
23 using GLib;
24
25 namespace Gee {
26
27         public class Functions {
28
29                 public static EqualFunc get_equal_func_for (Type t) {
30                         if (t == typeof (string)) {
31                                 return str_equal;
32                         } else {
33                                 return direct_equal;
34                         }
35                 }
36
37                 public static HashFunc get_hash_func_for (Type t) {
38                         if (t == typeof (string)) {
39                                 return str_hash;
40                         } else {
41                                 return direct_hash;
42                         }
43                 }
44
45                 public static CompareFunc get_compare_func_for (Type t) {
46                         if (t == typeof (string)) {
47                                 return (CompareFunc) strcmp;
48                         } else {
49                                 return direct_compare;
50                         }
51                 }
52         }
53
54         public static int direct_compare (void* _val1, void* _val2) {
55                 long val1 = (long)_val1, val2 = (long)_val2;
56                 if (val1 > val2) {
57                         return 1;
58                 } else if (val1 == val2) {
59                         return 0;
60                 } else {
61                         return -1;
62                 }
63         }
64 }