| /*------------------------------------------------------------------------------ |
| * Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team |
| * |
| * Distributable under the terms of either the Apache License (Version 2.0) or |
| * the GNU Lesser General Public License, as specified in the COPYING file. |
| ------------------------------------------------------------------------------*/ |
| #ifndef lucene_sharedheader_h |
| #define lucene_sharedheader_h |
| |
| /** |
| * This header contains definitions and macros for helping create cross-platform code. |
| * It is primarily for use by the clucene-core library, but is split off so that |
| * other applications such as the demo, test, benchmarks, etc can benefit from the |
| * cross platform code. Cross platform code is not distributed with the clucene-core |
| * and is not available through the shared library. |
| */ |
| |
| #include "CLucene/clucene-config.h" |
| |
| //some early definitions |
| #if defined(_MSC_VER) || defined(__BORLANDC__) |
| #define _LUCENE_PRAGMA_WARNINGS //tell lucene to display warnings using pragmas instead of #warning |
| #endif |
| |
| |
| //////////////////////////////////////////////////////// |
| //Are we in unicode mode? |
| //////////////////////////////////////////////////////// |
| #if defined(_MBCS) || defined(_ASCII) |
| #undef _ASCII |
| #undef _UCS2 |
| #define _ASCII |
| #elif defined(_UNICODE) |
| #ifndef _UCS2 |
| #define _UCS2 |
| #endif |
| #elif !defined(_UCS2) |
| #define _UCS2 |
| #endif |
| |
| //msvc needs unicode define so that it uses unicode library |
| #ifdef _UCS2 |
| #undef _UNICODE |
| #define _UNICODE |
| #undef _ASCII |
| #else |
| #undef _UNICODE |
| #undef _UCS2 |
| #endif |
| //////////////////////////////////////////////////////// |
| |
| |
| |
| //////////////////////////////////////////////////////// |
| //platform includes that MUST be included for the public headers to work... |
| //////////////////////////////////////////////////////// |
| #include <cstddef> //need this for wchar_t, size_t, NULL |
| #ifdef _CL_HAVE_STDINT_H |
| #include <stdint.h> //need this for int32_t, etc |
| #endif |
| #include <math.h> //required for float_t |
| #include <string> //need to include this really early... |
| |
| #ifdef _CL_HAVE_TCHAR_H |
| #include <tchar.h> //required for _T and TCHAR |
| #endif |
| |
| //////////////////////////////////////////////////////// |
| //namespace helper |
| //////////////////////////////////////////////////////// |
| #if defined(_LUCENE_DONTIMPLEMENT_NS_MACROS) |
| //do nothing |
| #elif !defined(DISABLE_NAMESPACE) && defined(_CL_HAVE_NAMESPACES) |
| #define CL_NS_DEF(sub) namespace lucene{ namespace sub{ |
| #define CL_NS_DEF2(sub,sub2) namespace lucene{ namespace sub{ namespace sub2 { |
| |
| #define CL_NS_END }} |
| #define CL_NS_END2 }}} |
| |
| #define CL_NS_USE(sub) using namespace lucene::sub; |
| #define CL_NS_USE2(sub,sub2) using namespace lucene::sub::sub2; |
| |
| #define CL_NS(sub) lucene::sub |
| #define CL_NS2(sub,sub2) lucene::sub::sub2 |
| |
| #define CL_STRUCT_DEF(sub,clazz) namespace lucene { namespace sub{ struct clazz; } } |
| #define CL_CLASS_DEF(sub,clazz) namespace lucene { namespace sub{ class clazz; } } |
| #define CL_CLASS_DEF2(sub,sub2, clazz) namespace lucene { namespace sub{ namespace sub2{ class clazz; } } } |
| |
| #define CL_TEMPATE_DEF(sub, clazz, typedefs) namespace lucene { namespace sub{ template<typedefs> class clazz; }} |
| #define CL_TYPE_DEF(sub, clazz, def) namespace lucene { namespace sub{ typedef def clazz; }} |
| #else |
| #define CL_NS_DEF(sub) |
| #define CL_NS_DEF2(sub, sub2) |
| #define CL_NS_END |
| #define CL_NS_END2 |
| #define CL_NS_USE(sub) |
| #define CL_NS_USE2(sub,sub2) |
| #define CL_NS(sub) |
| #define CL_NS2(sub,sub2) |
| #define CL_CLASS_DEF(sub,clazz) class clazz; |
| #define CL_CLASS_DEF2(sub,sub2, clazz) class clazz; |
| #endif |
| |
| #if defined(LUCENE_NO_STDC_NAMESPACE) |
| //todo: haven't actually tested this on a non-stdc compliant compiler |
| #define CL_NS_STD(func) ::func |
| #else |
| #define CL_NS_STD(func) std::func |
| #endif |
| // |
| //////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////// |
| // EXPORTS definition |
| //////////////////////////////////////////////////////// |
| #if defined(_WIN32) || defined(_WIN64) |
| #define CLUCENE_EXPORT_DECL __declspec(dllexport) |
| #define CLUCENE_IMPORT_DECL __declspec(dllimport) |
| #define CLUCENE_LOCAL_DECL |
| #elif defined(_CL_HAVE_GCCVISIBILITYPATCH) |
| #define CLUCENE_EXPORT_DECL __attribute__ ((visibility("default"))) |
| #define CLUCENE_LOCAL_DECL __attribute__ ((visibility("hidden"))) |
| #define CLUCENE_IMPORT_DECL |
| #else |
| #define CLUCENE_EXPORT_DECL |
| #define CLUCENE_IMPORT_DECL |
| #define CLUCENE_LOCAL_DECL |
| #endif |
| |
| //define for the libraries |
| #if defined(clucene_shared_EXPORTS) |
| #define CLUCENE_SHARED_EXPORT CLUCENE_EXPORT_DECL |
| #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL |
| #elif defined(MAKE_CLUCENE_SHARED_LIB) |
| #define CLUCENE_SHARED_EXPORT //don't export if we are building a static library |
| #else |
| #define CLUCENE_SHARED_EXPORT CLUCENE_IMPORT_DECL |
| #endif |
| #if defined(clucene_core_EXPORTS) |
| #define CLUCENE_EXPORT CLUCENE_EXPORT_DECL |
| #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL |
| #elif defined(MAKE_CLUCENE_CORE_LIB) |
| #define CLUCENE_EXPORT |
| #else |
| #define CLUCENE_EXPORT CLUCENE_IMPORT_DECL |
| #endif |
| #if defined(clucene_contribs_lib_EXPORTS) |
| #define CLUCENE_CONTRIBS_EXPORT CLUCENE_EXPORT_DECL |
| #define CLUCENE_LOCAL CLUCENE_LOCAL_DECL |
| #elif defined(MAKE_CLUCENE_CONTRIBS_LIB) |
| #define CLUCENE_CONTRIBS_EXPORT |
| #else |
| #define CLUCENE_CONTRIBS_EXPORT CLUCENE_IMPORT_DECL |
| #endif |
| #ifndef CLUCENE_LOCAL |
| #define CLUCENE_LOCAL |
| #endif |
| |
| //inline definitions |
| #if defined(__MINGW32__) || defined(_MSC_VER) |
| #define CLUCENE_SHARED_INLINE_EXPORT |
| #define CLUCENE_INLINE_EXPORT |
| #define CLUCENE_CONTRIBS_INLINE_EXPORT |
| #else |
| #define CLUCENE_SHARED_INLINE_EXPORT CLUCENE_SHARED_EXPORT |
| #define CLUCENE_INLINE_EXPORT CLUCENE_EXPORT |
| #define CLUCENE_CONTRIBS_INLINE_EXPORT CLUCENE_CONTRIBS_EXPORT |
| #endif |
| //////////////////////////////////////////////////////// |
| |
| |
| //todo: put this logic in cmake |
| #if defined(_MSC_VER) |
| #if _MSC_FULL_VER >= 140050320 |
| #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated(_Text)) |
| #elif _MSC_VER >= 1300 |
| #define _CL_DEPRECATE_TEXT(_Text) __declspec(deprecated) |
| #else |
| #define _CL_DEPRECATE_TEXT(_Text) |
| #endif |
| #elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) |
| #define _CL_DEPRECATE_TEXT(_Text) __attribute__((__deprecated__)) |
| #else |
| #define _CL_DEPRECATE_TEXT(_Text) |
| #endif |
| #define _CL_DEPRECATED(_NewItem) _CL_DEPRECATE_TEXT("This function or variable has been superceded by newer library or operating system functionality. Consider using " #_NewItem " instead. See online help for details.") |
| // |
| //////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////// |
| // boost stuff |
| //////////////////////////////////////////////////////// |
| #if defined(_MSC_VER) |
| # pragma warning (disable : 4251) // disable exported dll function |
| # endif |
| |
| //////////////////////////////////////////////////////// |
| //Class interfaces |
| //////////////////////////////////////////////////////// |
| #include "CLucene/debug/lucenebase.h" |
| //////////////////////////////////////////////////////// |
| |
| //memory handling macros/functions |
| #include "CLucene/debug/mem.h" |
| |
| #ifdef DMALLOC |
| #include <stdlib.h> |
| #include <string.h> |
| #include <dmalloc.h> |
| #endif |
| |
| #endif //lucene_sharedheader_h |