mirror of
				https://github.com/pocoproject/poco.git
				synced 2025-10-25 10:09:36 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //
 | |
| // NamePool.h
 | |
| //
 | |
| // Library: XML
 | |
| // Package: XML
 | |
| // Module:  NamePool
 | |
| //
 | |
| // Definition of the NamePool class.
 | |
| //
 | |
| // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
 | |
| // and Contributors.
 | |
| //
 | |
| // SPDX-License-Identifier:	BSL-1.0
 | |
| //
 | |
| 
 | |
| 
 | |
| #ifndef XML_NamePool_INCLUDED
 | |
| #define XML_NamePool_INCLUDED
 | |
| 
 | |
| 
 | |
| #include "Poco/XML/XML.h"
 | |
| #include "Poco/XML/XMLString.h"
 | |
| #include "Poco/XML/Name.h"
 | |
| 
 | |
| 
 | |
| #ifndef POCO_XML_NAMEPOOL_DEFAULT_SIZE
 | |
| #define POCO_XML_NAMEPOOL_DEFAULT_SIZE 509
 | |
| #endif
 | |
| 
 | |
| 
 | |
| namespace Poco {
 | |
| namespace XML {
 | |
| 
 | |
| 
 | |
| class NamePoolItem;
 | |
| 
 | |
| 
 | |
| class XML_API NamePool
 | |
| 	/// A hashtable that stores XML names consisting of an URI, a
 | |
| 	/// local name and a qualified name.
 | |
| {
 | |
| public:
 | |
| 	NamePool(unsigned long size = POCO_XML_NAMEPOOL_DEFAULT_SIZE);
 | |
| 		/// Creates a name pool with room for up to size strings.
 | |
| 		///
 | |
| 		/// The given size should be a suitable prime number, 
 | |
| 		/// e.g. 251, 509, 1021 or 4093.
 | |
| 	
 | |
| 	const Name& insert(const XMLString& qname, const XMLString& namespaceURI, const XMLString& localName);	
 | |
| 		/// Returns a const reference to an Name for the given names.
 | |
| 		/// Creates the Name if it does not already exist.
 | |
| 		/// Throws a PoolOverflowException if the name pool is full.
 | |
| 
 | |
| 	const Name& insert(const Name& name);	
 | |
| 		/// Returns a const reference to an Name for the given name.
 | |
| 		/// Creates the Name if it does not already exist.
 | |
| 		/// Throws a PoolOverflowException if the name pool is full.
 | |
| 
 | |
| 	void duplicate();
 | |
| 		/// Increments the reference count.
 | |
| 
 | |
| 	void release();
 | |
| 		/// Decrements the reference count and deletes the object if the reference count reaches zero.
 | |
| 
 | |
| protected:
 | |
| 	unsigned long hash(const XMLString& qname, const XMLString& namespaceURI, const XMLString& localName);
 | |
| 	~NamePool();
 | |
| 
 | |
| private:
 | |
| 	NamePool(const NamePool&);
 | |
| 	NamePool& operator = (const NamePool&);
 | |
| 
 | |
| 	NamePoolItem* _pItems;
 | |
| 	unsigned long _size;
 | |
| 	unsigned long _salt;
 | |
| 	int           _rc;
 | |
| };
 | |
| 
 | |
| 
 | |
| } } // namespace Poco::XML
 | |
| 
 | |
| 
 | |
| #endif // XML_NamePool_INCLUDED
 | 
