Branch data Line data Source code
1 : : /*
2 : : * Copyright © 2018 Endless Mobile, Inc.
3 : : *
4 : : * SPDX-License-Identifier: LGPL-2.1-or-later
5 : : *
6 : : * This library is free software; you can redistribute it and/or
7 : : * modify it under the terms of the GNU Lesser General Public
8 : : * License as published by the Free Software Foundation; either
9 : : * version 2.1 of the License, or (at your option) any later version.
10 : : *
11 : : * This library is distributed in the hope that it will be useful,
12 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 : : * Lesser General Public License for more details.
15 : : *
16 : : * You should have received a copy of the GNU Lesser General Public
17 : : * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18 : : *
19 : : * Author: Philip Withnall <withnall@endlessm.com>
20 : : */
21 : :
22 : : #ifndef __G_UTILS_PRIVATE_H__
23 : : #define __G_UTILS_PRIVATE_H__
24 : :
25 : : #include "glibconfig.h"
26 : : #include "gtypes.h"
27 : : #include "gtestutils.h"
28 : :
29 : : #include <math.h>
30 : : #include <time.h>
31 : :
32 : : G_BEGIN_DECLS
33 : :
34 : : void g_set_user_dirs (const gchar *first_dir_type,
35 : : ...) G_GNUC_NULL_TERMINATED;
36 : :
37 : : /* Returns the smallest power of 2 greater than or equal to n,
38 : : * or 0 if such power does not fit in a gsize
39 : : */
40 : : static inline gsize
41 : 884065 : g_nearest_pow (gsize num)
42 : : {
43 : 884065 : gsize n = num - 1;
44 : :
45 : 884065 : g_assert (num > 0 && num <= G_MAXSIZE / 2);
46 : :
47 : 884065 : n |= n >> 1;
48 : 884065 : n |= n >> 2;
49 : 884065 : n |= n >> 4;
50 : 884065 : n |= n >> 8;
51 : 884065 : n |= n >> 16;
52 : : #if GLIB_SIZEOF_SIZE_T == 8
53 : 884065 : n |= n >> 32;
54 : : #endif
55 : :
56 : 884065 : return n + 1;
57 : : }
58 : :
59 : : void _g_unset_cached_tmp_dir (void);
60 : :
61 : : gboolean _g_localtime (time_t timet, struct tm *tm);
62 : :
63 : : gboolean g_set_prgname_once (const gchar *prgname);
64 : :
65 : : /* Although isnan() is defined as a type-independent macro in C99, mingw32
66 : : * doesn’t seem to support that (it defines `isnan (float d)` only). Older
67 : : * MSVC toolchains don’t support C99 either. So we provide an internal
68 : : * abstraction macro.
69 : : *
70 : : * This should not be made public; toolchains will soon enough catch up with
71 : : * C99, so third party code should just use isnan(). */
72 : : static inline int
73 : 3654695 : g_isnan (double d)
74 : : {
75 : : #if (defined (_MSC_VER) && (_MSC_VER < 1800)) || defined(__MINGW32__)
76 : : return _isnan (d);
77 : : #else
78 : 3654695 : return isnan (d);
79 : : #endif
80 : : }
81 : :
82 : : G_END_DECLS
83 : :
84 : : #endif /* __G_UTILS_PRIVATE_H__ */
|