1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 Sun Microsystems
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; version 2 of the License.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
/* This is the include file that should be included 'first' in every C file. */
22
#ifndef DRIZZLE_SERVER_GLOBAL_H
23
#define DRIZZLE_SERVER_GLOBAL_H
25
#if defined(i386) && !defined(__i386__)
29
#if defined(__sun) && defined(_FILE_OFFSET_BITS)
30
#undef _FILE_OFFSET_BITS
35
#if defined(__cplusplus)
45
# if defined(HAVE_MEMORY)
48
# if defined(HAVE_TR1_MEMORY)
49
# include <tr1/memory>
51
# if defined(HAVE_BOOST_SHARED_PTR_HPP)
52
# include <boost/shared_ptr.hpp>
56
# include <inttypes.h>
60
# include <errno.h> /* Recommended by debian */
62
A lot of our programs uses asserts, so better to always include it
75
#if TIME_WITH_SYS_TIME
76
# include <sys/time.h>
80
# include <sys/time.h>
87
#if defined(__cplusplus)
88
# if !defined(SHARED_PTR_NAMESPACE)
89
# error SHARED_PTR_NAMESPACE not defined, configure error!
91
# if defined(SHARED_PTR_NAMESPACE)
92
//We aren't using this yet - don't actually put in code yet.
93
//using SHARED_PTR_NAMESPACE::shared_ptr;
95
#endif /* defined(SHARED_PTR_NAMESPACE) */
98
Temporary solution to solve bug#7156. Include "sys/types.h" before
99
the thread headers, else the function madvise() will not be defined
101
#if defined(HAVE_SYS_TYPES_H) && ( defined(sun) || defined(__sun) )
102
#include <sys/types.h>
106
#include <pthread.h> /* AIX must have this included first */
108
#define _REENTRANT 1 /* Threads requires reentrant code */
114
#ifdef HAVE_SYS_TYPES_H
115
#include <sys/types.h>
126
#ifdef HAVE_SYS_STAT_H
127
# include <sys/stat.h>
130
/* Declared in int2str() */
131
extern char _dig_vec_upper[];
132
extern char _dig_vec_lower[];
135
template <class T> void set_if_bigger(T &a, const T &b)
141
template <class T> void set_if_smaller(T &a, const T &b)
148
#define set_if_bigger(a,b) do { \
149
const typeof(a) _a = (a); \
150
const typeof(b) _b = (b); \
151
(void) (&_a == &_b); \
152
if ((a) < (b)) (a)=(b); \
154
#define set_if_smaller(a,b) do { \
155
const typeof(a) _a = (a); \
156
const typeof(b) _b = (b); \
157
(void) (&_a == &_b); \
158
if ((a) > (b)) (a)=(b); \
162
#define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0)
163
#define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0)
167
#define array_elements(A) ((size_t) (sizeof(A)/sizeof(A[0])))
169
/* Some types that is different between systems */
171
typedef int File; /* File descriptor */
173
#ifdef HAVE_SYS_SOCKET_H
174
#include <sys/socket.h>
179
#define FN_LIBCHAR '/'
180
#define FN_ROOTDIR "/"
182
#define MY_NFILE 64 /* This is only used to save filenames */
183
#ifndef OS_FILE_LIMIT
184
#define OS_FILE_LIMIT 65535
188
How much overhead does malloc have. The code often allocates
189
something like 1024-MALLOC_OVERHEAD bytes
191
#define MALLOC_OVERHEAD 8
193
/* get memory in huncs */
194
static const uint32_t ONCE_ALLOC_INIT= 4096;
195
/* Typical record cash */
196
static const uint32_t RECORD_CACHE_SIZE= 64*1024;
197
/* Typical key cash */
198
static const uint32_t KEY_CACHE_SIZE= 8*1024*1024;
200
/* Default size of a key cache block */
201
static const uint32_t KEY_CACHE_BLOCK_SIZE= 1024;
204
/* Some things that this system doesn't have */
206
/* Some defines of functions for portability */
208
#undef remove /* Crashes MySQL on SCO 5.0.0 */
209
#ifndef uint64_t2double
210
#define uint64_t2double(A) ((double) (uint64_t) (A))
211
#define my_off_t2double(A) ((double) (my_off_t) (A))
215
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
217
#define ulong_to_double(X) ((double) (ulong) (X))
219
#ifndef STACK_DIRECTION
220
#error "please add -DSTACK_DIRECTION=1 or -1 to your CPPFLAGS"
226
#if !defined(FLT_MIN)
227
#define FLT_MIN ((float)1.40129846432481707e-45)
229
#if !defined(FLT_MAX)
230
#define FLT_MAX ((float)3.40282346638528860e+38)
234
/* From limits.h instead */
236
#define DBL_MIN 4.94065645841246544e-324
239
#define DBL_MAX 1.79769313486231470e+308
242
#define SIZE_T_MAX ~((size_t) 0)
246
/* Define missing math constants. */
248
#define M_PI 3.14159265358979323846
251
#define M_E 2.7182818284590452354
254
#define M_LN2 0.69314718055994530942
258
Max size that must be added to a so that we know Size to make
261
typedef ptrdiff_t my_ptrdiff_t;
263
#define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1))
264
#define ALIGN_SIZE(A) MY_ALIGN((A),sizeof(double))
265
/* Size to make adressable obj. */
266
#define ALIGN_PTR(A, t) ((t*) MY_ALIGN((A),sizeof(t)))
267
/* Offset of field f in structure t */
268
#define OFFSET(t, f) ((size_t)(char *)&((t *)0)->f)
269
#define ADD_TO_PTR(ptr,size,type) (type) ((unsigned char*) (ptr)+size)
270
#define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((unsigned char*) (A) - (unsigned char*) (B))
272
#define MY_DIV_UP(A, B) (((A) + (B) - 1) / (B))
273
#define MY_ALIGNED_BYTE_ARRAY(N, S, T) T N[MY_DIV_UP(S, sizeof(T))]
275
/* Typdefs for easyier portability */
277
#if !defined(HAVE_ULONG) && !defined(__USE_MISC)
278
typedef unsigned long ulong; /* Short for unsigned long */
281
typedef uint64_t my_off_t;
283
#if defined(SIZEOF_OFF_T)
284
# if (SIZEOF_OFF_T == 8)
285
# define OFF_T_MAX (INT64_MAX)
287
# define OFF_T_MAX (INT32_MAX)
291
#define MY_FILEPOS_ERROR -1
293
/* Defines for time function */
294
#define SCALE_SEC 100
295
#define SCALE_USEC 10000
296
#define MY_HOW_OFTEN_TO_ALARM 2 /* How often we want info on screen */
297
#define MY_HOW_OFTEN_TO_WRITE 1000 /* How often we want info on screen */
302
/* FreeBSD 2.2.2 does not define RTLD_NOW) */
307
#define DRIZZLE_SERVER
309
/* Length of decimal number represented by INT32. */
310
#define MY_INT32_NUM_DECIMAL_DIGITS 11
312
/* Length of decimal number represented by INT64. */
313
#define MY_INT64_NUM_DECIMAL_DIGITS 21
316
Io buffer size; Must be a power of 2 and
317
a multiple of 512. May be
318
smaller what the disk page size. This influences the speed of the
319
isam btree library. eg to big to slow.
322
/* Max file name len */
324
/* Max length of extension (part of FN_LEN) */
326
/* Max length of full path-name */
327
#define FN_REFLEN 512
328
/* File extension character */
329
#define FN_EXTCHAR '.'
330
/* ~ is used as abbrev for home dir */
331
#define FN_HOMELIB '~'
332
/* ./ is used as abbrev for current dir */
333
#define FN_CURLIB '.'
334
/* Parent directory; Must be a string */
335
#define FN_PARENTDIR ".."
337
/* Quote argument (before cpp) */
339
# define QUOTE_ARG(x) #x
341
/* Quote argument, (after cpp) */
342
#ifndef STRINGIFY_ARG
343
# define STRINGIFY_ARG(x) QUOTE_ARG(x)
347
* The macros below are borrowed from include/linux/compiler.h in the
348
* Linux kernel. Use them to indicate the likelyhood of the truthfulness
349
* of a condition. This serves two purposes - newer versions of gcc will be
350
* able to optimize for branch predication, which could yield siginficant
351
* performance gains in frequently executed sections of the code, and the
352
* other reason to use them is for documentation
354
#if !defined(__GNUC__)
355
#define __builtin_expect(x, expected_value) (x)
358
#define likely(x) __builtin_expect((x),1)
359
#define unlikely(x) __builtin_expect((x),0)
363
Only Linux is known to need an explicit sync of the directory to make sure a
364
file creation/deletion/renaming in(from,to) this directory durable.
366
#ifdef TARGET_OS_LINUX
367
#define NEED_EXPLICIT_SYNC_DIR 1
370
/* We need to turn off _DTRACE_VERSION if we're not going to use dtrace */
371
#if !defined(HAVE_DTRACE)
372
# undef _DTRACE_VERSION
373
# define _DTRACE_VERSION 0
376
#endif /* DRIZZLE_SERVER_GLOBAL_H */