blob: 36f042e2c70b97bc7768e8f56d390c77427afcf6 [file] [log] [blame]
/*
* 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 <stddef.h>
#if !defined(_WIN32)
#include <stdint.h>
#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)
#ifdef __cplusplus
#define AXIS2_EXTERN extern "C"
#else
#define AXIS2_EXTERN
#endif
#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 */