/*
 *   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.
 *
 * @author Mark Whitlock
 */

// !!! This include file must be first thing in file !!!
#include "../platforms/PlatformAutoSense.hpp"

#include <axis/Axis.hpp>
#include <axis/AxisUserAPI.hpp>
#include <axis/AxisUserAPIArrays.hpp>

#include "AxisTrace.h"

AXIS_CPP_NAMESPACE_START 

/*
 * xsd_base64Binary, xsd_hexBinary and AnyType probably should own the 
 * storage that they address, in which case their destructors should free it
 * and their copy constructors should new storage. Also the = method would
 * need to be overloaded as well. Also their constructors would need to new
 * storage. The users of these classes would have to be checked to make sure
 * they don't new/delete the storage owned by these classes. Also methods
 * in SoapDeSerializer (for example) copy these classes around which would 
 * invoke these constructors excessively. So instead those methods should 
 * pass these classes around by reference instead. xsd_hexBinary and 
 * xsd__base64Binary are very similar and could share an implementation
 * which they both inherit from. Maybe these classes could have private data
 * and overload the [] operator and size() methods.
 */
xsd__base64Binary::xsd__base64Binary()
{ 
  __ptr = NULL;
  __size = 0;
}

xsd__base64Binary::xsd__base64Binary(const xsd__base64Binary & original)
{
    __ptr = NULL;
    __size = 0;
    *this = original;
}

void xsd__base64Binary::set(xsd__unsignedByte * data, int size)
{
    if (__ptr != NULL)
        delete [] __ptr;

    if (size > 0)
    {
        __ptr = new xsd__unsignedByte[size + 1];
        memcpy(__ptr, data, size * sizeof(xsd__unsignedByte));
        __ptr[size] = '\0';
    }
    else
        __ptr = NULL;

    __size = size;
}

xsd__int xsd__base64Binary::getSize() const
{
    return __size;
}

xsd__unsignedByte * xsd__base64Binary::get(xsd__int & size) const
{
    size = __size;
    return __ptr;
}

xsd__base64Binary & xsd__base64Binary::operator=(const xsd__base64Binary & original)
{
    this->set(original.__ptr, original.__size);
    return *this;
}

xsd__base64Binary::~xsd__base64Binary()
{
    if (__ptr != NULL)
        delete [] __ptr;

    __ptr = NULL;
    __size = 0;
}

xsd__hexBinary::xsd__hexBinary()
{ 
    __ptr = NULL;
    __size = 0;
}

xsd__hexBinary::xsd__hexBinary(const xsd__hexBinary & original)
{
    __ptr = NULL;
    __size = 0;
    *this = original;
}

void xsd__hexBinary::set(xsd__unsignedByte * data, int size)
{
    if (__ptr != NULL)
        delete [] __ptr;

    if (size > 0)
    {
        __ptr = new xsd__unsignedByte[size + 1];
        memcpy(__ptr, data, size * sizeof(xsd__unsignedByte));
        __ptr[size] = '\0';
    }
    else
        __ptr = NULL;

    __size = size;
}

xsd__int xsd__hexBinary::getSize() const
{
    return __size;
}

xsd__unsignedByte * xsd__hexBinary::get(xsd__int & size) const
{
    size = __size;
    return __ptr;
}

xsd__hexBinary & xsd__hexBinary::operator=(const xsd__hexBinary & original)
{
    this->set(original.__ptr, original.__size);
    return *this;
}

xsd__hexBinary::~xsd__hexBinary()
{
    if (__ptr != NULL)
        delete [] __ptr;

    __ptr = NULL;
    __size = 0;
}

AnyType::AnyType() 
{ 
  _array = 0;
  _size = 0;
}

AnyType::~AnyType() 
{ 
    // TODO add code to free storage!
}

Axis_Array::Axis_Array()
{
    m_Array = NULL;
    m_Size = 0;
    m_Type = XSD_UNKNOWN;
    m_belongsToAxisEngine = true;
}

Axis_Array::Axis_Array(const Axis_Array & original)
{
    m_Array = NULL;
    m_Size = 0;
    m_Type = XSD_UNKNOWN;
    m_belongsToAxisEngine = true;
    clone(original);
}

void Axis_Array::clone(const Axis_Array & original)
{
    set(original.m_Array, original.m_Size, original.m_Type);
}

Axis_Array * Axis_Array::clone() const
{
    return new Axis_Array(*this);
}
 
void Axis_Array::set(void** array, int size, XSDTYPE type)
{
    clear();
    
    if (array == NULL)
    	size = 0;
    
    m_Size = size;
    m_Array = NULL;
    m_Type = type;
    m_belongsToAxisEngine = true;
    
    if (size == 0)
        return;

    m_Array = new void*[m_Size];

    for (int count = 0 ; count < m_Size ; count++)
    {
        if ( array[count] == NULL)
        {
            m_Array[count] = NULL;
            continue;
        }

        switch (m_Type)
        {
            case XSD_STRING:
            {
                ((xsd__string*) m_Array)[count] = new char[strlen(((xsd__string*) array)[count])+1];
                strcpy(((xsd__string*) m_Array)[count], ((xsd__string*) array)[count]);
                break;
            }
            case XSD_DURATION:
            {
                ((xsd__duration**) m_Array)[count] = new xsd__duration();
                *((xsd__duration**)m_Array)[count] = *((xsd__duration**) array)[count];
                break;
            }
            case XSD_DATETIME:
            {
                ((xsd__dateTime**) m_Array)[count] = new xsd__dateTime();
                *((xsd__dateTime**)m_Array)[count] = *((xsd__dateTime**) array)[count];
                break;
            }
            case XSD_TIME:
            {
                ((xsd__time**) m_Array)[count] = new xsd__time();
                *((xsd__time**)m_Array)[count] = *((xsd__time**) array)[count];
                break;
            }
            case XSD_DATE:
            {
                ((xsd__date**) m_Array)[count] = new xsd__date();
                *((xsd__date**)m_Array)[count] = *((xsd__date**) array)[count];
                break;
            }
            case XSD_GYEARMONTH:
            {
                ((xsd__gYearMonth**) m_Array)[count] = new xsd__gYearMonth();
                *((xsd__gYearMonth**)m_Array)[count] = *((xsd__gYearMonth**) array)[count];
                break;
            }           
            case XSD_GYEAR:
            {
                ((xsd__gYear**) m_Array)[count] = new xsd__gYear();
                *((xsd__gYear**)m_Array)[count] = *((xsd__gYear**) array)[count];
                break;
            }
            case XSD_GMONTHDAY:
            {
                ((xsd__gMonthDay**) m_Array)[count] = new xsd__gMonthDay();
                *((xsd__gMonthDay**)m_Array)[count] = *((xsd__gMonthDay**) array)[count];
                break;
            }
            case XSD_GDAY:
            {
                ((xsd__gDay**) m_Array)[count] = new xsd__gDay();
                *((xsd__gDay**)m_Array)[count] = *((xsd__gDay**) array)[count];
                break;
            }
            case XSD_GMONTH:
            {
                ((xsd__gMonth**) m_Array)[count] = new xsd__gMonth();
                *((xsd__gMonth**)m_Array)[count] = *((xsd__gMonth**) array)[count];
                break;
            }

            case XSD_NORMALIZEDSTRING:
            {
                ((xsd__normalizedString*) m_Array)[count] = new char[strlen(((xsd__normalizedString*) array)[count])+1];
                strcpy(((xsd__normalizedString*) m_Array)[count], ((xsd__normalizedString*) array)[count]);
                break;
            }
            case XSD_TOKEN:
            {
                ((xsd__token*) m_Array)[count] = new char[strlen(((xsd__token*) array)[count])+1];
                strcpy(((xsd__token*) m_Array)[count], ((xsd__token*) array)[count]);
                break;
            }
            case XSD_LANGUAGE:
            {
                ((xsd__language*) m_Array)[count] = new char[strlen(((xsd__language*) array)[count])+1];
                strcpy(((xsd__language*) m_Array)[count], ((xsd__language*) array)[count]);
                break;
            }
            case XSD_NAME:
            {
                ((xsd__Name*) m_Array)[count] = new char[strlen(((xsd__Name*) array)[count])+1];
                strcpy(((xsd__Name*) m_Array)[count], ((xsd__Name*) array)[count]);
                break;
            }
            case XSD_NCNAME:
            {
                ((xsd__NCName*) m_Array)[count] = new char[strlen(((xsd__NCName*) array)[count])+1];
                strcpy(((xsd__NCName*) m_Array)[count], ((xsd__NCName*) array)[count]);
                break;
            }
            case XSD_ID:
            {
                ((xsd__ID*) m_Array)[count] = new char[strlen(((xsd__ID*) array)[count])+1];
                strcpy(((xsd__ID*) m_Array)[count], ((xsd__ID*) array)[count]);
                break;
            }
            case XSD_IDREF:
            {
                ((xsd__IDREF*) m_Array)[count] = new char[strlen(((xsd__IDREF*) array)[count])+1];
                strcpy(((xsd__IDREF*) m_Array)[count], ((xsd__IDREF*) array)[count]);
                break;
            }
            case XSD_IDREFS:
            {
                ((xsd__IDREFS*) m_Array)[count] = new char[strlen(((xsd__IDREFS*) array)[count])+1];
                strcpy(((xsd__IDREFS*) m_Array)[count], ((xsd__IDREFS*) array)[count]);
                break;
            }
            case XSD_ENTITY:
            {
                ((xsd__ENTITY*) m_Array)[count] = new char[strlen(((xsd__ENTITY*) array)[count])+1];
                strcpy(((xsd__ENTITY*) m_Array)[count], ((xsd__ENTITY*) array)[count]);
                break;
            }
            case XSD_ENTITIES:
            {
                ((xsd__ENTITIES*) m_Array)[count] = new char[strlen(((xsd__ENTITIES*) array)[count])+1];
                strcpy(((xsd__ENTITIES*) m_Array)[count], ((xsd__ENTITIES*) array)[count]);
                break;
            }
            case XSD_NMTOKEN:
            {
                ((xsd__NMTOKEN*) m_Array)[count] = new char[strlen(((xsd__NMTOKEN*) array)[count])+1];
                strcpy(((xsd__NMTOKEN*) m_Array)[count], ((xsd__NMTOKEN*) array)[count]);
                break;
            }
            case XSD_NMTOKENS:
            {
                ((xsd__NMTOKENS*) m_Array)[count] = new char[strlen(((xsd__NMTOKENS*) array)[count])+1];
                strcpy(((xsd__NMTOKENS*) m_Array)[count], ((xsd__NMTOKENS*) array)[count]);
                break;
            }
            case XSD_BOOLEAN:
            {
                ((xsd__boolean**) m_Array)[count] = new xsd__boolean();
                *((xsd__boolean**)m_Array)[count] = *((xsd__boolean**) array)[count];
                break;
            }
            case XSD_BASE64BINARY:
            {
                ((xsd__base64Binary**) m_Array)[count] = new xsd__base64Binary();
                *((xsd__base64Binary**)m_Array)[count] = *((xsd__base64Binary**) array)[count];
                break;
            }
            case XSD_HEXBINARY:
            {
                ((xsd__hexBinary**) m_Array)[count] = new xsd__hexBinary();
                *((xsd__hexBinary**)m_Array)[count] = *((xsd__hexBinary**) array)[count];
                break;
            }
            case XSD_FLOAT:
            {
                ((xsd__float**) m_Array)[count] = new xsd__float();
                *((xsd__float**)m_Array)[count] = *((xsd__float**) array)[count];
                break;
            }
            case XSD_DECIMAL:
            {
                ((xsd__decimal**) m_Array)[count] = new xsd__decimal();
                *((xsd__decimal**)m_Array)[count] = *((xsd__decimal**) array)[count];
                break;
            }
            case XSD_INTEGER:
            {
                ((xsd__integer**) m_Array)[count] = new xsd__integer();
                *((xsd__integer**)m_Array)[count] = *((xsd__integer**) array)[count];
                break;
            }
            case XSD_NONPOSITIVEINTEGER:
            {
                ((xsd__nonPositiveInteger**) m_Array)[count] = new xsd__nonPositiveInteger();
                *((xsd__nonPositiveInteger**)m_Array)[count] = *((xsd__nonPositiveInteger**) array)[count];
                break;
            }
            case XSD_NEGATIVEINTEGER:
            {
                ((xsd__negativeInteger**) m_Array)[count] = new xsd__negativeInteger();
                *((xsd__negativeInteger**)m_Array)[count] = *((xsd__negativeInteger**) array)[count];
                break;
            }
            case XSD_LONG:
            {
                ((xsd__long**) m_Array)[count] = new xsd__long();
                *((xsd__long**)m_Array)[count] = *((xsd__long**) array)[count];
                break;
            }
            case XSD_INT:
            {
                ((xsd__int**) m_Array)[count] = new xsd__int();
                *((xsd__int**)m_Array)[count] = *((xsd__int**) array)[count];
                break;
            }
            case XSD_SHORT:
            {
                ((xsd__short**) m_Array)[count] = new xsd__short();
                *((xsd__short**)m_Array)[count] = *((xsd__short**) array)[count];
                break;
            }
            case XSD_BYTE:
            {
                ((xsd__byte**) m_Array)[count] = new xsd__byte();
                *((xsd__byte**)m_Array)[count] = *((xsd__byte**) array)[count];
                break;
            }
            case XSD_NONNEGATIVEINTEGER:
            {
                ((xsd__nonNegativeInteger**) m_Array)[count] = new xsd__nonNegativeInteger();
                *((xsd__nonNegativeInteger**)m_Array)[count] = *((xsd__nonNegativeInteger**) array)[count];
                break;
            }
            case XSD_UNSIGNEDLONG:
            {
                ((xsd__unsignedLong**) m_Array)[count] = new xsd__unsignedLong();
                *((xsd__unsignedLong**)m_Array)[count] = *((xsd__unsignedLong**) array)[count];
                break;
            }
            case XSD_UNSIGNEDINT:
            {
                ((xsd__unsignedInt**) m_Array)[count] = new xsd__unsignedInt();
                *((xsd__unsignedInt**)m_Array)[count] = *((xsd__unsignedInt**) array)[count];
                break;
            }
            case XSD_UNSIGNEDSHORT:
            {
                ((xsd__unsignedShort**) m_Array)[count] = new xsd__unsignedShort();
                *((xsd__unsignedShort**)m_Array)[count] = *((xsd__unsignedShort**) array)[count];
                break;
            }
            case XSD_UNSIGNEDBYTE:
            {
                ((xsd__unsignedByte**) m_Array)[count] = new xsd__unsignedByte();
                *((xsd__unsignedByte**)m_Array)[count] = *((xsd__unsignedByte**) array)[count];
                break;
            }
            case XSD_POSITIVEINTEGER:
            {
                ((xsd__positiveInteger**) m_Array)[count] = new xsd__positiveInteger();
                *((xsd__positiveInteger**)m_Array)[count] = *((xsd__positiveInteger**) array)[count];
                break;
            }
            case XSD_DOUBLE:
            {
                ((xsd__double**) m_Array)[count] = new xsd__double();
                *((xsd__double**)m_Array)[count] = *((xsd__double**) array)[count];
                break;
            }
            case XSD_ANYURI:
            {
                ((xsd__anyURI*) m_Array)[count] = new char[strlen(((xsd__anyURI*) array)[count])+1];
                strcpy(((xsd__anyURI*) m_Array)[count], ((xsd__anyURI*) array)[count]);
                break;
            }
            case XSD_QNAME:
            {
                ((xsd__QName*) m_Array)[count] = new char[strlen(((xsd__QName*) array)[count])+1];
                strcpy(((xsd__QName*) m_Array)[count], ((xsd__QName*) array)[count]);
                break;
            }
            case XSD_NOTATION:
            {
                ((xsd__NOTATION*) m_Array)[count] = new char[strlen(((xsd__NOTATION*) array)[count])+1];
                strcpy(((xsd__NOTATION*) m_Array)[count], ((xsd__NOTATION*) array)[count]);
                break;
            }
            case XSD_ARRAY:
            {
                ((Axis_Array**) m_Array)[count] = new Axis_Array(*((Axis_Array**) array)[count]);
                break;
            }
            case USER_TYPE:
            {
                m_Array[count] = array[count];
                break;
            }
            case XSD_ANYTYPE:
            {
                ((xsd__anyType*) m_Array)[count] = new char[strlen(((xsd__anyType*) array)[count])+1];
                strcpy(((xsd__anyType*) m_Array)[count], ((xsd__anyType*) array)[count]);
                break;
            }
            case XSD_UNKNOWN:
            case XSD_ANY:
            case ATTACHMENT:
            default:
                break;
        } // end switch
    } // end for loop
}

void** Axis_Array::get(int& size, XSDTYPE& type) const
{
    size = m_Size;
    type = m_Type;
    return m_Array;
}


void Axis_Array::addElement(void* element)
{
    void** temp = new void*[m_Size+1];
    for (int count = 0 ; count < m_Size ; count++ )
        temp[count] = m_Array[count];

    if (m_Array != NULL)
        delete [] m_Array;

    m_Array = temp;
    m_belongsToAxisEngine = true;
 
    if ( element == NULL)
        m_Array[m_Size] = NULL;
    else
    {
        switch (m_Type)
        {
            case XSD_STRING:
            {
                ((xsd__string*) m_Array)[m_Size] = new char[strlen((xsd__string) element)+1];
                strcpy(((xsd__string*) m_Array)[m_Size], (xsd__string) element);
                break;
            }
            case XSD_DURATION:
            {
                ((xsd__duration**) m_Array)[m_Size] = new xsd__duration();
                *((xsd__duration**)m_Array)[m_Size] = *(xsd__duration*) element;
                break;
            }
            case XSD_DATETIME:
            {
                ((xsd__dateTime**) m_Array)[m_Size] = new xsd__dateTime();
                *((xsd__dateTime**)m_Array)[m_Size] = *(xsd__dateTime*) element;
                break;
            }
            case XSD_TIME:
            {
                ((xsd__time**) m_Array)[m_Size] = new xsd__time();
                *((xsd__time**)m_Array)[m_Size] = *(xsd__time*) element;
                break;
            }
            case XSD_DATE:
            {
                ((xsd__date**) m_Array)[m_Size] = new xsd__date();
                *((xsd__date**)m_Array)[m_Size] = *(xsd__date*) element;
                break;
            }
            case XSD_GYEARMONTH:
            {
                ((xsd__gYearMonth**) m_Array)[m_Size] = new xsd__gYearMonth();
                *((xsd__gYearMonth**)m_Array)[m_Size] = *(xsd__gYearMonth*) element;
                break;
            }           
            case XSD_GYEAR:
            {
                ((xsd__gYear**) m_Array)[m_Size] = new xsd__gYear();
                *((xsd__gYear**)m_Array)[m_Size] = *(xsd__gYear*) element;
                break;
            }
            case XSD_GMONTHDAY:
            {
                ((xsd__gMonthDay**) m_Array)[m_Size] = new xsd__gMonthDay();
                *((xsd__gMonthDay**)m_Array)[m_Size] = *(xsd__gMonthDay*) element;
                break;
            }
            case XSD_GDAY:
            {
                ((xsd__gDay**) m_Array)[m_Size] = new xsd__gDay();
                *((xsd__gDay**)m_Array)[m_Size] = *(xsd__gDay*) element;
                break;
            }
            case XSD_GMONTH:
            {
                ((xsd__gMonth**) m_Array)[m_Size] = new xsd__gMonth();
                *((xsd__gMonth**)m_Array)[m_Size] = *(xsd__gMonth*) element;
                break;
            }

            case XSD_NORMALIZEDSTRING:
            {
                ((xsd__normalizedString*) m_Array)[m_Size] = new char[strlen((xsd__normalizedString) element)+1];
                strcpy(((xsd__normalizedString*) m_Array)[m_Size], (xsd__normalizedString) element);
                break;
            }
            case XSD_TOKEN:
            {
                ((xsd__token*) m_Array)[m_Size] = new char[strlen((xsd__token) element)+1];
                strcpy(((xsd__token*) m_Array)[m_Size], (xsd__token) element);
                break;
            }
            case XSD_LANGUAGE:
            {
                ((xsd__language*) m_Array)[m_Size] = new char[strlen((xsd__language) element)+1];
                strcpy(((xsd__language*) m_Array)[m_Size], (xsd__language) element);
                break;
            }
            case XSD_NAME:
            {
                ((xsd__Name*) m_Array)[m_Size] = new char[strlen((xsd__Name) element)+1];
                strcpy(((xsd__Name*) m_Array)[m_Size], (xsd__Name) element);
                break;
            }
            case XSD_NCNAME:
            {
                ((xsd__NCName*) m_Array)[m_Size] = new char[strlen((xsd__NCName) element)+1];
                strcpy(((xsd__NCName*) m_Array)[m_Size], (xsd__NCName) element);
                break;
            }
            case XSD_ID:
            {
                ((xsd__ID*) m_Array)[m_Size] = new char[strlen((xsd__ID) element)+1];
                strcpy(((xsd__ID*) m_Array)[m_Size], (xsd__ID) element);
                break;
            }
            case XSD_IDREF:
            {
                ((xsd__IDREF*) m_Array)[m_Size] = new char[strlen((xsd__IDREF) element)+1];
                strcpy(((xsd__IDREF*) m_Array)[m_Size], (xsd__IDREF) element);
                break;
            }
            case XSD_IDREFS:
            {
                ((xsd__IDREFS*) m_Array)[m_Size] = new char[strlen((xsd__IDREFS) element)+1];
                strcpy(((xsd__IDREFS*) m_Array)[m_Size], (xsd__IDREFS) element);
                break;
            }
            case XSD_ENTITY:
            {
                ((xsd__ENTITY*) m_Array)[m_Size] = new char[strlen((xsd__ENTITY) element)+1];
                strcpy(((xsd__ENTITY*) m_Array)[m_Size], (xsd__ENTITY) element);
                break;
            }
            case XSD_ENTITIES:
            {
                ((xsd__ENTITIES*) m_Array)[m_Size] = new char[strlen((xsd__ENTITIES) element)+1];
                strcpy(((xsd__ENTITIES*) m_Array)[m_Size], (xsd__ENTITIES) element);
                break;
            }
            case XSD_NMTOKEN:
            {
                ((xsd__NMTOKEN*) m_Array)[m_Size] = new char[strlen((xsd__NMTOKEN) element)+1];
                strcpy(((xsd__NMTOKEN*) m_Array)[m_Size], (xsd__NMTOKEN) element);
                break;
            }
            case XSD_NMTOKENS:
            {
                ((xsd__NMTOKENS*) m_Array)[m_Size] = new char[strlen((xsd__NMTOKENS) element)+1];
                strcpy(((xsd__NMTOKENS*) m_Array)[m_Size], (xsd__NMTOKENS) element);
                break;
            }
            case XSD_BOOLEAN:
            {
                ((xsd__boolean**) m_Array)[m_Size] = new xsd__boolean();
                *((xsd__boolean**)m_Array)[m_Size] = *(xsd__boolean*) element;
                break;
            }
            case XSD_BASE64BINARY:
            {
                ((xsd__base64Binary**) m_Array)[m_Size] = new xsd__base64Binary();
                *((xsd__base64Binary**)m_Array)[m_Size] = *(xsd__base64Binary*) element;
                break;
            }
            case XSD_HEXBINARY:
            {
                ((xsd__hexBinary**) m_Array)[m_Size] = new xsd__hexBinary();
                *((xsd__hexBinary**)m_Array)[m_Size] = *(xsd__hexBinary*) element;
                break;
            }
            case XSD_FLOAT:
            {
                ((xsd__float**) m_Array)[m_Size] = new xsd__float();
                *((xsd__float**)m_Array)[m_Size] = *(xsd__float*) element;
                break;
            }
            case XSD_DECIMAL:
            {
                ((xsd__decimal**) m_Array)[m_Size] = new xsd__decimal();
                *((xsd__decimal**)m_Array)[m_Size] = *(xsd__decimal*) element;
                break;
            }
            case XSD_INTEGER:
            {
                ((xsd__integer**) m_Array)[m_Size] = new xsd__integer();
                *((xsd__integer**)m_Array)[m_Size] = *(xsd__integer*) element;
                break;
            }
            case XSD_NONPOSITIVEINTEGER:
            {
                ((xsd__nonPositiveInteger**) m_Array)[m_Size] = new xsd__nonPositiveInteger();
                *((xsd__nonPositiveInteger**)m_Array)[m_Size] = *(xsd__nonPositiveInteger*) element;
                break;
            }
            case XSD_NEGATIVEINTEGER:
            {
                ((xsd__negativeInteger**) m_Array)[m_Size] = new xsd__negativeInteger();
                *((xsd__negativeInteger**)m_Array)[m_Size] = *(xsd__negativeInteger*) element;
                break;
            }
            case XSD_LONG:
            {
                ((xsd__long**) m_Array)[m_Size] = new xsd__long();
                *((xsd__long**)m_Array)[m_Size] = *(xsd__long*) element;
                break;
            }
            case XSD_INT:
            {
                ((xsd__int**) m_Array)[m_Size] = new xsd__int();
                *((xsd__int**)m_Array)[m_Size] = *(xsd__int*) element;
                break;
            }
            case XSD_SHORT:
            {
                ((xsd__short**) m_Array)[m_Size] = new xsd__short();
                *((xsd__short**)m_Array)[m_Size] = *(xsd__short*) element;
                break;
            }
            case XSD_BYTE:
            {
                ((xsd__byte**) m_Array)[m_Size] = new xsd__byte();
                *((xsd__byte**)m_Array)[m_Size] = *(xsd__byte*) element;
                break;
            }
            case XSD_NONNEGATIVEINTEGER:
            {
                ((xsd__nonNegativeInteger**) m_Array)[m_Size] = new xsd__nonNegativeInteger();
                *((xsd__nonNegativeInteger**)m_Array)[m_Size] = *(xsd__nonNegativeInteger*) element;
                break;
            }
            case XSD_UNSIGNEDLONG:
            {
                ((xsd__unsignedLong**) m_Array)[m_Size] = new xsd__unsignedLong();
                *((xsd__unsignedLong**)m_Array)[m_Size] = *(xsd__unsignedLong*) element;
                break;
            }
            case XSD_UNSIGNEDINT:
            {
                ((xsd__unsignedInt**) m_Array)[m_Size] = new xsd__unsignedInt();
                *((xsd__unsignedInt**)m_Array)[m_Size] = *(xsd__unsignedInt*) element;
                break;
            }
            case XSD_UNSIGNEDSHORT:
            {
                ((xsd__unsignedShort**) m_Array)[m_Size] = new xsd__unsignedShort();
                *((xsd__unsignedShort**)m_Array)[m_Size] = *(xsd__unsignedShort*) element;
                break;
            }
            case XSD_UNSIGNEDBYTE:
            {
                ((xsd__unsignedByte**) m_Array)[m_Size] = new xsd__unsignedByte();
                *((xsd__unsignedByte**)m_Array)[m_Size] = *(xsd__unsignedByte*) element;
                break;
            }
            case XSD_POSITIVEINTEGER:
            {
                ((xsd__positiveInteger**) m_Array)[m_Size] = new xsd__positiveInteger();
                *((xsd__positiveInteger**)m_Array)[m_Size] = *(xsd__positiveInteger*) element;
                break;
            }
            case XSD_DOUBLE:
            {
                ((xsd__double**) m_Array)[m_Size] = new xsd__double();
                *((xsd__double**)m_Array)[m_Size] = *(xsd__double*) element;
                break;
            }
            case XSD_ANYURI:
            {
                ((xsd__anyURI*) m_Array)[m_Size] = new char[strlen((xsd__anyURI) element)+1];
                strcpy(((xsd__anyURI*) m_Array)[m_Size], (xsd__anyURI) element);
                break;
            }
            case XSD_QNAME:
            {
                ((xsd__QName*) m_Array)[m_Size] = new char[strlen((xsd__QName) element)+1];
                strcpy(((xsd__QName*) m_Array)[m_Size], (xsd__QName) element);
                break;
            }
            case XSD_NOTATION:
            {
                ((xsd__NOTATION*) m_Array)[m_Size] = new char[strlen((xsd__NOTATION) element)+1];
                strcpy(((xsd__NOTATION*) m_Array)[m_Size], (xsd__NOTATION) element);
                break;
            }
            case XSD_ARRAY:
            {
                ((Axis_Array**) m_Array)[m_Size] = new Axis_Array(*(Axis_Array*) element);
                break;
            }
            case USER_TYPE:
            {
                m_Array[m_Size] = element;
                break;
            }
            case XSD_ANYTYPE:
            {
                ((xsd__anyType*) m_Array)[m_Size] = new char[strlen((xsd__anyType) element)+1];
                strcpy(((xsd__anyType*) m_Array)[m_Size], (xsd__anyType) element);
                break;
            }
            case XSD_UNKNOWN:
            case XSD_ANY:
            case ATTACHMENT:
            default:
                break;
        }
    }
    m_Size++;
}

Axis_Array::~Axis_Array()
{
    clear();
}

void Axis_Array::clear()
{ 
    if (m_Array == NULL)
        return;

    if (m_Size > 0)
    {
        for (int count = 0 ; count < m_Size ; count++)
            if (m_Array[count] != NULL)
                Axis::AxisDelete(m_Array[count], m_Type);

        m_Size = 0;
    }
    
    if (m_belongsToAxisEngine == true)
        delete [] m_Array;
    else
    {   
        // Warning!!  This could introduce memory leaks if used incorrectly!!!
        m_Array = NULL;
        m_belongsToAxisEngine = true;
    }
}

xsd__duration_Array::xsd__duration_Array()
{
    m_Type = XSD_DURATION;
}

xsd__duration_Array::xsd__duration_Array(const xsd__duration_Array & original)
{
    if (original.m_Type == XSD_DURATION)
        clone(original);
}

xsd__duration_Array::~xsd__duration_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__duration_Array::set(xsd__duration** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_DURATION);
}

const xsd__duration** xsd__duration_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__duration**) Axis_Array::get(size, type);
}

xsd__dateTime_Array::xsd__dateTime_Array()
{
    m_Type = XSD_DATETIME;
}

xsd__dateTime_Array::xsd__dateTime_Array(const xsd__dateTime_Array & original)
{
    if (original.m_Type == XSD_DATETIME)
        clone(original);
}

xsd__dateTime_Array::~xsd__dateTime_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__dateTime_Array::set(xsd__dateTime** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_DATETIME);
}

const xsd__dateTime** xsd__dateTime_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__dateTime**) Axis_Array::get(size, type);
}

xsd__time_Array::xsd__time_Array()
{
    m_Type = XSD_TIME;
}

xsd__time_Array::xsd__time_Array(const xsd__time_Array & original)
{
    if (original.m_Type == XSD_TIME)
        clone(original);
}

xsd__time_Array::~xsd__time_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__time_Array::set(xsd__time** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_TIME);
}

const xsd__time** xsd__time_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__time**) Axis_Array::get(size, type);
}

xsd__date_Array::xsd__date_Array()
{
    m_Type = XSD_DATE;
}

xsd__date_Array::xsd__date_Array(const xsd__date_Array & original)
{
    if (original.m_Type == XSD_DATE)
        clone(original);
}

xsd__date_Array::~xsd__date_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__date_Array::set(xsd__date** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_DATE);
}

const xsd__date** xsd__date_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__date**) Axis_Array::get(size, type);
}

xsd__gYearMonth_Array::xsd__gYearMonth_Array()
{
    m_Type = XSD_GYEARMONTH;
}

xsd__gYearMonth_Array::xsd__gYearMonth_Array(const xsd__gYearMonth_Array & original)
{
    if (original.m_Type == XSD_GYEARMONTH)
        clone(original);
}

xsd__gYearMonth_Array::~xsd__gYearMonth_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__gYearMonth_Array::set(xsd__gYearMonth** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_GYEARMONTH);
}

const xsd__gYearMonth** xsd__gYearMonth_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__gYearMonth**) Axis_Array::get(size, type);
}

xsd__gYear_Array::xsd__gYear_Array()
{
    m_Type = XSD_GYEAR;
}

xsd__gYear_Array::xsd__gYear_Array(const xsd__gYear_Array & original)
{
    if (original.m_Type == XSD_GYEAR)
        clone(original);
}

xsd__gYear_Array::~xsd__gYear_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__gYear_Array::set(xsd__gYear** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_GYEAR);
}

const xsd__gYear** xsd__gYear_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__gYear**) Axis_Array::get(size, type);
}

xsd__gMonthDay_Array::xsd__gMonthDay_Array()
{
    m_Type = XSD_GMONTHDAY;
}

xsd__gMonthDay_Array::xsd__gMonthDay_Array(const xsd__gMonthDay_Array & original)
{
    if (original.m_Type == XSD_GMONTHDAY)
        clone(original);
}

xsd__gMonthDay_Array::~xsd__gMonthDay_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__gMonthDay_Array::set(xsd__gMonthDay** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_GMONTHDAY);
}

const xsd__gMonthDay** xsd__gMonthDay_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__gMonthDay**) Axis_Array::get(size, type);
}

xsd__gMonth_Array::xsd__gMonth_Array()
{
    m_Type = XSD_GMONTH;
}

xsd__gMonth_Array::xsd__gMonth_Array(const xsd__gMonth_Array & original)
{
    if (original.m_Type == XSD_GMONTH)
        clone(original);
}

xsd__gMonth_Array::~xsd__gMonth_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__gMonth_Array::set(xsd__gMonth** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_GMONTH);
}

const xsd__gMonth** xsd__gMonth_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__gMonth**) Axis_Array::get(size, type);
}

xsd__gDay_Array::xsd__gDay_Array()
{
    m_Type = XSD_GDAY;
}

xsd__gDay_Array::xsd__gDay_Array(const xsd__gDay_Array & original)
{
    if (original.m_Type == XSD_GDAY)
        clone(original);
}

xsd__gDay_Array::~xsd__gDay_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__gDay_Array::set(xsd__gDay** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_GDAY);
}

const xsd__gDay** xsd__gDay_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__gDay**) Axis_Array::get(size, type);
}

xsd__string_Array::xsd__string_Array()
{
    m_Type = XSD_STRING;
}

xsd__string_Array::xsd__string_Array(const xsd__string_Array & original)
{
    if (original.m_Type == XSD_STRING)
        clone(original);
}

xsd__string_Array::~xsd__string_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__string_Array::set(xsd__string* array, int size)
{
    Axis_Array::set((void**)array, size, XSD_STRING);
}

const xsd__string* xsd__string_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__string*) Axis_Array::get(size, type);
}

xsd__normalizedString_Array::xsd__normalizedString_Array()
{
    m_Type = XSD_NORMALIZEDSTRING;
}

xsd__normalizedString_Array::xsd__normalizedString_Array(const xsd__normalizedString_Array & original)
{
    if (original.m_Type == XSD_NORMALIZEDSTRING)
        clone(original);
}

xsd__normalizedString_Array::~xsd__normalizedString_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__normalizedString_Array::set(xsd__normalizedString* array, int size)
{
    Axis_Array::set((void**)array, size, XSD_NORMALIZEDSTRING);
}

const xsd__normalizedString* xsd__normalizedString_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__normalizedString*) Axis_Array::get(size, type);
}

xsd__token_Array::xsd__token_Array()
{
    m_Type = XSD_TOKEN;
}

xsd__token_Array::xsd__token_Array(const xsd__token_Array & original)
{
    if (original.m_Type == XSD_TOKEN)
        clone(original);
}

xsd__token_Array::~xsd__token_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__token_Array::set(xsd__token* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_TOKEN);
}

const xsd__token* xsd__token_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__token*) Axis_Array::get(size, type);
}

xsd__language_Array::xsd__language_Array()
{
    m_Type = XSD_LANGUAGE;
}

xsd__language_Array::xsd__language_Array(const xsd__language_Array & original)
{
    if (original.m_Type == XSD_LANGUAGE)
        clone(original);
}

xsd__language_Array::~xsd__language_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__language_Array::set(xsd__language* array, int size)
{
    Axis_Array::set((void**)array, size, XSD_LANGUAGE);
}

const xsd__language* xsd__language_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__language*) Axis_Array::get(size, type);
}

xsd__Name_Array::xsd__Name_Array()
{
    m_Type = XSD_NAME;
}

xsd__Name_Array::xsd__Name_Array(const xsd__Name_Array & original)
{
    if (original.m_Type == XSD_NAME)
        clone(original);
}

xsd__Name_Array::~xsd__Name_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__Name_Array::set(xsd__Name* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_NAME);
}

const xsd__Name* xsd__Name_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__Name*) Axis_Array::get(size, type);
}

xsd__NCName_Array::xsd__NCName_Array()
{
    m_Type = XSD_NCNAME;
}

xsd__NCName_Array::xsd__NCName_Array(const xsd__NCName_Array & original)
{
    if (original.m_Type == XSD_NCNAME)
        clone(original);
}

xsd__NCName_Array::~xsd__NCName_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__NCName_Array::set(xsd__NCName* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_NCNAME);
}

const xsd__NCName* xsd__NCName_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__NCName*) Axis_Array::get(size, type);
}

xsd__ID_Array::xsd__ID_Array()
{
    m_Type = XSD_ID;
}

xsd__ID_Array::xsd__ID_Array(const xsd__ID_Array & original)
{
    if (original.m_Type == XSD_ID)
        clone(original);
}

xsd__ID_Array::~xsd__ID_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__ID_Array::set(xsd__ID* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_ID);
}

const xsd__ID* xsd__ID_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__ID*) Axis_Array::get(size, type);
}

xsd__IDREF_Array::xsd__IDREF_Array()
{
    m_Type = XSD_IDREF;
}

xsd__IDREF_Array::xsd__IDREF_Array(const xsd__IDREF_Array & original)
{
    if (original.m_Type == XSD_IDREF)
        clone(original);
}

xsd__IDREF_Array::~xsd__IDREF_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__IDREF_Array::set(xsd__IDREF* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_IDREF);
}

const xsd__IDREF* xsd__IDREF_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__IDREF*) Axis_Array::get(size, type);
}

xsd__IDREFS_Array::xsd__IDREFS_Array()
{
    m_Type = XSD_IDREFS;
}

xsd__IDREFS_Array::xsd__IDREFS_Array(const xsd__IDREFS_Array & original)
{
    if (original.m_Type == XSD_IDREFS)
        clone(original);
}

xsd__IDREFS_Array::~xsd__IDREFS_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__IDREFS_Array::set(xsd__IDREFS* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_IDREFS);
}

const xsd__IDREFS* xsd__IDREFS_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__IDREFS*) Axis_Array::get(size, type);
}

xsd__ENTITY_Array::xsd__ENTITY_Array()
{
    m_Type = XSD_ENTITY;
}

xsd__ENTITY_Array::xsd__ENTITY_Array(const xsd__ENTITY_Array & original)
{
    if (original.m_Type == XSD_ENTITY)
        clone(original);
}

xsd__ENTITY_Array::~xsd__ENTITY_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__ENTITY_Array::set(xsd__ENTITY* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_ENTITY);
}

const xsd__ENTITY* xsd__ENTITY_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__ENTITY*) Axis_Array::get(size, type);
}

xsd__ENTITIES_Array::xsd__ENTITIES_Array()
{
    m_Type = XSD_ENTITIES;
}

xsd__ENTITIES_Array::xsd__ENTITIES_Array(const xsd__ENTITIES_Array & original)
{
    if (original.m_Type == XSD_ENTITIES)
        clone(original);
}

xsd__ENTITIES_Array::~xsd__ENTITIES_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__ENTITIES_Array::set(xsd__ENTITIES* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_ENTITIES);
}

const xsd__ENTITIES* xsd__ENTITIES_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__ENTITIES*) Axis_Array::get(size, type);
}

xsd__NMTOKEN_Array::xsd__NMTOKEN_Array()
{
    m_Type = XSD_NMTOKEN;
}

xsd__NMTOKEN_Array::xsd__NMTOKEN_Array(const xsd__NMTOKEN_Array & original)
{
    if (original.m_Type == XSD_NMTOKEN)
        clone(original);
}

xsd__NMTOKEN_Array::~xsd__NMTOKEN_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__NMTOKEN_Array::set(xsd__NMTOKEN* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_NMTOKEN);
}

const xsd__NMTOKEN* xsd__NMTOKEN_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__NMTOKEN*) Axis_Array::get(size, type);
}

xsd__NMTOKENS_Array::xsd__NMTOKENS_Array()
{
    m_Type = XSD_NMTOKEN;
}

xsd__NMTOKENS_Array::xsd__NMTOKENS_Array(const xsd__NMTOKENS_Array & original)
{
    if (original.m_Type == XSD_NMTOKEN)
        clone(original);
}

xsd__NMTOKENS_Array::~xsd__NMTOKENS_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__NMTOKENS_Array::set(xsd__NMTOKENS* array, int size)
{
 Axis_Array::set((void**)array, size, XSD_NMTOKEN);
}

const xsd__NMTOKENS* xsd__NMTOKENS_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__NMTOKENS*) Axis_Array::get(size, type);
}

xsd__boolean_Array::xsd__boolean_Array()
{
    m_Type = XSD_BOOLEAN;
}

xsd__boolean_Array::xsd__boolean_Array(const xsd__boolean_Array & original)
{
    if (original.m_Type == XSD_BOOLEAN)
        clone(original);
}

xsd__boolean_Array::~xsd__boolean_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__boolean_Array::set(xsd__boolean** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_BOOLEAN);
}

const xsd__boolean** xsd__boolean_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__boolean**) Axis_Array::get(size, type);
}

xsd__base64Binary_Array::xsd__base64Binary_Array()
{
    m_Type = XSD_BASE64BINARY;
}

xsd__base64Binary_Array::xsd__base64Binary_Array(const xsd__base64Binary_Array & original)
{
    if (original.m_Type == XSD_BASE64BINARY)
        clone(original);
}

xsd__base64Binary_Array::~xsd__base64Binary_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__base64Binary_Array::set(xsd__base64Binary** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_BASE64BINARY);
}

const xsd__base64Binary** xsd__base64Binary_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__base64Binary**) Axis_Array::get(size, type);
}

xsd__hexBinary_Array::xsd__hexBinary_Array()
{
    m_Type = XSD_HEXBINARY;
}

xsd__hexBinary_Array::xsd__hexBinary_Array(const xsd__hexBinary_Array & original)
{
    if (original.m_Type == XSD_HEXBINARY)
        clone(original);
}

xsd__hexBinary_Array::~xsd__hexBinary_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__hexBinary_Array::set(xsd__hexBinary** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_HEXBINARY);
}

const xsd__hexBinary** xsd__hexBinary_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__hexBinary**) Axis_Array::get(size, type);
}

xsd__float_Array::xsd__float_Array()
{
    m_Type = XSD_FLOAT;
}

xsd__float_Array::xsd__float_Array(const xsd__float_Array & original)
{
    if (original.m_Type == XSD_FLOAT)
        clone(original);
}

xsd__float_Array::~xsd__float_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__float_Array::set(xsd__float** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_FLOAT);
}

const xsd__float** xsd__float_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__float**) Axis_Array::get(size, type);
}

xsd__decimal_Array::xsd__decimal_Array()
{
    m_Type = XSD_DECIMAL;
}

xsd__decimal_Array::xsd__decimal_Array(const xsd__decimal_Array & original)
{
    if (original.m_Type == XSD_DECIMAL)
        clone(original);
}

xsd__decimal_Array::~xsd__decimal_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__decimal_Array::set(xsd__decimal** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_DECIMAL);
}

const xsd__decimal** xsd__decimal_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__decimal**) Axis_Array::get(size, type);
}

xsd__integer_Array::xsd__integer_Array()
{
    m_Type = XSD_INTEGER;
}

xsd__integer_Array::xsd__integer_Array(const xsd__integer_Array & original)
{
    if (original.m_Type == XSD_INTEGER)
        clone(original);
}

xsd__integer_Array::~xsd__integer_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__integer_Array::set(xsd__integer** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_INTEGER);
}

const xsd__integer** xsd__integer_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__integer**) Axis_Array::get(size, type);
}

xsd__nonPositiveInteger_Array::xsd__nonPositiveInteger_Array()
{
    m_Type = XSD_NONPOSITIVEINTEGER;
}

xsd__nonPositiveInteger_Array::xsd__nonPositiveInteger_Array(const xsd__nonPositiveInteger_Array & original)
{
    if (original.m_Type == XSD_NONPOSITIVEINTEGER)
        clone(original);
}

xsd__nonPositiveInteger_Array::~xsd__nonPositiveInteger_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__nonPositiveInteger_Array::set(xsd__nonPositiveInteger** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_NONPOSITIVEINTEGER);
}

const xsd__nonPositiveInteger** xsd__nonPositiveInteger_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__nonPositiveInteger**) Axis_Array::get(size, type);
}

xsd__negativeInteger_Array::xsd__negativeInteger_Array()
{
    m_Type = XSD_NEGATIVEINTEGER;
}

xsd__negativeInteger_Array::xsd__negativeInteger_Array(const xsd__negativeInteger_Array & original)
{
    if (original.m_Type == XSD_NEGATIVEINTEGER)
        clone(original);
}

xsd__negativeInteger_Array::~xsd__negativeInteger_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__negativeInteger_Array::set(xsd__negativeInteger** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_NEGATIVEINTEGER);
}

const xsd__negativeInteger** xsd__negativeInteger_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__negativeInteger**) Axis_Array::get(size, type);
}

xsd__long_Array::xsd__long_Array()
{
    m_Type = XSD_LONG;
}

xsd__long_Array::xsd__long_Array(const xsd__long_Array & original)
{
    if (original.m_Type == XSD_LONG)
        clone(original);
}

xsd__long_Array::~xsd__long_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__long_Array::set(xsd__long** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_LONG);
}

const xsd__long** xsd__long_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__long**) Axis_Array::get(size, type);
}

xsd__int_Array::xsd__int_Array()
{
    m_Type = XSD_INT;
}

xsd__int_Array::xsd__int_Array(const xsd__int_Array & original)
{
    if (original.m_Type == XSD_INT)
        clone(original);
}

xsd__int_Array::~xsd__int_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__int_Array::set(xsd__int** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_INT);
}

const xsd__int** xsd__int_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__int**) Axis_Array::get(size, type);
}

xsd__short_Array::xsd__short_Array()
{
    m_Type = XSD_SHORT;
}

xsd__short_Array::xsd__short_Array(const xsd__short_Array & original)
{
    if (original.m_Type == XSD_SHORT)
        clone(original);
}

xsd__short_Array::~xsd__short_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__short_Array::set(xsd__short** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_SHORT);
}

const xsd__short** xsd__short_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__short**) Axis_Array::get(size, type);
}

xsd__byte_Array::xsd__byte_Array()
{
    m_Type = XSD_BYTE;
}

xsd__byte_Array::xsd__byte_Array(const xsd__byte_Array & original)
{
    if (original.m_Type == XSD_BYTE)
        clone(original);
}

xsd__byte_Array::~xsd__byte_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__byte_Array::set(xsd__byte** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_BYTE);
}

const xsd__byte** xsd__byte_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__byte**) Axis_Array::get(size, type);
}

xsd__nonNegativeInteger_Array::xsd__nonNegativeInteger_Array()
{
    m_Type = XSD_NONNEGATIVEINTEGER;
}

xsd__nonNegativeInteger_Array::xsd__nonNegativeInteger_Array(const xsd__nonNegativeInteger_Array & original)
{
    if (original.m_Type == XSD_NONNEGATIVEINTEGER)
        clone(original);
}

xsd__nonNegativeInteger_Array::~xsd__nonNegativeInteger_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__nonNegativeInteger_Array::set(xsd__nonNegativeInteger** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_NONNEGATIVEINTEGER);
}

const xsd__nonNegativeInteger** xsd__nonNegativeInteger_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__nonNegativeInteger**) Axis_Array::get(size, type);
}

xsd__unsignedLong_Array::xsd__unsignedLong_Array()
{
    m_Type = XSD_UNSIGNEDLONG;
}

xsd__unsignedLong_Array::xsd__unsignedLong_Array(const xsd__unsignedLong_Array & original)
{
    if (original.m_Type == XSD_UNSIGNEDLONG)
        clone(original);
}

xsd__unsignedLong_Array::~xsd__unsignedLong_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__unsignedLong_Array::set(xsd__unsignedLong** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_UNSIGNEDLONG);
}

const xsd__unsignedLong** xsd__unsignedLong_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__unsignedLong**) Axis_Array::get(size, type);
}

xsd__unsignedInt_Array::xsd__unsignedInt_Array()
{
    m_Type = XSD_UNSIGNEDINT;
}

xsd__unsignedInt_Array::xsd__unsignedInt_Array(const xsd__unsignedInt_Array & original)
{
    if (original.m_Type == XSD_UNSIGNEDINT)
        clone(original);
}

xsd__unsignedInt_Array::~xsd__unsignedInt_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__unsignedInt_Array::set(xsd__unsignedInt** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_UNSIGNEDINT);
}

const xsd__unsignedInt** xsd__unsignedInt_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__unsignedInt**) Axis_Array::get(size, type);
}

xsd__unsignedShort_Array::xsd__unsignedShort_Array()
{
    m_Type = XSD_UNSIGNEDSHORT;
}

xsd__unsignedShort_Array::xsd__unsignedShort_Array(const xsd__unsignedShort_Array & original)
{
    if (original.m_Type == XSD_UNSIGNEDSHORT)
        clone(original);
}

xsd__unsignedShort_Array::~xsd__unsignedShort_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__unsignedShort_Array::set(xsd__unsignedShort** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_UNSIGNEDSHORT);
}

const xsd__unsignedShort** xsd__unsignedShort_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__unsignedShort**) Axis_Array::get(size, type);
}

xsd__unsignedByte_Array::xsd__unsignedByte_Array()
{
    m_Type = XSD_UNSIGNEDBYTE;
}

xsd__unsignedByte_Array::xsd__unsignedByte_Array(const xsd__unsignedByte_Array & original)
{
    if (original.m_Type == XSD_UNSIGNEDBYTE)
        clone(original);
}

xsd__unsignedByte_Array::~xsd__unsignedByte_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__unsignedByte_Array::set(xsd__unsignedByte** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_UNSIGNEDBYTE);
}

const xsd__unsignedByte** xsd__unsignedByte_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__unsignedByte**) Axis_Array::get(size, type);
}

xsd__positiveInteger_Array::xsd__positiveInteger_Array()
{
    m_Type = XSD_POSITIVEINTEGER;
}

xsd__positiveInteger_Array::xsd__positiveInteger_Array(const xsd__positiveInteger_Array & original)
{
    if (original.m_Type == XSD_POSITIVEINTEGER)
        clone(original);
}

xsd__positiveInteger_Array::~xsd__positiveInteger_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__positiveInteger_Array::set(xsd__positiveInteger** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_POSITIVEINTEGER);
}

const xsd__positiveInteger** xsd__positiveInteger_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__positiveInteger**) Axis_Array::get(size, type);
}

xsd__double_Array::xsd__double_Array()
{
    m_Type = XSD_DOUBLE;
}

xsd__double_Array::xsd__double_Array(const xsd__double_Array & original)
{
    if (original.m_Type == XSD_DOUBLE)
        clone(original);
}

xsd__double_Array::~xsd__double_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__double_Array::set(xsd__double** array, int size)
{
    Axis_Array::set((void**)array, size, XSD_DOUBLE);
}

const xsd__double** xsd__double_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__double**) Axis_Array::get(size, type);
}

xsd__anyURI_Array::xsd__anyURI_Array()
{
    m_Type = XSD_ANYURI;
}

xsd__anyURI_Array::xsd__anyURI_Array(const xsd__anyURI_Array & original)
{
    if (original.m_Type == XSD_ANYURI)
        clone(original);
}

xsd__anyURI_Array::~xsd__anyURI_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__anyURI_Array::set(xsd__anyURI* array, int size)
{
    Axis_Array::set((void**)array, size, XSD_ANYURI);
}

const xsd__anyURI* xsd__anyURI_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__anyURI*) Axis_Array::get(size, type);
}

xsd__QName_Array::xsd__QName_Array()
{
    m_Type = XSD_QNAME;
}

xsd__QName_Array::xsd__QName_Array(const xsd__QName_Array & original)
{
    if (original.m_Type == XSD_QNAME)
        clone(original);
}

xsd__QName_Array::~xsd__QName_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__QName_Array::set(xsd__QName* array, int size)
{
    Axis_Array::set((void**)array, size, XSD_QNAME);
}

const xsd__QName* xsd__QName_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__QName*) Axis_Array::get(size, type);
}

xsd__NOTATION_Array::xsd__NOTATION_Array()
{
    m_Type = XSD_NOTATION;
}

xsd__NOTATION_Array::xsd__NOTATION_Array(const xsd__NOTATION_Array & original)
{
    if (original.m_Type == XSD_NOTATION)
        clone(original);
}

xsd__NOTATION_Array::~xsd__NOTATION_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__NOTATION_Array::set(xsd__NOTATION* array, int size)
{
    Axis_Array::set((void**)array, size, XSD_NOTATION);
}

const xsd__NOTATION* xsd__NOTATION_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__NOTATION*) Axis_Array::get(size, type);
}


xsd__anyType_Array::xsd__anyType_Array()
{
    m_Type = XSD_ANYTYPE;
}

xsd__anyType_Array::xsd__anyType_Array(const xsd__anyType_Array & original)
{
    if (original.m_Type == XSD_ANYTYPE)
        clone(original);
}

xsd__anyType_Array::~xsd__anyType_Array()
{
    // Parent Axis_Array will carry out full clear up
}

void xsd__anyType_Array::set(xsd__anyType* array, int size)
{
    Axis_Array::set((void**)array, size, XSD_ANYTYPE);
}

const xsd__anyType* xsd__anyType_Array::get(int& size) const
{
    XSDTYPE type;
    return (const xsd__anyType*) Axis_Array::get(size, type);
}

AXIS_CPP_NAMESPACE_END
