add toolbutton_goto_reflection_clicked_cb
[hkl.git] / hkl / hkl-macros-private.h
blob346dc0fd4c0346277f21de43d8cba8dfbbab5d13
1 /* This file is part of the hkl library.
3 * The hkl library is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
8 * The hkl library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with the hkl library. If not, see <http://www.gnu.org/licenses/>.
16 * Copyright (C) 2003-2013 Synchrotron SOLEIL
17 * L'Orme des Merisiers Saint-Aubin
18 * BP 48 91192 GIF-sur-YVETTE CEDEX
20 * Authors: Picca Frédéric-Emmanuel <picca@synchrotron-soleil.fr>
22 #ifndef __HKL_MACROS_PRIVATE_H__
23 #define __HKL_MACROS_PRIVATE_H__
25 #include <assert.h> // for assert
26 #include "hkl.h" // for HKL_BEGIN_DECLS, etc
28 /* specific part for the eulerian -> kappa conversion */
29 #define HKL_EULERIAN_KAPPA_SOLUTION 1
31 /* the assert method */
32 #if !defined(NDEBUG) && !_MSC_VER
33 # include <execinfo.h>
34 # include <assert.h>
35 # define hkl_assert(x) do{ if (!(x)) {hkl_printbt(); assert(x); } } while(0)
36 #else
37 # define hkl_assert(x)
38 #endif
40 /* use for the printf format methods took from glib */
41 #define G_GNUC_PRINTF( format_idx, arg_idx ) \
42 __attribute__((__format__ (__printf__, format_idx, arg_idx)))
44 /* use for the hkl_list */
45 #define alloc_nr(x) (((x)+16)*3/2)
48 * Realloc the buffer pointed at by variable 'x' so that it can hold
49 * at least 'nr' entries; the number of entries currently allocated
50 * is 'alloc', using the standard growing factor alloc_nr() macro.
52 * DO NOT USE any expression with side-effect for 'x' or 'alloc'.
54 #define ALLOC_GROW(x, nr, alloc) \
55 do { \
56 if ((nr) > alloc) { \
57 if (alloc_nr(alloc) < (nr)) \
58 alloc = (nr); \
59 else \
60 alloc = alloc_nr(alloc); \
61 x = realloc((x), alloc * sizeof(*(x))); \
62 } \
63 } while(0)
65 #ifndef NORETURN
66 # ifdef __GNUC__
67 # define NORETURN __attribute__((__noreturn__))
68 # else
69 # define NORETURN
70 # ifndef __attribute__
71 # define __attribute__(x)
72 # endif
73 # endif
74 #endif
76 #define hkl_return_val_if_fail(expr, val) if (expr) { } else return val
78 HKL_BEGIN_DECLS
80 extern void hkl_printbt(void);
82 void *_hkl_malloc(int size, const char *error);
84 HKL_END_DECLS
86 /* malloc method */
87 #define HKL_MALLOC(type) (type *)_hkl_malloc(sizeof(type), "Can not allocate memory for a " #type)
89 #endif