1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 #if !defined(XERCESWRAPPERNAVIGATORALLOCATOR_INCLUDE_GUARD_12455133) 20 #define XERCESWRAPPERNAVIGATORALLOCATOR_INCLUDE_GUARD_12455133 21 22 23 24 #include <xalanc/XercesParserLiaison/XercesParserLiaisonDefinitions.hpp> 25 26 27 28 #include <xalanc/PlatformSupport/ArenaAllocator.hpp> 29 30 31 32 #include <xalanc/XercesParserLiaison/XercesWrapperNavigator.hpp> 33 34 35 36 namespace XALAN_CPP_NAMESPACE { 37 38 39 40 class XALAN_XERCESPARSERLIAISON_EXPORT XercesWrapperNavigatorAllocator 41 { 42 public: 43 44 typedef XercesWrapperNavigator ObjectType; 45 46 #if defined(XALAN_NO_DEFAULT_TEMPLATE_ARGUMENTS) 47 typedef ArenaBlock<ObjectType> ArenaBlockType; 48 49 typedef ArenaAllocator<ObjectType, 50 ArenaBlockType> ArenaAllocatorType; 51 #else 52 typedef ArenaAllocator<ObjectType> ArenaAllocatorType; 53 #endif 54 55 typedef ArenaAllocatorType::size_type size_type; 56 57 /** 58 * Construct an instance that will allocate blocks of the specified size. 59 * 60 * @param theBlockSize The block size. 61 */ 62 XercesWrapperNavigatorAllocator(MemoryManager& theManager, 63 size_type theBlockCount); 64 65 ~XercesWrapperNavigatorAllocator(); 66 67 /** 68 * Create a XercesWrapperNavigator instance. 69 * 70 * @param theOwnerDocument The XercesDocumentWrappter instance for this instance. 71 * 72 * @return pointer to the instance 73 */ 74 ObjectType* 75 create(XercesDocumentWrapper* theOwnerDocument); 76 77 /** 78 * Delete all objects from allocator. 79 */ 80 void 81 reset(); 82 83 /** 84 * Get size of an ArenaBlock, that is, the number 85 * of objects in each block. 86 * 87 * @return The size of the block 88 */ 89 size_type getBlockCount() const90 getBlockCount() const 91 { 92 return m_allocator.getBlockCount(); 93 } 94 95 /** 96 * Get the number of ArenaBlocks currently allocated. 97 * 98 * @return The number of blocks. 99 */ 100 size_type getBlockSize() const101 getBlockSize() const 102 { 103 return m_allocator.getBlockSize(); 104 } 105 106 private: 107 108 // Not implemented... 109 XercesWrapperNavigatorAllocator(const XercesWrapperNavigatorAllocator&); 110 111 XercesWrapperNavigatorAllocator& 112 operator=(const XercesWrapperNavigatorAllocator&); 113 114 // Data members... 115 ArenaAllocatorType m_allocator; 116 }; 117 118 119 120 } 121 122 123 124 #endif // XERCESWRAPPERNAVIGATORALLOCATOR_INCLUDE_GUARD_12455133 125