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(XALANSOURCETREEATTRIBUTENSALLOCATOR_INCLUDE_GUARD_12455133) 20 #define XALANSOURCETREEATTRIBUTENSALLOCATOR_INCLUDE_GUARD_12455133 21 22 23 24 #include <xalanc/XalanSourceTree/XalanSourceTreeDefinitions.hpp> 25 26 27 28 #include <xalanc/PlatformSupport/ArenaAllocator.hpp> 29 30 31 32 #include <xalanc/XalanSourceTree/XalanSourceTreeAttrNS.hpp> 33 34 35 36 namespace XALAN_CPP_NAMESPACE { 37 38 39 40 class XALAN_XALANSOURCETREE_EXPORT XalanSourceTreeAttributeNSAllocator 41 { 42 public: 43 44 typedef XalanSourceTreeAttrNS ObjectType; 45 46 typedef ObjectType::IndexType IndexType; 47 48 #if defined(XALAN_NO_DEFAULT_TEMPLATE_ARGUMENTS) 49 typedef ArenaBlock<ObjectType> ArenaBlockType; 50 51 typedef ArenaAllocator<ObjectType, 52 ArenaBlockType> ArenaAllocatorType; 53 #else 54 typedef ArenaAllocator<ObjectType> ArenaAllocatorType; 55 #endif 56 57 typedef ArenaAllocatorType::size_type size_type; 58 59 /** 60 * Construct an instance that will allocate blocks of the specified size. 61 * 62 * @param theBlockSize The block size. 63 */ 64 XalanSourceTreeAttributeNSAllocator(MemoryManager& theManager, size_type theBlockCount); 65 66 ~XalanSourceTreeAttributeNSAllocator(); 67 68 /** 69 * Create an instance. 70 * 71 * @param theName The name of the attribute 72 * @param theLocalName The local name of the attribute 73 * @param theNamespaceURI The namespace URI of the attribute 74 * @param thePrefix The namespace prefix of the attribute 75 * @param theValue The value of the attribute 76 * @param theOwnerElement The element that owns the instance 77 * @param theIndex The document-order index of the node. 78 * 79 * @return pointer to the instance 80 */ 81 ObjectType* 82 create( 83 const XalanDOMString& theName, 84 const XalanDOMString& theLocalName, 85 const XalanDOMString& theNamespaceURI, 86 const XalanDOMString& thePrefix, 87 const XalanDOMString& theValue, 88 XalanSourceTreeElement* theOwnerElement = 0, 89 IndexType theIndex = 0); 90 91 /** 92 * Delete all objects from allocator. 93 */ 94 void 95 reset(); 96 97 /** 98 * Get size of an ArenaBlock, that is, the number 99 * of objects in each block. 100 * 101 * @return The size of the block 102 */ 103 size_type getBlockCount() const104 getBlockCount() const 105 { 106 return m_allocator.getBlockCount(); 107 } 108 109 /** 110 * Get the number of ArenaBlocks currently allocated. 111 * 112 * @return The number of blocks. 113 */ 114 size_type getBlockSize() const115 getBlockSize() const 116 { 117 return m_allocator.getBlockSize(); 118 } 119 120 private: 121 122 // Not implemented... 123 XalanSourceTreeAttributeNSAllocator(const XalanSourceTreeAttributeNSAllocator&); 124 125 XalanSourceTreeAttributeNSAllocator& 126 operator=(const XalanSourceTreeAttributeNSAllocator&); 127 128 // Data members... 129 ArenaAllocatorType m_allocator; 130 }; 131 132 133 134 } 135 136 137 138 #endif // XALANSOURCETREEATTRIBUTENSALLOCATOR_INCLUDE_GUARD_12455133 139