generic.h

Go to the documentation of this file.
00001 
00006 /* AUTORIGHTS */
00007 
00008 #ifndef VL_GENERIC_H
00009 #define VL_GENERIC_H
00010 
00011 #include <stddef.h>
00012 #include <assert.h>
00013 
00015 #define VL_VERSION_STRING "0.1"
00016 
00018 #define VL_INLINE static __inline__
00019 
00023 #define VL_STRINGIFY_(x) # x
00024 
00036 #define VL_STRINGIFY(x) VL_STRINGIFY_(x)
00037 
00043 typedef long long           vl_int64 ;   
00044 typedef int                 vl_int32 ;   
00045 typedef short               vl_int16 ;   
00046 typedef char                vl_int8  ;   
00048 typedef long long unsigned  vl_uint64 ;  
00049 typedef int       unsigned  vl_uint32 ;  
00050 typedef short     unsigned  vl_uint16 ;  
00051 typedef char      unsigned  vl_uint8 ;   
00053 typedef int                 vl_int ;     
00054 typedef unsigned int        vl_uint ;    
00055 typedef float               vl_single ;  
00056 typedef double              vl_double ;  
00057 typedef unsigned int        vl_uidx ;    
00058 typedef size_t              vl_size ;    
00060 typedef int                 vl_bool ;    
00064 #define VL_BIG_INT    2147483647
00065 
00067 #define VL_SMALL_INT  (- VL_BIG_INT - 1)
00068 
00070 #define VL_LOG_OF_2 0.693147180559945
00071 
00072 /* 
00073    For the code below: An ANSI C compiler takes the two expressions,
00074    LONG_VAR and CHAR_VAR, and implicitly casts them to the type of the
00075    first member of the union. Refer to K&R Second Edition Page 148,
00076    last paragraph.
00077 */
00078 
00080 static union { vl_uint32 raw ; vl_single value ; } 
00081   const vl_nan_f = 
00082     { 0x7FC00000UL } ;
00083 
00085 static union { vl_uint32 raw ; vl_single value ; } 
00086   const vl_infinity_f = 
00087     { 0x7F800000UL } ;
00088 
00090 static union { vl_uint64 raw ; vl_double value ; } 
00091   const vl_nan_d = 
00092     { 0x7FF8000000000000ULL } ;
00093 
00095 static union { vl_uint64 raw ; vl_double value ; } 
00096   const vl_infinity_d = 
00097     { 0x7FF0000000000000ULL } ;
00098 
00100 #define VL_NAN_F (vl_nan_f.value)
00101 
00103 #define VL_INFINITY_F (vl_infinity_f.value)
00104 
00106 #define VL_NAN_D (vl_nan_d.value)
00107 
00109 #define VL_INFINITY_D (vl_infinity_d.value)
00110 
00111 #ifdef __VISUALC__
00112 #undef VL_INLINE
00113 #define VL_INLINE __inline
00114 #define fscanf fscanf_s
00115 #define snprintf _snprintf
00116 #define isnan _isnan
00117 #endif
00118 
00135 void vl_set_alloc_func (void *(*malloc_func)  (vl_size),
00136                         void *(*realloc_func) (void*,vl_size),
00137                         void *(*calloc_func)  (vl_size, vl_size),
00138                         void  (*free_func)    (void*)) ;
00139 VL_INLINE void *vl_malloc  (vl_size n) ;
00140 VL_INLINE void *vl_realloc (void *ptr, vl_size n) ;
00141 VL_INLINE void *vl_calloc  (vl_size n, vl_size size) ;
00142 VL_INLINE void  vl_free    (void* ptr) ;
00143 
00144 void vl_set_printf_func (int(*printf_func)(char const *str, ...)) ;
00145 
00156 #define VL_PRINTF(format, ...) \
00157   ((*vl_printf_func)((format), __VA_ARGS__))
00158 
00169 #define VL_PRINT(string) \
00170   ((*vl_printf_func)(string))
00171 
00172 
00181 extern int vl_err_no ;
00182 
00187 #define VL_ERR_MSG_LEN 1024
00188 
00190 extern char vl_err_msg [VL_ERR_MSG_LEN] ;
00191 
00192 #define VL_ERR_OK       0  
00193 #define VL_ERR_OVERFLOW 1  
00194 #define VL_ERR_ALLOC    2  
00195 #define VL_ERR_BAD_ARG  3  
00196 #define VL_ERR_IO       4  
00197 #define VL_ERR_EOF      5  
00198 #define VL_ERR_NO_MORE  5  
00212 #define VL_MIN(x,y) (((x)<(y))?(x):(y))
00213 
00219 #define VL_MAX(x,y) (((x)>(y))?(x):(y))
00220 
00230 #define VL_SHIFT_LEFT(x,n) (((n)>=0)?((x)<<(n)):((x)>>-(n)))
00231 /* @} */
00232 
00236 char const * vl_get_version_string () ;
00237 
00242 #define VL_LITTLE_ENDIAN 0  
00243 #define VL_BIG_ENDIAN    1  
00251 #if                                                \
00252   defined(__LITTLE_ENDIAN__)                   ||  \
00253   defined(__i386__)  || defined(__ia64__)      ||  \
00254   defined(WIN32)     || defined(__x86_64)      ||  \
00255   defined(__alpha__) || defined(__alpha)       ||  \
00256   defined(__arm__)   || defined(__SYMBIAN32__) ||  \
00257   (defined(__mips__) && defined(__MIPSEL__)) 
00258 #define VL_ENDIANNESS VL_LITTLE_ENDIAN
00259 #else
00260 #define VL_ENDIANNESS VL_BIG_ENDIAN
00261 #endif
00262 
00263 VL_INLINE int  vl_get_endianness () ;
00264 VL_INLINE void vl_adapt_endianness_8 (void *dst, void* src) ;
00265 VL_INLINE void vl_adapt_endianness_4 (void *dst, void* src) ;
00266 VL_INLINE void vl_adapt_endianness_2 (void *dst, void* src) ;
00276 VL_INLINE int
00277 vl_get_endianness () 
00278 {
00279   return VL_ENDIANNESS ;
00280 }
00281 
00290 VL_INLINE void
00291 vl_adapt_endianness_8 (void *dst, void* src)
00292 {
00293   char *dst_ = (char*) dst ;
00294   char *src_ = (char*) src ;
00295 #if VL_ENDIANNESS == VL_BIG_ENDIAN
00296     dst_ [0] = src_ [0] ;
00297     dst_ [1] = src_ [1] ;
00298     dst_ [2] = src_ [2] ;
00299     dst_ [3] = src_ [3] ;
00300     dst_ [4] = src_ [4] ;
00301     dst_ [5] = src_ [5] ;
00302     dst_ [6] = src_ [6] ;
00303     dst_ [7] = src_ [7] ;
00304 #else 
00305     dst_ [0] = src_ [7] ;
00306     dst_ [1] = src_ [6] ;
00307     dst_ [2] = src_ [5] ;
00308     dst_ [3] = src_ [4] ;
00309     dst_ [4] = src_ [3] ;
00310     dst_ [5] = src_ [2] ;
00311     dst_ [6] = src_ [1] ;
00312     dst_ [7] = src_ [0] ;
00313 #endif
00314 }
00315 
00324 VL_INLINE void
00325 vl_adapt_endianness_4 (void *dst, void* src)
00326 {
00327   char *dst_ = (char*) dst ;
00328   char *src_ = (char*) src ;
00329 #if VL_ENDIANNESS == VL_BIG_ENDIAN
00330     dst_ [0] = src_ [0] ;
00331     dst_ [1] = src_ [1] ;
00332     dst_ [2] = src_ [2] ;
00333     dst_ [3] = src_ [3] ;
00334 #else 
00335     dst_ [0] = src_ [3] ;
00336     dst_ [1] = src_ [2] ;
00337     dst_ [2] = src_ [1] ;
00338     dst_ [3] = src_ [0] ;
00339 #endif
00340 }
00341 
00350 VL_INLINE void
00351 vl_adapt_endianness_2 (void *dst, void* src)
00352 {
00353   char *dst_ = (char*) dst ;
00354   char *src_ = (char*) src ;
00355 #if VL_ENDIANNESS == VL_BIG_ENDIAN
00356     dst_ [0] = src_ [0] ;
00357     dst_ [1] = src_ [1] ;
00358 #else
00359     dst_ [0] = src_ [1] ;
00360     dst_ [1] = src_ [0] ;
00361 #endif
00362 }
00363 
00364 extern int   (*vl_printf_func)  (char const * format, ...) ;
00365 extern void *(*vl_malloc_func)  (vl_size) ;
00366 extern void *(*vl_realloc_func) (void*,vl_size) ;
00367 extern void *(*vl_calloc_func)  (vl_size, vl_size) ;
00368 extern void  (*vl_free_func)    (void*) ;          
00369 
00379 VL_INLINE 
00380 void*
00381 vl_malloc (vl_size n)
00382 {
00383   return (*vl_malloc_func)(n) ;
00384 }
00385 
00397 VL_INLINE 
00398 void*
00399 vl_realloc (void* ptr, vl_size n)
00400 {
00401   return (*vl_realloc_func)(ptr, n) ;
00402 }
00403 
00415 VL_INLINE 
00416 void*
00417 vl_calloc (vl_size n, vl_size size)
00418 {
00419   return (*vl_calloc_func)(n, size) ;
00420 }
00421 
00430 VL_INLINE 
00431 void
00432 vl_free (void *ptr)
00433 {
00434   (*vl_free_func)(ptr) ;
00435 }
00436 
00437 
00438 
00439 /* VL_GENERIC_H */
00440 #endif

Generated on Mon Jan 21 17:43:32 2008 for vlfeat by  doxygen 1.5.4