/usr/include/xalanc/XPath/XObjectFactory.hpp is in libxalan-c-dev 1.11-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | /*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#if !defined(XOBJECTFACTORY_HEADER_GUARD_1357924680)
#define XOBJECTFACTORY_HEADER_GUARD_1357924680
// Base include file. Must be first.
#include <xalanc/XPath/XPathDefinitions.hpp>
#include <algorithm>
#include <cassert>
#include <xalanc/XPath/XObject.hpp>
#include <xalanc/XPath/XPathExecutionContext.hpp>
XALAN_CPP_NAMESPACE_BEGIN
class XalanNode;
class MutableNodeRefList;
class NodeRefListBase;
class XObject;
class XObjectPtr;
class XToken;
/**
* This class handles the creation of XObjects and manages their lifetime.
*/
class XALAN_XPATH_EXPORT XObjectFactory
{
public:
typedef XPathExecutionContext::BorrowReturnMutableNodeRefList BorrowReturnMutableNodeRefList;
typedef XPathExecutionContext::GetCachedString GetCachedString;
typedef XPathExecutionContext::GetCachedString GetAndReleaseCachedString;
XObjectFactory(MemoryManager& theManager);
virtual
~XObjectFactory();
MemoryManager&
getMemoryManager()
{
return m_memoryManager;
}
/**
* Return an XObject to the factory.
*
* @param theXObject The XObject to be returned
* @return true if the object belongs to the factory, false if not.
*/
bool
returnObject(XObject* theXObject)
{
return doReturnObject(theXObject);
}
/**
* Reset the instance. This invalidates all existing instances created
* with this XObjectFactory.
*/
virtual void
reset() = 0;
/**
* Create a boolean XObject from a boolean value.
*
* @param theValue value used to create object
* @return pointer to new object
*/
virtual const XObjectPtr
createBoolean(bool theValue) = 0;
/**
* Create a node set XObject from a node list.
*
* @param theValue value used to create object. theValue will be owned by the new XObject.
* @return pointer to new object
*/
virtual const XObjectPtr
createNodeSet(BorrowReturnMutableNodeRefList& theValue) = 0;
/**
* Create a node set XObject from a node.
*
* @param theNOde value used to create object.
* @return pointer to new object
*/
virtual const XObjectPtr
createNodeSet(XalanNode* theValue) = 0;
/**
* Create a numeric XObject from a number.
*
* @param theValue value used to create object
* @return pointer to new object
*/
virtual const XObjectPtr
createNumber(double theValue) = 0;
/**
* Create a numeric XObject from an XToken. The XToken
* instance must be inexistence for the lifetime of the
* object.
*
* @param theValue value used to create object
* @return pointer to new object
*/
virtual const XObjectPtr
createNumber(const XToken& theValue) = 0;
/**
* Create a string XObject from a string.
*
* @param theValue value used to create object
* @return pointer to new object
*/
virtual const XObjectPtr
createString(const XalanDOMString& theValue) = 0;
/**
* Create a string XObject from a null-terminated array of characters.
*
* @param theValue a pointer to the array
* @return pointer to new object
*/
virtual const XObjectPtr
createString(const XalanDOMChar* theValue) = 0;
/**
* Create a string XObject from an array of characters.
*
* @param theValue a pointer to the array
* @paran theLength the length of the array
* @return pointer to new object
*/
virtual const XObjectPtr
createString(
const XalanDOMChar* theValue,
XalanSize_t theLength) = 0;
/**
* Create a string XObject from an XToken. The XToken
* instance must be inexistence for the lifetime of the
* object.
*
* @param theValue value used to create object
* @return pointer to new object
*/
virtual const XObjectPtr
createString(const XToken& theValue) = 0;
/**
* Create a string XObject from a string. The XObject
* will hold a reference to the supplied string, so
* the string must be in scope for the lifetime of
* the instance
*
* @param theValue value used to create object
* @return pointer to new object
*/
virtual const XObjectPtr
createStringReference(const XalanDOMString& theValue) = 0;
/**
* Create a string XObject that will adapt another XObject to
* behave like a string. The XObject holds a reference to the
* other XObject.
*
* @param theValue value used to create object
* @paran theExecutionContext The current execution context
* @return pointer to new object
*/
virtual const XObjectPtr
createStringAdapter(
const XObjectPtr& theValue,
XPathExecutionContext& theExecutionContext) = 0;
/**
* Create a string XObject from a cached XalanDOMString,
*
* @param theValue value used to create object
* @return pointer to new object
*/
virtual const XObjectPtr
createString(GetCachedString& theValue) = 0;
/**
* Create an "unknown" XObject from a string.
*
* @param theValue value used to create object
* @return pointer to new object
*/
virtual const XObjectPtr
createUnknown(const XalanDOMString& theValue) = 0;
/**
* Hold a reference to an XObject instance until the
* factory is reset. This is needed in a very few cases
* when the object lifetime needs to extend after the
* execution of an XPath expression.
*
* @param theValue The XObjectPtr instance.
*/
virtual void
holdReference(XObjectPtr theValue) = 0;
/**
*
* A public functor for use with stl algorithms.
*
*/
#if defined(XALAN_NO_STD_NAMESPACE)
struct DeleteXObjectFunctor : public unary_function<XObject*, void>
#else
struct DeleteXObjectFunctor : public std::unary_function<XObject*, bool>
#endif
{
public:
DeleteXObjectFunctor(
XObjectFactory& theFactoryInstance,
bool fInReset = false) :
m_factoryInstance(theFactoryInstance),
m_fInReset(fInReset)
{
}
result_type
operator()(argument_type theXObject) const
{
if (m_fInReset == true)
{
return m_factoryInstance.doReturnObject(
theXObject,
true);
}
else
{
return m_factoryInstance.returnObject(theXObject);
}
}
private:
XObjectFactory& m_factoryInstance;
const bool m_fInReset;
};
friend struct DeleteXObjectFunctor;
protected:
/**
* Return the actual implementation type of an XObject.
*
* @param theXObject the XObject
*/
XObject::eObjectType
getRealType(const XObject& theXObject) const
{
return theXObject.getRealType();
}
/**
* Delete a FactoryObject instance.
*
* @param theXObject the XObject instance to delete.
*/
void
deleteObject(const XObject* theXObject) const
{
if( theXObject!= 0)
{
XObject* const nonConst =
const_cast<XObject*>(theXObject);
nonConst->~XObject();
m_memoryManager.deallocate(nonConst);
}
}
/**
* Return an XObject to the factory.
*
* @param theXObject XObject to be returned
* @param fInReset true when called during reset().
*/
virtual bool
doReturnObject(
XObject* theXObject,
bool fInReset = false) = 0;
private:
// Not implemented...
XObjectFactory(const XObjectFactory&);
XObjectFactory&
operator=(const XObjectFactory&);
bool
operator==(const XObjectFactory&) const;
MemoryManager& m_memoryManager;
};
XALAN_CPP_NAMESPACE_END
#endif // XOBJECTFACTORY_HEADER_GUARD_1357924680
|