1/* { dg-do compile } */ 2extern "C" { 3 typedef __SIZE_TYPE__ size_t; 4 typedef struct { 5 } __sigset_t; 6 typedef union { 7 } pthread_barrierattr_t; 8 } 9 typedef unsigned short XMLCh; 10 typedef unsigned long XMLSize_t; 11 namespace xercesc_2_5 { 12 class DOMNodeList; 13 class DOMNode { 14 }; 15 class DOMDocumentRange { 16 }; 17 class DOMDocument: public DOMDocumentRange, public DOMNode { 18 }; 19 union wait { 20 struct { 21 } 22 __wait_stopped; 23 } 24 div_t; 25 class MemoryManager; 26 class XMemory { 27 public : void* operator new(size_t size, MemoryManager* memMgr); 28 void operator delete(void* p); 29 void operator delete(void* p, MemoryManager* memMgr); 30 }; 31 class XMLExcepts { 32 public : enum Codes { 33 NoError = 0 , HshTbl_ZeroModulus = 48 , HshTbl_BadHashFromKey = 49 }; 34 }; 35 class XMLUni { 36 }; 37 } 38 namespace xercesc_2_5 { 39 class XMLException : public XMemory { 40 public: 41 virtual ~XMLException(); 42 XMLException(const char* const srcFile, const unsigned int srcLine, MemoryManager* const memoryManager = 0); 43 void loadExceptText ( const XMLExcepts::Codes toLoad ); 44 }; 45 class XMLDeleter { 46 }; 47 class XMLPlatformUtils { 48 public : static MemoryManager* fgMemoryManager; 49 static inline size_t alignPointerForNewBlockAllocation(size_t ptrSize); 50 }; 51 inline size_t XMLPlatformUtils::alignPointerForNewBlockAllocation(size_t ptrSize) { 52 } 53 class HashBase : public XMemory { 54 public: 55 virtual bool equals(const void *const key1, const void *const key2) = 0; 56 virtual ~HashBase() { 57}; 58 }; 59 class IllegalArgumentException : public XMLException { 60 public: 61IllegalArgumentException(const char* const srcFile , const unsigned int srcLine , const XMLExcepts::Codes toThrow , MemoryManager* memoryManager = 0) : XMLException(srcFile, srcLine, memoryManager) { 62 loadExceptText(toThrow); 63 } 64 }; 65 class RuntimeException : public XMLException { 66 public: 67RuntimeException(const char* const srcFile , const unsigned int srcLine , const XMLExcepts::Codes toThrow , MemoryManager* memoryManager = 0) : XMLException(srcFile, srcLine, memoryManager) { 68 loadExceptText(toThrow); 69 } 70 }; 71 class MemoryManager { 72 public: 73 virtual ~MemoryManager() { 74 } 75 virtual void* allocate(size_t size) = 0; 76 }; 77 template <class TElem> class BaseRefVectorOf : public XMemory { 78 BaseRefVectorOf ( const unsigned int maxElems , const bool adoptElems = true , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); 79 virtual ~BaseRefVectorOf(); 80 bool fAdoptedElems; 81 TElem** fElemList; 82 }; 83 template <class TElem> BaseRefVectorOf<TElem>::BaseRefVectorOf( const unsigned int maxElems , const bool adoptElems , MemoryManager* const manager) : fAdoptedElems(adoptElems) { 84 for (unsigned int index = 0; 85 index < maxElems; 86 index++) fElemList[index] = 0; 87 } 88 template <class TElem> BaseRefVectorOf<TElem>::~BaseRefVectorOf() { 89 } 90 class XMLString { 91 public: 92 static bool equals ( const XMLCh* const str1 , const XMLCh* const str2 ); 93 static void moveChars ( XMLCh* const targetStr , const XMLCh* const srcStr , const unsigned int count ); 94 }; 95 inline void XMLString::moveChars( XMLCh* const targetStr , const XMLCh* const srcStr , const unsigned int count) { 96 } 97 inline bool XMLString::equals( const XMLCh* const str1 , const XMLCh* const str2) { 98 const XMLCh* psz1 = str1; 99 const XMLCh* psz2 = str2; 100 if (psz1 == 0 || psz2 == 0) { 101 return true; 102 } 103 } 104 } 105 namespace xercesc_2_5 { 106 class HashPtr : public HashBase { 107 virtual bool equals(const void *const key1, const void *const key2); 108 }; 109 template <class TVal> struct DOMDeepNodeListPoolTableBucketElem : public XMemory { 110 void* fKey1; 111 XMLCh* fKey2; 112 XMLCh* fKey3; 113 }; 114 template <class TVal> class DOMDeepNodeListPool { 115 public: 116 DOMDeepNodeListPool ( const XMLSize_t modulus , const bool adoptElems , const XMLSize_t initSize = 128 ); 117 TVal* getByKey(const void* const key1, const XMLCh* const key2, const XMLCh* const key3); 118 DOMDeepNodeListPoolTableBucketElem<TVal>* findBucketElem(const void* const key1, const XMLCh* const key2, const XMLCh* const key3, XMLSize_t& hashVal); 119 bool fAdoptedElems; 120 DOMDeepNodeListPoolTableBucketElem<TVal>** fBucketList; 121 XMLSize_t fHashModulus; 122 HashBase* fHash; 123 TVal** fIdPtrs; 124 XMLSize_t fIdPtrsCount; 125 MemoryManager* fMemoryManager; 126 }; 127 template <class TVal> DOMDeepNodeListPool<TVal>::DOMDeepNodeListPool( const XMLSize_t modulus , const bool adoptElems , const XMLSize_t initSize) : fAdoptedElems(adoptElems) , fBucketList(0) , fHash(0) , fIdPtrs(0) { 128 fHash = new (fMemoryManager) HashPtr(); 129 fIdPtrs = (TVal**) fMemoryManager->allocate(fIdPtrsCount * sizeof(TVal*)); 130 if (modulus == 0) throw IllegalArgumentException("./xercesc/dom/impl/bad.c", 38, XMLExcepts::HshTbl_ZeroModulus, fMemoryManager); 131 } 132 template <class TVal> TVal* DOMDeepNodeListPool<TVal>::getByKey(const void* const key1, const XMLCh* const key2, const XMLCh* const key3) { 133 XMLSize_t hashVal; 134 DOMDeepNodeListPoolTableBucketElem<TVal>* findIt = findBucketElem(key1, key2, key3, hashVal); 135 } 136 template <class TVal> DOMDeepNodeListPoolTableBucketElem<TVal>* DOMDeepNodeListPool<TVal>:: findBucketElem(const void* const key1, const XMLCh* const key2, const XMLCh* const key3, XMLSize_t& hashVal) { 137 if (hashVal > fHashModulus) throw RuntimeException("./xercesc/dom/impl/bad.c", 64, XMLExcepts::HshTbl_BadHashFromKey, fMemoryManager); 138 DOMDeepNodeListPoolTableBucketElem<TVal>* curElem = fBucketList[hashVal]; 139 if (fHash->equals(key1, curElem->fKey1) && (XMLString::equals(key2, curElem->fKey2)) && (XMLString::equals(key3, curElem->fKey3))) { 140 return curElem; 141 } 142 } 143 class DOMDeepNodeListImpl; 144 class DOMDocumentImpl: public DOMDocument { 145 DOMNodeList* getElementsByTagName(const XMLCh * tagname) const; 146 DOMNodeList* getDeepNodeList(const DOMNode *rootNode, const XMLCh *tagName); 147 DOMNodeList* getDeepNodeList(const DOMNode *rootNode, const XMLCh *namespaceURI, const XMLCh *localName); 148 DOMDeepNodeListPool<DOMDeepNodeListImpl>* fNodeListPool; 149 }; 150 } 151 void * operator new(size_t amt, xercesc_2_5:: DOMDocument *doc); 152 namespace xercesc_2_5 { 153 class DOMNodeList { 154 }; 155 class DOMDeepNodeListImpl: public DOMNodeList { 156 }; 157 DOMNodeList *DOMDocumentImpl::getElementsByTagName(const XMLCh *tagname) const { 158 return ((DOMDocumentImpl*)this)->getDeepNodeList(this,tagname); 159 } 160 DOMNodeList *DOMDocumentImpl::getDeepNodeList(const DOMNode *rootNode, const XMLCh *tagName) { 161 if(!fNodeListPool) { 162 fNodeListPool = new (this) DOMDeepNodeListPool<DOMDeepNodeListImpl>(109, false); 163 } 164 DOMNodeList* retList = fNodeListPool->getByKey(rootNode, tagName, 0); 165 } 166 DOMNodeList *DOMDocumentImpl::getDeepNodeList(const DOMNode *rootNode, const XMLCh *namespaceURI, const XMLCh *localName) { 167 DOMNodeList* retList = fNodeListPool->getByKey(rootNode, localName, namespaceURI); 168 } 169 } 170 171