## Xalan-C++ API Documentation

### The Xalan C++ XSLT Processor Version 1.9

Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

# XalanObjectStackCache.hpp

Go to the documentation of this file.

    00001 /*
    00002  * Copyright 1999-2004 The Apache Software Foundation.
    00003  *
    00004  * Licensed under the Apache License, Version 2.0 (the "License");
    00005  * you may not use this file except in compliance with the License.
    00006  * You may obtain a copy of the License at
    00007  *
    00008  *     http://www.apache.org/licenses/LICENSE-2.0
    00009  *
    00010  * Unless required by applicable law or agreed to in writing, software
    00011  * distributed under the License is distributed on an "AS IS" BASIS,
    00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    00013  * See the License for the specific language governing permissions and
    00014  * limitations under the License.
    00015  */
    00016 #if !defined(XALAN_OBJECTSTACKCACHE_HEADER_GUARD)
    00017 #define XALAN_OBJECTSTACKCACHE_HEADER_GUARD
    00018
    00019
    00020
    00021 #include <algorithm>
    00022
    00023
    00024
    00025 #include <xalanc/Include/XalanVector.hpp>
    00026 #include <xalanc/Include/STLHelper.hpp>
    00027 #include <xalanc/Include/XalanAutoPtr.hpp>
    00028 #include <xalanc/Include/XalanObjectCache.hpp>
    00029
    00030
    00031
    00032 XALAN_CPP_NAMESPACE_BEGIN
    00033
    00034
    00035 template<
    00036 class ObjectType,
    00037 #if defined(XALAN_NO_DEFAULT_TEMPLATE_ARGUMENTS)
    00038 class CreateFunctorType,
    00039 class DeleteFunctorType,
    00040 class ResetFunctorType>
    00041 #else
    00042 class CreateFunctorType = DefaultCacheCreateFunctor<ObjectType>,
    00043 class DeleteFunctorType = DeleteFunctor<ObjectType>,
    00044 class ResetFunctorType = DefaultCacheResetFunctor<ObjectType> >
    00045 #endif
    00046 class XalanObjectStackCache
    00047 {
    00048 public:
    00049
    00050     typedef XalanVector<ObjectType*>            VectorType;
    00051
    00052     typedef ObjectType  CacheObjectType;
    00053
    00054     explicit
    00055     XalanObjectStackCache(MemoryManagerType& theManager,
    00056                           unsigned int  initialListSize = 0) :
    00057         m_createFunctor(),
    00058         m_deleteFunctor(theManager),
    00059     m_stack(theManager),
    00060         m_numObjectsOnStack(0)
    00061     {
    00062         m_stack.reserve(initialListSize);
    00063
    00064     }
    00065
    00066     ~XalanObjectStackCache()
    00067     {
    00068 #if !defined(XALAN_NO_STD_NAMESPACE)
    00069         using std::for_each;
    00070 #endif
    00071         for_each(
    00072                 m_stack.begin(),
    00073                 m_stack.end(),
    00074                 m_deleteFunctor);
    00075     }
    00076
    00077     ObjectType*
    00078     get()
    00079     {
    00080
    00081         if (m_stack.size() == m_numObjectsOnStack)
    00082         {
    00083             ObjectType* const   theNewObject = m_createFunctor(m_stack.getMemoryManager());
    00084             m_stack.push_back(theNewObject);
    00085             ++m_numObjectsOnStack;
    00086             return theNewObject;
    00087         }
    00088         else
    00089         {
    00090             return m_stack[m_numObjectsOnStack++];
    00091         }
    00092     }
    00093
    00094     ObjectType*
    00095     top()
    00096     {
    00097         assert (m_numObjectsOnStack > 0);
    00098
    00099         return m_stack[m_numObjectsOnStack-1];
    00100     }
    00101
    00102     ObjectType*
    00103     release()
    00104     {
    00105         assert(m_numObjectsOnStack > 0);
    00106
    00107         return m_stack[--m_numObjectsOnStack];
    00108     }
    00109
    00110     void
    00111     reset()
    00112     {
    00113         typename VectorType::iterator iterator;
    00114
    00115         for (iterator = m_stack.begin(); iterator < m_stack.end(); iterator++)
    00116         {
    00117             m_resetFunctor(*iterator);
    00118         }
    00119     }
    00120
    00121     // Functors for various operations...
    00122     CreateFunctorType   m_createFunctor;
    00123
    00124     DeleteFunctorType   m_deleteFunctor;
    00125
    00126     ResetFunctorType    m_resetFunctor;
    00127
    00128 private:
    00129
    00130     // There are not defined...
    00131     XalanObjectStackCache(const XalanObjectCache<ObjectType, CreateFunctorType, DeleteFunctorType, ResetFunctorType>&   theRHS);
    00132
    00133     XalanObjectStackCache<ObjectType, CreateFunctorType, DeleteFunctorType, ResetFunctorType>&
    00134     operator=(const XalanObjectCache<ObjectType, CreateFunctorType, DeleteFunctorType, ResetFunctorType>&   theRHS);
    00135
    00136
    00137     // Data members...
    00138     VectorType          m_stack;
    00139
    00140     typename VectorType::size_type m_numObjectsOnStack;
    00141
    00142 };
    00143
    00144
    00145
    00146
    00147 template<class ObjectType>
    00148 class XalanObjectStackCacheDefault : public XalanObjectStackCache<ObjectType, DefaultCacheCreateFunctor<ObjectType>, DeleteFunctor<ObjectType>, DefaultCacheResetFunctor<ObjectType> >
    00149 {
    00150 public:
    00151
    00152     typedef XalanObjectStackCache<ObjectType, DefaultCacheCreateFunctor<ObjectType>, DeleteFunctor<ObjectType>, DefaultCacheResetFunctor<ObjectType> >      BaseClassType;
    00153
    00154     explicit
    00155     XalanObjectStackCacheDefault(unsigned int   initialListSize = 0) :
    00156         BaseClassType(initialListSize)
    00157     {
    00158     }
    00159 };
    00160
    00161
    00162
    00163 XALAN_CPP_NAMESPACE_END
    00164
    00165
    00166
    00167 #endif

Interpreting class diagrams

Doxygen and GraphViz are used to generate this API documentation from the Xalan-C header files.

Xalan-C++ XSLT Processor Version 1.9 Copyright © 1999-2004 The Apache Software Foundation. All Rights Reserved.