source: NonGTP/Xerces/xercesc/util/BaseRefVectorOf.hpp @ 188

Revision 188, 7.7 KB checked in by mattausch, 19 years ago (diff)

added xercesc to support

Line 
1/*
2 * The Apache Software License, Version 1.1
3 *
4 * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
5 * reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 *
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in
16 *    the documentation and/or other materials provided with the
17 *    distribution.
18 *
19 * 3. The end-user documentation included with the redistribution,
20 *    if any, must include the following acknowledgment:
21 *       "This product includes software developed by the
22 *        Apache Software Foundation (http://www.apache.org/)."
23 *    Alternately, this acknowledgment may appear in the software itself,
24 *    if and wherever such third-party acknowledgments normally appear.
25 *
26 * 4. The names "Xerces" and "Apache Software Foundation" must
27 *    not be used to endorse or promote products derived from this
28 *    software without prior written permission. For written
29 *    permission, please contact apache\@apache.org.
30 *
31 * 5. Products derived from this software may not be called "Apache",
32 *    nor may "Apache" appear in their name, without prior written
33 *    permission of the Apache Software Foundation.
34 *
35 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46 * SUCH DAMAGE.
47 * ====================================================================
48 *
49 * This software consists of voluntary contributions made by many
50 * individuals on behalf of the Apache Software Foundation, and was
51 * originally based on software copyright (c) 1999, International
52 * Business Machines, Inc., http://www.ibm.com .  For more information
53 * on the Apache Software Foundation, please see
54 * <http://www.apache.org/>.
55 */
56#if !defined(ABSTRACTVECTOROF_HPP)
57#define ABSTRACTVECTOROF_HPP
58
59#include <xercesc/util/ArrayIndexOutOfBoundsException.hpp>
60#include <xercesc/util/XMLEnumerator.hpp>
61#include <xercesc/util/PlatformUtils.hpp>
62#include <xercesc/framework/MemoryManager.hpp>
63
64XERCES_CPP_NAMESPACE_BEGIN
65
66/**
67 * Abstract base class for the xerces internal representation of Vector.
68 *
69 * The destructor is abstract, forcing each of RefVectorOf and
70 * RefArrayVectorOf to implement their own appropriate one.
71 *
72 */
73template <class TElem> class BaseRefVectorOf : public XMemory
74{
75public :
76    // -----------------------------------------------------------------------
77    //  Constructors and Destructor
78    // -----------------------------------------------------------------------
79    BaseRefVectorOf
80    (
81          const unsigned int maxElems
82        , const bool adoptElems = true
83        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
84    );
85    virtual ~BaseRefVectorOf() = 0;
86
87
88    // -----------------------------------------------------------------------
89    //  Element management
90    // -----------------------------------------------------------------------
91    void addElement(TElem* const toAdd);
92    virtual void setElementAt(TElem* const toSet, const unsigned int setAt);
93    void insertElementAt(TElem* const toInsert, const unsigned int insertAt);
94    TElem* orphanElementAt(const unsigned int orphanAt);
95    virtual void removeAllElements();
96    virtual void removeElementAt(const unsigned int removeAt);
97    virtual void removeLastElement();
98    bool containsElement(const TElem* const toCheck);
99    virtual void cleanup();
100    void reinitialize();
101
102
103    // -----------------------------------------------------------------------
104    //  Getter methods
105    // -----------------------------------------------------------------------
106    unsigned int curCapacity() const;
107    const TElem* elementAt(const unsigned int getAt) const;
108    TElem* elementAt(const unsigned int getAt);
109    unsigned int size() const;
110    MemoryManager* getMemoryManager() const;
111
112
113    // -----------------------------------------------------------------------
114    //  Miscellaneous
115    // -----------------------------------------------------------------------
116    void ensureExtraCapacity(const unsigned int length);
117
118private:
119    // -----------------------------------------------------------------------
120    //  Unimplemented constructors and operators
121    // -----------------------------------------------------------------------
122    BaseRefVectorOf(const BaseRefVectorOf<TElem>& copy);
123    BaseRefVectorOf& operator=(const BaseRefVectorOf<TElem>& copy);       
124
125protected:
126    // -----------------------------------------------------------------------
127    //  Data members
128    // -----------------------------------------------------------------------
129    bool            fAdoptedElems;
130    unsigned int    fCurCount;
131    unsigned int    fMaxCount;
132    TElem**         fElemList;
133    MemoryManager*  fMemoryManager;
134};
135
136
137//
138//  An enumerator for a vector. It derives from the basic enumerator
139//  class, so that value vectors can be generically enumerated.
140//
141template <class TElem> class BaseRefVectorEnumerator : public XMLEnumerator<TElem>, public XMemory
142{
143public :
144    // -----------------------------------------------------------------------
145    //  Constructors and Destructor
146    // -----------------------------------------------------------------------
147    BaseRefVectorEnumerator
148    (
149        BaseRefVectorOf<TElem>* const   toEnum
150        , const bool adopt = false
151    );
152    virtual ~BaseRefVectorEnumerator();
153
154    BaseRefVectorEnumerator(const BaseRefVectorEnumerator<TElem>& copy);
155    // -----------------------------------------------------------------------
156    //  Enum interface
157    // -----------------------------------------------------------------------
158    bool hasMoreElements() const;
159    TElem& nextElement();
160    void Reset();
161
162
163private :
164    // -----------------------------------------------------------------------
165    //  Unimplemented constructors and operators
166    // -----------------------------------------------------------------------       
167    BaseRefVectorEnumerator& operator=(const BaseRefVectorEnumerator<TElem>& copy);   
168    // -----------------------------------------------------------------------
169    //  Data Members
170    //
171    //  fAdopted
172    //      Indicates whether we have adopted the passed vector. If so then
173    //      we delete the vector when we are destroyed.
174    //
175    //  fCurIndex
176    //      This is the current index into the vector.
177    //
178    //  fToEnum
179    //      The reference vector being enumerated.
180    // -----------------------------------------------------------------------
181    bool                fAdopted;
182    unsigned int        fCurIndex;
183    BaseRefVectorOf<TElem>*    fToEnum;
184};
185
186XERCES_CPP_NAMESPACE_END
187
188#if !defined(XERCES_TMPLSINC)
189#include <xercesc/util/BaseRefVectorOf.c>
190#endif
191
192#endif
Note: See TracBrowser for help on using the repository browser.