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(XALANELEMTEXTLITERALALLOCATOR_INCLUDE_GUARD_12455133) 20 #define XALANELEMTEXTLITERALALLOCATOR_INCLUDE_GUARD_12455133 21 22 23 24 // Base include file. Must be first. 25 #include <xalanc/XSLT/XSLTDefinitions.hpp> 26 27 28 29 #include <xalanc/XSLT/ElemTextLiteral.hpp> 30 31 32 33 #include <xalanc/PlatformSupport/ReusableArenaAllocator.hpp> 34 35 36 37 namespace XALAN_CPP_NAMESPACE { 38 39 40 41 class XALAN_XSLT_EXPORT XalanElemTextLiteralAllocator 42 { 43 public: 44 45 typedef ElemTextLiteral data_type; 46 47 #if defined(XALAN_NO_DEFAULT_TEMPLATE_ARGUMENTS) 48 typedef ArenaBlock<data_type> ArenaBlockType; 49 typedef ArenaAllocator<data_type, 50 ArenaBlockType> ArenaAllocatorType; 51 #else 52 typedef ArenaAllocator<data_type> 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 XalanElemTextLiteralAllocator( 63 MemoryManager& theManager, 64 size_type theBlockCount); 65 66 ~XalanElemTextLiteralAllocator(); 67 68 /** 69 * Construct an instance 70 * 71 * @param constructionContext context for construction of object 72 * @param stylesheetTree stylesheet containing element 73 * @param lineNumber line number in document 74 * @param columnNumber column number in document 75 * @param ch pointer to character string for element 76 * @param start starting offset of element 77 * @param length number of characters in element 78 * @param preserveSpace true is space should be preserved 79 * @param disableOutputEscaping true if output escaping should be disabled 80 * 81 * @return A pointer to the new instance. 82 */ 83 data_type* 84 create( 85 StylesheetConstructionContext& constructionContext, 86 Stylesheet& stylesheetTree, 87 XalanFileLoc lineNumber, 88 XalanFileLoc columnNumber, 89 const XalanDOMChar* ch, 90 XalanDOMString::size_type start, 91 XalanDOMString::size_type length, 92 bool preserveSpace, 93 bool disableOutputEscaping); 94 95 /** 96 * Determine if an object is owned by the allocator... 97 */ 98 bool ownsObject(const data_type * theObject)99 ownsObject(const data_type* theObject) 100 { 101 return m_allocator.ownsObject(theObject); 102 } 103 104 /** 105 * Delete all objects from the allocator. 106 */ 107 void reset()108 reset() 109 { 110 m_allocator.reset(); 111 } 112 113 /** 114 * Get the number of ArenaBlocks currently allocated. 115 * 116 * @return The number of blocks. 117 */ 118 size_type getBlockCount() const119 getBlockCount() const 120 { 121 return m_allocator.getBlockCount(); 122 } 123 124 /** 125 * Get size of an ArenaBlock, that is, the number 126 * of objects in each block. 127 * 128 * @return The size of the block 129 */ 130 size_type getBlockSize() const131 getBlockSize() const 132 { 133 return m_allocator.getBlockSize(); 134 } 135 136 private: 137 138 // Not implemented... 139 XalanElemTextLiteralAllocator(const XalanElemTextLiteralAllocator&); 140 141 XalanElemTextLiteralAllocator& 142 operator=(const XalanElemTextLiteralAllocator&); 143 144 // Data members... 145 ArenaAllocatorType m_allocator; 146 }; 147 148 149 150 } 151 152 153 154 #endif // XALANELEMTEXTLITERALALLOCATOR_INCLUDE_GUARD_12455133 155