/* { dg-do compile } */ extern "C" { typedef __SIZE_TYPE__ size_t; typedef struct { } __sigset_t; typedef union { } pthread_barrierattr_t; } typedef unsigned short XMLCh; typedef unsigned long XMLSize_t; namespace xercesc_2_5 { class DOMNodeList; class DOMNode { }; class DOMDocumentRange { }; class DOMDocument: public DOMDocumentRange, public DOMNode { }; union wait { struct { } __wait_stopped; } div_t; class MemoryManager; class XMemory { public : void* operator new(size_t size, MemoryManager* memMgr); void operator delete(void* p); void operator delete(void* p, MemoryManager* memMgr); }; class XMLExcepts { public : enum Codes { NoError = 0 , HshTbl_ZeroModulus = 48 , HshTbl_BadHashFromKey = 49 }; }; class XMLUni { }; } namespace xercesc_2_5 { class XMLException : public XMemory { public: virtual ~XMLException(); XMLException(const char* const srcFile, const unsigned int srcLine, MemoryManager* const memoryManager = 0); void loadExceptText ( const XMLExcepts::Codes toLoad ); }; class XMLDeleter { }; class XMLPlatformUtils { public : static MemoryManager* fgMemoryManager; static inline size_t alignPointerForNewBlockAllocation(size_t ptrSize); }; inline size_t XMLPlatformUtils::alignPointerForNewBlockAllocation(size_t ptrSize) { } class HashBase : public XMemory { public: virtual bool equals(const void *const key1, const void *const key2) = 0; virtual ~HashBase() { }; }; class IllegalArgumentException : public XMLException { public: IllegalArgumentException(const char* const srcFile , const unsigned int srcLine , const XMLExcepts::Codes toThrow , MemoryManager* memoryManager = 0) : XMLException(srcFile, srcLine, memoryManager) { loadExceptText(toThrow); } }; class RuntimeException : public XMLException { public: RuntimeException(const char* const srcFile , const unsigned int srcLine , const XMLExcepts::Codes toThrow , MemoryManager* memoryManager = 0) : XMLException(srcFile, srcLine, memoryManager) { loadExceptText(toThrow); } }; class MemoryManager { public: virtual ~MemoryManager() { } virtual void* allocate(size_t size) = 0; }; template class BaseRefVectorOf : public XMemory { BaseRefVectorOf ( const unsigned int maxElems , const bool adoptElems = true , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); virtual ~BaseRefVectorOf(); bool fAdoptedElems; TElem** fElemList; }; template BaseRefVectorOf::BaseRefVectorOf( const unsigned int maxElems , const bool adoptElems , MemoryManager* const manager) : fAdoptedElems(adoptElems) { for (unsigned int index = 0; index < maxElems; index++) fElemList[index] = 0; } template BaseRefVectorOf::~BaseRefVectorOf() { } class XMLString { public: static bool equals ( const XMLCh* const str1 , const XMLCh* const str2 ); static void moveChars ( XMLCh* const targetStr , const XMLCh* const srcStr , const unsigned int count ); }; inline void XMLString::moveChars( XMLCh* const targetStr , const XMLCh* const srcStr , const unsigned int count) { } inline bool XMLString::equals( const XMLCh* const str1 , const XMLCh* const str2) { const XMLCh* psz1 = str1; const XMLCh* psz2 = str2; if (psz1 == 0 || psz2 == 0) { return true; } } } namespace xercesc_2_5 { class HashPtr : public HashBase { virtual bool equals(const void *const key1, const void *const key2); }; template struct DOMDeepNodeListPoolTableBucketElem : public XMemory { void* fKey1; XMLCh* fKey2; XMLCh* fKey3; }; template class DOMDeepNodeListPool { public: DOMDeepNodeListPool ( const XMLSize_t modulus , const bool adoptElems , const XMLSize_t initSize = 128 ); TVal* getByKey(const void* const key1, const XMLCh* const key2, const XMLCh* const key3); DOMDeepNodeListPoolTableBucketElem* findBucketElem(const void* const key1, const XMLCh* const key2, const XMLCh* const key3, XMLSize_t& hashVal); bool fAdoptedElems; DOMDeepNodeListPoolTableBucketElem** fBucketList; XMLSize_t fHashModulus; HashBase* fHash; TVal** fIdPtrs; XMLSize_t fIdPtrsCount; MemoryManager* fMemoryManager; }; template DOMDeepNodeListPool::DOMDeepNodeListPool( const XMLSize_t modulus , const bool adoptElems , const XMLSize_t initSize) : fAdoptedElems(adoptElems) , fBucketList(0) , fHash(0) , fIdPtrs(0) { fHash = new (fMemoryManager) HashPtr(); fIdPtrs = (TVal**) fMemoryManager->allocate(fIdPtrsCount * sizeof(TVal*)); if (modulus == 0) throw IllegalArgumentException("./xercesc/dom/impl/bad.c", 38, XMLExcepts::HshTbl_ZeroModulus, fMemoryManager); } template TVal* DOMDeepNodeListPool::getByKey(const void* const key1, const XMLCh* const key2, const XMLCh* const key3) { XMLSize_t hashVal; DOMDeepNodeListPoolTableBucketElem* findIt = findBucketElem(key1, key2, key3, hashVal); } template DOMDeepNodeListPoolTableBucketElem* DOMDeepNodeListPool:: findBucketElem(const void* const key1, const XMLCh* const key2, const XMLCh* const key3, XMLSize_t& hashVal) { if (hashVal > fHashModulus) throw RuntimeException("./xercesc/dom/impl/bad.c", 64, XMLExcepts::HshTbl_BadHashFromKey, fMemoryManager); DOMDeepNodeListPoolTableBucketElem* curElem = fBucketList[hashVal]; if (fHash->equals(key1, curElem->fKey1) && (XMLString::equals(key2, curElem->fKey2)) && (XMLString::equals(key3, curElem->fKey3))) { return curElem; } } class DOMDeepNodeListImpl; class DOMDocumentImpl: public DOMDocument { DOMNodeList* getElementsByTagName(const XMLCh * tagname) const; DOMNodeList* getDeepNodeList(const DOMNode *rootNode, const XMLCh *tagName); DOMNodeList* getDeepNodeList(const DOMNode *rootNode, const XMLCh *namespaceURI, const XMLCh *localName); DOMDeepNodeListPool* fNodeListPool; }; } void * operator new(size_t amt, xercesc_2_5:: DOMDocument *doc); namespace xercesc_2_5 { class DOMNodeList { }; class DOMDeepNodeListImpl: public DOMNodeList { }; DOMNodeList *DOMDocumentImpl::getElementsByTagName(const XMLCh *tagname) const { return ((DOMDocumentImpl*)this)->getDeepNodeList(this,tagname); } DOMNodeList *DOMDocumentImpl::getDeepNodeList(const DOMNode *rootNode, const XMLCh *tagName) { if(!fNodeListPool) { fNodeListPool = new (this) DOMDeepNodeListPool(109, false); } DOMNodeList* retList = fNodeListPool->getByKey(rootNode, tagName, 0); } DOMNodeList *DOMDocumentImpl::getDeepNodeList(const DOMNode *rootNode, const XMLCh *namespaceURI, const XMLCh *localName) { DOMNodeList* retList = fNodeListPool->getByKey(rootNode, localName, namespaceURI); } }