317139da92671c9f8460d1534af401d70a69db34
[WebKit-https.git] / Source / WTF / wtf / gobject / GRefPtr.cpp
1 /*
2  * Copyright (C) 2009 Martin Robinson
3  *
4  *  This library is free software; you can redistribute it and/or
5  *  modify it under the terms of the GNU Lesser General Public
6  *  License as published by the Free Software Foundation; either
7  *  version 2 of the License, or (at your option) any later version.
8  *
9  *  This library 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 GNU
12  *  Lesser General Public License for more details.
13  *
14  *  You should have received a copy of the GNU Lesser General Public
15  *  License along with this library; if not, write to the Free Software
16  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #include "config.h"
20 #include "GRefPtr.h"
21
22 #if USE(GLIB)
23
24 #include <glib.h>
25
26 namespace WTF {
27
28 template <> GHashTable* refGPtr(GHashTable* ptr)
29 {
30     if (ptr)
31         g_hash_table_ref(ptr);
32     return ptr;
33 }
34
35 template <> void derefGPtr(GHashTable* ptr)
36 {
37     g_hash_table_unref(ptr);
38 }
39
40 template <> GMainContext* refGPtr(GMainContext* ptr)
41 {
42     if (ptr)
43         g_main_context_ref(ptr);
44     return ptr;
45 }
46
47 template <> void derefGPtr(GMainContext* ptr)
48 {
49     if (ptr)
50         g_main_context_unref(ptr);
51 }
52
53 template <> GMainLoop* refGPtr(GMainLoop* ptr)
54 {
55     if (ptr)
56         g_main_loop_ref(ptr);
57     return ptr;
58 }
59
60 template <> void derefGPtr(GMainLoop* ptr)
61 {
62     if (ptr)
63         g_main_loop_unref(ptr);
64 }
65
66 #if GLIB_CHECK_VERSION(2, 32, 0)
67 template <> GBytes* refGPtr(GBytes* ptr)
68 {
69     if (ptr)
70         g_bytes_ref(ptr);
71     return ptr;
72 }
73
74 template <> void derefGPtr(GBytes* ptr)
75 {
76     if (ptr)
77         g_bytes_unref(ptr);
78 }
79
80 # else
81
82 typedef struct _GBytes {
83     bool fake;
84 } GBytes;
85
86 template <> GBytes* refGPtr(GBytes* ptr)
87 {
88     return ptr;
89 }
90
91 template <> void derefGPtr(GBytes* ptr)
92 {
93 }
94
95 #endif
96
97 #if GLIB_CHECK_VERSION(2, 24, 0)
98 template <> GVariant* refGPtr(GVariant* ptr)
99 {
100     if (ptr)
101         g_variant_ref(ptr);
102     return ptr;
103 }
104
105 template <> void derefGPtr(GVariant* ptr)
106 {
107     g_variant_unref(ptr);
108 }
109
110 #else
111
112 // We do this so that we can avoid including the glib.h header in GRefPtr.h.
113 typedef struct _GVariant {
114     bool fake;
115 } GVariant; 
116
117 template <> GVariant* refGPtr(GVariant* ptr)
118 {
119     return ptr;
120 }
121
122 template <> void derefGPtr(GVariant* ptr)
123 {
124 }
125
126 #endif
127
128 template <> GSource* refGPtr(GSource* ptr)
129 {
130     if (ptr)
131         g_source_ref(ptr);
132     return ptr;
133 }
134
135 template <> void derefGPtr(GSource* ptr)
136 {
137     if (ptr)
138         g_source_unref(ptr);
139 }
140
141 template <> GPtrArray* refGPtr(GPtrArray* ptr)
142 {
143     if (ptr)
144         g_ptr_array_ref(ptr);
145     return ptr;
146 }
147
148 template <> void derefGPtr(GPtrArray* ptr)
149 {
150     if (ptr)
151         g_ptr_array_unref(ptr);
152 }
153
154 template <> GByteArray* refGPtr(GByteArray* ptr)
155 {
156     if (ptr)
157         g_byte_array_ref(ptr);
158     return ptr;
159 }
160
161 template <> void derefGPtr(GByteArray* ptr)
162 {
163     if (ptr)
164         g_byte_array_unref(ptr);
165 }
166
167 } // namespace WTF
168
169 #endif // USE(GLIB)