ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/util.h
(Generate patch)

Comparing deliantra/server/include/util.h (file contents):
Revision 1.34 by root, Fri Jan 19 15:15:50 2007 UTC vs.
Revision 1.36 by root, Thu Jan 25 03:54:45 2007 UTC

1#ifndef UTIL_H__ 1#ifndef UTIL_H__
2#define UTIL_H__ 2#define UTIL_H__
3
4//#define PREFER_MALLOC
3 5
4#if __GNUC__ >= 3 6#if __GNUC__ >= 3
5# define is_constant(c) __builtin_constant_p (c) 7# define is_constant(c) __builtin_constant_p (c)
6#else 8#else
7# define is_constant(c) 0 9# define is_constant(c) 0
35#define IN_RANGE_EXC(val,beg,end) \ 37#define IN_RANGE_EXC(val,beg,end) \
36 ((unsigned int)(val) - (unsigned int)(beg) < (unsigned int)(end) - (unsigned int)(beg)) 38 ((unsigned int)(val) - (unsigned int)(beg) < (unsigned int)(end) - (unsigned int)(beg))
37 39
38void fork_abort (const char *msg); 40void fork_abort (const char *msg);
39 41
42// rationale for using (U) not (T) is to reduce signed/unsigned issues,
43// as a is often a constant while b is the variable. it is still a bug, though.
40template<typename T, typename U> static inline T min (T a, U b) { return a < (T)b ? a : (T)b; } 44template<typename T, typename U> static inline T min (T a, U b) { return (U)a < b ? (U)a : b; }
41template<typename T, typename U> static inline T max (T a, U b) { return a > (T)b ? a : (T)b; } 45template<typename T, typename U> static inline T max (T a, U b) { return (U)a > b ? (U)a : b; }
42template<typename T, typename U, typename V> static inline T clamp (T v, U a, V b) { return v < (T)a ? a : v >(T)b ? b : v; } 46template<typename T, typename U, typename V> static inline T clamp (T v, U a, V b) { return v < (T)a ? (T)a : v >(T)b ? (T)b : v; }
43 47
44template<typename T, typename U> static inline void swap (T& a, U& b) { T t=a; a=(T)b; b=(U)t; } 48template<typename T, typename U> static inline void swap (T& a, U& b) { T t=a; a=(T)b; b=(U)t; }
45 49
46// this is much faster than crossfires original algorithm 50// this is much faster than crossfires original algorithm
47// on modern cpus 51// on modern cpus
131 135
132// for symmetry 136// for symmetry
133template<typename T> 137template<typename T>
134inline void sfree (T *ptr, int n = 1) throw () 138inline void sfree (T *ptr, int n = 1) throw ()
135{ 139{
140#ifdef PREFER_MALLOC
141 free (ptr);
142#else
136 g_slice_free1 (n * sizeof (T), (void *)ptr); 143 g_slice_free1 (n * sizeof (T), (void *)ptr);
144#endif
137} 145}
138 146
139// a STL-compatible allocator that uses g_slice 147// a STL-compatible allocator that uses g_slice
140// boy, this is verbose 148// boy, this is verbose
141template<typename Tp> 149template<typename Tp>

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines