/* FriBidi * common.h - common include for library sources * * $Id: common.h,v 1.20 2008-04-08 21:38:23 behdad Exp $ * $Author: behdad $ * $Date: 2008-04-08 21:38:23 $ * $Revision: 1.20 $ * $Source: /cvs/fribidi/fribidi2/lib/common.h,v $ * * Author: * Behdad Esfahbod, 2004 * * Copyright (C) 2004 Sharif FarsiWeb, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library, in a file named COPYING; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA * * For licensing issues, contact . */ #ifndef _COMMON_H #define _COMMON_H #if HAVE_CONFIG_H+0 # include #endif #include /* FRIBIDI_PRIVATESPACE is a macro used to name library internal symbols. */ #ifndef FRIBIDI_PRIVATESPACE # define FRIBIDI_PRIVATESPACE1(A,B) A##B # define FRIBIDI_PRIVATESPACE0(A,B) FRIBIDI_PRIVATESPACE1(A,B) # define FRIBIDI_PRIVATESPACE(SYMBOL) FRIBIDI_PRIVATESPACE0(_,FRIBIDI_NAMESPACE(_##SYMBOL##__internal__)) #endif /* !FRIBIDI_PRIVATESPACE */ #if (defined(WIN32)) || (defined(_WIN32_WCE)) # define FRIBIDI_ENTRY __declspec(dllexport) #endif /* WIN32 */ #if FRIBIDI_USE_GLIB+0 # ifndef SIZEOF_LONG # define SIZEOF_LONG GLIB_SIZEOF_LONG # endif /* !SIZEOF_LONG */ # ifndef SIZEOF_VOID_P # define SIZEOF_VOID_P GLIB_SIZEOF_VOID_P # endif /* !SIZEOF_VOID_P */ # ifndef __FRIBIDI_DOC # include # endif /* !__FRIBIDI_DOC */ # ifndef fribidi_malloc # define fribidi_malloc g_try_malloc # define fribidi_free g_free # endif /* !fribidi_malloc */ # ifndef fribidi_assert # ifndef __FRIBIDI_DOC # include # endif /* !__FRIBIDI_DOC */ # define fribidi_assert g_assert # endif /* !fribidi_assert */ # ifndef __FRIBIDI_DOC # include # endif /* !__FRIBIDI_DOC */ # ifndef FRIBIDI_BEGIN_STMT # define FRIBIDI_BEGIN_STMT G_STMT_START { # define FRIBIDI_END_STMT } G_STMT_END # endif /* !FRIBIDI_BEGIN_STMT */ # ifndef LIKELY # define LIKELY G_LIKELY # define UNLIKELY G_UNLIKELY # endif /* !LIKELY */ # ifndef false # define false FALSE # endif /* !false */ # ifndef true # define true TRUE # endif /* !true */ #endif /* FRIBIDI_USE_GLIB */ #ifndef false # define false (0) # endif /* !false */ # ifndef true # define true (!false) # endif /* !true */ #ifndef NULL # ifdef __cplusplus # define NULL (0L) # else /* !__cplusplus */ # define NULL ((void*) 0) # endif /* !__cplusplus */ #endif /* !NULL */ /* fribidi_malloc and fribidi_free should be used instead of malloc and free. * No need to include any headers. */ #ifndef fribidi_malloc # if HAVE_STDLIB_H # ifndef __FRIBIDI_DOC # include # endif /* __FRIBIDI_DOC */ # define fribidi_malloc malloc # else /* !HAVE_STDLIB_H */ # define fribidi_malloc (void *) malloc # endif /* !HAVE_STDLIB_H */ # define fribidi_free free #else /* fribidi_malloc */ # ifndef fribidi_free # error "You should define fribidi_free too when you define fribidi_malloc." # endif /* !fribidi_free */ #endif /* fribidi_malloc */ #if HAVE_STRING_H+0 # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H+0 # include #endif /* FRIBIDI_CHUNK_SIZE is the number of bytes in each chunk of memory being * allocated for data structure pools. */ #ifndef FRIBIDI_CHUNK_SIZE # if HAVE_ASM_PAGE_H # ifndef __FRIBIDI_DOC # include # endif /* __FRIBIDI_DOC */ # define FRIBIDI_CHUNK_SIZE (PAGE_SIZE - 16) # else /* !HAVE_ASM_PAGE_H */ # define FRIBIDI_CHUNK_SIZE (4096 - 16) # endif /* !HAVE_ASM_PAGE_H */ #else /* FRIBIDI_CHUNK_SIZE */ # if FRIBIDI_CHUNK_SIZE < 256 # error "FRIBIDI_CHUNK_SIZE now should define the size of a chunk in bytes." # endif /* FRIBIDI_CHUNK_SIZE < 256 */ #endif /* FRIBIDI_CHUNK_SIZE */ /* FRIBIDI_BEGIN_STMT should be used at the beginning of your macro * definitions that are to behave like simple statements. Use * FRIBIDI_END_STMT at the end of the macro after the semicolon or brace. */ #ifndef FRIBIDI_BEGIN_STMT # define FRIBIDI_BEGIN_STMT do { # define FRIBIDI_END_STMT } while (0) #endif /* !FRIBIDI_BEGIN_STMT */ /* LIKEYLY and UNLIKELY are used to give a hint on branch prediction to the * compiler. */ #ifndef LIKELY # define LIKELY # define UNLIKELY #endif /* !LIKELY */ #ifndef FRIBIDI_EMPTY_STMT # define FRIBIDI_EMPTY_STMT FRIBIDI_BEGIN_STMT (void) 0; FRIBIDI_END_STMT #endif /* !FRIBIDI_EMPTY_STMT */ #if HAVE_STRINGIZE+0 # define STRINGIZE(symbol) #symbol #else /* !HAVE_STRINGIZE */ # error "No stringize operator available?" #endif /* !HAVE_STRINGIZE */ /* As per recommendation of GNU Coding Standards. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE #endif /* !_GNU_SOURCE */ /* We respect our own rules. */ #define FRIBIDI_NO_DEPRECATED #include "debug.h" #endif /* !_COMMON_H */ /* Editor directions: * vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent */