secureswitools/swisistools/source/xmlparser/xerces/include/xercesc/util/ValueArrayOf.c
changeset 0 ba25891c3a9e
child 1 c42dffbd5b4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/xmlparser/xerces/include/xercesc/util/ValueArrayOf.c	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,268 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/*
+ * 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.
+ */
+
+/*
+ * $Id: ValueArrayOf.c 568078 2007-08-21 11:43:25Z amassari $
+ */
+
+
+// ---------------------------------------------------------------------------
+//  Includes
+// ---------------------------------------------------------------------------
+#if defined(XERCES_TMPLSINC)
+#include <xercesc/util/ValueArrayOf.hpp>
+#endif
+
+
+XERCES_CPP_NAMESPACE_BEGIN
+
+// ---------------------------------------------------------------------------
+//  ValueArrayOf: Contructors and Destructor
+// ---------------------------------------------------------------------------
+template <class TElem>
+ValueArrayOf<TElem>::ValueArrayOf(const unsigned int size,
+                                  MemoryManager* const manager) :
+
+    fSize(size)
+    , fArray(0)
+    , fMemoryManager(manager)
+{
+    fArray = (TElem*) fMemoryManager->allocate(fSize * sizeof(TElem)); //new TElem[fSize];
+}
+
+template <class TElem>
+ValueArrayOf<TElem>::ValueArrayOf( const TElem* values
+                                 , const unsigned int size
+                                 , MemoryManager* const manager) :
+
+    fSize(size)
+    , fArray(0)
+    , fMemoryManager(manager)
+{
+    fArray = (TElem*) fMemoryManager->allocate(fSize * sizeof(TElem)); //new TElem[fSize];
+    for (unsigned int index = 0; index < fSize; index++)
+        fArray[index] = values[index];
+}
+
+template <class TElem>
+ValueArrayOf<TElem>::ValueArrayOf(const ValueArrayOf<TElem>& source) :
+    XMemory(source)
+    , fSize(source.fSize)
+    , fArray(0)
+    , fMemoryManager(source.fMemoryManager)
+{
+    fArray = (TElem*) fMemoryManager->allocate(fSize * sizeof(TElem)); //new TElem[fSize];
+    for (unsigned int index = 0; index < fSize; index++)
+        fArray[index] = source.fArray[index];
+}
+
+template <class TElem> ValueArrayOf<TElem>::~ValueArrayOf()
+{
+    fMemoryManager->deallocate(fArray); //delete [] fArray;
+}
+
+
+// ---------------------------------------------------------------------------
+//  ValueArrayOf: Public operators
+// ---------------------------------------------------------------------------
+template <class TElem> TElem& ValueArrayOf<TElem>::
+operator[](const unsigned int index)
+{
+    if (index >= fSize)
+        ThrowXMLwithMemMgr(ArrayIndexOutOfBoundsException, XMLExcepts::Array_BadIndex, fMemoryManager);
+    return fArray[index];
+}
+
+template <class TElem> const TElem& ValueArrayOf<TElem>::
+operator[](const unsigned int index) const
+{
+    if (index >= fSize)
+        ThrowXMLwithMemMgr(ArrayIndexOutOfBoundsException, XMLExcepts::Array_BadIndex, fMemoryManager);
+    return fArray[index];
+}
+
+template <class TElem> ValueArrayOf<TElem>& ValueArrayOf<TElem>::
+operator=(const ValueArrayOf<TElem>& toAssign)
+{
+    if (this == &toAssign)
+        return *this;
+
+    // Reallocate if not the same size
+    if (toAssign.fSize != fSize)
+    {
+        fMemoryManager->deallocate(fArray); //delete [] fArray;
+        fSize = toAssign.fSize;
+        fArray = (TElem*) fMemoryManager->allocate(fSize * sizeof(TElem)); //new TElem[fSize];
+    }
+
+    // Copy over the source elements
+    for (unsigned int index = 0; index < fSize; index++)
+        fArray[index] = toAssign.fArray[index];
+
+    return *this;
+}
+
+template <class TElem> bool ValueArrayOf<TElem>::
+operator==(const ValueArrayOf<TElem>& toCompare) const
+{
+    if (this == &toCompare)
+        return true;
+
+    if (fSize != toCompare.fSize)
+        return false;
+
+    for (unsigned int index = 0; index < fSize; index++)
+    {
+        if (fArray[index] != toCompare.fArray[index])
+            return false;
+    }
+
+    return true;
+}
+
+template <class TElem> bool ValueArrayOf<TElem>::
+operator!=(const ValueArrayOf<TElem>& toCompare) const
+{
+    return !operator==(toCompare);
+}
+
+
+// ---------------------------------------------------------------------------
+//  ValueArrayOf: Copy operations
+// ---------------------------------------------------------------------------
+template <class TElem> unsigned int ValueArrayOf<TElem>::
+copyFrom(const ValueArrayOf<TElem>& srcArray)
+{
+    //
+    //  Copy over as many of the source elements as will fit into
+    //  this array.
+    //
+    const unsigned int count = fSize < srcArray.fSize ?
+                                fSize : srcArray.fSize;
+
+    for (unsigned int index = 0; index < count; index++)
+        fArray[index] = srcArray.fArray[index];
+
+    return count;
+}
+
+
+// ---------------------------------------------------------------------------
+//  ValueArrayOf: Getter methods
+// ---------------------------------------------------------------------------
+template <class TElem> unsigned int ValueArrayOf<TElem>::
+length() const
+{
+    return fSize;
+}
+
+template <class TElem> TElem* ValueArrayOf<TElem>::
+rawData() const
+{
+    return fArray;
+}
+
+
+// ---------------------------------------------------------------------------
+//  ValueArrayOf: Miscellaneous methods
+// ---------------------------------------------------------------------------
+template <class TElem> void ValueArrayOf<TElem>::
+resize(const unsigned int newSize)
+{
+    if (newSize == fSize)
+        return;
+
+    if (newSize < fSize)
+        ThrowXMLwithMemMgr(IllegalArgumentException, XMLExcepts::Array_BadNewSize, fMemoryManager);
+
+    // Allocate the new array
+    TElem* newArray = (TElem*) fMemoryManager->allocate
+    (
+        newSize * sizeof(TElem)
+    ); //new TElem[newSize];
+
+    // Copy the existing values
+    unsigned int index = 0;
+    for (; index < fSize; index++)
+        newArray[index] = fArray[index];
+
+    for (; index < newSize; index++)
+        newArray[index] = TElem(0);
+
+    // Delete the old array and udpate our members
+    fMemoryManager->deallocate(fArray); //delete [] fArray;
+    fArray = newArray;
+    fSize = newSize;
+}
+
+
+
+// ---------------------------------------------------------------------------
+//  ValueArrayEnumerator: Constructors and Destructor
+// ---------------------------------------------------------------------------
+template <class TElem> ValueArrayEnumerator<TElem>::
+ValueArrayEnumerator(ValueArrayOf<TElem>* const toEnum, const bool adopt) :
+    fAdopted(adopt)
+    , fCurIndex(0)
+    , fToEnum(toEnum)
+{
+}
+
+template <class TElem> ValueArrayEnumerator<TElem>::~ValueArrayEnumerator()
+{
+    if (fAdopted)
+        delete fToEnum;
+}
+
+
+// ---------------------------------------------------------------------------
+//  ValueArrayEnumerator: Enum interface
+// ---------------------------------------------------------------------------
+template <class TElem> bool ValueArrayEnumerator<TElem>::hasMoreElements() const
+{
+    if (fCurIndex >= fToEnum->length())
+        return false;
+    return true;
+}
+
+template <class TElem> TElem& ValueArrayEnumerator<TElem>::nextElement()
+{
+    return (*fToEnum)[fCurIndex++];
+}
+
+template <class TElem> void ValueArrayEnumerator<TElem>::Reset()
+{
+    fCurIndex = 0;
+}
+
+XERCES_CPP_NAMESPACE_END