1 /* Libart_LGPL - library of basic graphic primitives 2 * Copyright (C) 1998 Raph Levien 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library 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 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public 15 * License along with this library; if not, write to the 16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 * Boston, MA 02111-1307, USA. 18 */ 19 20 /* Simple macros to set up storage allocation and basic types for libart 21 functions. */ 22 23 #ifndef __ART_MISC_H__ 24 #define __ART_MISC_H__ 25 26 #include <stdlib.h> /* for malloc, etc. */ 27 28 /* The art_config.h file is automatically generated by 29 gen_art_config.c and contains definitions of 30 ART_SIZEOF_{CHAR,SHORT,INT,LONG} and art_u{8,16,32}. */ 31 #ifdef LIBART_COMPILATION 32 #include "art_config.h" 33 #else 34 #include <libart_lgpl/art_config.h> 35 #endif 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 void *art_alloc(size_t size); 41 void art_free(void *ptr); 42 void *art_realloc(void *ptr, size_t size); 43 #ifdef __cplusplus 44 } 45 #endif /* __cplusplus */ 46 47 /* These aren't, strictly speaking, configuration macros, but they're 48 damn handy to have around, and may be worth playing with for 49 debugging. */ 50 #define art_new(type, n) ((type *)art_alloc ((n) * sizeof(type))) 51 52 #define art_renew(p, type, n) ((type *)art_realloc (p, (n) * sizeof(type))) 53 54 /* This one must be used carefully - in particular, p and max should 55 be variables. They can also be pstruct->el lvalues. */ 56 #define art_expand(p, type, max) do { if(max) { p = art_renew (p, type, max <<= 1); } else { max = 1; p = art_new(type, 1); } } while (0) 57 58 typedef int art_boolean; 59 #define ART_FALSE 0 60 #define ART_TRUE 1 61 62 /* define pi */ 63 #ifndef M_PI 64 #define M_PI 3.14159265358979323846 65 #endif /* M_PI */ 66 67 #ifndef M_SQRT2 68 #define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ 69 #endif /* M_SQRT2 */ 70 71 /* Provide macros to feature the GCC function attribute. 72 */ 73 #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)) 74 #define ART_GNUC_PRINTF( format_idx, arg_idx ) \ 75 __attribute__((__format__ (__printf__, format_idx, arg_idx))) 76 #define ART_GNUC_NORETURN \ 77 __attribute__((__noreturn__)) 78 #else /* !__GNUC__ */ 79 #define ART_GNUC_PRINTF( format_idx, arg_idx ) 80 #define ART_GNUC_NORETURN 81 #endif /* !__GNUC__ */ 82 83 #ifdef __cplusplus 84 extern "C" { 85 #endif 86 87 void ART_GNUC_NORETURN 88 art_die (const char *fmt, ...) ART_GNUC_PRINTF (1, 2); 89 90 void 91 art_warn (const char *fmt, ...) ART_GNUC_PRINTF (1, 2); 92 93 void 94 art_dprint (const char *fmt, ...) ART_GNUC_PRINTF (1, 2); 95 96 #ifdef __cplusplus 97 } 98 #endif 99 100 #define ART_USE_NEW_INTERSECTOR 101 102 #endif /* __ART_MISC_H__ */ 103