/*
 *   Copyright 2003-2004 The Apache Software Foundation.
// (c) Copyright IBM Corp. 2004, 2005 All Rights Reserved
 *
 *   Licensed 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.
 */

#if !defined(_AXISUSERAPIC_H_OF_AXIS_INCLUDED_)
#define _AXISUSERAPIC_H_OF_AXIS_INCLUDED_

/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
/* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE   */
/* ----------------------------------------------------------------   */
/* THIS HEADER FILE PATTERNED AFTER CORRESPONDING hpp HEADER FILE.    */
/* CHANGES TO hpp HEADER FILE MAY NEED TO BE PROPAGATED HERE AND IN   */
/* THE IMPLEMEMTATION OF THE APIS.                                    */
/* ----------------------------------------------------------------   */
/* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE   */
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */

#include <time.h>
#include <string.h>

#include <axis/GDefine.h>
#include <axis/TypeMapping.h>

#ifdef __cplusplus
  extern "C" {
#endif

 /**
  * @file AxisUserAPI.h
  * This file contains types defined in Axis C++. The mapping of basic xsd types
  * to the C language types.
  * 
  * The following xsd basic types are supported:
  * - <tt> anyURI, base64Binary, boolean, byte, date, dateTime, decimal, double, duration, float, hexBinary, int, integer, long, NMTOKEN, NOTATION, QName, short, string, time, unsignedByte, unsignedInt, unsignedLong</tt> and \c unsignedShort.
  */

/**
 * @typedef xsdc__string
 * Axis C++ defined type for xml basic type string
 */
typedef AxiscChar * xsdc__string;

/**
 * @typedef xsdc__normalizedString
 * Axis C++ defined type for xml basic type normalizedString
 */
typedef AxiscChar * xsdc__normalizedString;

/**
 * @typedef xsdc__token
 * Axis C++ defined type for xml basic type token
 */
typedef AxiscChar * xsdc__token;

/**
 * @typedef xsdc__language
 * Axis C++ defined type for xml basic type language
 */
typedef AxiscChar * xsdc__language;

/**
 * @typedef xsdc__Name
 * Axis C++ defined type for xml basic type Name
 */
typedef AxiscChar * xsdc__Name;

/**
 * @typedef xsdc__NCName
 * Axis C++ defined type for xml basic type NCName
 */
typedef AxiscChar * xsdc__NCName;

/**
 * @typedef xsdc__ID
 * Axis C++ defined type for xml basic type ID
 */
typedef AxiscChar * xsdc__ID;

/**
 * @typedef xsdc__IDREF
 * Axis C++ defined type for xml basic type IDREF
 */
typedef AxiscChar * xsdc__IDREF;

/**
 * @typedef xsdc__IDREFS
 * Axis C++ defined type for xml basic type IDREFS
 */
typedef AxiscChar * xsdc__IDREFS;

/**
 * @typedef xsdc__ENTITY
 * Axis C++ defined type for xml basic type ENTITY
 */
typedef AxiscChar * xsdc__ENTITY;

/**
 * @typedef xsdc__ENTITIES
 * Axis C++ defined type for xml basic type ENTITIES
 */
typedef AxiscChar * xsdc__ENTITIES;

/**
 * @typedef xsdc__NMTOKEN
 * Axis C++ defined type for xml basic type NMTOKEN
 */
typedef AxiscChar * xsdc__NMTOKEN;

/**
 * @typedef xsdc__NMTOKENS
 * Axis C++ defined type for xml basic type NMTOKENS
 */
typedef AxiscChar * xsdc__NMTOKENS;

/**
 * @typedef xsdc__NMTOKENS
 * Axis C++ defined type for xml basic type NMTOKENS
 */
typedef AxiscChar * xsdc__anyType;

/**
 * @typedef xsdc__integer
 * Axis C++ defined type for xml basic type integer
 */
#ifdef WIN32
typedef __int64 xsdc__integer;
#else
typedef long long xsdc__integer;
#endif

/**
 * @typedef xsdc__int
 * Axis C++ defined type for xml basic type int
 */
typedef int xsdc__int;

/**
 * @typedef xsdc__long
 * Axis C++ defined type for xml basic type long
 */
#ifdef WIN32
typedef __int64 xsdc__long;
#else
typedef long long xsdc__long;
#endif

/**
 * @typedef xsdc__short
 * Axis C++ defined type for xml basic type short
 */
typedef short xsdc__short;

/**
 * @typedef xsdc__decimal
 * Axis C++ defined type for xml basic type decimal
 */
typedef double xsdc__decimal;

/**
 * @typedef xsdc__float
 * Axis C++ defined type for xml basic type float
 */
typedef float xsdc__float;

/**
 * @typedef xsdc__double
 * Axis C++ defined type for xml basic type double
 */
typedef double xsdc__double;

/**
 * @typedef xsdc__boolean
 * Axis C++ defined type for xml basic type boolean
 */
typedef enum 
{ 
    /**
     * False
     */
    false_=0, 

    /**
     * True
     */    
    true_ 
} xsdc__boolean;

/**
 * @typedef xsdc__byte
 * Axis C++ defined type for xml basic type byte
 */
typedef signed char xsdc__byte;

/**
 * @typedef xsdc__QName
 * Axis C++ defined type for xml basic type QName
 */
typedef AxiscChar * xsdc__QName;

/**
 * @typedef xsd__NOTATION
 * Axis C++ defined type for xml basic type NOTATION
 */
typedef AxiscChar * xsdc__NOTATION;

/**
 * @typedef xsdc__dateTime
 * Axis C++ defined type for xml basic type dateTime
 */
typedef struct tm xsdc__dateTime;

/**
 * @typedef xsdc__date
 * Axis C++ defined type for xml basic type date
 */
typedef struct tm xsdc__date;

/**
 * @typedef xsdc__time
 * Axis C++ defined type for xml basic type time
 */
typedef struct tm xsdc__time;

/**
 * @typedef xsdc__gYearMonth
 * Axis C++ defined type for xml basic type gYearMonth
 */
typedef struct tm xsdc__gYearMonth;

/**
 * @typedef xsdc__gYear
 * Axis C++ defined type for xml basic type gYear
 */
typedef struct tm xsdc__gYear;

/**
 * @typedef xsdc__gMonthDay
 * Axis C++ defined type for xml basic type gMonthDay
 */
typedef struct tm xsdc__gMonthDay;

/**
 * @typedef xsdc__gDay
 * Axis C++ defined type for xml basic type gDay
 */
typedef struct tm xsdc__gDay;

/**
 * @typedef xsdc__gMonth
 * Axis C++ defined type for xml basic type gMonth
 */
typedef struct tm xsdc__gMonth;

/**
 * @typedef xsdc__duration
 * Axis C++ defined type for xml basic type duration
 */
typedef long xsdc__duration;

/**
 * @typedef xsdc__nonNegativeInteger
 * Axis C++ defined type for xml basic type nonNegativeInteger
 */
#ifdef WIN32
typedef unsigned __int64 xsdc__nonNegativeInteger;
#else
typedef unsigned long long xsdc__nonNegativeInteger;
#endif

/**
 * @typedef xsdc__unsignedByte
 * Axis C++ defined type for xml basic type unsignedByte
 */
typedef unsigned char xsdc__unsignedByte;

/**
 * @typedef xsdc__unsignedInt
 * Axis C++ defined type for xml basic type unsignedInt
 */
typedef unsigned int xsdc__unsignedInt;

/**
 * @typedef xsdc__unsignedLong
 * Axis C++ defined type for xml basic type unsignedLong
 */
#ifdef WIN32
typedef unsigned __int64 xsdc__unsignedLong;
#else
typedef unsigned long long xsdc__unsignedLong;
#endif
/**
 * @typedef xsdc__unsignedShort
 * Axis C++ defined type for xml basic type unsignedShort
 */
typedef unsigned short xsdc__unsignedShort;

/**
 * @typedef xsdc__nonPositiveInteger
 * Axis C++ defined type for xml basic type nonPositiveInteger
 */
#ifdef WIN32
typedef __int64 xsdc__nonPositiveInteger;
#else
typedef long long xsdc__nonPositiveInteger;
#endif

/**
 * @typedef xsdc__positiveInteger
 * Axis C++ defined type for xml basic type positiveInteger
 */
#ifdef WIN32
typedef unsigned __int64 xsdc__positiveInteger;
#else
typedef unsigned long long xsdc__positiveInteger;
#endif

/**
 * @typedef xsdc__negativeInteger
 * Axis C++ defined type for xml basic type negativeInteger
 */
#ifdef WIN32
typedef __int64 xsdc__negativeInteger;
#else
typedef long long xsdc__negativeInteger;
#endif

/**
 * @struct xsdc__base64Binary
 * Axis C++ defined type for xml basic type base64Binary
 */
typedef struct
{
    /** Binary data */
    xsdc__unsignedByte * __ptr;
    
    /** Length, in bytes, of binary data */
    xsdc__int __size;
} xsdc__base64Binary;

/**
 * @struct xsdc__hexBinary
 * Axis C++ defined type for xml basic type hexBinary
 */
typedef struct
{
    /** Binary data */
    xsdc__unsignedByte * __ptr;
    
    /** Length, in bytes, of binary data */
    xsdc__int __size;
} xsdc__hexBinary;

/**
 * @typedef xsdc__anyURI
 * Axis C++ defined type for xml basic type anyURI
 */
typedef AxiscChar * xsdc__anyURI;

/**
 * @enum AXISC_BINDING_STYLE
 * Enumeration for the different wsdl styles. This is used by the Axis
 * engine to identify the web service or client style.
 */
typedef enum {
    /**
     * rpc/encoded binding style
     */
    AXISC_RPC_ENCODED, /*default*/
    
    /**
     * doc/literal binding style
     */
    AXISC_DOC_LITERAL,
    
    /**
     * rpc/literal binding style
     */
    AXISC_RPC_LITERAL
} AXISC_BINDING_STYLE;

#define AXISC_OUT_PARAM 

static const xsdc__boolean xsdc_boolean_true = (xsdc__boolean) 1;
static const xsdc__boolean xsdc_boolean_false = (xsdc__boolean) 0;

/**
 * @enum
 * Enumeration of channel types
 */
typedef enum {
    /**
     * Non-SSL channel
     */
    AXISC_NORMAL_CHANNEL=0,
    
    /**
     * SSL channel
     */
    AXISC_SSL_CHANNEL
} AXISC_CHANNEL_TYPE;

/**
 * @typedef AXISC_XML_String
 * Axis C++ defined type for xml encoded string. This is used only in AnyType.
 */
typedef char* AXISC_XML_String;

/**
 * @struct AxiscAnyType
 * Axis C++ defined type for handling xsd:any.
 */
typedef struct
{
    /**
     * @var _array Contains an array of xml encoded strings.
     */
    AXISC_XML_String* _array;

    /**
     * @var _size Contains how many xml strings are there in _array
     */
    int _size;
} AxiscAnyType;

/**
 * Axis Array implementation.
 */
 
#define AXISC_DEFINED_ARRAY(type) \
    typedef struct {\
        type ** m_Array;\
        int m_Size;\
        AXISC_XSDTYPE m_Type; \
    } type##_Array;

#define AXISC_DEFINED_POINTER_ARRAY(type) \
    typedef struct {\
        type * m_Array;\
        int m_Size;\
        AXISC_XSDTYPE m_Type; \
    } type##_Array;

#define AXISC_DEFINED_ARRAY2(type) \
    typedef struct {\
        AXISCHANDLE m_Array;\
        int m_Size;\
        AXISC_XSDTYPE m_Type; \
    } type##_Array;

typedef struct {
    void** m_Array;
    int m_Size;
    AXISC_XSDTYPE m_Type; \
} Axisc_Array;

AXISC_DEFINED_ARRAY(xsdc__duration) 
AXISC_DEFINED_ARRAY(xsdc__dateTime)
AXISC_DEFINED_ARRAY(xsdc__time)
AXISC_DEFINED_ARRAY(xsdc__date)
AXISC_DEFINED_ARRAY(xsdc__gYearMonth)
AXISC_DEFINED_ARRAY(xsdc__gYear)
AXISC_DEFINED_ARRAY(xsdc__gMonthDay)
AXISC_DEFINED_ARRAY(xsdc__gDay)
AXISC_DEFINED_ARRAY(xsdc__gMonth)
AXISC_DEFINED_POINTER_ARRAY(xsdc__string)
AXISC_DEFINED_POINTER_ARRAY(xsdc__normalizedString)
AXISC_DEFINED_POINTER_ARRAY(xsdc__token)
AXISC_DEFINED_POINTER_ARRAY(xsdc__language)
AXISC_DEFINED_POINTER_ARRAY(xsdc__Name)
AXISC_DEFINED_POINTER_ARRAY(xsdc__NCName)
AXISC_DEFINED_POINTER_ARRAY(xsdc__ID)
AXISC_DEFINED_POINTER_ARRAY(xsdc__IDREF)
AXISC_DEFINED_POINTER_ARRAY(xsdc__IDREFS)
AXISC_DEFINED_POINTER_ARRAY(xsdc__ENTITY)
AXISC_DEFINED_POINTER_ARRAY(xsdc__ENTITIES)
AXISC_DEFINED_POINTER_ARRAY(xsdc__NMTOKEN)
AXISC_DEFINED_POINTER_ARRAY(xsdc__NMTOKENS)
AXISC_DEFINED_ARRAY(xsdc__boolean)
AXISC_DEFINED_ARRAY(xsdc__base64Binary)
AXISC_DEFINED_ARRAY(xsdc__hexBinary)
AXISC_DEFINED_ARRAY(xsdc__float)
AXISC_DEFINED_ARRAY(xsdc__decimal)
AXISC_DEFINED_ARRAY(xsdc__integer)
AXISC_DEFINED_ARRAY(xsdc__nonPositiveInteger)
AXISC_DEFINED_ARRAY(xsdc__negativeInteger)
AXISC_DEFINED_ARRAY(xsdc__long)
AXISC_DEFINED_ARRAY(xsdc__int)
AXISC_DEFINED_ARRAY(xsdc__short)
AXISC_DEFINED_ARRAY(xsdc__byte)
AXISC_DEFINED_ARRAY(xsdc__nonNegativeInteger)
AXISC_DEFINED_ARRAY(xsdc__unsignedLong)
AXISC_DEFINED_ARRAY(xsdc__unsignedInt)
AXISC_DEFINED_ARRAY(xsdc__unsignedByte)
AXISC_DEFINED_ARRAY(xsdc__unsignedShort)
AXISC_DEFINED_ARRAY(xsdc__positiveInteger)
AXISC_DEFINED_ARRAY(xsdc__double)
AXISC_DEFINED_POINTER_ARRAY(xsdc__anyURI)
AXISC_DEFINED_POINTER_ARRAY(xsdc__QName)
AXISC_DEFINED_POINTER_ARRAY(xsdc__NOTATION)
AXISC_DEFINED_POINTER_ARRAY(xsdc__anyType)


#ifdef __cplusplus
  }
#endif

#endif
