/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef AXUTIL_UTILS_DEFINES_H #define AXUTIL_UTILS_DEFINES_H #include #if !defined(_WIN32) #include #endif #ifdef __cplusplus extern "C" { #endif #if defined(_WIN32) && !defined(AXIS2_SKIP_INT_TYPEDEFS) /** * ANSI Type definitions for Windows */ typedef unsigned __int8 uint8_t; typedef __int8 int8_t; typedef unsigned __int16 uint16_t; typedef __int16 int16_t; typedef unsigned __int32 uint32_t; typedef __int32 int32_t; typedef unsigned __int64 uint64_t; typedef __int64 int64_t; #endif /** * Definition of format specifiers * for printf family of functions */ #if defined(_WIN32) #define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%I64d" #define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%I64u" #define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%I32d" #define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%I32u" #else #if __WORDSIZE == 64 #define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%ld" #define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%lu" #else #define AXIS2_PRINTF_INT64_FORMAT_SPECIFIER "%lld" #define AXIS2_PRINTF_UINT64_FORMAT_SPECIFIER "%llu" #endif # if defined(_MSC_VER) && _MSC_VER >= 1300 # define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%I32d" # define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%I32u" # else # define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%d" # define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%u" # endif /**#define AXIS2_PRINTF_INT32_FORMAT_SPECIFIER "%d" #define AXIS2_PRINTF_UINT32_FORMAT_SPECIFIER "%u" */ #endif /** * Type definitions */ typedef char axis2_char_t; typedef int axis2_bool_t; typedef int axis2_status_t; typedef int axis2_scope_t; typedef unsigned int axis2_ssize_t; typedef char axis2_byte_t; typedef unsigned char axis2_unsigned_byte_t; #define AXIS2_STRING(s) s #define AXIS2_CHAR(c) c #define AXIS2_CRLF_LENGTH 2 #define AXIS2_CRLF "\r\n" /* These constant definitions should later be moved to platform dependant * files */ #define AXIS2_EOLN '\0' /** * Boolean values */ #define AXIS2_TRUE 1 #define AXIS2_FALSE 0 /** * Exporting */ #if defined(_WIN32) && !defined(AXIS2_DECLARE_STATIC) #define AXIS2_EXPORT __declspec(dllexport) #else #define AXIS2_EXPORT #endif /** * Importing */ #if defined(_WIN32) #define AXIS2_IMPORT __declspec(dllimport) #else #define AXIS2_IMPORT #endif /** * Calling Conventions */ #if defined(__GNUC__) #if defined(__i386) #define AXIS2_CALL __attribute__((cdecl)) #define AXIS2_WUR __attribute__((warn_unused_result)) #else #define AXIS2_CALL #define AXIS2_WUR #endif #elif defined(_WIN32) #define AXIS2_CALL __stdcall #define AXIS2_WUR #else /* Unix */ #define AXIS2_CALL #define AXIS2_WUR #endif #define AXIS2_THREAD_FUNC AXIS2_CALL #ifdef DOXYGEN /* define these just so doxygen documents them */ /** * AXIS2_DECLARE_STATIC is defined when including Axis2's Core headers, * to provide static linkage when the dynamic library may be unavailable. * * @see AXIS2_DECLARE_EXPORT * * AXIS2_DECLARE_STATIC and AXIS2_DECLARE_EXPORT are left undefined when * including Axis2's Core headers, to import and link the symbols from the * dynamic Axis2 Core library and assure appropriate indirection and calling * conventions at compile time. */ # define AXIS2_DECLARE_STATIC /** * AXIS2_DECLARE_EXPORT is defined when building the Axis2 Core dynamic * library, so that all public symbols are exported. * * @see AXIS2_DECLARE_STATIC */ # define AXIS2_DECLARE_EXPORT #endif /* def DOXYGEN */ #if !defined(_WIN32) /** * Axis2 Core functions are declared with AXIS2_EXTERN AXIS2_CALL , so they may * use the most appropriate calling convention. Other * Core functions with variable arguments must use AXIS2_DECLARE_NONSTD(). * @code * AXIS2_EXTERN rettype) axis2_func(args AXIS2_CALL * @endcode */ #define AXIS2_EXTERN /** * Axis2 Core variable argument and hook functions are declared with * AXIS2_DECLARE_NONSTD(), as they must use the C language calling convention. * @see AXIS2_DECLARE * @code * AXIS2_DECLARE_NONSTD(rettype) axis2_func(args [...]) * @endcode */ #define AXIS2_DECLARE_NONSTD(type) type /** * Axis2 Core variables are declared with AXIS2_DECLARE_DATA. * This assures the appropriate indirection is invoked at compile time. * * @code * AXIS2_DECLARE_DATA type axis2_variable * @endcode */ #define AXIS2_DECLARE_DATA #elif defined(AXIS2_DECLARE_STATIC) #define AXIS2_EXTERN #define AXIS2_EXTERN_NONSTD #define AXIS2_DECLARE_DATA #elif defined(AXIS2_DECLARE_EXPORT) #define AXIS2_EXTERN AXIS2_EXPORT #define AXIS2_EXTERN_NONSTD AXIS2_EXPORT #define AXIS2_DECLARE_DATA #else #define AXIS2_EXTERN AXIS2_IMPORT #define AXIS2_EXTERN_NONSTD AXIS2_IMPORT #define AXIS2_DECLARE_DATA #endif #ifdef __cplusplus } #endif #endif /* AXIS2_UTILS_DEFINES_H */