From fedcd46cf8a29dd78806d042f2c5683dd309d6b0 Mon Sep 17 00:00:00 2001 From: Khaled Noaman <knoaman@apache.org> Date: Thu, 15 May 2003 18:59:34 +0000 Subject: [PATCH] Partial implementation of the configurable memory manager. git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@174983 13f79535-47bb-0310-9956-ffa450edef68 --- .../Transcoders/Cygwin/CygwinTransService.cpp | 69 +++++- .../Transcoders/Cygwin/CygwinTransService.hpp | 5 + .../util/Transcoders/ICU/ICUTransService.cpp | 5 +- .../util/Transcoders/ICU/ICUTransService.hpp | 8 + .../Transcoders/Iconv/IconvTransService.cpp | 105 +++++++- .../Transcoders/Iconv/IconvTransService.hpp | 8 + .../Iconv390/Iconv390TransService.cpp | 83 ++++++- .../Iconv390/Iconv390TransService.hpp | 8 + .../Iconv400/Iconv400TransService.cpp | 147 +++++++++++- .../Iconv400/Iconv400TransService.hpp | 5 + .../IconvFBSD/IconvFBSDTransService.cpp | 14 +- .../IconvFBSD/IconvFBSDTransService.hpp | 8 + .../IconvGNU/IconvGNUTransService.cpp | 14 +- .../IconvGNU/IconvGNUTransService.hpp | 8 + .../MacOSUnicodeConverter.cpp | 5 +- .../MacOSUnicodeConverter.hpp | 5 + .../Uniconv390/Uniconv390TransService.cpp | 105 +++++++- .../Uniconv390/Uniconv390TransService.hpp | 5 + .../Transcoders/Win32/Win32TransService.cpp | 67 +++++- .../Transcoders/Win32/Win32TransService.hpp | 8 + src/xercesc/util/regx/BMPattern.cpp | 65 +++-- src/xercesc/util/regx/BMPattern.hpp | 48 ++-- src/xercesc/util/regx/Match.hpp | 3 +- src/xercesc/util/regx/Op.hpp | 6 +- src/xercesc/util/regx/OpFactory.cpp | 40 +-- src/xercesc/util/regx/OpFactory.hpp | 9 +- src/xercesc/util/regx/ParserForXMLSchema.cpp | 8 +- src/xercesc/util/regx/ParserForXMLSchema.hpp | 2 +- src/xercesc/util/regx/RangeFactory.hpp | 8 +- src/xercesc/util/regx/RangeTokenMap.hpp | 13 +- src/xercesc/util/regx/RegularExpression.cpp | 6 +- src/xercesc/util/regx/RegularExpression.hpp | 15 +- src/xercesc/util/regx/RegxParser.cpp | 49 ++-- src/xercesc/util/regx/RegxParser.hpp | 10 +- src/xercesc/util/regx/RegxUtil.cpp | 84 ++++--- src/xercesc/util/regx/RegxUtil.hpp | 7 +- src/xercesc/util/regx/Token.hpp | 6 +- src/xercesc/util/regx/TokenFactory.hpp | 7 +- src/xercesc/validators/DTD/DTDAttDef.cpp | 13 +- src/xercesc/validators/DTD/DTDAttDef.hpp | 4 +- src/xercesc/validators/DTD/DTDElementDecl.cpp | 53 ++-- src/xercesc/validators/DTD/DTDElementDecl.hpp | 19 +- src/xercesc/validators/DTD/DTDGrammar.cpp | 32 ++- src/xercesc/validators/DTD/DTDGrammar.hpp | 18 +- src/xercesc/validators/DTD/DTDScanner.cpp | 107 ++++++--- src/xercesc/validators/DTD/DTDScanner.hpp | 15 +- .../validators/common/AllContentModel.cpp | 35 +-- .../validators/common/AllContentModel.hpp | 11 +- src/xercesc/validators/common/CMAny.cpp | 12 +- src/xercesc/validators/common/CMAny.hpp | 11 +- src/xercesc/validators/common/CMBinaryOp.cpp | 12 +- src/xercesc/validators/common/CMBinaryOp.hpp | 11 +- src/xercesc/validators/common/CMLeaf.hpp | 54 +++-- src/xercesc/validators/common/CMNode.hpp | 38 ++- src/xercesc/validators/common/CMStateSet.hpp | 21 +- src/xercesc/validators/common/CMUnaryOp.cpp | 11 +- src/xercesc/validators/common/CMUnaryOp.hpp | 11 +- .../common/ContentLeafNameTypeVector.cpp | 36 ++- .../common/ContentLeafNameTypeVector.hpp | 31 ++- .../validators/common/ContentSpecNode.cpp | 9 +- .../validators/common/ContentSpecNode.hpp | 26 +- .../validators/common/DFAContentModel.cpp | 227 +++++++++++++----- .../validators/common/DFAContentModel.hpp | 23 +- src/xercesc/validators/common/Grammar.hpp | 5 +- .../validators/common/GrammarResolver.cpp | 14 +- .../validators/common/GrammarResolver.hpp | 8 +- .../validators/common/MixedContentModel.cpp | 16 +- .../validators/common/MixedContentModel.hpp | 15 +- .../validators/common/SimpleContentModel.hpp | 26 +- .../AbstractNumericFacetValidator.cpp | 10 +- .../AbstractNumericFacetValidator.hpp | 15 +- .../datatype/AbstractNumericValidator.cpp | 8 +- .../datatype/AbstractNumericValidator.hpp | 18 +- .../datatype/AbstractStringValidator.cpp | 15 +- .../datatype/AbstractStringValidator.hpp | 15 +- .../AnySimpleTypeDatatypeValidator.cpp | 21 +- .../AnySimpleTypeDatatypeValidator.hpp | 15 +- .../datatype/AnyURIDatatypeValidator.cpp | 17 +- .../datatype/AnyURIDatatypeValidator.hpp | 36 ++- .../Base64BinaryDatatypeValidator.cpp | 29 ++- .../Base64BinaryDatatypeValidator.hpp | 36 ++- .../datatype/BooleanDatatypeValidator.cpp | 12 +- .../datatype/BooleanDatatypeValidator.hpp | 45 ++-- .../validators/datatype/DatatypeValidator.cpp | 101 +++++++- .../validators/datatype/DatatypeValidator.hpp | 209 +++++++--------- .../datatype/DatatypeValidatorFactory.cpp | 91 ++++--- .../datatype/DatatypeValidatorFactory.hpp | 71 +++--- .../datatype/DateDatatypeValidator.cpp | 29 ++- .../datatype/DateDatatypeValidator.hpp | 35 ++- .../datatype/DateTimeDatatypeValidator.cpp | 29 ++- .../datatype/DateTimeDatatypeValidator.hpp | 35 ++- .../validators/datatype/DateTimeValidator.cpp | 12 +- .../validators/datatype/DateTimeValidator.hpp | 15 +- .../datatype/DayDatatypeValidator.cpp | 29 ++- .../datatype/DayDatatypeValidator.hpp | 34 ++- .../datatype/DecimalDatatypeValidator.cpp | 55 +++-- .../datatype/DecimalDatatypeValidator.hpp | 49 ++-- .../datatype/DoubleDatatypeValidator.cpp | 55 +++-- .../datatype/DoubleDatatypeValidator.hpp | 46 ++-- .../datatype/DurationDatatypeValidator.cpp | 29 ++- .../datatype/DurationDatatypeValidator.hpp | 35 ++- .../datatype/ENTITYDatatypeValidator.cpp | 27 ++- .../datatype/ENTITYDatatypeValidator.hpp | 38 ++- .../datatype/FloatDatatypeValidator.cpp | 54 +++-- .../datatype/FloatDatatypeValidator.hpp | 59 +++-- .../datatype/HexBinaryDatatypeValidator.cpp | 27 ++- .../datatype/HexBinaryDatatypeValidator.hpp | 33 ++- .../datatype/IDDatatypeValidator.cpp | 34 ++- .../datatype/IDDatatypeValidator.hpp | 47 ++-- .../datatype/IDREFDatatypeValidator.cpp | 34 ++- .../datatype/IDREFDatatypeValidator.hpp | 45 ++-- .../datatype/ListDatatypeValidator.cpp | 27 ++- .../datatype/ListDatatypeValidator.hpp | 34 ++- .../datatype/MonthDatatypeValidator.cpp | 29 ++- .../datatype/MonthDatatypeValidator.hpp | 35 ++- .../datatype/MonthDayDatatypeValidator.cpp | 29 ++- .../datatype/MonthDayDatatypeValidator.hpp | 35 ++- .../datatype/NCNameDatatypeValidator.cpp | 32 ++- .../datatype/NCNameDatatypeValidator.hpp | 45 ++-- .../datatype/NOTATIONDatatypeValidator.cpp | 25 +- .../datatype/NOTATIONDatatypeValidator.hpp | 33 ++- .../datatype/NameDatatypeValidator.cpp | 32 ++- .../datatype/NameDatatypeValidator.hpp | 46 ++-- .../datatype/QNameDatatypeValidator.cpp | 27 ++- .../datatype/QNameDatatypeValidator.hpp | 35 ++- .../datatype/StringDatatypeValidator.cpp | 32 ++- .../datatype/StringDatatypeValidator.hpp | 46 ++-- .../datatype/TimeDatatypeValidator.cpp | 29 ++- .../datatype/TimeDatatypeValidator.hpp | 34 ++- .../datatype/UnionDatatypeValidator.cpp | 21 +- .../datatype/UnionDatatypeValidator.hpp | 54 +++-- .../datatype/YearDatatypeValidator.cpp | 29 ++- .../datatype/YearDatatypeValidator.hpp | 35 ++- .../datatype/YearMonthDatatypeValidator.cpp | 29 ++- .../datatype/YearMonthDatatypeValidator.hpp | 35 ++- .../validators/schema/ComplexTypeInfo.cpp | 97 ++++---- .../validators/schema/ComplexTypeInfo.hpp | 31 ++- .../schema/GeneralAttributeCheck.cpp | 11 +- .../schema/GeneralAttributeCheck.hpp | 11 +- .../validators/schema/NamespaceScope.cpp | 29 ++- .../validators/schema/NamespaceScope.hpp | 8 +- .../validators/schema/SchemaElementDecl.cpp | 25 +- .../validators/schema/SchemaElementDecl.hpp | 28 ++- .../validators/schema/SchemaGrammar.cpp | 37 ++- .../validators/schema/SchemaGrammar.hpp | 16 +- src/xercesc/validators/schema/SchemaInfo.hpp | 2 +- .../validators/schema/SchemaValidator.cpp | 7 +- .../validators/schema/SchemaValidator.hpp | 42 ++-- .../validators/schema/TraverseSchema.cpp | 201 ++++++++-------- .../validators/schema/TraverseSchema.hpp | 6 +- .../validators/schema/XSDDOMParser.cpp | 5 +- .../validators/schema/XSDDOMParser.hpp | 6 +- .../validators/schema/XSDErrorReporter.hpp | 4 +- .../validators/schema/XercesAttGroupInfo.cpp | 6 +- .../validators/schema/XercesAttGroupInfo.hpp | 15 +- .../validators/schema/XercesGroupInfo.cpp | 7 +- .../validators/schema/XercesGroupInfo.hpp | 4 +- .../schema/identity/FieldActivator.cpp | 10 +- .../schema/identity/FieldActivator.hpp | 10 +- .../schema/identity/FieldValueMap.cpp | 13 +- .../schema/identity/FieldValueMap.hpp | 13 +- .../validators/schema/identity/IC_Field.cpp | 16 +- .../validators/schema/identity/IC_Field.hpp | 13 +- .../validators/schema/identity/IC_Key.cpp | 8 +- .../validators/schema/identity/IC_Key.hpp | 3 +- .../validators/schema/identity/IC_KeyRef.cpp | 8 +- .../validators/schema/identity/IC_KeyRef.hpp | 3 +- .../schema/identity/IC_Selector.cpp | 14 +- .../schema/identity/IC_Selector.hpp | 15 +- .../validators/schema/identity/IC_Unique.cpp | 8 +- .../validators/schema/identity/IC_Unique.hpp | 3 +- .../schema/identity/IdentityConstraint.cpp | 16 +- .../schema/identity/IdentityConstraint.hpp | 10 +- .../validators/schema/identity/ValueStore.cpp | 16 +- .../validators/schema/identity/ValueStore.hpp | 9 +- .../schema/identity/ValueStoreCache.cpp | 21 +- .../schema/identity/ValueStoreCache.hpp | 7 +- .../schema/identity/XPathMatcher.cpp | 30 ++- .../schema/identity/XPathMatcher.hpp | 18 +- .../schema/identity/XPathMatcherStack.cpp | 9 +- .../schema/identity/XPathMatcherStack.hpp | 6 +- .../schema/identity/XercesXPath.cpp | 54 +++-- .../schema/identity/XercesXPath.hpp | 14 +- 183 files changed, 3652 insertions(+), 1742 deletions(-) diff --git a/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.cpp b/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.cpp index f56d9bd60..bc40178da 100644 --- a/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.cpp +++ b/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:47:02 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2003/03/09 17:02:20 peiyongz * PanicHandler * @@ -672,9 +675,10 @@ bool CygwinTransService::isAlias(const HKEY encodingKey XMLTranscoder* -CygwinTransService::makeNewXMLTranscoder(const XMLCh* const encodingName +CygwinTransService::makeNewXMLTranscoder(const XMLCh* const encodingName , XMLTransService::Codes& resValue - , const unsigned int blockSize) + , const unsigned int blockSize + , MemoryManager* const manager) { const unsigned int upLen = 1024; XMLCh upEncoding[upLen + 1]; @@ -703,7 +707,7 @@ CygwinTransService::makeNewXMLTranscoder(const XMLCh* const encodin } // We found it, so return a Cygwin transcoder for this encoding - return new CygwinTranscoder + return new (manager) CygwinTranscoder ( encodingName , theEntry->getWinCP() @@ -1024,6 +1028,36 @@ char* CygwinLCPTranscoder::transcode(const XMLCh* const toTranscode) return retVal; } +char* CygwinLCPTranscoder::transcode(const XMLCh* const toTranscode + MemoryManager* const manager) +{ + if (!toTranscode) + return 0; + + char* retVal = 0; + if (*toTranscode) + { + // Calc the needed size + const unsigned int neededLen = ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)toTranscode, -1, NULL, 0, NULL, NULL); + if (neededLen == (unsigned int)-1) + return 0; + + // Allocate a buffer of that size plus one for the null and transcode + // Returned length of WideCharToMultiByte includes terminating NUL. + retVal = (char*) manager->allocate((neededLen+1) * sizeof(char)); //new char[neededLen+1]; + ::WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)toTranscode, -1, retVal, neededLen+1, NULL, NULL); + + // And cap it off anyway just to make sure + retVal[neededLen] = 0; + } + else + { + retVal = (char*) manager->allocate(sizeof(char)); //new char[1]; + retVal[0] = 0; + } + return retVal; +} + XMLCh* CygwinLCPTranscoder::transcode(const char* const toTranscode) { @@ -1053,6 +1087,35 @@ XMLCh* CygwinLCPTranscoder::transcode(const char* const toTranscode) return retVal; } +XMLCh* CygwinLCPTranscoder::transcode(const char* const toTranscode, + MemoryManager* const manager) +{ + if (!toTranscode) + return 0; + + XMLCh* retVal = 0; + if (*toTranscode) + { + // Calculate the buffer size required + const unsigned int neededLen = ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, toTranscode, -1, NULL, 0); + if (neededLen == (unsigned int)-1) + return 0; + + // Allocate a buffer of that size plus one for the null and transcode + retVal = (XMLCh*) manager->allocate((neededLen + 1) * sizeof(XMLCh)); //new XMLCh[neededLen + 1]; + ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, toTranscode, -1, (LPWSTR)retVal, neededLen + 1); + + // Cap it off just to make sure. We are so paranoid! + retVal[neededLen] = 0; + } + else + { + retVal = (XMLCh*) manager->allocate(sizeof(XMLCh)); //new XMLCh[1]; + retVal[0] = 0; + } + return retVal; +} + bool CygwinLCPTranscoder::transcode( const char* const toTranscode , XMLCh* const toFill diff --git a/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.hpp b/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.hpp index 5fd6d5673..36535b23d 100644 --- a/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.hpp +++ b/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.hpp @@ -120,6 +120,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); virtual int auxCompareString @@ -259,8 +260,12 @@ public : virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual XMLCh* transcode(const char* const toTranscode); + virtual XMLCh* transcode(const char* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp b/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp index c7b380e8f..28d582a2c 100644 --- a/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp +++ b/src/xercesc/util/Transcoders/ICU/ICUTransService.cpp @@ -332,7 +332,8 @@ void ICUTransService::lowerCase(XMLCh* const toLowerCase) const XMLTranscoder* ICUTransService:: makeNewXMLTranscoder(const XMLCh* const encodingName , XMLTransService::Codes& resValue - , const unsigned int blockSize) + , const unsigned int blockSize + , MemoryManager* const manager) { // // If UChar and XMLCh are not the same size, then we have premassage the @@ -360,7 +361,7 @@ makeNewXMLTranscoder(const XMLCh* const encodingName return 0; } - return new ICUTranscoder(encodingName, converter, blockSize); + return new (manager) ICUTranscoder(encodingName, converter, blockSize); } diff --git a/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp b/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp index caad7771e..a56ad59fe 100644 --- a/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp +++ b/src/xercesc/util/Transcoders/ICU/ICUTransService.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/15 18:47:03 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.6 2003/03/07 18:15:57 tng * Return a reference instead of void for operator= * @@ -172,6 +175,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); @@ -280,8 +284,12 @@ public : virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual XMLCh* transcode(const char* const toTranscode); + virtual XMLCh* transcode(const char* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp b/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp index d70f03f13..07828f185 100644 --- a/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp +++ b/src/xercesc/util/Transcoders/Iconv/IconvTransService.cpp @@ -62,10 +62,12 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- +#include "IconvTransService.hpp" #include <xercesc/util/XMLUniDefs.hpp> #include <xercesc/util/XMLUni.hpp> -#include "IconvTransService.hpp" +#include <xercesc/framework/MemoryManager.hpp> #include <wchar.h> + #if defined (XML_GCC) || defined (XML_PTX) || defined (XML_IBMVAOS2) #if defined(XML_BEOS) wint_t towlower(wint_t wc) { @@ -214,7 +216,8 @@ bool IconvTransService::supportsSrcOfs() const XMLTranscoder* IconvTransService::makeNewXMLTranscoder(const XMLCh* const encodingName , XMLTransService::Codes& resValue - , const unsigned int ) + , const unsigned int + , MemoryManager* const) { // // NOTE: We don't use the block size here @@ -347,6 +350,58 @@ char* IconvLCPTranscoder::transcode(const XMLCh* const toTranscode) return retVal; } +char* IconvLCPTranscoder::transcode(const XMLCh* const toTranscode, + MemoryManager* const manager) +{ + if (!toTranscode) + return 0; + + char* retVal = 0; + if (*toTranscode) + { + unsigned int wLent = getWideCharLength(toTranscode); + + wchar_t tmpWideCharArr[gTempBuffArraySize]; + wchar_t* allocatedArray = 0; + wchar_t* wideCharBuf = 0; + + if (wLent >= gTempBuffArraySize) + wideCharBuf = allocatedArray = (wchar_t*) manager->allocate + ( + (wLent + 1) * sizeof(wchar_t) + );//new wchar_t[wLent + 1]; + else + wideCharBuf = tmpWideCharArr; + + for (unsigned int i = 0; i < wLent; i++) + { + wideCharBuf[i] = toTranscode[i]; + } + wideCharBuf[wLent] = 0x00; + + // Calc the needed size. + const size_t neededLen = ::wcstombs(NULL, wideCharBuf, 0); + if (neededLen == -1) + { + manager->deallocate(allocatedArray);//delete [] allocatedArray; + retVal = (char*) manager->allocate(sizeof(char)); //new char[1]; + retVal[0] = 0; + return retVal; + } + + retVal = (char*) manager->allocate((neededLen + 1) * sizeof(char));//new char[neededLen + 1]; + ::wcstombs(retVal, wideCharBuf, neededLen); + retVal[neededLen] = 0; + manager->deallocate(allocatedArray);//delete [] allocatedArray; + } + else + { + retVal = (char*) manager->allocate(sizeof(char));//new char[1]; + retVal[0] = 0; + } + return retVal; +} + bool IconvLCPTranscoder::transcode( const XMLCh* const toTranscode , char* const toFill @@ -443,6 +498,52 @@ XMLCh* IconvLCPTranscoder::transcode(const char* const toTranscode) return retVal; } +XMLCh* IconvLCPTranscoder::transcode(const char* const toTranscode, + MemoryManager* const manager) +{ + if (!toTranscode) + return 0; + + XMLCh* retVal = 0; + if (*toTranscode) + { + const unsigned int len = calcRequiredSize(toTranscode); + if (len == 0) + { + retVal = (XMLCh*) manager->allocate(sizeof(XMLCh)); //new XMLCh[1]; + retVal[0] = 0; + return retVal; + } + + wchar_t tmpWideCharArr[gTempBuffArraySize]; + wchar_t* allocatedArray = 0; + wchar_t* wideCharBuf = 0; + + if (len >= gTempBuffArraySize) + wideCharBuf = allocatedArray = (wchar_t*) manager->allocate + ( + (len + 1) * sizeof(wchar_t) + );//new wchar_t[len + 1]; + else + wideCharBuf = tmpWideCharArr; + + ::mbstowcs(wideCharBuf, toTranscode, len); + retVal = (XMLCh*) manager->allocate((len + 1) *sizeof(XMLCh));//new XMLCh[len + 1]; + for (unsigned int i = 0; i < len; i++) + { + retVal[i] = (XMLCh) wideCharBuf[i]; + } + retVal[len] = 0x00; + manager->deallocate(allocatedArray);//delete [] allocatedArray; + } + else + { + retVal = (XMLCh*) manager->allocate(sizeof(XMLCh));//new XMLCh[1]; + retVal[0] = 0; + } + return retVal; +} + bool IconvLCPTranscoder::transcode( const char* const toTranscode , XMLCh* const toFill diff --git a/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp b/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp index 1b7f71809..728a4c3d0 100644 --- a/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp +++ b/src/xercesc/util/Transcoders/Iconv/IconvTransService.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:47:03 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2003/03/07 18:15:57 tng * Return a reference instead of void for operator= * @@ -157,6 +160,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); @@ -187,6 +191,8 @@ public : virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( @@ -196,6 +202,8 @@ public : ); virtual XMLCh* transcode(const char* const toTranscode); + virtual XMLCh* transcode(const char* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp index c45467831..5ee01923a 100644 --- a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp +++ b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.cpp @@ -62,10 +62,11 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- +#include "Iconv390TransService.hpp" #include <xercesc/util/XMLUniDefs.hpp> #include <xercesc/util/XMLUni.hpp> #include <xercesc/util/regx/XMLUniCharacter.hpp> -#include "Iconv390TransService.hpp" +#include <xercesc/framework/MemoryManager.hpp> #include <wchar.h> #include <string.h> @@ -316,7 +317,8 @@ bool Iconv390TransService::supportsSrcOfs() const XMLTranscoder* Iconv390TransService::makeNewXMLTranscoder(const XMLCh* const encodingName , XMLTransService::Codes& resValue - , const unsigned int ) + , const unsigned int + , MemoryManager* const) { // This is a minimalist transcoding service, that only supports a local // default transcoder. All named encodings return zero as a failure, @@ -425,6 +427,36 @@ char* Iconv390LCPTranscoder::transcode(const XMLCh* const toTranscode) return retVal; } +char* Iconv390LCPTranscoder::transcode(const XMLCh* const toTranscode, + MemoryManager* const manager) +{ + if (!toTranscode) + return 0; + + char* retVal = 0; + if (*toTranscode) + { + unsigned int wLent = getWideCharLength(toTranscode); + // + // Translate the input from Unicode XMLCh format into + // ibm-037 char format via the lookup table. + // + retVal = (char*) manager->allocate((wLent + 1) * sizeof(char));//new char[wLent + 1]; + const XMLCh *srcPtr = toTranscode; + char *outPtr = retVal; + + while (*srcPtr != 0) + *outPtr++ = gUnicodeToIBM037XlatTable[*srcPtr++]; + *outPtr=0; + } + else + { + retVal = (char*) manager->allocate(sizeof(char));//new char[1]; + retVal[0] = 0; + } + return retVal; +} + bool Iconv390LCPTranscoder::transcode( const XMLCh* const toTranscode , char* const toFill @@ -503,6 +535,53 @@ XMLCh* Iconv390LCPTranscoder::transcode(const char* const toTranscode) return retVal; } +XMLCh* Iconv390LCPTranscoder::transcode(const char* const toTranscode, + MemoryManager* const manager) +{ + if (!toTranscode) + return 0; + + XMLCh* retVal = 0; + if (*toTranscode) + { + const unsigned int len = calcRequiredSize(toTranscode); + if (len == 0) + { + retVal = (XMLCh*) manager->allocate(sizeof(XMLCh));//new XMLCh[1]; + retVal[0] = 0; + return retVal; + } + + wchar_t tmpWideCharArr[gTempBuffArraySize]; + wchar_t* allocatedArray = 0; + wchar_t* wideCharBuf = 0; + + retVal = (XMLCh*) manager->allocate((len + 1) * sizeof(XMLCh));//new XMLCh[len + 1]; + + size_t retCode; + char *tmpInPtr = (char*) toTranscode; + char *tmpOutPtr = (char*) retVal; + size_t inByteLeft = len; + size_t outByteLeft = len*2; + { + XMLMutexLock lockConverter(&converter->fMutex); + retCode = iconv(converter->fIconv390Descriptor, &tmpInPtr, &inByteLeft, &tmpOutPtr, &outByteLeft); + } + if (retCode == -1) { + delete [] retVal; + return 0; + } + retVal[len] = 0x00; + delete [] allocatedArray; + } + else + { + retVal = (XMLCh*) manager->allocate(sizeof(XMLCh));//new XMLCh[1]; + retVal[0] = 0; + } + return retVal; +} + bool Iconv390LCPTranscoder::transcode( const char* const toTranscode , XMLCh* const toFill diff --git a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp index 7dedfa42a..c0221e34f 100644 --- a/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp +++ b/src/xercesc/util/Transcoders/Iconv390/Iconv390TransService.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:47:03 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2003/03/07 18:15:57 tng * Return a reference instead of void for operator= * @@ -150,6 +153,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); @@ -179,6 +183,8 @@ public : virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( @@ -188,6 +194,8 @@ public : ); virtual XMLCh* transcode(const char* const toTranscode); + virtual XMLCh* transcode(const char* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp index 187ccc6d1..c5c2f85bb 100644 --- a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp +++ b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.cpp @@ -316,7 +316,8 @@ XMLCh Iconv400TransService::toUnicodeLower(XMLCh comp1) const XMLTranscoder* Iconv400TransService::makeNewXMLTranscoder( const XMLCh* const encodingName , XMLTransService::Codes& resValue - , const unsigned int blockSize) + , const unsigned int blockSize + , MemoryManager* const manager) { UErrorCode uerr = U_ZERO_ERROR; UConverter* converter = ucnv_openU(encodingName, &uerr); @@ -325,7 +326,7 @@ Iconv400TransService::makeNewXMLTranscoder( const XMLCh* const enc resValue = XMLTransService::UnsupportedEncoding; return 0; } - return new Iconv400Transcoder(encodingName, converter, blockSize); + return new (manager) Iconv400Transcoder(encodingName, converter, blockSize); } @@ -769,6 +770,76 @@ char* Iconv400LCPTranscoder::transcode(const XMLCh* const toTranscode) return retBuf; } +char* Iconv400LCPTranscoder::transcode(const XMLCh* const toTranscode, + MemoryManager* const manager) +{ + char* retBuf = 0; + + // Check for a couple of special cases + if (!toTranscode) + return 0; + + if (!*toTranscode) + { + retBuf = (char*) manager->allocate(sizeof(char));//new char[1]; + retBuf[0] = 0; + return retBuf; + } + + // Caculate a return buffer size not too big, but less likely to overflow + int32_t targetLen = (int32_t)(u_strlen(toTranscode) * 1.25); + + // Allocate the return buffer + retBuf = (char*) manager->allocate((targetLen + 1) * sizeof(char));//new char[targetLen + 1]; + + // Lock now while we call the converter. + UErrorCode err = U_ZERO_ERROR; + int32_t targetCap; + { + XMLMutexLock lockConverter(&fMutex); + + //Convert the Unicode string to char* + targetCap = ucnv_fromUChars + ( + fConverter + , retBuf + , targetLen + 1 + , toTranscode + , &err + ); + } + + // If targetLen is not enough then buffer overflow might occur + if (err == U_BUFFER_OVERFLOW_ERROR) + { + // Reset the error, delete the old buffer, allocate a new one, and try again + err = U_ZERO_ERROR; + manager->deallocate(retBuf);//delete [] retBuf; + retBuf = (char*) manager->allocate(targetCap * sizeof(char));//new char[targetCap]; + + // Lock again before we retry + XMLMutexLock lockConverter(&fMutex); + targetCap = ucnv_fromUChars + ( + fConverter + , retBuf + , targetCap + , toTranscode + , &err + ); + } + + if (U_FAILURE(err)) + { + manager->deallocate(retBuf);//delete [] retBuf; + return 0; + } + + // Cap it off and return + retBuf[targetCap] = 0; + return retBuf; +} + XMLCh* Iconv400LCPTranscoder::transcode(const char* const toTranscode) { // Watch for a few pyscho corner cases @@ -840,6 +911,78 @@ XMLCh* Iconv400LCPTranscoder::transcode(const char* const toTranscode) return retVal; } +XMLCh* Iconv400LCPTranscoder::transcode(const char* const toTranscode, + MemoryManager* const manager) +{ + // Watch for a few pyscho corner cases + if (!toTranscode) + return 0; + + XMLCh* retVal = 0; + if (!*toTranscode) + { + retVal = (XMLCh*) manager->allocate(sizeof(XMLCh));//new XMLCh[1]; + retVal[0] = 0; + return retVal; + } + + // + // Get the length of the string to transcode. The Unicode string will + // almost always be no more chars than were in the source, so this is + // the best guess as to the storage needed. + // + const int32_t srcLen = (int32_t)strlen(toTranscode); + // Allocate unicode string of equivalent length in unicode bytes + retVal = (XMLCh*) manager->allocate((srcLen + 1) * sizeof(XMLCh));//new XMLCh[srcLen+1]; + + // Now lock while we do these calculations + UErrorCode err = U_ZERO_ERROR; + { + XMLMutexLock lockConverter(&fMutex); + + // + // Here we don't know what the target length will be so use 0 and + // expect an U_BUFFER_OVERFLOW_ERROR in which case it'd get resolved + // by the correct capacity value. + // + int32_t targetCap; + targetCap = ucnv_toUChars + ( + fConverter + , retVal + , srcLen+1 + , toTranscode + , srcLen + , &err + ); + + if (err != U_BUFFER_OVERFLOW_ERROR) + { + + err = U_ZERO_ERROR; + retVal = (XMLCh*) manager->allocate(targetCap * sizeof(XMLCh));//new XMLCh[targetCap]; + ucnv_toUChars + ( + fConverter + , retVal + , targetCap + , toTranscode + , srcLen + , &err + ); + } + } + + if (U_FAILURE(err)) + { + // Clean up if we got anything allocated + manager->deallocate(retVal);//delete [] retVal; + return 0; + } + + return retVal; +} + bool Iconv400LCPTranscoder::transcode(const char* const toTranscode , XMLCh* const toFill diff --git a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp index a65c85ca8..3814c89f7 100644 --- a/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp +++ b/src/xercesc/util/Transcoders/Iconv400/Iconv400TransService.hpp @@ -122,6 +122,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); @@ -237,8 +238,12 @@ public : virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual XMLCh* transcode(const char* const toTranscode); + virtual XMLCh* transcode(const char* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp index c0e2a5771..17f084fc0 100644 --- a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp +++ b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.12 2003/05/15 18:47:04 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.11 2003/03/09 17:02:57 peiyongz * PanicHandler * @@ -842,6 +845,7 @@ IconvFBSDTransService::makeNewXMLTranscoder const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ) { #ifndef XML_USE_LIBICONV @@ -860,7 +864,7 @@ IconvFBSDTransService::makeNewXMLTranscoder resValue = XMLTransService::UnsupportedEncoding; IconvFBSDTranscoder *newTranscoder = NULL; - char *encLocal = XMLString::transcode(encodingName); + char *encLocal = XMLString::transcode(encodingName, manager); iconv_t cd_from, cd_to; { @@ -869,7 +873,7 @@ IconvFBSDTransService::makeNewXMLTranscoder if (cd_from == (iconv_t)-1) { resValue = XMLTransService::SupportFilesNotFound; if (encLocal) - delete [] encLocal; + manager->deallocate(encLocal);//delete [] encLocal; return NULL; } cd_to = iconv_open (encLocal, fUnicodeCP); @@ -877,10 +881,10 @@ IconvFBSDTransService::makeNewXMLTranscoder resValue = XMLTransService::SupportFilesNotFound; iconv_close (cd_from); if (encLocal) - delete [] encLocal; + manager->deallocate(encLocal);//delete [] encLocal; return NULL; } - newTranscoder = new IconvFBSDTranscoder (encodingName, + newTranscoder = new (manager) IconvFBSDTranscoder (encodingName, blockSize, cd_from, cd_to, uChSize(), UBO()); @@ -888,7 +892,7 @@ IconvFBSDTransService::makeNewXMLTranscoder if (newTranscoder) resValue = XMLTransService::Ok; if (encLocal) - delete [] encLocal; + manager->deallocate(encLocal);//delete [] encLocal; return newTranscoder; #endif /* !XML_USE_LIBICONV */ diff --git a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp index 0dc918d06..27183fbbf 100644 --- a/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp +++ b/src/xercesc/util/Transcoders/IconvFBSD/IconvFBSDTransService.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/15 18:47:04 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.6 2003/03/07 18:15:57 tng * Return a reference instead of void for operator= * @@ -270,6 +273,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); @@ -401,6 +405,8 @@ public: virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( @@ -410,6 +416,8 @@ public: ); virtual XMLCh* transcode(const char* const toTranscode); + virtual XMLCh* transcode(const char* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp b/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp index 4d3693777..78e541ae5 100644 --- a/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp +++ b/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/15 18:47:05 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.6 2003/04/07 16:52:13 peiyongz * Bug# 18672: IconvGNUTranscoder can't be build when namespaces is on. * Patch from Bacek@yandex-team.ru (Vasily Tchekalkin) @@ -658,12 +661,13 @@ IconvGNUTransService::makeNewXMLTranscoder const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ) { resValue = XMLTransService::UnsupportedEncoding; IconvGNUTranscoder *newTranscoder = NULL; - char *encLocal = XMLString::transcode(encodingName); + char *encLocal = XMLString::transcode(encodingName, manager); iconv_t cd_from, cd_to; { @@ -672,7 +676,7 @@ IconvGNUTransService::makeNewXMLTranscoder if (cd_from == (iconv_t)-1) { resValue = XMLTransService::SupportFilesNotFound; if (encLocal) - delete [] encLocal; + manager->deallocate(encLocal);//delete [] encLocal; return NULL; } cd_to = iconv_open (encLocal, fUnicodeCP); @@ -680,10 +684,10 @@ IconvGNUTransService::makeNewXMLTranscoder resValue = XMLTransService::SupportFilesNotFound; iconv_close (cd_from); if (encLocal) - delete [] encLocal; + manager->deallocate(encLocal);//delete [] encLocal; return NULL; } - newTranscoder = new IconvGNUTranscoder (encodingName, + newTranscoder = new (manager) IconvGNUTranscoder (encodingName, blockSize, cd_from, cd_to, uChSize(), UBO()); @@ -691,7 +695,7 @@ IconvGNUTransService::makeNewXMLTranscoder if (newTranscoder) resValue = XMLTransService::Ok; if (encLocal) - delete [] encLocal; + manager->deallocate(encLocal);//delete [] encLocal; return newTranscoder; } diff --git a/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.hpp b/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.hpp index 7a942ef24..4f6450680 100644 --- a/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.hpp +++ b/src/xercesc/util/Transcoders/IconvGNU/IconvGNUTransService.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:47:05 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2003/03/07 18:15:57 tng * Return a reference instead of void for operator= * @@ -243,6 +246,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); @@ -359,6 +363,8 @@ public: virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( @@ -368,6 +374,8 @@ public: ); virtual XMLCh* transcode(const char* const toTranscode); + virtual XMLCh* transcode(const char* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp index 9a7e8f5b6..797a2ef00 100644 --- a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp +++ b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.cpp @@ -533,7 +533,8 @@ MacOSUnicodeConverter::ConvertWideToNarrow(const XMLCh* wide, char* narrow, std: XMLTranscoder* MacOSUnicodeConverter::makeNewXMLTranscoder(const XMLCh* const encodingName , XMLTransService::Codes& resValue - , const unsigned int blockSize) + , const unsigned int blockSize + , MemoryManager* const manager) { XMLTranscoder* result = NULL; resValue = XMLTransService::Ok; @@ -578,7 +579,7 @@ MacOSUnicodeConverter::makeNewXMLTranscoder(const XMLCh* const encodingName resValue = XMLTransService::UnsupportedEncoding; } else - result = new MacOSTranscoder(encodingName, textToUnicodeInfo, unicodeToTextInfo, blockSize); + result = new (manager) MacOSTranscoder(encodingName, textToUnicodeInfo, unicodeToTextInfo, blockSize); return result; } diff --git a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp index 3a4aab327..86c5c69e9 100644 --- a/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp +++ b/src/xercesc/util/Transcoders/MacOSUnicodeConverter/MacOSUnicodeConverter.hpp @@ -129,6 +129,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); // Sniff for available functionality @@ -253,8 +254,12 @@ public : virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual XMLCh* transcode(const char* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/Transcoders/Uniconv390/Uniconv390TransService.cpp b/src/xercesc/util/Transcoders/Uniconv390/Uniconv390TransService.cpp index a5587ac84..9e2a05449 100644 --- a/src/xercesc/util/Transcoders/Uniconv390/Uniconv390TransService.cpp +++ b/src/xercesc/util/Transcoders/Uniconv390/Uniconv390TransService.cpp @@ -472,16 +472,17 @@ DBGPRINTF2("makeNewLCPTranscoder() localencoding=%s \n",nl_langinfo(CODESET)); XMLTranscoder* Uniconv390TransService:: makeNewXMLTranscoder(const XMLCh* const encodingName , XMLTransService::Codes& resValue - , const unsigned int blockSize) + , const unsigned int blockSize + , MemoryManager* const manager) { -char * localname = XMLString::transcode(encodingName); -ArrayJanitor<char> janText((char*)localname); +char * localname = XMLString::transcode(encodingName, manager); +ArrayJanitor<char> janText((char*)localname, manager); DBGPRINTF3("makeNewXMLTranscoder() encoding=%s blocksize=%d\n",localname,blockSize); if (gForceTranscode == MUST_USE_ICU) { if (gViewTranscoder) printf("IXM1001I XML - Using ICU - %s\n",localname); - return fICUService->makeNewXMLTranscoder(encodingName,resValue,blockSize); + return fICUService->makeNewXMLTranscoder(encodingName,resValue,blockSize, manager); } uniconvconverter *tconv=addConverter(localname,resValue); @@ -493,13 +494,13 @@ DBGPRINTF3("makeNewXMLTranscoder() encoding=%s blocksize=%d\n",localname,blockSi else { if (gViewTranscoder) printf("IXM1002I XML - Using ICU - %s\n",localname); - return fICUService->makeNewXMLTranscoder(encodingName,resValue,blockSize); + return fICUService->makeNewXMLTranscoder(encodingName,resValue,blockSize, manager); } } if (gViewTranscoder) printf("IXM1003I XML - Using Unicode Services - %s\n",localname); - return new Uniconv390Transcoder(encodingName, tconv, blockSize); + return new (manager) Uniconv390Transcoder(encodingName, tconv, blockSize); } @@ -772,6 +773,61 @@ char* Uniconv390LCPTranscoder::transcode(const XMLCh* const toTranscode) return retVal; } +char* Uniconv390LCPTranscoder::transcode(const XMLCh* const toTranscode, + MemoryManager* const manager) +{ +//printf("Uniconv390LCPTranscoder::transcode(const XMLCh* const toTranscode) "); +//printf("transcode handle=%x\n",fConverter->fIconv390DescriptorTo); + if (!toTranscode) + return 0; + + char* retVal = 0; + // find out the length of the source and use this as an estimate for the needed buffer length. + unsigned int wLent = getWideCharLength(toTranscode); + if (wLent == 0) { + retVal = (char*) manager->allocate(sizeof(char));//new char[1]; + retVal[0] = 0; + return retVal; + } + retVal = (char*) manager->allocate((wLent * 2 + 1) * sizeof(char));//new char[wLent * 2 + 1]; // get double just to be sure. + while (true) { + int retCode; + char *tmpInPtr = (char*) toTranscode; + char *tmpOutPtr = (char*) retVal; + unsigned int inByteLeft = wLent*sizeof(XMLCh); + unsigned int outByteLeft = wLent*sizeof(XMLCh); +//printf("!!!transcode len=%d\n",wLent); + + { // Locking scope + XMLMutexLock lockConverter(&fConverter->fMutex); + retCode = uniconv(fConverter->fIconv390DescriptorTo, &tmpInPtr, &inByteLeft, &tmpOutPtr, &outByteLeft); + } +//printf("!!!transcode uniconv finished rc=%d errno=%d\n",retCode,errno); + // If the data does not fit into our estimation of the buffer size, then delete the buffer, + // double the estimated length and try again. + if ( ((retCode < 0) && (errno == E2BIG)) || (outByteLeft == 0) ) { +//printf("!!!Uniconv390LCPTranscoder::transcode(const XMLCh* const toTranscode):Retrying with a bigger buffer.......\n"); + manager->deallocate(retVal);//delete [] retVal; + wLent*=2; + retVal = (char*) manager->allocate + ( + (wLent*sizeof(XMLCh) + 1) * sizeof(char) + );//new char[wLent*sizeof(XMLCh) + 1]; + } + // If uniconv doesn't complete for any other reason, then return failure. + else if (retCode < 0) { + return 0; + } + // it was successful so break out of the loop + else { + *tmpOutPtr = 0x00; + break; + } + } +//printf("Uniconv390LCPTranscoder::transcode(const XMLCh* const toTranscode):%s\n",retVal); + return retVal; +} + XMLCh* Uniconv390LCPTranscoder::transcode(const char* const toTranscode) { DBGPRINTF2("Uniconv390LCPTranscoder::transcode(const char* const toTranscode):%s \n",toTranscode); @@ -808,6 +864,43 @@ DBGPRINTF2("Uniconv390LCPTranscoder::transcode(const char* const toTranscode):%s return retVal; } +XMLCh* Uniconv390LCPTranscoder::transcode(const char* const toTranscode, + MemoryManager* const manager) +{ +DBGPRINTF2("Uniconv390LCPTranscoder::transcode(const char* const toTranscode):%s \n",toTranscode); +//printf("transcode handle=%x\n",fConverter->fIconv390DescriptorFrom); + if (!toTranscode) + return 0; + + XMLCh* retVal = 0; + const unsigned int len = strlen(toTranscode); + retVal = (XMLCh*) manager->allocate((len + 1) * sizeof(XMLCh));//new XMLCh[len + 1]; // +1 is for the null terminator! + if (len == 0) { + retVal[0] = 0; + return retVal; + } + + int retCode; + char *tmpInPtr = (char*) toTranscode; + char *tmpOutPtr = (char*) retVal; + unsigned int inByteLeft = len; + unsigned int outByteLeft = len*sizeof(XMLCh); + { // locking scope + XMLMutexLock lockConverter(&fConverter->fMutex); + retCode = uniconv(fConverter->fIconv390DescriptorFrom, &tmpInPtr, &inByteLeft, &tmpOutPtr, &outByteLeft); + } + // Because we check the length in the beginning, and we make sure the output buffer + // is big enough, uniconv should complete the transcoding. If it doesn't for any reason, then + // return failure. + if (retCode < 0) { + manager->deallocate(retVal);//delete [] retVal; + return 0; + } + *tmpOutPtr = 0x00; + *(tmpOutPtr+1) = 0x00; + return retVal; +} + bool Uniconv390LCPTranscoder::transcode(const char* const toTranscode , XMLCh* const toFill diff --git a/src/xercesc/util/Transcoders/Uniconv390/Uniconv390TransService.hpp b/src/xercesc/util/Transcoders/Uniconv390/Uniconv390TransService.hpp index 70440a664..7ffbafb8e 100644 --- a/src/xercesc/util/Transcoders/Uniconv390/Uniconv390TransService.hpp +++ b/src/xercesc/util/Transcoders/Uniconv390/Uniconv390TransService.hpp @@ -126,6 +126,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); @@ -227,8 +228,12 @@ public : virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual XMLCh* transcode(const char* const toTranscode); + virtual XMLCh* transcode(const char* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp b/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp index 9d960b277..ab73a9bd7 100644 --- a/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp +++ b/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp @@ -537,7 +537,8 @@ bool Win32TransService::isAlias(const HKEY encodingKey XMLTranscoder* Win32TransService::makeNewXMLTranscoder(const XMLCh* const encodingName , XMLTransService::Codes& resValue - , const unsigned int blockSize) + , const unsigned int blockSize + , MemoryManager* const manager) { const unsigned int upLen = 1024; XMLCh upEncoding[upLen + 1]; @@ -561,7 +562,7 @@ Win32TransService::makeNewXMLTranscoder(const XMLCh* const encoding } // We found it, so return a Win32 transcoder for this encoding - return new Win32Transcoder + return new (manager) Win32Transcoder ( encodingName , theEntry->getWinCP() @@ -902,6 +903,35 @@ char* Win32LCPTranscoder::transcode(const XMLCh* const toTranscode) return retVal; } +char* Win32LCPTranscoder::transcode(const XMLCh* const toTranscode, + MemoryManager* const manager) +{ + if (!toTranscode) + return 0; + + char* retVal = 0; + if (*toTranscode) + { + // Calc the needed size + const unsigned int neededLen = ::wcstombs(0, toTranscode, 0); + if (neededLen == (unsigned int)-1) + return 0; + + // Allocate a buffer of that size plus one for the null and transcode + retVal = (char*) manager->allocate((neededLen + 1) * sizeof(char)); //new char[neededLen + 1]; + ::wcstombs(retVal, toTranscode, neededLen + 1); + + // And cap it off anyway just to make sure + retVal[neededLen] = 0; + } + else + { + retVal = (char*) manager->allocate(sizeof(char)); //new char[1]; + retVal[0] = 0; + } + return retVal; +} + XMLCh* Win32LCPTranscoder::transcode(const char* const toTranscode) { @@ -935,6 +965,39 @@ XMLCh* Win32LCPTranscoder::transcode(const char* const toTranscode) return retVal; } +XMLCh* Win32LCPTranscoder::transcode(const char* const toTranscode, + MemoryManager* const manager) +{ + if (!toTranscode) + return 0; + + XMLCh* retVal = 0; + if (*toTranscode) + { + // Calculate the buffer size required + const unsigned int neededLen = calcRequiredSize(toTranscode); + if (neededLen == 0) + { + retVal = (XMLCh*) manager->allocate(sizeof(XMLCh)); //new XMLCh[1]; + retVal[0] = 0; + return retVal; + } + + // Allocate a buffer of that size plus one for the null and transcode + retVal = (XMLCh*) manager->allocate((neededLen + 1) * sizeof(XMLCh)); //new XMLCh[neededLen + 1]; + ::mbstowcs(retVal, toTranscode, neededLen + 1); + + // Cap it off just to make sure. We are so paranoid! + retVal[neededLen] = 0; + } + else + { + retVal = (XMLCh*) manager->allocate(sizeof(XMLCh*)); //new XMLCh[1]; + retVal[0] = 0; + } + return retVal; +} + bool Win32LCPTranscoder::transcode( const char* const toTranscode , XMLCh* const toFill diff --git a/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp b/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp index 40b73d878..d29814b31 100644 --- a/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp +++ b/src/xercesc/util/Transcoders/Win32/Win32TransService.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:47:07 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2003/03/07 18:15:58 tng * Return a reference instead of void for operator= * @@ -177,6 +180,7 @@ protected : const XMLCh* const encodingName , XMLTransService::Codes& resValue , const unsigned int blockSize + , MemoryManager* const manager ); @@ -309,8 +313,12 @@ public : virtual unsigned int calcRequiredSize(const XMLCh* const srcText); virtual char* transcode(const XMLCh* const toTranscode); + virtual char* transcode(const XMLCh* const toTranscode, + MemoryManager* const manager); virtual XMLCh* transcode(const char* const toTranscode); + virtual XMLCh* transcode(const char* const toTranscode, + MemoryManager* const manager); virtual bool transcode ( diff --git a/src/xercesc/util/regx/BMPattern.cpp b/src/xercesc/util/regx/BMPattern.cpp index bad554bef..0b230ec74 100644 --- a/src/xercesc/util/regx/BMPattern.cpp +++ b/src/xercesc/util/regx/BMPattern.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:42:54 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 15:17:00 tng * C++ Namespace Support. * @@ -76,20 +79,26 @@ #include <xercesc/util/regx/BMPattern.hpp> #include <xercesc/util/XMLString.hpp> #include <xercesc/util/Janitor.hpp> +#include <xercesc/framework/MemoryManager.hpp> XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // BMPattern: Constructors // --------------------------------------------------------------------------- -BMPattern::BMPattern(const XMLCh* const pattern, bool ignoreCase) - :fPattern(XMLString::replicate(pattern)), - fUppercasePattern(0), - fIgnoreCase(ignoreCase), - fShiftTable(0), - fShiftTableLen(256) { - +BMPattern::BMPattern( const XMLCh* const pattern + , bool ignoreCase + , MemoryManager* const manager) : + + fIgnoreCase(ignoreCase) + , fShiftTableLen(256) + , fShiftTable(0) + , fPattern(0) + , fUppercasePattern(0) + , fMemoryManager(manager) +{ try { + fPattern = XMLString::replicate(pattern, fMemoryManager); initialize(); } catch(...) { @@ -99,14 +108,20 @@ BMPattern::BMPattern(const XMLCh* const pattern, bool ignoreCase) } } -BMPattern::BMPattern(const XMLCh* const pattern, int tableSize, bool ignoreCase) - :fPattern(XMLString::replicate(pattern)), - fUppercasePattern(0), - fIgnoreCase(ignoreCase), - fShiftTable(0), - fShiftTableLen(tableSize) { - +BMPattern::BMPattern( const XMLCh* const pattern + , int tableSize + , bool ignoreCase + , MemoryManager* const manager) : + + fIgnoreCase(ignoreCase) + , fShiftTableLen(tableSize) + , fShiftTable(0) + , fPattern(0) + , fUppercasePattern(0) + , fMemoryManager(manager) +{ try { + fPattern = XMLString::replicate(pattern, fMemoryManager); initialize(); } catch(...) { @@ -135,11 +150,11 @@ int BMPattern::matches(const XMLCh* const content, int start, int limit) { if (fIgnoreCase) { - ucContent = XMLString::replicate(content); + ucContent = XMLString::replicate(content, fMemoryManager); XMLString::upperCase(ucContent); } - ArrayJanitor<XMLCh> janUCContent(ucContent); + ArrayJanitor<XMLCh> janUCContent(ucContent, fMemoryManager); int index = start + patternLen; @@ -184,17 +199,17 @@ void BMPattern::initialize() { const unsigned int patternLen = XMLString::stringLen(fPattern); XMLCh* lowercasePattern = 0; - fShiftTable = new int[fShiftTableLen]; + fShiftTable = (int*) fMemoryManager->allocate(fShiftTableLen*sizeof(int)); //new int[fShiftTableLen]; if (fIgnoreCase) { - fUppercasePattern = XMLString::replicate(fPattern); - lowercasePattern = XMLString::replicate(fPattern); + fUppercasePattern = XMLString::replicate(fPattern, fMemoryManager); + lowercasePattern = XMLString::replicate(fPattern, fMemoryManager); XMLString::upperCase(fUppercasePattern); XMLString::lowerCase(lowercasePattern); } - ArrayJanitor<XMLCh> janLowercase(lowercasePattern); + ArrayJanitor<XMLCh> janLowercase(lowercasePattern, fMemoryManager); for (unsigned int i=0; i< fShiftTableLen; i++) fShiftTable[i] = patternLen; @@ -222,6 +237,16 @@ void BMPattern::initialize() { } } +// --------------------------------------------------------------------------- +// BMPattern: Cleanup +// --------------------------------------------------------------------------- +void BMPattern::cleanUp() { + + fMemoryManager->deallocate(fPattern);//delete [] fPattern; + fMemoryManager->deallocate(fUppercasePattern);//delete [] fUppercasePattern; + fMemoryManager->deallocate(fShiftTable); +} + XERCES_CPP_NAMESPACE_END /** diff --git a/src/xercesc/util/regx/BMPattern.hpp b/src/xercesc/util/regx/BMPattern.hpp index aed51880d..9ae02526a 100644 --- a/src/xercesc/util/regx/BMPattern.hpp +++ b/src/xercesc/util/regx/BMPattern.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -63,11 +63,13 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XercesDefs.hpp> +#include <xercesc/util/XMemory.hpp> +#include <xercesc/util/PlatformUtils.hpp> XERCES_CPP_NAMESPACE_BEGIN -class XMLUTIL_EXPORT BMPattern { +class XMLUTIL_EXPORT BMPattern : public XMemory +{ public: // ----------------------------------------------------------------------- // Public Constructors and Destructor @@ -83,8 +85,15 @@ public: * * @param ignoreCase A flag to indicate whether to ignore case * matching or not. + * + * @param manager The configurable memory manager */ - BMPattern(const XMLCh* const pattern, bool ignoreCase); + BMPattern + ( + const XMLCh* const pattern + , bool ignoreCase + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); /** * This is the constructor which takes all of the information @@ -96,8 +105,16 @@ public: * * @param ignoreCase A flag to indicate whether to ignore case * matching or not. + * + * @param manager The configurable memory manager */ - BMPattern(const XMLCh* const pattern, int tableSize, bool ignoreCase); + BMPattern + ( + const XMLCh* const pattern + , int tableSize + , bool ignoreCase + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); //@} @@ -160,23 +177,14 @@ private : // This is a table of offsets for shifting purposes used by the BM // search algorithm, and its length. // ----------------------------------------------------------------------- - XMLCh* fPattern; - XMLCh* fUppercasePattern; - bool fIgnoreCase; - int* fShiftTable; - unsigned int fShiftTableLen; + bool fIgnoreCase; + unsigned int fShiftTableLen; + int* fShiftTable; + XMLCh* fPattern; + XMLCh* fUppercasePattern; + MemoryManager* fMemoryManager; }; -// --------------------------------------------------------------------------- -// BMPattern: Cleanup -// --------------------------------------------------------------------------- -inline void BMPattern::cleanUp() { - - delete [] fPattern; - delete [] fUppercasePattern; - delete [] fShiftTable; -} - XERCES_CPP_NAMESPACE_END #endif diff --git a/src/xercesc/util/regx/Match.hpp b/src/xercesc/util/regx/Match.hpp index 4a4e507fc..9a6e84555 100644 --- a/src/xercesc/util/regx/Match.hpp +++ b/src/xercesc/util/regx/Match.hpp @@ -72,7 +72,8 @@ XERCES_CPP_NAMESPACE_BEGIN /** * An instance of this class has ranges captured in matching */ -class XMLUTIL_EXPORT Match { + class XMLUTIL_EXPORT Match : public XMemory +{ public: // ----------------------------------------------------------------------- diff --git a/src/xercesc/util/regx/Op.hpp b/src/xercesc/util/regx/Op.hpp index 1259b1127..d224f14a0 100644 --- a/src/xercesc/util/regx/Op.hpp +++ b/src/xercesc/util/regx/Op.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -64,7 +64,6 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/util/RefVectorOf.hpp> #include <xercesc/util/RuntimeException.hpp> @@ -76,7 +75,8 @@ XERCES_CPP_NAMESPACE_BEGIN class Token; -class XMLUTIL_EXPORT Op { +class XMLUTIL_EXPORT Op : public XMemory +{ public: enum { diff --git a/src/xercesc/util/regx/OpFactory.cpp b/src/xercesc/util/regx/OpFactory.cpp index 349b69446..86fdc7d08 100644 --- a/src/xercesc/util/regx/OpFactory.cpp +++ b/src/xercesc/util/regx/OpFactory.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:42:54 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/11/04 15:17:00 tng * C++ Namespace Support. * @@ -81,6 +84,7 @@ // --------------------------------------------------------------------------- #include <xercesc/util/regx/OpFactory.hpp> #include <xercesc/util/regx/Op.hpp> +#include <xercesc/util/PlatformUtils.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -88,8 +92,10 @@ XERCES_CPP_NAMESPACE_BEGIN // OpFactory: Constructors and Destructor // --------------------------------------------------------------------------- OpFactory::OpFactory() : - fOpVector(new RefVectorOf<Op>(16, true)) { - + fOpVector(0) + , fMemoryManager(XMLPlatformUtils::fgMemoryManager) +{ + fOpVector = new (fMemoryManager) RefVectorOf<Op>(16, true); } OpFactory::~OpFactory() { @@ -103,14 +109,14 @@ OpFactory::~OpFactory() { // --------------------------------------------------------------------------- Op* OpFactory::createDotOp() { - Op* tmpOp = new Op(Op::O_DOT); + Op* tmpOp = new (fMemoryManager) Op(Op::O_DOT); fOpVector->addElement(tmpOp); return tmpOp; } CharOp* OpFactory::createCharOp(int data) { - CharOp* tmpOp = new CharOp(Op::O_CHAR, data); + CharOp* tmpOp = new (fMemoryManager) CharOp(Op::O_CHAR, data); fOpVector->addElement(tmpOp); return tmpOp; @@ -118,7 +124,7 @@ CharOp* OpFactory::createCharOp(int data) { CharOp* OpFactory::createAnchorOp(int data) { - CharOp* tmpOp = new CharOp(Op::O_ANCHOR, data); + CharOp* tmpOp = new (fMemoryManager) CharOp(Op::O_ANCHOR, data); fOpVector->addElement(tmpOp); return tmpOp; @@ -126,7 +132,7 @@ CharOp* OpFactory::createAnchorOp(int data) { CharOp* OpFactory::createCaptureOp(int number, const Op* const next) { - CharOp* tmpOp = new CharOp(Op::O_CAPTURE, number); + CharOp* tmpOp = new (fMemoryManager) CharOp(Op::O_CAPTURE, number); tmpOp->setNextOp(next); fOpVector->addElement(tmpOp); @@ -135,7 +141,7 @@ CharOp* OpFactory::createCaptureOp(int number, const Op* const next) { UnionOp* OpFactory::createUnionOp(int size) { - UnionOp* tmpOp = new UnionOp(Op::O_UNION, size); + UnionOp* tmpOp = new (fMemoryManager) UnionOp(Op::O_UNION, size); fOpVector->addElement(tmpOp); return tmpOp; @@ -143,7 +149,7 @@ UnionOp* OpFactory::createUnionOp(int size) { ChildOp* OpFactory::createClosureOp(int id) { - ModifierOp* tmpOp = new ModifierOp(Op::O_CLOSURE, id, -1); + ModifierOp* tmpOp = new (fMemoryManager) ModifierOp(Op::O_CLOSURE, id, -1); fOpVector->addElement(tmpOp); return tmpOp; @@ -151,7 +157,7 @@ ChildOp* OpFactory::createClosureOp(int id) { ChildOp* OpFactory::createNonGreedyClosureOp() { - ChildOp* tmpOp = new ChildOp(Op::O_NONGREEDYCLOSURE); + ChildOp* tmpOp = new (fMemoryManager) ChildOp(Op::O_NONGREEDYCLOSURE); fOpVector->addElement(tmpOp); return tmpOp; @@ -159,7 +165,7 @@ ChildOp* OpFactory::createNonGreedyClosureOp() { ChildOp* OpFactory::createQuestionOp(bool nonGreedy) { - ChildOp* tmpOp = new ChildOp(nonGreedy ? Op::O_NONGREEDYQUESTION : + ChildOp* tmpOp = new (fMemoryManager) ChildOp(nonGreedy ? Op::O_NONGREEDYQUESTION : Op::O_QUESTION); fOpVector->addElement(tmpOp); @@ -168,7 +174,7 @@ ChildOp* OpFactory::createQuestionOp(bool nonGreedy) { RangeOp* OpFactory::createRangeOp(const Token* const token) { - RangeOp* tmpOp = new RangeOp(Op::O_RANGE, token); + RangeOp* tmpOp = new (fMemoryManager) RangeOp(Op::O_RANGE, token); fOpVector->addElement(tmpOp); return tmpOp; @@ -177,7 +183,7 @@ RangeOp* OpFactory::createRangeOp(const Token* const token) { ChildOp* OpFactory::createLookOp(const short type, const Op* const next, const Op* const branch) { - ChildOp* tmpOp = new ChildOp(type); + ChildOp* tmpOp = new (fMemoryManager) ChildOp(type); tmpOp->setNextOp(next); tmpOp->setChild(branch); @@ -187,7 +193,7 @@ ChildOp* OpFactory::createLookOp(const short type, const Op* const next, CharOp* OpFactory::createBackReferenceOp(int refNo) { - CharOp* tmpOp = new CharOp(Op::O_BACKREFERENCE, refNo); + CharOp* tmpOp = new (fMemoryManager) CharOp(Op::O_BACKREFERENCE, refNo); fOpVector->addElement(tmpOp); return tmpOp; @@ -195,7 +201,7 @@ CharOp* OpFactory::createBackReferenceOp(int refNo) { StringOp* OpFactory::createStringOp(const XMLCh* const literal) { - StringOp* tmpOp = new StringOp(Op::O_STRING, literal); + StringOp* tmpOp = new (fMemoryManager) StringOp(Op::O_STRING, literal); fOpVector->addElement(tmpOp); return tmpOp; @@ -204,7 +210,7 @@ StringOp* OpFactory::createStringOp(const XMLCh* const literal) { ChildOp* OpFactory::createIndependentOp(const Op* const next, const Op* const branch) { - ChildOp* tmpOp = new ChildOp(Op::O_INDEPENDENT); + ChildOp* tmpOp = new (fMemoryManager) ChildOp(Op::O_INDEPENDENT); tmpOp->setNextOp(next); tmpOp->setChild(branch); @@ -216,7 +222,7 @@ ModifierOp* OpFactory::createModifierOp(const Op* const next, const Op* const branch, const int add, const int mask) { - ModifierOp* tmpOp = new ModifierOp(Op::O_MODIFIER, add, mask); + ModifierOp* tmpOp = new (fMemoryManager) ModifierOp(Op::O_MODIFIER, add, mask); tmpOp->setNextOp(next); tmpOp->setChild(branch); @@ -228,7 +234,7 @@ ConditionOp* OpFactory::createConditionOp(const Op* const next, const int ref, const Op* const yesFlow, const Op* const noFlow) { - ConditionOp* tmpOp = new ConditionOp(Op::O_CONDITION, ref, conditionFlow, + ConditionOp* tmpOp = new (fMemoryManager) ConditionOp(Op::O_CONDITION, ref, conditionFlow, yesFlow, noFlow); tmpOp->setNextOp(next); diff --git a/src/xercesc/util/regx/OpFactory.hpp b/src/xercesc/util/regx/OpFactory.hpp index e2deac76a..75c723a8e 100644 --- a/src/xercesc/util/regx/OpFactory.hpp +++ b/src/xercesc/util/regx/OpFactory.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -64,7 +64,7 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XMLUniDefs.hpp> +#include <xercesc/util/XMemory.hpp> #include <xercesc/util/RefVectorOf.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -90,8 +90,8 @@ class Token; * all associated Op objects will be deleted. */ -class XMLUTIL_EXPORT OpFactory { - +class XMLUTIL_EXPORT OpFactory : public XMemory +{ public: // ----------------------------------------------------------------------- // Constructors and destructors @@ -146,6 +146,7 @@ private: // Contains Op objects. Used for memory cleanup. // ----------------------------------------------------------------------- RefVectorOf<Op>* fOpVector; + MemoryManager* fMemoryManager; }; // --------------------------------------------------------------------------- diff --git a/src/xercesc/util/regx/ParserForXMLSchema.cpp b/src/xercesc/util/regx/ParserForXMLSchema.cpp index e2a8378c1..2dc212862 100644 --- a/src/xercesc/util/regx/ParserForXMLSchema.cpp +++ b/src/xercesc/util/regx/ParserForXMLSchema.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:42:54 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2003/03/18 19:38:28 knoaman * Schema Errata E2-18 + misc. regex fixes. * @@ -114,14 +117,15 @@ #include <xercesc/util/regx/RegxDefs.hpp> #include <xercesc/util/ParseException.hpp> #include <xercesc/util/RuntimeException.hpp> +#include <xercesc/util/PlatformUtils.hpp> XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // ParserForXMLSchema: Constructors and Destructors // --------------------------------------------------------------------------- -ParserForXMLSchema::ParserForXMLSchema() - : RegxParser() +ParserForXMLSchema::ParserForXMLSchema(MemoryManager* const manager) + : RegxParser(manager) { } diff --git a/src/xercesc/util/regx/ParserForXMLSchema.hpp b/src/xercesc/util/regx/ParserForXMLSchema.hpp index 1c4a1701f..646172569 100644 --- a/src/xercesc/util/regx/ParserForXMLSchema.hpp +++ b/src/xercesc/util/regx/ParserForXMLSchema.hpp @@ -79,7 +79,7 @@ public: // ----------------------------------------------------------------------- // Public Constructors and Destructor // ----------------------------------------------------------------------- - ParserForXMLSchema(); + ParserForXMLSchema(MemoryManager* const manager); ~ParserForXMLSchema(); // ----------------------------------------------------------------------- diff --git a/src/xercesc/util/regx/RangeFactory.hpp b/src/xercesc/util/regx/RangeFactory.hpp index fde574dda..8b183227d 100644 --- a/src/xercesc/util/regx/RangeFactory.hpp +++ b/src/xercesc/util/regx/RangeFactory.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -64,12 +64,12 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XercesDefs.hpp> +#include <xercesc/util/XMemory.hpp> XERCES_CPP_NAMESPACE_BEGIN -class XMLUTIL_EXPORT RangeFactory { - +class XMLUTIL_EXPORT RangeFactory : public XMemory +{ public: // ----------------------------------------------------------------------- // Constructors and destructors diff --git a/src/xercesc/util/regx/RangeTokenMap.hpp b/src/xercesc/util/regx/RangeTokenMap.hpp index 9f977e9cb..9960387bb 100644 --- a/src/xercesc/util/regx/RangeTokenMap.hpp +++ b/src/xercesc/util/regx/RangeTokenMap.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -64,8 +64,8 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/StringPool.hpp> #include <xercesc/util/Mutexes.hpp> +#include <xercesc/util/RefHashTableOf.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -75,9 +75,10 @@ XERCES_CPP_NAMESPACE_BEGIN class RangeToken; class RangeFactory; class TokenFactory; +class XMLStringPool; - -class XMLUTIL_EXPORT RangeTokenElemMap { +class XMLUTIL_EXPORT RangeTokenElemMap : public XMemory +{ public: RangeTokenElemMap(unsigned int categoryId); @@ -109,8 +110,8 @@ private: }; -class XMLUTIL_EXPORT RangeTokenMap { - +class XMLUTIL_EXPORT RangeTokenMap : public XMemory +{ public: // ----------------------------------------------------------------------- // Putter methods diff --git a/src/xercesc/util/regx/RegularExpression.cpp b/src/xercesc/util/regx/RegularExpression.cpp index 4a39a38e5..a9385f944 100644 --- a/src/xercesc/util/regx/RegularExpression.cpp +++ b/src/xercesc/util/regx/RegularExpression.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.8 2003/05/15 18:42:54 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.7 2003/05/12 10:08:22 gareth * The correct file this time. * @@ -119,6 +122,7 @@ #include <xercesc/util/regx/ParserForXMLSchema.hpp> #include <xercesc/util/Janitor.hpp> #include <xercesc/util/ParseException.hpp> +#include <xercesc/util/IllegalArgumentException.hpp> #include <xercesc/framework/XMLBuffer.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -357,7 +361,7 @@ void RegularExpression::setPattern(const XMLCh* const pattern, fPattern = XMLString::replicate(pattern); RegxParser* regxParser = isSet(fOptions, XMLSCHEMA_MODE) - ? new ParserForXMLSchema() : new RegxParser(); + ? new ParserForXMLSchema(XMLPlatformUtils::fgMemoryManager) : new RegxParser(XMLPlatformUtils::fgMemoryManager); if (regxParser) { regxParser->setTokenFactory(fTokenFactory); diff --git a/src/xercesc/util/regx/RegularExpression.hpp b/src/xercesc/util/regx/RegularExpression.hpp index 26b047455..71d82483c 100644 --- a/src/xercesc/util/regx/RegularExpression.hpp +++ b/src/xercesc/util/regx/RegularExpression.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -64,14 +64,13 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XMLUniDefs.hpp> #include <xercesc/util/RefArrayVectorOf.hpp> #include <xercesc/util/XMLString.hpp> +#include <xercesc/util/Janitor.hpp> +#include <xercesc/util/Mutexes.hpp> #include <xercesc/util/regx/Op.hpp> #include <xercesc/util/regx/TokenFactory.hpp> #include <xercesc/util/regx/BMPattern.hpp> -#include <xercesc/util/Janitor.hpp> -#include <xercesc/util/Mutexes.hpp> #include <xercesc/util/regx/ModifierToken.hpp> #include <xercesc/util/regx/ConditionToken.hpp> #include <xercesc/util/regx/OpFactory.hpp> @@ -81,13 +80,11 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Forward Declaration // --------------------------------------------------------------------------- -class Token; -class BMPattern; class RangeToken; class Match; -class TokenFactory; -class XMLUTIL_EXPORT RegularExpression { +class XMLUTIL_EXPORT RegularExpression : public XMemory +{ public: // ----------------------------------------------------------------------- // Public Constructors and Destructor @@ -168,7 +165,7 @@ private: // ----------------------------------------------------------------------- // Private data types // ----------------------------------------------------------------------- - class XMLUTIL_EXPORT Context + class XMLUTIL_EXPORT Context : public XMemory { public : Context(); diff --git a/src/xercesc/util/regx/RegxParser.cpp b/src/xercesc/util/regx/RegxParser.cpp index f946438c0..d6b000ae4 100644 --- a/src/xercesc/util/regx/RegxParser.cpp +++ b/src/xercesc/util/regx/RegxParser.cpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/15 18:42:55 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.6 2003/03/18 19:38:28 knoaman * Schema Errata E2-18 + misc. regex fixes. * @@ -122,14 +125,13 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/util/regx/RegxParser.hpp> -#include <xercesc/util/PlatformUtils.hpp> #include <xercesc/util/XMLString.hpp> +#include <xercesc/util/ParseException.hpp> #include <xercesc/util/regx/RegularExpression.hpp> #include <xercesc/util/regx/RegxUtil.hpp> #include <xercesc/util/regx/RegxDefs.hpp> #include <xercesc/util/regx/TokenInc.hpp> #include <xercesc/framework/XMLErrorCodes.hpp> -#include <xercesc/util/ParseException.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -144,7 +146,7 @@ const unsigned short RegxParser::S_INXBRACKETS = 2; // RegxParser::ReferencePostion: Constructors and Destructor // --------------------------------------------------------------------------- RegxParser::ReferencePosition::ReferencePosition(const int refNo, - const int position) + const int position) :fReferenceNo(refNo) , fPosition(position) { @@ -154,8 +156,9 @@ RegxParser::ReferencePosition::ReferencePosition(const int refNo, // --------------------------------------------------------------------------- // RegxParser: Constructors and Destructors // --------------------------------------------------------------------------- -RegxParser::RegxParser() - :fHasBackReferences(false), +RegxParser::RegxParser(MemoryManager* const manager) + :fMemoryManager(manager), + fHasBackReferences(false), fOptions(0), fOffset(0), fNoGroups(1), @@ -171,7 +174,7 @@ RegxParser::RegxParser() RegxParser::~RegxParser() { - delete [] fString; + fMemoryManager->deallocate(fString);//delete [] fString; delete fReferences; } @@ -193,13 +196,15 @@ Token* RegxParser::parse(const XMLCh* const regxStr, const int options) { fNoGroups = 1; fHasBackReferences = false; setParseContext(S_NORMAL); - delete [] fString; - fString = XMLString::replicate(regxStr); + if (fString) + fMemoryManager->deallocate(fString);//delete [] fString; + fString = XMLString::replicate(regxStr, fMemoryManager); if (isSet(RegularExpression::EXTENDED_COMMENT)) { - delete [] fString; - fString = RegxUtil::stripExtendedComment(regxStr); + if (fString) + fMemoryManager->deallocate(fString);//delete [] fString; + fString = RegxUtil::stripExtendedComment(regxStr, fMemoryManager); } fStringLen = XMLString::stringLen(fString); @@ -648,10 +653,10 @@ Token* RegxParser::processCondition() { fHasBackReferences = true; if (fReferences == 0) { - this->fReferences = new RefVectorOf<ReferencePosition>(8, true); + this->fReferences = new (fMemoryManager) RefVectorOf<ReferencePosition>(8, true); } - fReferences->addElement(new ReferencePosition(refNo, fOffset)); + fReferences->addElement(new (fMemoryManager) ReferencePosition(refNo, fOffset)); fOffset++; if (fString[fOffset] != chCloseParen) @@ -840,10 +845,10 @@ Token* RegxParser::processBackReference() { fHasBackReferences = true; if (fReferences == 0) { - fReferences = new RefVectorOf<ReferencePosition>(8, true); + fReferences = new (fMemoryManager) RefVectorOf<ReferencePosition>(8, true); } - fReferences->addElement(new ReferencePosition(refNo, fOffset - 2)); + fReferences->addElement(new (fMemoryManager) ReferencePosition(refNo, fOffset - 2)); processNext(); return tok; } @@ -1090,8 +1095,11 @@ RangeToken* RegxParser::processBacksolidus_pP(const XMLInt32 ch) { ThrowXML(ParseException,XMLExcepts::Parser_Atom3); fOffset = nameEnd + 1; - XMLCh* rangeName = new XMLCh[(nameEnd - nameStart) + 1]; - ArrayJanitor<XMLCh> janRangeName(rangeName); + XMLCh* rangeName = (XMLCh*) fMemoryManager->allocate + ( + (nameEnd - nameStart + 1) * sizeof(XMLCh) + );//new XMLCh[(nameEnd - nameStart) + 1]; + ArrayJanitor<XMLCh> janRangeName(rangeName, fMemoryManager); XMLString::subString(rangeName, fString, nameStart, nameEnd); return fTokenFactory->getRange(rangeName, !(ch == chLatin_p)); @@ -1199,8 +1207,11 @@ RangeToken* RegxParser::parseCharacterClass(const bool useNRange) { positive = false; } - XMLCh* name = new XMLCh[(nameEnd - fOffset) + 1]; - ArrayJanitor<XMLCh> janName(name); + XMLCh* name = (XMLCh*) fMemoryManager->allocate + ( + (nameEnd - fOffset + 1) * sizeof(XMLCh) + );//new XMLCh[(nameEnd - fOffset) + 1]; + ArrayJanitor<XMLCh> janName(name, fMemoryManager); XMLString::subString(name, fString, fOffset, nameEnd); RangeToken* rangeTok = fTokenFactory->getRange(name, !positive); diff --git a/src/xercesc/util/regx/RegxParser.hpp b/src/xercesc/util/regx/RegxParser.hpp index ee96324ab..db98b10de 100644 --- a/src/xercesc/util/regx/RegxParser.hpp +++ b/src/xercesc/util/regx/RegxParser.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -80,7 +80,8 @@ class Token; class RangeToken; class TokenFactory; -class XMLUTIL_EXPORT RegxParser { +class XMLUTIL_EXPORT RegxParser : public XMemory +{ public: // ----------------------------------------------------------------------- @@ -122,7 +123,7 @@ public: // ----------------------------------------------------------------------- // Public Constructors and Destructor // ----------------------------------------------------------------------- - RegxParser(); + RegxParser(MemoryManager* const manager); virtual ~RegxParser(); // ----------------------------------------------------------------------- @@ -206,7 +207,7 @@ private: // ----------------------------------------------------------------------- // Private data types // ----------------------------------------------------------------------- - class ReferencePosition + class ReferencePosition : public XMemory { public : ReferencePosition(const int refNo, const int position); @@ -224,6 +225,7 @@ private: // ----------------------------------------------------------------------- // Private data members // ----------------------------------------------------------------------- + MemoryManager* fMemoryManager; bool fHasBackReferences; int fOptions; int fOffset; diff --git a/src/xercesc/util/regx/RegxUtil.cpp b/src/xercesc/util/regx/RegxUtil.cpp index b67102c93..fec10cb0e 100644 --- a/src/xercesc/util/regx/RegxUtil.cpp +++ b/src/xercesc/util/regx/RegxUtil.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:42:55 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 15:17:00 tng * C++ Namespace Support. * @@ -77,7 +80,7 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/util/regx/RegxUtil.hpp> -#include <xercesc/framework/XMLBuffer.hpp> +#include <xercesc/util/XMLString.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -94,59 +97,60 @@ XMLCh* RegxUtil::decomposeToSurrogates(XMLInt32 ch) { } -XMLCh* RegxUtil::stripExtendedComment(const XMLCh* const expression) { +XMLCh* RegxUtil::stripExtendedComment(const XMLCh* const expression, + MemoryManager* const manager) { - unsigned int strLen = XMLString::stringLen(expression); + XMLCh* buffer = (manager) ? XMLString::replicate(expression) + : XMLString::replicate(expression, manager); - if (strLen == 0) - return 0; + if (buffer) + { + const XMLCh* inPtr = expression; + XMLCh* outPtr = buffer; - XMLBuffer buffer; - unsigned int offset = 0; + while (*inPtr) { - while (offset < strLen) { + XMLCh ch = *inPtr++; - XMLCh ch = expression[offset++]; + if (ch == chFF || ch == chCR || ch == chLF + || ch == chSpace || ch == chHTab) { + continue; + } - if (ch == chFF || ch == chCR || ch == chLF - || ch == chSpace || ch == chHTab) { - continue; - } + // Skips chracters between '#' and a line end. + if (ch == chPound) { - // Skips chracters between '#' and a line end. - if (ch == chPound) { + while (*inPtr) { - while (offset < strLen) { + ch = *inPtr++; + if (ch == chLF || ch == chCR) + break; + } - ch = expression[offset++]; - if (ch == chLF || ch == chCR) - break; - } - continue; - } + continue; + } - XMLCh next; - if (ch == chBackSlash && offset < strLen) { + if (ch == chBackSlash && *inPtr) { - if ((next = expression[offset]) == chPound - || next == chHTab || next == chLF || next == chFF - || next == chCR || next == chSpace) { + if ((ch = *inPtr++) == chPound || ch == chHTab || ch == chLF + || ch == chFF || ch == chCR || ch == chSpace) { + *outPtr++ = ch; + } + else { // Other escaped character. - buffer.append(next); - offset++; - } else { // Other escaped character. + *outPtr++ = chBackSlash; + *outPtr++ = ch; + } + } + else { // As is. + *outPtr++ = ch; + } + } - buffer.append(chBackSlash); - buffer.append(next); - offset++; - } - } - else { // As is. - buffer.append(ch); - } - } + *outPtr = chNull; // null terminate + } - return XMLString::replicate(buffer.getRawBuffer()); + return buffer; } XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/util/regx/RegxUtil.hpp b/src/xercesc/util/regx/RegxUtil.hpp index 9788a1836..973ede186 100644 --- a/src/xercesc/util/regx/RegxUtil.hpp +++ b/src/xercesc/util/regx/RegxUtil.hpp @@ -64,11 +64,13 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XMLString.hpp> #include <xercesc/util/XMLUniDefs.hpp> + XERCES_CPP_NAMESPACE_BEGIN +class MemoryManager; + class XMLUTIL_EXPORT RegxUtil { public: @@ -83,7 +85,8 @@ public: static bool isLowSurrogate(const XMLCh ch); static bool isHighSurrogate(const XMLCh ch); static XMLCh* decomposeToSurrogates(XMLInt32 ch); - static XMLCh* stripExtendedComment(const XMLCh* const expression); + static XMLCh* stripExtendedComment(const XMLCh* const expression, + MemoryManager* const manager = 0); private: // ----------------------------------------------------------------------- diff --git a/src/xercesc/util/regx/Token.hpp b/src/xercesc/util/regx/Token.hpp index 073f338ea..169b040bf 100644 --- a/src/xercesc/util/regx/Token.hpp +++ b/src/xercesc/util/regx/Token.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -64,7 +64,6 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/util/RuntimeException.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -76,7 +75,8 @@ class RangeToken; class TokenFactory; -class XMLUTIL_EXPORT Token { +class XMLUTIL_EXPORT Token : public XMemory +{ public: // ----------------------------------------------------------------------- // Public Constructors and Destructor diff --git a/src/xercesc/util/regx/TokenFactory.hpp b/src/xercesc/util/regx/TokenFactory.hpp index 1d53c2430..77818cabb 100644 --- a/src/xercesc/util/regx/TokenFactory.hpp +++ b/src/xercesc/util/regx/TokenFactory.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -64,8 +64,6 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XMLUniDefs.hpp> -#include <xercesc/util/RefHashTableOf.hpp> #include <xercesc/util/RefVectorOf.hpp> #include <xercesc/util/regx/Token.hpp> #include <xercesc/util/Mutexes.hpp> @@ -85,7 +83,8 @@ class ParenToken; class StringToken; class UnionToken; -class XMLUTIL_EXPORT TokenFactory { +class XMLUTIL_EXPORT TokenFactory : public XMemory +{ public: // ----------------------------------------------------------------------- diff --git a/src/xercesc/validators/DTD/DTDAttDef.cpp b/src/xercesc/validators/DTD/DTDAttDef.cpp index 65d4ceec8..983bf9beb 100644 --- a/src/xercesc/validators/DTD/DTDAttDef.cpp +++ b/src/xercesc/validators/DTD/DTDAttDef.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:54:50 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:50:40 tng * C++ Namespace Support. * @@ -104,7 +107,7 @@ DTDAttDef::DTDAttDef(const XMLCh* const attName , fElemId(XMLElementDecl::fgInvalidElemId) , fName(0) { - fName = XMLString::replicate(attName); + fName = XMLString::replicate(attName, getMemoryManager()); } DTDAttDef::DTDAttDef( const XMLCh* const attName @@ -117,12 +120,12 @@ DTDAttDef::DTDAttDef( const XMLCh* const attName , fElemId(XMLElementDecl::fgInvalidElemId) , fName(0) { - fName = XMLString::replicate(attName); + fName = XMLString::replicate(attName, getMemoryManager()); } DTDAttDef::~DTDAttDef() { - delete [] fName; + getMemoryManager()->deallocate(fName); //delete [] fName; } @@ -131,8 +134,8 @@ DTDAttDef::~DTDAttDef() // --------------------------------------------------------------------------- void DTDAttDef::setName(const XMLCh* const newName) { - delete [] fName; - fName = XMLString::replicate(newName); + getMemoryManager()->deallocate(fName); //delete [] fName; + fName = XMLString::replicate(newName, getMemoryManager()); } XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/validators/DTD/DTDAttDef.hpp b/src/xercesc/validators/DTD/DTDAttDef.hpp index 0e76f04be..4aa4822eb 100644 --- a/src/xercesc/validators/DTD/DTDAttDef.hpp +++ b/src/xercesc/validators/DTD/DTDAttDef.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:54:50 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2003/01/29 19:46:40 gareth * added DOMTypeInfo API * @@ -82,7 +85,6 @@ #if !defined(DTDATTDEF_HPP) #define DTDATTDEF_HPP -#include <xercesc/util/XMLString.hpp> #include <xercesc/framework/XMLAttDef.hpp> XERCES_CPP_NAMESPACE_BEGIN diff --git a/src/xercesc/validators/DTD/DTDElementDecl.cpp b/src/xercesc/validators/DTD/DTDElementDecl.cpp index ca10c250d..1fe9e3851 100644 --- a/src/xercesc/validators/DTD/DTDElementDecl.cpp +++ b/src/xercesc/validators/DTD/DTDElementDecl.cpp @@ -78,9 +78,10 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // DTDElementDecl: Constructors and Destructor // --------------------------------------------------------------------------- -DTDElementDecl::DTDElementDecl() : +DTDElementDecl::DTDElementDecl(MemoryManager* const manager) : - fAttDefs(0) + XMLElementDecl(manager) + , fAttDefs(0) , fAttList(0) , fContentSpec(0) , fModelType(Any) @@ -89,10 +90,12 @@ DTDElementDecl::DTDElementDecl() : { } -DTDElementDecl::DTDElementDecl( const XMLCh* const elemRawName - , const unsigned int uriId - , const DTDElementDecl::ModelTypes type) : - fAttDefs(0) +DTDElementDecl::DTDElementDecl( const XMLCh* const elemRawName + , const unsigned int uriId + , const DTDElementDecl::ModelTypes type + , MemoryManager* const manager) : + XMLElementDecl(manager) + , fAttDefs(0) , fAttList(0) , fContentSpec(0) , fModelType(type) @@ -102,9 +105,11 @@ DTDElementDecl::DTDElementDecl( const XMLCh* const elemRawName setElementName(elemRawName, uriId); } -DTDElementDecl::DTDElementDecl( QName* const elementName - , const DTDElementDecl::ModelTypes type) : - fAttDefs(0) +DTDElementDecl::DTDElementDecl( QName* const elementName + , const DTDElementDecl::ModelTypes type + , MemoryManager* const manager) : + XMLElementDecl(manager) + , fAttDefs(0) , fAttList(0) , fContentSpec(0) , fModelType(type) @@ -120,7 +125,7 @@ DTDElementDecl::~DTDElementDecl() delete fAttList; delete fContentSpec; delete fContentModel; - delete [] fFormattedModel; + getMemoryManager()->deallocate(fFormattedModel);//delete [] fFormattedModel; } @@ -149,7 +154,7 @@ XMLAttDef* DTDElementDecl::findAttr(const XMLCh* const qName faultInAttDefList(); // And add a default attribute for this name - retVal = new DTDAttDef(qName); + retVal = new (getMemoryManager()) DTDAttDef(qName); retVal->setElemId(getId()); fAttDefs->put((void*)retVal->getFullName(), retVal); @@ -295,17 +300,16 @@ void DTDElementDecl::addAttDef(DTDAttDef* const toAdd) // --------------------------------------------------------------------------- // DTDElementDecl: Private helper methods // --------------------------------------------------------------------------- -XMLCh* -DTDElementDecl::formatContentModel() const +XMLCh* DTDElementDecl::formatContentModel() const { XMLCh* newValue = 0; if (fModelType == Any) { - newValue = XMLString::replicate(XMLUni::fgAnyString); + newValue = XMLString::replicate(XMLUni::fgAnyString, getMemoryManager()); } else if (fModelType == Empty) { - newValue = XMLString::replicate(XMLUni::fgEmptyString); + newValue = XMLString::replicate(XMLUni::fgEmptyString, getMemoryManager()); } else { @@ -316,7 +320,7 @@ DTDElementDecl::formatContentModel() const // XMLBuffer bufFmt; getContentSpec()->formatSpec(bufFmt); - newValue = XMLString::replicate(bufFmt.getRawBuffer()); + newValue = XMLString::replicate(bufFmt.getRawBuffer(), getMemoryManager()); } return newValue; } @@ -330,7 +334,7 @@ XMLContentModel* DTDElementDecl::makeContentModel() // Just create a mixel content model object. This type of // content model is optimized for mixed content validation. // - cmRet = new MixedContentModel(true, this->getContentSpec()); + cmRet = new (getMemoryManager()) MixedContentModel(true, this->getContentSpec()); } else if (fModelType == Children) { @@ -375,7 +379,7 @@ XMLContentModel* DTDElementDecl::createChildModel() if (specNode->getType() == ContentSpecNode::Leaf) { // Create a simple content model - return new SimpleContentModel + return new (getMemoryManager()) SimpleContentModel ( true , specNode->getElement() @@ -393,7 +397,7 @@ XMLContentModel* DTDElementDecl::createChildModel() if ((specNode->getFirst()->getType() == ContentSpecNode::Leaf) && (specNode->getSecond()->getType() == ContentSpecNode::Leaf)) { - return new SimpleContentModel + return new (getMemoryManager()) SimpleContentModel ( true , specNode->getFirst()->getElement() @@ -413,7 +417,7 @@ XMLContentModel* DTDElementDecl::createChildModel() // if (specNode->getFirst()->getType() == ContentSpecNode::Leaf) { - return new SimpleContentModel + return new (getMemoryManager()) SimpleContentModel ( true , specNode->getFirst()->getElement() @@ -428,14 +432,19 @@ XMLContentModel* DTDElementDecl::createChildModel() } // Its not any simple type of content, so create a DFA based content model - return new DFAContentModel(true, this->getContentSpec()); + return new (getMemoryManager()) DFAContentModel + ( + true + , this->getContentSpec() + , getMemoryManager() + ); } void DTDElementDecl::faultInAttDefList() const { // Use a hash modulus of 29 and tell it owns its elements - ((DTDElementDecl*)this)->fAttDefs = new RefHashTableOf<DTDAttDef>(29, true); + ((DTDElementDecl*)this)->fAttDefs = new (getMemoryManager()) RefHashTableOf<DTDAttDef>(29, true); } XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/validators/DTD/DTDElementDecl.hpp b/src/xercesc/validators/DTD/DTDElementDecl.hpp index ffe3331e1..cb240c598 100644 --- a/src/xercesc/validators/DTD/DTDElementDecl.hpp +++ b/src/xercesc/validators/DTD/DTDElementDecl.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:54:50 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2003/01/29 19:46:40 gareth * added DOMTypeInfo API * @@ -154,19 +157,19 @@ public : // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- - DTDElementDecl(); - + DTDElementDecl(MemoryManager* const manager); DTDElementDecl ( - const XMLCh* const elemRawName - , const unsigned int uriId - , const ModelTypes modelType = Any + const XMLCh* const elemRawName + , const unsigned int uriId + , const ModelTypes modelType// = Any + , MemoryManager* const manager ); - DTDElementDecl ( - QName* const elementName - , const ModelTypes modelType = Any + QName* const elementName + , const ModelTypes modelType// = Any + , MemoryManager* const manager ); ~DTDElementDecl(); diff --git a/src/xercesc/validators/DTD/DTDGrammar.cpp b/src/xercesc/validators/DTD/DTDGrammar.cpp index 6027f7616..9acacb310 100644 --- a/src/xercesc/validators/DTD/DTDGrammar.cpp +++ b/src/xercesc/validators/DTD/DTDGrammar.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:54:50 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2002/12/04 02:47:25 knoaman * scanner re-organization. * @@ -95,8 +98,9 @@ XERCES_CPP_NAMESPACE_BEGIN //--------------------------------------------------------------------------- // DTDGrammar: Constructors and Destructor // --------------------------------------------------------------------------- -DTDGrammar::DTDGrammar() : - fElemDeclPool(0) +DTDGrammar::DTDGrammar(MemoryManager* const manager) : + fMemoryManager(manager) + , fElemDeclPool(0) , fElemNonDeclPool(0) , fEntityDeclPool(0) , fNotationDeclPool(0) @@ -108,10 +112,10 @@ DTDGrammar::DTDGrammar() : // <TBD> Investigate what the optimum values would be for the various // pools. // - fElemDeclPool = new NameIdPool<DTDElementDecl>(109); - fElemNonDeclPool = new NameIdPool<DTDElementDecl>(29); - fEntityDeclPool = new NameIdPool<DTDEntityDecl>(109); - fNotationDeclPool = new NameIdPool<XMLNotationDecl>(109); + fElemDeclPool = new (fMemoryManager) NameIdPool<DTDElementDecl>(109); + fElemNonDeclPool = new (fMemoryManager) NameIdPool<DTDElementDecl>(29); + fEntityDeclPool = new (fMemoryManager) NameIdPool<DTDEntityDecl>(109); + fNotationDeclPool = new (fMemoryManager) NameIdPool<XMLNotationDecl>(109); // // Call our own reset method. This lets us have the pool setup stuff @@ -145,7 +149,13 @@ XMLElementDecl* DTDGrammar::findOrAddElemDecl (const unsigned int uriId // if not, then add this in if (!retVal) { - retVal = new DTDElementDecl(qName, uriId, DTDElementDecl::Any); + retVal = new (fMemoryManager) DTDElementDecl + ( + qName + , uriId + , DTDElementDecl::Any + , fMemoryManager + ); const unsigned int elemId = fElemNonDeclPool->put(retVal); retVal->setId(elemId); wasAdded = true; @@ -164,7 +174,13 @@ XMLElementDecl* DTDGrammar::putElemDecl (const unsigned int uriId , unsigned int scope , const bool notDeclared) { - DTDElementDecl* retVal = new DTDElementDecl(qName, uriId, DTDElementDecl::Any); + DTDElementDecl* retVal = new (fMemoryManager) DTDElementDecl + ( + qName + , uriId + , DTDElementDecl::Any + , fMemoryManager + ); const unsigned int elemId = (notDeclared) ? fElemNonDeclPool->put(retVal) : fElemDeclPool->put(retVal); retVal->setId(elemId); diff --git a/src/xercesc/validators/DTD/DTDGrammar.hpp b/src/xercesc/validators/DTD/DTDGrammar.hpp index bb89f4cdb..df5278038 100644 --- a/src/xercesc/validators/DTD/DTDGrammar.hpp +++ b/src/xercesc/validators/DTD/DTDGrammar.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:54:50 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2002/11/04 14:50:40 tng * C++ Namespace Support. * @@ -117,7 +120,7 @@ public: // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- - DTDGrammar(); + DTDGrammar(MemoryManager* const manager); virtual ~DTDGrammar(); @@ -268,12 +271,13 @@ private: // or not. When using a cached grammar, no need for pre content // validation. // ----------------------------------------------------------------------- - NameIdPool<DTDElementDecl>* fElemDeclPool; - NameIdPool<DTDElementDecl>* fElemNonDeclPool; - NameIdPool<DTDEntityDecl>* fEntityDeclPool; - NameIdPool<XMLNotationDecl>* fNotationDeclPool; - unsigned int fRootElemId; - bool fValidated; + MemoryManager* fMemoryManager; + NameIdPool<DTDElementDecl>* fElemDeclPool; + NameIdPool<DTDElementDecl>* fElemNonDeclPool; + NameIdPool<DTDEntityDecl>* fEntityDeclPool; + NameIdPool<XMLNotationDecl>* fNotationDeclPool; + unsigned int fRootElemId; + bool fValidated; }; diff --git a/src/xercesc/validators/DTD/DTDScanner.cpp b/src/xercesc/validators/DTD/DTDScanner.cpp index 4d6af413d..41d843972 100644 --- a/src/xercesc/validators/DTD/DTDScanner.cpp +++ b/src/xercesc/validators/DTD/DTDScanner.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.25 2003/05/15 18:54:50 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.24 2003/03/10 15:28:07 tng * XML1.0 Errata E38 * @@ -247,12 +250,13 @@ XERCES_CPP_NAMESPACE_BEGIN // a repetition suffix. If so, it creates a new correct rep node and wraps // the pass node in it. Otherwise, it returns the previous node. // -static ContentSpecNode* -makeRepNode(const XMLCh testCh, ContentSpecNode* const prevNode) +static ContentSpecNode* makeRepNode(const XMLCh testCh, + ContentSpecNode* const prevNode, + MemoryManager* const manager) { if (testCh == chQuestion) { - return new ContentSpecNode + return new (manager) ContentSpecNode ( ContentSpecNode::ZeroOrOne , prevNode @@ -261,7 +265,7 @@ makeRepNode(const XMLCh testCh, ContentSpecNode* const prevNode) } else if (testCh == chPlus) { - return new ContentSpecNode + return new (manager) ContentSpecNode ( ContentSpecNode::OneOrMore , prevNode @@ -270,7 +274,7 @@ makeRepNode(const XMLCh testCh, ContentSpecNode* const prevNode) } else if (testCh == chAsterisk) { - return new ContentSpecNode + return new (manager) ContentSpecNode ( ContentSpecNode::ZeroOrMore , prevNode @@ -285,8 +289,11 @@ makeRepNode(const XMLCh testCh, ContentSpecNode* const prevNode) // --------------------------------------------------------------------------- // DTDValidator: Constructors and Destructor // --------------------------------------------------------------------------- -DTDScanner::DTDScanner(DTDGrammar* dtdGrammar, DocTypeHandler* const docTypeHandler) : - fDocTypeHandler(docTypeHandler) +DTDScanner::DTDScanner( DTDGrammar* dtdGrammar + , DocTypeHandler* const docTypeHandler + , MemoryManager* const manager) : + fMemoryManager(manager) + , fDocTypeHandler(docTypeHandler) , fDumAttDef(0) , fDumElemDecl(0) , fDumEntityDecl(0) @@ -605,7 +612,7 @@ DTDScanner::scanAttDef(DTDElementDecl& parentElem, XMLBuffer& bufToUse) // Use the dummy decl to parse into and set its name to the name we got if (!fDumAttDef) { - fDumAttDef = new DTDAttDef; + fDumAttDef = new (fMemoryManager) DTDAttDef; fDumAttDef->setId(fNextAttrId++); } fDumAttDef->setName(bufToUse.getRawBuffer()); @@ -617,7 +624,7 @@ DTDScanner::scanAttDef(DTDElementDecl& parentElem, XMLBuffer& bufToUse) // It does not already exist so create a new one, give it the next // available unique id, and add it // - decl = new DTDAttDef(bufToUse.getRawBuffer()); + decl = new (fMemoryManager) DTDAttDef(bufToUse.getRawBuffer()); decl->setId(fNextAttrId++); decl->setExternalAttDeclaration(isReadingExternalEntity()); parentElem.addAttDef(decl); @@ -794,7 +801,13 @@ void DTDScanner::scanAttListDecl() // it having been created because of an attlist. Later, if its // declared, this will be updated. // - elemDecl = new DTDElementDecl(bbName.getRawBuffer(), fEmptyNamespaceId); + elemDecl = new (fMemoryManager) DTDElementDecl + ( + bbName.getRawBuffer() + , fEmptyNamespaceId + , DTDElementDecl::Any + , fMemoryManager + ); elemDecl->setCreateReason(XMLElementDecl::AttList); elemDecl->setExternalElemDeclaration(isReadingExternalEntity()); fDTDGrammar->putElemDecl((XMLElementDecl*) elemDecl); @@ -1247,19 +1260,25 @@ DTDScanner::scanChildren(const DTDElementDecl& elemDecl, XMLBuffer& bufToUse) XMLElementDecl* decl = fDTDGrammar->getElemDecl(fEmptyNamespaceId, 0, bufToUse.getRawBuffer(), Grammar::TOP_LEVEL_SCOPE); if (!decl) { - decl = new DTDElementDecl(bufToUse.getRawBuffer(), fEmptyNamespaceId); + decl = new (fMemoryManager) DTDElementDecl + ( + bufToUse.getRawBuffer() + , fEmptyNamespaceId + , DTDElementDecl::Any + , fMemoryManager + ); decl->setCreateReason(XMLElementDecl::InContentModel); decl->setExternalElemDeclaration(isReadingExternalEntity()); fDTDGrammar->putElemDecl(decl); } - curNode = new ContentSpecNode(decl->getElementName()); + curNode = new (fMemoryManager) ContentSpecNode(decl->getElementName()); // Check for a PE ref here, but don't require spaces const bool gotSpaces = checkForPERef(false, false, true); // Check for a repetition character after the leaf const XMLCh repCh = fReaderMgr->peekNextChar(); - ContentSpecNode* tmpNode = makeRepNode(repCh, curNode); + ContentSpecNode* tmpNode = makeRepNode(repCh, curNode, fMemoryManager); if (tmpNode != curNode) { if (gotSpaces) @@ -1301,13 +1320,13 @@ DTDScanner::scanChildren(const DTDElementDecl& elemDecl, XMLBuffer& bufToUse) if (opCh == chComma) { curType = ContentSpecNode::Sequence; - headNode = new ContentSpecNode(curType, curNode, 0); + headNode = new (fMemoryManager) ContentSpecNode(curType, curNode, 0); curNode = headNode; } else if (opCh == chPipe) { curType = ContentSpecNode::Choice; - headNode = new ContentSpecNode(curType, curNode, 0); + headNode = new (fMemoryManager) ContentSpecNode(curType, curNode, 0); curNode = headNode; } else @@ -1417,17 +1436,23 @@ DTDScanner::scanChildren(const DTDElementDecl& elemDecl, XMLBuffer& bufToUse) XMLElementDecl* decl = fDTDGrammar->getElemDecl(fEmptyNamespaceId, 0, bufToUse.getRawBuffer(), Grammar::TOP_LEVEL_SCOPE); if (!decl) { - decl = new DTDElementDecl(bufToUse.getRawBuffer(), fEmptyNamespaceId); + decl = new (fMemoryManager) DTDElementDecl + ( + bufToUse.getRawBuffer() + , fEmptyNamespaceId + , DTDElementDecl::Any + , fMemoryManager + ); decl->setCreateReason(XMLElementDecl::InContentModel); decl->setExternalElemDeclaration(isReadingExternalEntity()); fDTDGrammar->putElemDecl(decl); } - ContentSpecNode* tmpLeaf = new ContentSpecNode(decl->getElementName()); + ContentSpecNode* tmpLeaf = new (fMemoryManager) ContentSpecNode(decl->getElementName()); // Check for a repetition character after the leaf const XMLCh repCh = fReaderMgr->peekNextChar(); - ContentSpecNode* tmpLeaf2 = makeRepNode(repCh, tmpLeaf); + ContentSpecNode* tmpLeaf2 = makeRepNode(repCh, tmpLeaf, fMemoryManager); if (tmpLeaf != tmpLeaf2) fReaderMgr->getNextChar(); @@ -1437,7 +1462,7 @@ DTDScanner::scanChildren(const DTDElementDecl& elemDecl, XMLBuffer& bufToUse) // Make the new node the second node of the current node, // and then make it the current node. // - ContentSpecNode* newCur = new ContentSpecNode + ContentSpecNode* newCur = new (fMemoryManager) ContentSpecNode ( curType , tmpLeaf2 @@ -1475,7 +1500,7 @@ DTDScanner::scanChildren(const DTDElementDecl& elemDecl, XMLBuffer& bufToUse) // of it. // XMLCh repCh = fReaderMgr->peekNextChar(); - ContentSpecNode* retNode = makeRepNode(repCh, headNode); + ContentSpecNode* retNode = makeRepNode(repCh, headNode, fMemoryManager); if (retNode != headNode) fReaderMgr->getNextChar(); @@ -1767,7 +1792,13 @@ void DTDScanner::scanElementDecl() fScanner->getValidator()->emitError(XMLValid::ElementAlreadyExists, bbName.getRawBuffer()); if (!fDumElemDecl) - fDumElemDecl = new DTDElementDecl(bbName.getRawBuffer(), fEmptyNamespaceId); + fDumElemDecl = new (fMemoryManager) DTDElementDecl + ( + bbName.getRawBuffer() + , fEmptyNamespaceId + , DTDElementDecl::Any + , fMemoryManager + ); else fDumElemDecl->setElementName(bbName.getRawBuffer(),fEmptyNamespaceId); } @@ -1778,7 +1809,13 @@ void DTDScanner::scanElementDecl() // Create the new empty declaration to fill in and put it into // the decl pool. // - decl = new DTDElementDecl(bbName.getRawBuffer(), fEmptyNamespaceId); + decl = new (fMemoryManager) DTDElementDecl + ( + bbName.getRawBuffer() + , fEmptyNamespaceId + , DTDElementDecl::Any + , fMemoryManager + ); fDTDGrammar->putElemDecl(decl); } @@ -1887,14 +1924,14 @@ void DTDScanner::scanEntityDecl() if (entityDecl) { if (!fDumEntityDecl) - fDumEntityDecl = new DTDEntityDecl; + fDumEntityDecl = new (fMemoryManager) DTDEntityDecl; fDumEntityDecl->setName(bbName.getRawBuffer()); entityDecl = fDumEntityDecl; } else { // Its not in existence already, then create an entity decl for it - entityDecl = new DTDEntityDecl(bbName.getRawBuffer()); + entityDecl = new (fMemoryManager) DTDEntityDecl(bbName.getRawBuffer()); // // Set the declaration location. The parameter indicates whether its @@ -3269,7 +3306,7 @@ bool DTDScanner::scanMixed(DTDElementDecl& toFill) // tree as we go. // ContentSpecNode* curNode = - new ContentSpecNode(new QName(XMLUni::fgZeroLenString, + new (fMemoryManager) ContentSpecNode(new (fMemoryManager) QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, XMLElementDecl::fgPCDataElemId), false); @@ -3339,7 +3376,7 @@ bool DTDScanner::scanMixed(DTDElementDecl& toFill) // node its first child. // if (starRequired || starSkipped) { - headNode = new ContentSpecNode + headNode = new (fMemoryManager) ContentSpecNode ( ContentSpecNode::ZeroOrMore , headNode @@ -3374,7 +3411,13 @@ bool DTDScanner::scanMixed(DTDElementDecl& toFill) XMLElementDecl* decl = fDTDGrammar->getElemDecl(fEmptyNamespaceId, 0, nameBuf.getRawBuffer(), Grammar::TOP_LEVEL_SCOPE); if (!decl) { - decl = new DTDElementDecl(nameBuf.getRawBuffer(), fEmptyNamespaceId); + decl = new (fMemoryManager) DTDElementDecl + ( + nameBuf.getRawBuffer() + , fEmptyNamespaceId + , DTDElementDecl::Any + , fMemoryManager + ); decl->setCreateReason(XMLElementDecl::InContentModel); decl->setExternalElemDeclaration(isReadingExternalEntity()); fDTDGrammar->putElemDecl(decl); @@ -3391,11 +3434,11 @@ bool DTDScanner::scanMixed(DTDElementDecl& toFill) // if (curNode == orgNode) { - curNode = new ContentSpecNode + curNode = new (fMemoryManager) ContentSpecNode ( ContentSpecNode::Choice , curNode - , new ContentSpecNode(decl->getElementName()) + , new (fMemoryManager) ContentSpecNode(decl->getElementName()) ); // Remember the top node @@ -3406,11 +3449,11 @@ bool DTDScanner::scanMixed(DTDElementDecl& toFill) ContentSpecNode* oldRight = curNode->orphanSecond(); curNode->setSecond ( - new ContentSpecNode + new (fMemoryManager) ContentSpecNode ( ContentSpecNode::Choice , oldRight - , new ContentSpecNode(decl->getElementName()) + , new (fMemoryManager) ContentSpecNode(decl->getElementName()) ) ); @@ -3500,7 +3543,7 @@ void DTDScanner::scanNotationDecl() ReaderMgr::LastExtEntityInfo lastInfo; fReaderMgr->getLastExtEntityInfo(lastInfo); - decl = new XMLNotationDecl + decl = new (fMemoryManager) XMLNotationDecl ( bbName.getRawBuffer() , (publicId && *publicId) ? publicId : 0 diff --git a/src/xercesc/validators/DTD/DTDScanner.hpp b/src/xercesc/validators/DTD/DTDScanner.hpp index d05a371a4..1f15b87cb 100644 --- a/src/xercesc/validators/DTD/DTDScanner.hpp +++ b/src/xercesc/validators/DTD/DTDScanner.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 1999-2001 The Apache Software Foundation. All rights + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/15 18:54:51 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.6 2003/02/05 22:07:09 tng * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD(). * @@ -105,7 +108,7 @@ class XMLScanner; */ class DocTypeHandler; -class VALIDATORS_EXPORT DTDScanner +class VALIDATORS_EXPORT DTDScanner : public XMemory { public: // ----------------------------------------------------------------------- @@ -137,7 +140,12 @@ public: // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- - DTDScanner(DTDGrammar* dtdGrammar, DocTypeHandler* const docTypeHandler); + DTDScanner + ( + DTDGrammar* dtdGrammar + , DocTypeHandler* const docTypeHandler + , MemoryManager* const manager + ); virtual ~DTDScanner(); // ----------------------------------------------------------------------- @@ -286,6 +294,7 @@ private: // current reader to decide whether we are processing an external/internal // declaration // ----------------------------------------------------------------------- + MemoryManager* fMemoryManager; DocTypeHandler* fDocTypeHandler; DTDAttDef* fDumAttDef; DTDElementDecl* fDumElemDecl; diff --git a/src/xercesc/validators/common/AllContentModel.cpp b/src/xercesc/validators/common/AllContentModel.cpp index 33b2ad844..047717430 100644 --- a/src/xercesc/validators/common/AllContentModel.cpp +++ b/src/xercesc/validators/common/AllContentModel.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -93,9 +96,11 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // AllContentModel: Constructors and Destructor // --------------------------------------------------------------------------- -AllContentModel::AllContentModel(ContentSpecNode* const parentContentSpec - , const bool isMixed) : - fCount(0) +AllContentModel::AllContentModel( ContentSpecNode* const parentContentSpec + , const bool isMixed + , MemoryManager* const manager) : + fMemoryManager(manager) + , fCount(0) , fChildren(0) , fChildOptional(0) , fNumRequired(0) @@ -128,8 +133,8 @@ AllContentModel::AllContentModel(ContentSpecNode* const parentContentSpec // fill them in. // fCount = children.size(); - fChildren = new QName*[fCount]; - fChildOptional = new bool[fCount]; + fChildren = (QName**) fMemoryManager->allocate(fCount * sizeof(QName*)); //new QName*[fCount]; + fChildOptional = (bool*) fMemoryManager->allocate(fCount * sizeof(bool)); //new bool[fCount]; for (unsigned int index = 0; index < fCount; index++) { fChildren[index] = children.elementAt(index); fChildOptional[index] = childOptional.elementAt(index); @@ -138,8 +143,8 @@ AllContentModel::AllContentModel(ContentSpecNode* const parentContentSpec AllContentModel::~AllContentModel() { - delete [] fChildren; - delete [] fChildOptional; + fMemoryManager->deallocate(fChildren); //delete [] fChildren; + fMemoryManager->deallocate(fChildOptional); //delete [] fChildOptional; } // --------------------------------------------------------------------------- @@ -162,7 +167,7 @@ AllContentModel::validateContent( QName** const children return -1; // Check for duplicate element - bool* elementSeen = new bool[fCount]; + bool* elementSeen = (bool*) fMemoryManager->allocate(fCount*sizeof(bool)); //new bool[fCount]; // initialize the array for (unsigned int i = 0; i < fCount; i++) @@ -190,7 +195,7 @@ AllContentModel::validateContent( QName** const children // If this element was seen already, indicate an error was // found at the duplicate index. if (elementSeen[inIndex]) { - delete [] elementSeen; + fMemoryManager->deallocate(elementSeen); //delete [] elementSeen; return outIndex; } else @@ -205,13 +210,13 @@ AllContentModel::validateContent( QName** const children // We did not find this one, so the validation failed if (inIndex == fCount) { - delete [] elementSeen; + fMemoryManager->deallocate(elementSeen); //delete [] elementSeen; return outIndex; } } - delete [] elementSeen; + fMemoryManager->deallocate(elementSeen); //delete [] elementSeen; // Were all the required elements of the <all> encountered? if (numRequiredSeen != fNumRequired) { @@ -239,7 +244,7 @@ int AllContentModel::validateContentSpecial(QName** const children return -1; // Check for duplicate element - bool* elementSeen = new bool[fCount]; + bool* elementSeen = (bool*) fMemoryManager->allocate(fCount*sizeof(bool)); //new bool[fCount]; // initialize the array for (unsigned int i = 0; i < fCount; i++) @@ -266,7 +271,7 @@ int AllContentModel::validateContentSpecial(QName** const children // If this element was seen already, indicate an error was // found at the duplicate index. if (elementSeen[inIndex]) { - delete [] elementSeen; + fMemoryManager->deallocate(elementSeen); //delete [] elementSeen; return outIndex; } else @@ -281,13 +286,13 @@ int AllContentModel::validateContentSpecial(QName** const children // We did not find this one, so the validation failed if (inIndex == fCount) { - delete [] elementSeen; + fMemoryManager->deallocate(elementSeen); //delete [] elementSeen; return outIndex; } } - delete [] elementSeen; + fMemoryManager->deallocate(elementSeen); //delete [] elementSeen; // Were all the required elements of the <all> encountered? if (numRequiredSeen != fNumRequired) { diff --git a/src/xercesc/validators/common/AllContentModel.hpp b/src/xercesc/validators/common/AllContentModel.hpp index 337614ba0..0730bd379 100644 --- a/src/xercesc/validators/common/AllContentModel.hpp +++ b/src/xercesc/validators/common/AllContentModel.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2003/03/07 18:16:57 tng * Return a reference instead of void for operator= * @@ -77,8 +80,8 @@ #if !defined(ALLCONTENTMODEL_HPP) #define ALLCONTENTMODEL_HPP -#include <xercesc/util/ValueVectorOf.hpp> #include <xercesc/framework/XMLContentModel.hpp> +#include <xercesc/util/ValueVectorOf.hpp> #include <xercesc/validators/common/ContentLeafNameTypeVector.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -102,8 +105,9 @@ public : // ----------------------------------------------------------------------- AllContentModel ( - ContentSpecNode* const parentContentSpec - , const bool isMixed + ContentSpecNode* const parentContentSpec + , const bool isMixed + , MemoryManager* const manager ); ~AllContentModel(); @@ -180,6 +184,7 @@ private : // fIsMixed // AllContentModel with mixed PCDATA. // ----------------------------------------------------------------------- + MemoryManager* fMemoryManager; unsigned int fCount; QName** fChildren; bool* fChildOptional; diff --git a/src/xercesc/validators/common/CMAny.cpp b/src/xercesc/validators/common/CMAny.cpp index 3224ed4b5..4dcea5d99 100644 --- a/src/xercesc/validators/common/CMAny.cpp +++ b/src/xercesc/validators/common/CMAny.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -95,10 +98,11 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // CMUnaryOp: Constructors and Destructor // --------------------------------------------------------------------------- -CMAny::CMAny( const ContentSpecNode::NodeTypes type - , const unsigned int URI - , const unsigned int position ) : - CMNode(type) +CMAny::CMAny( const ContentSpecNode::NodeTypes type + , const unsigned int URI + , const unsigned int position + , MemoryManager* const manager) : + CMNode(type, manager) , fURI(URI) , fPosition(position) { diff --git a/src/xercesc/validators/common/CMAny.hpp b/src/xercesc/validators/common/CMAny.hpp index 44bdb6899..d61bad720 100644 --- a/src/xercesc/validators/common/CMAny.hpp +++ b/src/xercesc/validators/common/CMAny.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -73,7 +76,6 @@ #if !defined(CMANY_HPP) #define CMANY_HPP -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/validators/common/CMNode.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -88,9 +90,10 @@ public : // ----------------------------------------------------------------------- CMAny ( - const ContentSpecNode::NodeTypes type - , const unsigned int URI - , const unsigned int position + const ContentSpecNode::NodeTypes type + , const unsigned int URI + , const unsigned int position + , MemoryManager* const manager ); ~CMAny(); diff --git a/src/xercesc/validators/common/CMBinaryOp.cpp b/src/xercesc/validators/common/CMBinaryOp.cpp index 3f9e5ff42..1b362a574 100644 --- a/src/xercesc/validators/common/CMBinaryOp.cpp +++ b/src/xercesc/validators/common/CMBinaryOp.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -104,10 +107,11 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // CMBinaryOp: Constructors // --------------------------------------------------------------------------- -CMBinaryOp::CMBinaryOp( const ContentSpecNode::NodeTypes type - , CMNode* const leftToAdopt - , CMNode* const rightToAdopt) : - CMNode(type) +CMBinaryOp::CMBinaryOp( const ContentSpecNode::NodeTypes type + , CMNode* const leftToAdopt + , CMNode* const rightToAdopt + , MemoryManager* const manager) : + CMNode(type, manager) , fLeftChild(leftToAdopt) , fRightChild(rightToAdopt) { diff --git a/src/xercesc/validators/common/CMBinaryOp.hpp b/src/xercesc/validators/common/CMBinaryOp.hpp index 72fd139b3..1eff593ea 100644 --- a/src/xercesc/validators/common/CMBinaryOp.hpp +++ b/src/xercesc/validators/common/CMBinaryOp.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -95,7 +98,6 @@ #if !defined(CMBINARYOP_HPP) #define CMBINARYOP_HPP -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/validators/common/CMNode.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -110,9 +112,10 @@ public : // ----------------------------------------------------------------------- CMBinaryOp ( - const ContentSpecNode::NodeTypes type - , CMNode* const leftToAdopt - , CMNode* const rightToAdopt + const ContentSpecNode::NodeTypes type + , CMNode* const leftToAdopt + , CMNode* const rightToAdopt + , MemoryManager* const manager ); ~CMBinaryOp(); diff --git a/src/xercesc/validators/common/CMLeaf.hpp b/src/xercesc/validators/common/CMLeaf.hpp index b334d6b96..061323db9 100644 --- a/src/xercesc/validators/common/CMLeaf.hpp +++ b/src/xercesc/validators/common/CMLeaf.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -114,11 +117,8 @@ #if !defined(CMLEAF_HPP) #define CMLEAF_HPP -#include <xercesc/util/XercesDefs.hpp> -#include <xercesc/util/RuntimeException.hpp> -#include <xercesc/validators/common/ContentSpecNode.hpp> #include <xercesc/validators/common/CMNode.hpp> -#include <xercesc/validators/common/CMStateSet.hpp> + XERCES_CPP_NAMESPACE_BEGIN @@ -135,14 +135,16 @@ public : // ----------------------------------------------------------------------- CMLeaf ( - QName* const element - , const unsigned int position = ~0 + QName* const element + , const unsigned int position = ~0 + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); CMLeaf ( - QName* const element - , const unsigned int position - , const bool adopt + QName* const element + , const unsigned int position + , const bool adopt + , MemoryManager* const manager ); ~CMLeaf(); @@ -199,18 +201,22 @@ private : // ----------------------------------------------------------------------- // Constructors // ----------------------------------------------------------------------- -inline CMLeaf::CMLeaf( QName* const element - , const unsigned int position) : - CMNode(ContentSpecNode::Leaf) +inline CMLeaf::CMLeaf( QName* const element + , const unsigned int position + , MemoryManager* const manager) : + CMNode(ContentSpecNode::Leaf, manager) , fElement(0) , fPosition(position) , fAdopt(false) { if (!element) { - fElement = new QName(XMLUni::fgZeroLenString - , XMLUni::fgZeroLenString - , XMLElementDecl::fgInvalidElemId); + fElement = new (fMemoryManager) QName + ( + XMLUni::fgZeroLenString + , XMLUni::fgZeroLenString + , XMLElementDecl::fgInvalidElemId + ); // We have to be responsible for this QName - override default fAdopt fAdopt = true; } @@ -220,19 +226,23 @@ inline CMLeaf::CMLeaf( QName* const element } } -inline CMLeaf::CMLeaf( QName* const element - , const unsigned int position - , const bool adopt) : - CMNode(ContentSpecNode::Leaf) +inline CMLeaf::CMLeaf( QName* const element + , const unsigned int position + , const bool adopt + , MemoryManager* const manager) : + CMNode(ContentSpecNode::Leaf, manager) , fElement(0) , fPosition(position) , fAdopt(adopt) { if (!element) { - fElement = new QName(XMLUni::fgZeroLenString - , XMLUni::fgZeroLenString - , XMLElementDecl::fgInvalidElemId); + fElement = new (fMemoryManager) QName + ( + XMLUni::fgZeroLenString + , XMLUni::fgZeroLenString + , XMLElementDecl::fgInvalidElemId + ); // We have to be responsible for this QName - override adopt parameter fAdopt = true; } diff --git a/src/xercesc/validators/common/CMNode.hpp b/src/xercesc/validators/common/CMNode.hpp index a643da653..2d5d656e0 100644 --- a/src/xercesc/validators/common/CMNode.hpp +++ b/src/xercesc/validators/common/CMNode.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2003/03/07 18:16:57 tng * Return a reference instead of void for operator= * @@ -102,19 +105,22 @@ #if !defined(CMNODE_HPP) #define CMNODE_HPP -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/validators/common/ContentSpecNode.hpp> #include <xercesc/validators/common/CMStateSet.hpp> XERCES_CPP_NAMESPACE_BEGIN -class CMNode +class CMNode : public XMemory { public : // ----------------------------------------------------------------------- // Constructors and Destructors // ----------------------------------------------------------------------- - CMNode(const ContentSpecNode::NodeTypes type); + CMNode + ( + const ContentSpecNode::NodeTypes type + , MemoryManager* const manager + ); virtual ~CMNode(); @@ -145,6 +151,14 @@ protected : virtual void calcFirstPos(CMStateSet& toUpdate) const = 0; virtual void calcLastPos(CMStateSet& toUpdate) const = 0; + // ----------------------------------------------------------------------- + // Protected data members + // + // fMemoryManager + // Pluggable memory manager for dynamic allocation/deallocation. + // ----------------------------------------------------------------------- + MemoryManager* fMemoryManager; + private : // ----------------------------------------------------------------------- @@ -177,10 +191,10 @@ private : // has to be stored redundantly, but we need to fault in the // state set members and they have to be sized to this size. // ----------------------------------------------------------------------- - ContentSpecNode::NodeTypes fType; - CMStateSet* fFirstPos; - CMStateSet* fLastPos; - unsigned int fMaxStates; + ContentSpecNode::NodeTypes fType; + CMStateSet* fFirstPos; + CMStateSet* fLastPos; + unsigned int fMaxStates; }; @@ -188,9 +202,11 @@ private : // --------------------------------------------------------------------------- // CMNode: Constructors and Destructors // --------------------------------------------------------------------------- -inline CMNode::CMNode(const ContentSpecNode::NodeTypes type) : +inline CMNode::CMNode(const ContentSpecNode::NodeTypes type, + MemoryManager* const manager) : - fType(type) + fMemoryManager(manager) + , fType(type) , fFirstPos(0) , fLastPos(0) , fMaxStates(~0) @@ -222,7 +238,7 @@ inline const CMStateSet& CMNode::getFirstPos() const if (!fFirstPos) { CMNode* unconstThis = (CMNode*)this; - unconstThis->fFirstPos = new CMStateSet(fMaxStates); + unconstThis->fFirstPos = new (fMemoryManager) CMStateSet(fMaxStates, fMemoryManager); unconstThis->calcFirstPos(*fFirstPos); } return *fFirstPos; @@ -237,7 +253,7 @@ inline const CMStateSet& CMNode::getLastPos() const if (!fLastPos) { CMNode* unconstThis = (CMNode*)this; - unconstThis->fLastPos = new CMStateSet(fMaxStates); + unconstThis->fLastPos = new (fMemoryManager) CMStateSet(fMaxStates, fMemoryManager); unconstThis->calcLastPos(*fLastPos); } return *fLastPos; diff --git a/src/xercesc/validators/common/CMStateSet.hpp b/src/xercesc/validators/common/CMStateSet.hpp index 76e14c6de..51aaf5901 100644 --- a/src/xercesc/validators/common/CMStateSet.hpp +++ b/src/xercesc/validators/common/CMStateSet.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -112,23 +115,25 @@ #if !defined(CMSTATESET_HPP) #define CMSTATESET_HPP -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/util/ArrayIndexOutOfBoundsException.hpp> -#include <xercesc/framework/XMLValidityCodes.hpp> +#include <xercesc/util/RuntimeException.hpp> +#include <xercesc/framework/MemoryManager.hpp> #include <string.h> XERCES_CPP_NAMESPACE_BEGIN -class CMStateSet +class CMStateSet : public XMemory { public : // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- - CMStateSet(const unsigned int bitCount) : + CMStateSet( const unsigned int bitCount + , MemoryManager* const manager) : fBitCount(bitCount) , fByteArray(0) + , fMemoryManager(manager) { // // See if we need to allocate the byte array or whether we can live @@ -139,7 +144,7 @@ public : fByteCount = fBitCount / 8; if (fBitCount % 8) fByteCount++; - fByteArray = new XMLByte[fByteCount]; + fByteArray = (XMLByte*) fMemoryManager->allocate(fByteCount*sizeof(XMLByte)); //new XMLByte[fByteCount]; } // Init all the bits to zero @@ -157,6 +162,7 @@ public : CMStateSet(const CMStateSet& toCopy) : fBitCount(toCopy.fBitCount) , fByteArray(0) + , fMemoryManager(toCopy.fMemoryManager) { // // See if we need to allocate the byte array or whether we can live @@ -167,7 +173,7 @@ public : fByteCount = fBitCount / 8; if (fBitCount % 8) fByteCount++; - fByteArray = new XMLByte[fByteCount]; + fByteArray = (XMLByte*) fMemoryManager->allocate(fByteCount*sizeof(XMLByte)); //new XMLByte[fByteCount]; memcpy((void *) fByteArray, (const void *) toCopy.fByteArray, @@ -186,7 +192,7 @@ public : ~CMStateSet() { if (fByteArray) - delete [] fByteArray; + fMemoryManager->deallocate(fByteArray); //delete [] fByteArray; } @@ -392,6 +398,7 @@ private : unsigned int fBits1; unsigned int fBits2; XMLByte* fByteArray; + MemoryManager* fMemoryManager; }; XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/validators/common/CMUnaryOp.cpp b/src/xercesc/validators/common/CMUnaryOp.cpp index 55ccfa2ad..6e15649df 100644 --- a/src/xercesc/validators/common/CMUnaryOp.cpp +++ b/src/xercesc/validators/common/CMUnaryOp.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -96,7 +99,6 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/util/RuntimeException.hpp> #include <xercesc/validators/common/CMStateSet.hpp> #include <xercesc/validators/common/CMUnaryOp.hpp> @@ -106,9 +108,10 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // CMUnaryOp: Constructors and Destructor // --------------------------------------------------------------------------- -CMUnaryOp::CMUnaryOp( const ContentSpecNode::NodeTypes type - , CMNode* const nodeToAdopt) : - CMNode(type) +CMUnaryOp::CMUnaryOp( const ContentSpecNode::NodeTypes type + , CMNode* const nodeToAdopt + , MemoryManager* const manager) : + CMNode(type, manager) , fChild(nodeToAdopt) { // Insure that its one of the types we require diff --git a/src/xercesc/validators/common/CMUnaryOp.hpp b/src/xercesc/validators/common/CMUnaryOp.hpp index ca7b0b12e..b7bf2e832 100644 --- a/src/xercesc/validators/common/CMUnaryOp.hpp +++ b/src/xercesc/validators/common/CMUnaryOp.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -96,9 +99,8 @@ #if !defined(CMUNARYOP_HPP) #define CMUNARYOP_HPP -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/validators/common/CMNode.hpp> -#include <xercesc/validators/common/ContentSpecNode.hpp> + XERCES_CPP_NAMESPACE_BEGIN @@ -112,8 +114,9 @@ public : // ----------------------------------------------------------------------- CMUnaryOp ( - const ContentSpecNode::NodeTypes type - , CMNode* const nodeToAdopt + const ContentSpecNode::NodeTypes type + , CMNode* const nodeToAdopt + , MemoryManager* const manager ); ~CMUnaryOp(); diff --git a/src/xercesc/validators/common/ContentLeafNameTypeVector.cpp b/src/xercesc/validators/common/ContentLeafNameTypeVector.cpp index a8b235473..ca46f5002 100644 --- a/src/xercesc/validators/common/ContentLeafNameTypeVector.cpp +++ b/src/xercesc/validators/common/ContentLeafNameTypeVector.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -77,7 +80,6 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/validators/common/ContentLeafNameTypeVector.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -85,19 +87,26 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // ContentLeafNameTypeVector: Constructors and Destructor // --------------------------------------------------------------------------- -ContentLeafNameTypeVector::ContentLeafNameTypeVector() -: fLeafNames(0) +ContentLeafNameTypeVector::ContentLeafNameTypeVector +( + MemoryManager* const manager +) +: fMemoryManager(manager) +, fLeafNames(0) , fLeafTypes(0) , fLeafCount(0) { } ContentLeafNameTypeVector::ContentLeafNameTypeVector - ( QName** const names - , ContentSpecNode::NodeTypes* const types - , const unsigned int count - ) -: fLeafNames(0) +( + QName** const names + , ContentSpecNode::NodeTypes* const types + , const unsigned int count + , MemoryManager* const manager +) +: fMemoryManager(manager) +, fLeafNames(0) , fLeafTypes(0) , fLeafCount(0) { @@ -108,10 +117,13 @@ ContentLeafNameTypeVector::ContentLeafNameTypeVector copy ctor ***/ ContentLeafNameTypeVector::ContentLeafNameTypeVector - (const ContentLeafNameTypeVector& toCopy) - :fLeafNames(0) - ,fLeafTypes(0) - ,fLeafCount(0) +( + const ContentLeafNameTypeVector& toCopy +) +: fMemoryManager(toCopy.fMemoryManager) +, fLeafNames(0) +, fLeafTypes(0) +, fLeafCount(0) { fLeafCount=toCopy.getLeafCount(); init(fLeafCount); diff --git a/src/xercesc/validators/common/ContentLeafNameTypeVector.hpp b/src/xercesc/validators/common/ContentLeafNameTypeVector.hpp index e08b76333..b46558270 100644 --- a/src/xercesc/validators/common/ContentLeafNameTypeVector.hpp +++ b/src/xercesc/validators/common/ContentLeafNameTypeVector.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2003/03/07 18:16:57 tng * Return a reference instead of void for operator= * @@ -83,13 +86,12 @@ #if !defined(CONTENTLEAFNAMETYPEVECTOR_HPP) #define CONTENTLEAFNAMETYPEVECTOR_HPP -#include <xercesc/util/XercesDefs.hpp> -#include <xercesc/util/ValueVectorOf.hpp> #include <xercesc/validators/common/ContentSpecNode.hpp> +#include <xercesc/framework/MemoryManager.hpp> XERCES_CPP_NAMESPACE_BEGIN -class ContentLeafNameTypeVector +class ContentLeafNameTypeVector : public XMemory { public : // ----------------------------------------------------------------------- @@ -100,12 +102,13 @@ public : // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- - ContentLeafNameTypeVector(); + ContentLeafNameTypeVector(MemoryManager* const manager); ContentLeafNameTypeVector ( - QName** const qName - , ContentSpecNode::NodeTypes* const types - , const unsigned int count + QName** const qName + , ContentSpecNode::NodeTypes* const types + , const unsigned int count + , MemoryManager* const manager ); ~ContentLeafNameTypeVector(); @@ -150,6 +153,7 @@ private : // Private Data Members // // ----------------------------------------------------------------------- + MemoryManager* fMemoryManager; QName** fLeafNames; ContentSpecNode::NodeTypes *fLeafTypes; unsigned int fLeafCount; @@ -157,15 +161,18 @@ private : inline void ContentLeafNameTypeVector::cleanUp() { - delete [] fLeafNames; - delete [] fLeafTypes; + fMemoryManager->deallocate(fLeafNames); //delete [] fLeafNames; + fMemoryManager->deallocate(fLeafTypes); //delete [] fLeafTypes; } inline void ContentLeafNameTypeVector::init(const unsigned int size) { - fLeafNames = new QName*[size]; - fLeafTypes = new ContentSpecNode::NodeTypes [size]; - fLeafCount = size; + fLeafNames = (QName**) fMemoryManager->allocate(size * sizeof(QName*));//new QName*[size]; + fLeafTypes = (ContentSpecNode::NodeTypes *) fMemoryManager->allocate + ( + size * sizeof(ContentSpecNode::NodeTypes) + ); //new ContentSpecNode::NodeTypes [size]; + fLeafCount = size; } XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/validators/common/ContentSpecNode.cpp b/src/xercesc/validators/common/ContentSpecNode.cpp index 26f29196d..4b20af4b3 100644 --- a/src/xercesc/validators/common/ContentSpecNode.cpp +++ b/src/xercesc/validators/common/ContentSpecNode.cpp @@ -81,23 +81,24 @@ XERCES_CPP_NAMESPACE_BEGIN // aka inline function compilation error on AIX 4.2, xlC 3 r ev.1 // --------------------------------------------------------------------------- -ContentSpecNode::ContentSpecNode(const ContentSpecNode& toCopy) +ContentSpecNode::ContentSpecNode(const ContentSpecNode& toCopy) : + fMemoryManager(XMLPlatformUtils::fgMemoryManager) { const QName* tempElement = toCopy.getElement(); if (tempElement) - fElement = new QName(*tempElement); + fElement = new (fMemoryManager) QName(*tempElement); else fElement = 0; const ContentSpecNode *tmp = toCopy.getFirst(); if (tmp) - fFirst = new ContentSpecNode(*tmp); + fFirst = new (fMemoryManager) ContentSpecNode(*tmp); else fFirst = 0; tmp = toCopy.getSecond(); if (tmp) - fSecond = new ContentSpecNode(*tmp); + fSecond = new (fMemoryManager) ContentSpecNode(*tmp); else fSecond = 0; diff --git a/src/xercesc/validators/common/ContentSpecNode.hpp b/src/xercesc/validators/common/ContentSpecNode.hpp index 8b5795636..6ef7a1b9b 100644 --- a/src/xercesc/validators/common/ContentSpecNode.hpp +++ b/src/xercesc/validators/common/ContentSpecNode.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -158,8 +161,8 @@ #if !defined(CONTENTSPECNODE_HPP) #define CONTENTSPECNODE_HPP -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/framework/XMLElementDecl.hpp> +#include <xercesc/framework/MemoryManager.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -167,7 +170,7 @@ class XMLBuffer; class Grammar; -class ContentSpecNode +class ContentSpecNode : public XMemory { public : // ----------------------------------------------------------------------- @@ -296,6 +299,7 @@ private : // Indicate the maximum times that this node can occur // -1 (Unbounded), default (1) // ----------------------------------------------------------------------- + MemoryManager* fMemoryManager; QName* fElement; ContentSpecNode* fFirst; ContentSpecNode* fSecond; @@ -311,7 +315,8 @@ private : // --------------------------------------------------------------------------- inline ContentSpecNode::ContentSpecNode() : - fElement(0) + fMemoryManager(XMLPlatformUtils::fgMemoryManager) + , fElement(0) , fFirst(0) , fSecond(0) , fType(ContentSpecNode::Leaf) @@ -325,7 +330,8 @@ inline ContentSpecNode::ContentSpecNode() : inline ContentSpecNode::ContentSpecNode(QName* const element) : - fElement(0) + fMemoryManager(XMLPlatformUtils::fgMemoryManager) + , fElement(0) , fFirst(0) , fSecond(0) , fType(ContentSpecNode::Leaf) @@ -335,14 +341,15 @@ ContentSpecNode::ContentSpecNode(QName* const element) : , fMaxOccurs(1) { if (element) - fElement = new QName(*element); + fElement = new (fMemoryManager) QName(*element); } inline ContentSpecNode::ContentSpecNode(QName* const element , const bool copyQName) : - fElement(0) + fMemoryManager(XMLPlatformUtils::fgMemoryManager) + , fElement(0) , fFirst(0) , fSecond(0) , fType(ContentSpecNode::Leaf) @@ -354,7 +361,7 @@ ContentSpecNode::ContentSpecNode(QName* const element if (copyQName) { if (element) - fElement = new QName(*element); + fElement = new (fMemoryManager) QName(*element); } else { @@ -369,7 +376,8 @@ ContentSpecNode::ContentSpecNode(const NodeTypes type , const bool adoptFirst , const bool adoptSecond) : - fElement(0) + fMemoryManager(XMLPlatformUtils::fgMemoryManager) + , fElement(0) , fFirst(firstAdopt) , fSecond(secondAdopt) , fType(type) @@ -476,7 +484,7 @@ inline void ContentSpecNode::setElement(QName* const element) delete fElement; fElement = 0; if (element) - fElement = new QName(*element); + fElement = new (fMemoryManager) QName(*element); } inline void ContentSpecNode::setFirst(ContentSpecNode* const toAdopt) diff --git a/src/xercesc/validators/common/DFAContentModel.cpp b/src/xercesc/validators/common/DFAContentModel.cpp index f7f5efec7..9fb0dd3fb 100644 --- a/src/xercesc/validators/common/DFAContentModel.cpp +++ b/src/xercesc/validators/common/DFAContentModel.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -222,8 +225,9 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // DFAContentModel: Constructors and Destructor // --------------------------------------------------------------------------- -DFAContentModel::DFAContentModel(const bool dtd - , ContentSpecNode* const elemContentSpec) : +DFAContentModel::DFAContentModel( const bool dtd + , ContentSpecNode* const elemContentSpec + , MemoryManager* const manager) : fElemMap(0) , fElemMapType(0) @@ -240,14 +244,16 @@ DFAContentModel::DFAContentModel(const bool dtd , fDTD(dtd) , fIsMixed(false) , fLeafNameTypeVector(0) + , fMemoryManager(manager) { // And build the DFA data structures buildDFA(elemContentSpec); } -DFAContentModel::DFAContentModel(const bool dtd - , ContentSpecNode* const elemContentSpec - , const bool isMixed ): +DFAContentModel::DFAContentModel( const bool dtd + , ContentSpecNode* const elemContentSpec + , const bool isMixed + , MemoryManager* const manager): fElemMap(0) , fElemMapType(0) @@ -264,6 +270,7 @@ DFAContentModel::DFAContentModel(const bool dtd , fDTD(dtd) , fIsMixed(isMixed) , fLeafNameTypeVector(0) + , fMemoryManager(manager) { // And build the DFA data structures buildDFA(elemContentSpec); @@ -275,19 +282,19 @@ DFAContentModel::~DFAContentModel() // Clean up all the stuff that is not just temporary representation // data that was cleaned up after building the DFA. // - delete [] fFinalStateFlags; + fMemoryManager->deallocate(fFinalStateFlags); //delete [] fFinalStateFlags; unsigned index; for (index = 0; index < fTransTableSize; index++) - delete [] fTransTable[index]; - delete [] fTransTable; + fMemoryManager->deallocate(fTransTable[index]); //delete [] fTransTable[index]; + fMemoryManager->deallocate(fTransTable); //delete [] fTransTable; for (index = 0; index < fLeafCount; index++) delete fElemMap[index]; - delete [] fElemMap; + fMemoryManager->deallocate(fElemMap); //delete [] fElemMap; - delete [] fElemMapType; - delete [] fLeafListType; + fMemoryManager->deallocate(fElemMapType); //delete [] fElemMapType; + fMemoryManager->deallocate(fLeafListType); //delete [] fLeafListType; delete fLeafNameTypeVector; } @@ -536,17 +543,25 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // DFA state position and count the number of such leafs, which is left // in the fLeafCount member. // - CMLeaf* nodeEOC = new CMLeaf(new QName(XMLUni::fgZeroLenString, - XMLUni::fgZeroLenString, - XMLContentModel::gEOCFakeId) - , ~0 - , true); + CMLeaf* nodeEOC = new (fMemoryManager) CMLeaf + ( + new (fMemoryManager) QName + ( + XMLUni::fgZeroLenString + , XMLUni::fgZeroLenString + , XMLContentModel::gEOCFakeId + ) + , ~0 + , true + , fMemoryManager + ); CMNode* nodeOrgContent = buildSyntaxTree(curNode); - fHeadNode = new CMBinaryOp + fHeadNode = new (fMemoryManager) CMBinaryOp ( ContentSpecNode::Sequence , nodeOrgContent , nodeEOC + , fMemoryManager ); // @@ -573,8 +588,11 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // initial tree build (which built their position numbers, we will put // them in the array according to their position values. // - fLeafList = new CMLeaf*[fLeafCount]; - fLeafListType = new ContentSpecNode::NodeTypes[fLeafCount]; + fLeafList = (CMLeaf**) fMemoryManager->allocate(fLeafCount*sizeof(CMLeaf*)); //new CMLeaf*[fLeafCount]; + fLeafListType = (ContentSpecNode::NodeTypes*) fMemoryManager->allocate + ( + fLeafCount * sizeof(ContentSpecNode::NodeTypes) + ); //new ContentSpecNode::NodeTypes[fLeafCount]; postTreeBuildInit(fHeadNode, 0); // @@ -582,9 +600,12 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // for all the nodes. So we allocate an array of pointers to state sets, // one for each leaf node (i.e. each significant DFA position.) // - fFollowList = new CMStateSet*[fLeafCount]; + fFollowList = (CMStateSet**) fMemoryManager->allocate + ( + fLeafCount * sizeof(CMStateSet*) + ); //new CMStateSet*[fLeafCount]; for (index = 0; index < fLeafCount; index++) - fFollowList[index] = new CMStateSet(fLeafCount); + fFollowList[index] = new (fMemoryManager) CMStateSet(fLeafCount, fMemoryManager); calcFollowList(fHeadNode); // @@ -608,18 +629,24 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // So we need to a zero based range of indexes that map to element types. // This element map provides that mapping. // - fElemMap = new QName*[fLeafCount]; - fElemMapType = new ContentSpecNode::NodeTypes[fLeafCount]; + fElemMap = (QName**) fMemoryManager->allocate + ( + fLeafCount * sizeof(QName*) + ); //new QName*[fLeafCount]; + fElemMapType = (ContentSpecNode::NodeTypes*) fMemoryManager->allocate + ( + fLeafCount * sizeof(ContentSpecNode::NodeTypes) + ); //new ContentSpecNode::NodeTypes[fLeafCount]; fElemMapSize = 0; for (unsigned int outIndex = 0; outIndex < fLeafCount; outIndex++) { - fElemMap[outIndex] = new QName(); + fElemMap[outIndex] = new (fMemoryManager) QName(); if ( (fLeafListType[outIndex] & 0x0f) != ContentSpecNode::Leaf ) if (!fLeafNameTypeVector) - fLeafNameTypeVector = new ContentLeafNameTypeVector(); + fLeafNameTypeVector = new (fMemoryManager) ContentLeafNameTypeVector(fMemoryManager); // Get the current leaf's element index const QName* element = fLeafList[outIndex]->getElement(); @@ -668,7 +695,10 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) **/ // don't forget to delete it - int *fLeafSorter = new int[fLeafCount + fElemMapSize]; + int *fLeafSorter = (int*) fMemoryManager->allocate + ( + (fLeafCount + fElemMapSize) * sizeof(int) + ); //new int[fLeafCount + fElemMapSize]; unsigned int fSortCount = 0; for (unsigned int elemIndex = 0; elemIndex < fElemMapSize; elemIndex++) @@ -710,15 +740,25 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // have to expand though, it if does, the overhead will be somewhat ugly. // unsigned int curArraySize = fLeafCount * 4; - const CMStateSet** statesToDo = new const CMStateSet*[curArraySize]; - fFinalStateFlags = new bool[curArraySize]; - fTransTable = new unsigned int*[curArraySize]; + const CMStateSet** statesToDo = (const CMStateSet**) + fMemoryManager->allocate + ( + curArraySize * sizeof(const CMStateSet*) + ); //new const CMStateSet*[curArraySize]; + fFinalStateFlags = (bool*) fMemoryManager->allocate + ( + curArraySize * sizeof(bool) + ); //new bool[curArraySize]; + fTransTable = (unsigned int**) fMemoryManager->allocate + ( + curArraySize * sizeof(unsigned int*) + ); //new unsigned int*[curArraySize]; // // Ok we start with the initial set as the first pos set of the head node // (which is the seq node that holds the content model and the EOC node.) // - const CMStateSet* setT = new CMStateSet(fHeadNode->getFirstPos()); + const CMStateSet* setT = new (fMemoryManager) CMStateSet(fHeadNode->getFirstPos()); // // Init our two state flags. Basically the unmarked state counter is @@ -747,8 +787,14 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // // TODO: in the future, we may change the 29 to something // derived from curArraySize. - RefHashTableOf<XMLInteger> *stateTable = new RefHashTableOf<XMLInteger>(curArraySize, true, new HashCMStateSet()); - //stateTable->put((CMStateSet*)setT, new XMLInteger(0)); + RefHashTableOf<XMLInteger> *stateTable = + new (fMemoryManager) RefHashTableOf<XMLInteger> + ( + curArraySize + , true + , new (fMemoryManager) HashCMStateSet() + ); + //stateTable->put((CMStateSet*)setT, new (fMemoryManager) XMLInteger(0)); // // Ok, almost done with the algorithm from hell... We now enter the @@ -785,7 +831,11 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // one. Otherwise, zero out the existing one. // if (!newSet) - newSet = new CMStateSet(fLeafCount); + newSet = new (fMemoryManager) CMStateSet + ( + fLeafCount + , fMemoryManager + ); else newSet->zeroBits(); @@ -868,7 +918,11 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // statesToDo[curState] = newSet; fTransTable[curState] = makeDefStateList(); - stateTable->put(newSet, new XMLInteger(curState)); + stateTable->put + ( + newSet + , new (fMemoryManager) XMLInteger(curState) + ); // We now have a new state to do so bump the count curState++; @@ -897,9 +951,20 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) // size by 50% and allocate new arrays. // const unsigned int newSize = (unsigned int)(curArraySize * 1.5); - const CMStateSet** newToDo = new const CMStateSet*[newSize]; - bool* newFinalFlags = new bool[newSize]; - unsigned int** newTransTable = new unsigned int*[newSize]; + const CMStateSet** newToDo = (const CMStateSet**) + fMemoryManager->allocate + ( + newSize * sizeof(const CMStateSet*) + ); //new const CMStateSet*[newSize]; + bool* newFinalFlags = (bool*) fMemoryManager->allocate + ( + newSize * sizeof(bool) + ); //new bool[newSize]; + unsigned int** newTransTable = (unsigned int**) + fMemoryManager->allocate + ( + newSize * sizeof(unsigned int*) + ); //new unsigned int*[newSize]; // Copy over all of the existing content for (unsigned int expIndex = 0; expIndex < curArraySize; expIndex++) @@ -910,9 +975,9 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) } // Clean up the old stuff - delete [] statesToDo; - delete [] fFinalStateFlags; - delete [] fTransTable; + fMemoryManager->deallocate(statesToDo); //delete [] statesToDo; + fMemoryManager->deallocate(fFinalStateFlags); //delete [] fFinalStateFlags; + fMemoryManager->deallocate(fTransTable); //delete [] fTransTable; // Store the new array size and pointers curArraySize = newSize; @@ -951,7 +1016,7 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) for (index = 0; index < fLeafCount; index++) delete fFollowList[index]; - delete [] fFollowList; + fMemoryManager->deallocate(fFollowList); //delete [] fFollowList; // // removeAll() will delete all data, XMLInteger, @@ -962,13 +1027,13 @@ void DFAContentModel::buildDFA(ContentSpecNode* const curNode) for (index = 0; index < curState; index++) delete (CMStateSet*)statesToDo[index]; - delete [] statesToDo; + fMemoryManager->deallocate(statesToDo); //delete [] statesToDo; for (index = 0; index < fLeafCount; index++) delete fLeafList[index]; - delete [] fLeafList; + fMemoryManager->deallocate(fLeafList); //delete [] fLeafList; - delete [] fLeafSorter; + fMemoryManager->deallocate(fLeafSorter); //delete [] fLeafSorter; } @@ -985,7 +1050,13 @@ CMNode* DFAContentModel::buildSyntaxTree(ContentSpecNode* const curNode) || (curType & 0x0f) == ContentSpecNode::Any_Other || (curType & 0x0f) == ContentSpecNode::Any_NS) { - retNode = new CMAny(curType, curNode->getElement()->getURI(), fLeafCount++); + retNode = new (fMemoryManager) CMAny + ( + curType + , curNode->getElement()->getURI() + , fLeafCount++ + , fMemoryManager + ); } else if (curType == ContentSpecNode::Leaf) { @@ -995,7 +1066,12 @@ CMNode* DFAContentModel::buildSyntaxTree(ContentSpecNode* const curNode) // This makes the positions zero based since we store first and then // increment. // - retNode = new CMLeaf(curNode->getElement(), fLeafCount++); + retNode = new (fMemoryManager) CMLeaf + ( + curNode->getElement() + , fLeafCount++ + , fMemoryManager + ); } else { @@ -1016,14 +1092,25 @@ CMNode* DFAContentModel::buildSyntaxTree(ContentSpecNode* const curNode) // CMNode* newLeft = buildSyntaxTree(leftNode); CMNode* newRight = buildSyntaxTree(rightNode); - retNode = new CMBinaryOp(curType, newLeft, newRight); + retNode = new (fMemoryManager) CMBinaryOp + ( + curType + , newLeft + , newRight + , fMemoryManager + ); } else if (curType == ContentSpecNode::ZeroOrMore || curType == ContentSpecNode::ZeroOrOne || curType == ContentSpecNode::OneOrMore) { // This one is fine as is, just change to our form - retNode = new CMUnaryOp(curType, buildSyntaxTree(leftNode)); + retNode = new (fMemoryManager) CMUnaryOp + ( + curType + , buildSyntaxTree(leftNode) + , fMemoryManager + ); } else { @@ -1108,7 +1195,10 @@ void DFAContentModel::calcFollowList(CMNode* const curNode) // unsigned int* DFAContentModel::makeDefStateList() const { - unsigned int* retArray = new unsigned int[fElemMapSize]; + unsigned int* retArray = (unsigned int*) fMemoryManager->allocate + ( + fElemMapSize * sizeof(unsigned int) + ); //new unsigned int[fElemMapSize]; for (unsigned int index = 0; index < fElemMapSize; index++) retArray[index] = XMLContentModel::gInvalidTrans; return retArray; @@ -1132,11 +1222,18 @@ int DFAContentModel::postTreeBuildInit( CMNode* const nodeCur ((curType & 0x0f) == ContentSpecNode::Any_NS) || ((curType & 0x0f) == ContentSpecNode::Any_Other) ) { - fLeafList[newIndex] = new CMLeaf(new QName(XMLUni::fgZeroLenString - , XMLUni::fgZeroLenString - , ((CMAny*) nodeCur)->getURI()) - , ((CMAny*)nodeCur)->getPosition() - , true); + fLeafList[newIndex] = new (fMemoryManager) CMLeaf + ( + new (fMemoryManager) QName + ( + XMLUni::fgZeroLenString + , XMLUni::fgZeroLenString + , ((CMAny*) nodeCur)->getURI() + ) + , ((CMAny*)nodeCur)->getPosition() + , true + , fMemoryManager + ); fLeafListType[newIndex] = curType; ++newIndex; } @@ -1166,8 +1263,12 @@ int DFAContentModel::postTreeBuildInit( CMNode* const nodeCur // will NOT delete the nodeCur --twice--, // thuse to make delete the owner of the nodeCur possible. // - fLeafList[newIndex] = new CMLeaf(((CMLeaf*)nodeCur)->getElement(), - ((CMLeaf*)nodeCur)->getPosition()); + fLeafList[newIndex] = new (fMemoryManager) CMLeaf + ( + ((CMLeaf*)nodeCur)->getElement() + , ((CMLeaf*)nodeCur)->getPosition() + , fMemoryManager + ); fLeafListType[newIndex] = ContentSpecNode::Leaf; ++newIndex; } @@ -1214,11 +1315,17 @@ void DFAContentModel::checkUniqueParticleAttribution (SchemaGrammar* const pG // Unique Particle Attribution // store the conflict results between any two elements in fElemMap // XMLContentModel::gInvalidTrans: not compared; 0: no conflict; 1: conflict - unsigned int** fConflictTable = new unsigned int*[fElemMapSize]; + unsigned int** fConflictTable = (unsigned int**) fMemoryManager->allocate + ( + fElemMapSize * sizeof(unsigned int*) + ); //new unsigned int*[fElemMapSize]; // initialize the conflict table for (j = 0; j < fElemMapSize; j++) { - fConflictTable[j] = new unsigned int[fElemMapSize]; + fConflictTable[j] = (unsigned int*) fMemoryManager->allocate + ( + fElemMapSize * sizeof(unsigned int) + ); //new unsigned int[fElemMapSize]; for (k = j+1; k < fElemMapSize; k++) fConflictTable[j][k] = XMLContentModel::gInvalidTrans; } @@ -1275,8 +1382,8 @@ void DFAContentModel::checkUniqueParticleAttribution (SchemaGrammar* const pG } for (i = 0; i < fElemMapSize; i++) - delete [] fConflictTable[i]; - delete [] fConflictTable; + fMemoryManager->deallocate(fConflictTable[i]); //delete [] fConflictTable[i]; + fMemoryManager->deallocate(fConflictTable); //delete [] fConflictTable; } XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/validators/common/DFAContentModel.hpp b/src/xercesc/validators/common/DFAContentModel.hpp index 54c7815b4..48c645888 100644 --- a/src/xercesc/validators/common/DFAContentModel.hpp +++ b/src/xercesc/validators/common/DFAContentModel.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2003/03/07 18:16:57 tng * Return a reference instead of void for operator= * @@ -157,12 +160,19 @@ public: // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- - DFAContentModel(const bool dtd - , ContentSpecNode* const elemContentSpec); - - DFAContentModel(const bool dtd - , ContentSpecNode* const elemContentSpec - , const bool isMixed); + DFAContentModel + ( + const bool dtd + , ContentSpecNode* const elemContentSpec + , MemoryManager* const manager + ); + DFAContentModel + ( + const bool dtd + , ContentSpecNode* const elemContentSpec + , const bool isMixed + , MemoryManager* const manager + ); virtual ~DFAContentModel(); @@ -316,6 +326,7 @@ private : bool fDTD; bool fIsMixed; ContentLeafNameTypeVector *fLeafNameTypeVector; + MemoryManager* fMemoryManager; }; diff --git a/src/xercesc/validators/common/Grammar.hpp b/src/xercesc/validators/common/Grammar.hpp index e401208e1..3ce470bbb 100644 --- a/src/xercesc/validators/common/Grammar.hpp +++ b/src/xercesc/validators/common/Grammar.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -103,7 +106,7 @@ XERCES_CPP_NAMESPACE_BEGIN // This abstract class specifies the interface for a Grammar // -class VALIDATORS_EXPORT Grammar +class VALIDATORS_EXPORT Grammar : public XMemory { public: diff --git a/src/xercesc/validators/common/GrammarResolver.cpp b/src/xercesc/validators/common/GrammarResolver.cpp index bd45486cd..58529e2d0 100644 --- a/src/xercesc/validators/common/GrammarResolver.cpp +++ b/src/xercesc/validators/common/GrammarResolver.cpp @@ -57,6 +57,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -99,14 +102,15 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // GrammarResolver: Constructor and Destructor // --------------------------------------------------------------------------- -GrammarResolver::GrammarResolver() : +GrammarResolver::GrammarResolver(MemoryManager* const manager) : fCacheGrammar(false) , fUseCachedGrammar(false) , fGrammarRegistry(0) , fCachedGrammarRegistry(0) , fDataTypeReg(0) + , fMemoryManager(manager) { - fGrammarRegistry = new RefHashTableOf<Grammar>(29, true); + fGrammarRegistry = new (manager) RefHashTableOf<Grammar>(29, true); } GrammarResolver::~GrammarResolver() @@ -130,7 +134,7 @@ GrammarResolver::getDatatypeValidator(const XMLCh* const uriStr, if (!fDataTypeReg) { - fDataTypeReg = new DatatypeValidatorFactory(); + fDataTypeReg = new (fMemoryManager) DatatypeValidatorFactory(fMemoryManager); fDataTypeReg->expandRegistryToFullSchemaSet(); } @@ -222,7 +226,7 @@ void GrammarResolver::cacheGrammars() } if (!fCachedGrammarRegistry) - fCachedGrammarRegistry = new RefHashTableOf<Grammar>(29, true); + fCachedGrammarRegistry = new (fMemoryManager) RefHashTableOf<Grammar>(29, true); // Cache for (unsigned int i=0; i<keyCount; i++) { @@ -240,7 +244,7 @@ void GrammarResolver::cacheGrammars() void GrammarResolver::cacheGrammarFromParse(const bool aValue) { if (aValue && !fCachedGrammarRegistry) { - fCachedGrammarRegistry = new RefHashTableOf<Grammar>(29, true); + fCachedGrammarRegistry = new (fMemoryManager) RefHashTableOf<Grammar>(29, true); } fCacheGrammar = aValue; diff --git a/src/xercesc/validators/common/GrammarResolver.hpp b/src/xercesc/validators/common/GrammarResolver.hpp index 1734f200f..11e86ac66 100644 --- a/src/xercesc/validators/common/GrammarResolver.hpp +++ b/src/xercesc/validators/common/GrammarResolver.hpp @@ -79,7 +79,8 @@ class DatatypeValidatorFactory; * */ -class VALIDATORS_EXPORT GrammarResolver { +class VALIDATORS_EXPORT GrammarResolver : public XMemory +{ public: /** @name Constructor and Destructor */ @@ -88,7 +89,7 @@ public: * * Default Constructor */ - GrammarResolver(); + GrammarResolver(MemoryManager* const manager); /** * Destructor @@ -208,6 +209,8 @@ private: // // fDataTypeReg DatatypeValidatorFactory registery // + // fMemoryManager Pluggable memory manager for dynamic memory + // allocation/deallocation // ----------------------------------------------------------------------- bool fCacheGrammar; bool fUseCachedGrammar; @@ -215,6 +218,7 @@ private: RefHashTableOf<Grammar>* fGrammarRegistry; RefHashTableOf<Grammar>* fCachedGrammarRegistry; DatatypeValidatorFactory* fDataTypeReg; + MemoryManager* fMemoryManager; }; inline XMLStringPool* GrammarResolver::getStringPool() { diff --git a/src/xercesc/validators/common/MixedContentModel.cpp b/src/xercesc/validators/common/MixedContentModel.cpp index 9886387f9..e918b819c 100644 --- a/src/xercesc/validators/common/MixedContentModel.cpp +++ b/src/xercesc/validators/common/MixedContentModel.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/11/04 14:54:58 tng * C++ Namespace Support. * @@ -154,6 +157,7 @@ MixedContentModel::MixedContentModel(const bool dtd , fChildTypes(0) , fOrdered(ordered) , fDTD(dtd) + , fMemoryManager(XMLPlatformUtils::fgMemoryManager) { // // Create a vector of unsigned ints that will be filled in with the @@ -161,7 +165,6 @@ MixedContentModel::MixedContentModel(const bool dtd // it an initial capacity of 64 which should be more than enough for // 99% of the scenarios. // - ValueVectorOf<QName*> children(64); ValueVectorOf<ContentSpecNode::NodeTypes> childTypes(64); @@ -182,8 +185,11 @@ MixedContentModel::MixedContentModel(const bool dtd // fill them in. // fCount = children.size(); - fChildren = new QName*[fCount]; - fChildTypes = new ContentSpecNode::NodeTypes[fCount]; + fChildren = (QName**) fMemoryManager->allocate(fCount * sizeof(QName*)); //new QName*[fCount]; + fChildTypes = (ContentSpecNode::NodeTypes*) fMemoryManager->allocate + ( + fCount * sizeof(ContentSpecNode::NodeTypes) + ); //new ContentSpecNode::NodeTypes[fCount]; for (unsigned int index = 0; index < fCount; index++) { fChildren[index] = children.elementAt(index); fChildTypes[index] = childTypes.elementAt(index); @@ -192,8 +198,8 @@ MixedContentModel::MixedContentModel(const bool dtd MixedContentModel::~MixedContentModel() { - delete [] fChildren; - delete [] fChildTypes; + fMemoryManager->deallocate(fChildren); //delete [] fChildren; + fMemoryManager->deallocate(fChildTypes); //delete [] fChildTypes; } diff --git a/src/xercesc/validators/common/MixedContentModel.hpp b/src/xercesc/validators/common/MixedContentModel.hpp index 7e255bd7b..73bc0b630 100644 --- a/src/xercesc/validators/common/MixedContentModel.hpp +++ b/src/xercesc/validators/common/MixedContentModel.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2003/03/07 18:16:57 tng * Return a reference instead of void for operator= * @@ -238,12 +241,12 @@ private : // Boolean to allow DTDs to validate even with namespace support. // // ----------------------------------------------------------------------- - unsigned int fCount; - QName** fChildren; - ContentSpecNode::NodeTypes* fChildTypes; - bool fOrdered; - bool fDTD; - + unsigned int fCount; + QName** fChildren; + ContentSpecNode::NodeTypes* fChildTypes; + bool fOrdered; + bool fDTD; + MemoryManager* fMemoryManager; }; inline ContentLeafNameTypeVector* MixedContentModel::getContentLeafNameTypeVector() const diff --git a/src/xercesc/validators/common/SimpleContentModel.hpp b/src/xercesc/validators/common/SimpleContentModel.hpp index a4b0823f9..3684dd167 100644 --- a/src/xercesc/validators/common/SimpleContentModel.hpp +++ b/src/xercesc/validators/common/SimpleContentModel.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:48:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2003/03/07 18:16:57 tng * Return a reference instead of void for operator= * @@ -240,26 +243,27 @@ public : // --------------------------------------------------------------------------- // SimpleContentModel: Constructors and Destructor // --------------------------------------------------------------------------- -inline -SimpleContentModel::SimpleContentModel( const bool dtd - , QName* const firstChild - , QName* const secondChild - , const ContentSpecNode::NodeTypes cmOp) : - - fFirstChild(0) +inline SimpleContentModel::SimpleContentModel +( + const bool dtd + , QName* const firstChild + , QName* const secondChild + , const ContentSpecNode::NodeTypes cmOp +) + : fFirstChild(0) , fSecondChild(0) , fOp(cmOp) , fDTD(dtd) { if (firstChild) - fFirstChild = new QName(*firstChild); + fFirstChild = new (XMLPlatformUtils::fgMemoryManager) QName(*firstChild); else - fFirstChild = new QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, XMLElementDecl::fgInvalidElemId); + fFirstChild = new (XMLPlatformUtils::fgMemoryManager) QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, XMLElementDecl::fgInvalidElemId); if (secondChild) - fSecondChild = new QName(*secondChild); + fSecondChild = new (XMLPlatformUtils::fgMemoryManager) QName(*secondChild); else - fSecondChild = new QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, XMLElementDecl::fgInvalidElemId); + fSecondChild = new (XMLPlatformUtils::fgMemoryManager) QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, XMLElementDecl::fgInvalidElemId); } inline SimpleContentModel::~SimpleContentModel() diff --git a/src/xercesc/validators/datatype/AbstractNumericFacetValidator.cpp b/src/xercesc/validators/datatype/AbstractNumericFacetValidator.cpp index 86c973c5d..716c59e2a 100644 --- a/src/xercesc/validators/datatype/AbstractNumericFacetValidator.cpp +++ b/src/xercesc/validators/datatype/AbstractNumericFacetValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.12 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.11 2003/02/03 16:34:35 peiyongz * fix to misplaced derived and base value in error message. * @@ -115,7 +118,6 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/validators/datatype/AbstractNumericFacetValidator.hpp> -#include <xercesc/validators/schema/SchemaSymbols.hpp> #include <xercesc/validators/datatype/InvalidDatatypeFacetException.hpp> #include <xercesc/util/NumberFormatException.hpp> @@ -174,8 +176,9 @@ AbstractNumericFacetValidator::AbstractNumericFacetValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:DatatypeValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:DatatypeValidator(baseValidator, facets, finalSet, type, manager) , fMaxInclusiveInherited(false) , fMaxExclusiveInherited(false) , fMinInclusiveInherited(false) @@ -655,6 +658,7 @@ void AbstractNumericFacetValidator::inspectFacetBase() { REPORT_FACET_ERROR(thisMinExclusive , baseMaxInclusive + , XMLExcepts::FACET_minExcl_base_maxIncl) } } diff --git a/src/xercesc/validators/datatype/AbstractNumericFacetValidator.hpp b/src/xercesc/validators/datatype/AbstractNumericFacetValidator.hpp index 0b89411a1..d7e55834f 100644 --- a/src/xercesc/validators/datatype/AbstractNumericFacetValidator.hpp +++ b/src/xercesc/validators/datatype/AbstractNumericFacetValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.6 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -111,10 +114,14 @@ public: protected: - AbstractNumericFacetValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + AbstractNumericFacetValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); void init(RefArrayVectorOf<XMLCh>* const enums); diff --git a/src/xercesc/validators/datatype/AbstractNumericValidator.cpp b/src/xercesc/validators/datatype/AbstractNumericValidator.cpp index dde872f3e..a18e904bc 100644 --- a/src/xercesc/validators/datatype/AbstractNumericValidator.cpp +++ b/src/xercesc/validators/datatype/AbstractNumericValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.5 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2003/02/02 23:55:40 peiyongz * getFormattedString() added to return original and converted value. * @@ -101,8 +104,9 @@ AbstractNumericValidator::AbstractNumericValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:AbstractNumericFacetValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:AbstractNumericFacetValidator(baseValidator, facets, finalSet, type, manager) { //do not invoke init() here !!! } diff --git a/src/xercesc/validators/datatype/AbstractNumericValidator.hpp b/src/xercesc/validators/datatype/AbstractNumericValidator.hpp index b62c53866..371ebd140 100644 --- a/src/xercesc/validators/datatype/AbstractNumericValidator.hpp +++ b/src/xercesc/validators/datatype/AbstractNumericValidator.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -79,7 +82,6 @@ #include <xercesc/validators/datatype/AbstractNumericFacetValidator.hpp> #include <xercesc/util/RefVectorOf.hpp> -#include <xercesc/util/XMLNumber.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -101,10 +103,14 @@ public: protected: - AbstractNumericValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + AbstractNumericValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); inline void init(RefArrayVectorOf<XMLCh>* const enums); diff --git a/src/xercesc/validators/datatype/AbstractStringValidator.cpp b/src/xercesc/validators/datatype/AbstractStringValidator.cpp index d8f4750b3..35b75f251 100644 --- a/src/xercesc/validators/datatype/AbstractStringValidator.cpp +++ b/src/xercesc/validators/datatype/AbstractStringValidator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.11 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.10 2003/02/22 18:28:26 peiyongz * Schema Errata E2-35 Length, minLength and maxLength in different derivation steps. * @@ -122,7 +125,6 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/validators/datatype/AbstractStringValidator.hpp> -#include <xercesc/validators/schema/SchemaSymbols.hpp> #include <xercesc/validators/datatype/InvalidDatatypeFacetException.hpp> #include <xercesc/validators/datatype/InvalidDatatypeValueException.hpp> #include <xercesc/util/NumberFormatException.hpp> @@ -167,8 +169,9 @@ AbstractStringValidator::AbstractStringValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:DatatypeValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:DatatypeValidator(baseValidator, facets, finalSet, type, manager) ,fLength(0) ,fMaxLength(SchemaSymbols::fgINT_MAX_VALUE) ,fMinLength(0) @@ -643,7 +646,7 @@ void AbstractStringValidator::checkContent( const XMLCh* const content, bool asB // lazy construction if (getRegex() ==0) { try { - setRegex(new RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); + setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); } catch (XMLException &e) { @@ -698,8 +701,8 @@ void AbstractStringValidator::checkContent( const XMLCh* const content, bool asB if ((thisFacetsDefined & DatatypeValidator::FACET_ENUMERATION) != 0 && (getEnumeration() != 0)) { - XMLCh* normContent = XMLString::replicate(content); - ArrayJanitor<XMLCh> jan(normContent); + XMLCh* normContent = XMLString::replicate(content, fMemoryManager); + ArrayJanitor<XMLCh> jan(normContent, fMemoryManager); normalizeContent(normContent); int i=0; diff --git a/src/xercesc/validators/datatype/AbstractStringValidator.hpp b/src/xercesc/validators/datatype/AbstractStringValidator.hpp index 5540c8385..3d34fe4f8 100644 --- a/src/xercesc/validators/datatype/AbstractStringValidator.hpp +++ b/src/xercesc/validators/datatype/AbstractStringValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.8 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.7 2003/01/27 19:24:17 peiyongz * normalize Base64 data before checking against enumeration. * @@ -170,10 +173,14 @@ public: protected: - AbstractStringValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + AbstractStringValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); void init(RefArrayVectorOf<XMLCh>* const enums); diff --git a/src/xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.cpp b/src/xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.cpp index fbed7be05..7d0e99a0d 100644 --- a/src/xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2003/01/13 20:16:51 knoaman * [Bug 16024] SchemaSymbols.hpp conflicts C++ Builder 6 dir.h * @@ -82,7 +85,6 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.hpp> -#include <xercesc/validators/schema/SchemaSymbols.hpp> #include <xercesc/util/RuntimeException.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -90,8 +92,8 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // AnySimpleTypeDatatypeValidator: Constructors and Destructor // --------------------------------------------------------------------------- -AnySimpleTypeDatatypeValidator::AnySimpleTypeDatatypeValidator() - : DatatypeValidator(0, 0, SchemaSymbols::XSD_RESTRICTION, DatatypeValidator::AnySimpleType) +AnySimpleTypeDatatypeValidator::AnySimpleTypeDatatypeValidator(MemoryManager* const manager) + : DatatypeValidator(0, 0, SchemaSymbols::XSD_RESTRICTION, DatatypeValidator::AnySimpleType, manager) { } @@ -104,11 +106,14 @@ AnySimpleTypeDatatypeValidator::~AnySimpleTypeDatatypeValidator() // --------------------------------------------------------------------------- // AnySimpleTypeDatatypeValidator: Instance methods // --------------------------------------------------------------------------- -DatatypeValidator* -AnySimpleTypeDatatypeValidator::newInstance(RefHashTableOf<KVStringPair>* const facets, - RefArrayVectorOf<XMLCh>* const enums, - const int finalSet) { - +DatatypeValidator* AnySimpleTypeDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) +{ // We own them, so we will delete them first delete facets; delete enums; diff --git a/src/xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.hpp b/src/xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.hpp index 02e6c1ba6..022b6d017 100644 --- a/src/xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/AnySimpleTypeDatatypeValidator.hpp @@ -74,7 +74,10 @@ public: /** @name Constructor */ //@{ - AnySimpleTypeDatatypeValidator(); + AnySimpleTypeDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); //@} @@ -158,9 +161,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const, - RefArrayVectorOf<XMLCh>* const enums, - const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); }; diff --git a/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp b/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp index adf7d5675..8ec1e1219 100644 --- a/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -126,8 +129,8 @@ static const XMLCh BASE_URI[] = // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -AnyURIDatatypeValidator::AnyURIDatatypeValidator() -:AbstractStringValidator(0, 0, 0, DatatypeValidator::AnyURI) +AnyURIDatatypeValidator::AnyURIDatatypeValidator(MemoryManager* const manager) +:AbstractStringValidator(0, 0, 0, DatatypeValidator::AnyURI, manager) ,fTempURI(0) {} @@ -140,8 +143,9 @@ AnyURIDatatypeValidator::AnyURIDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::AnyURI) + , const int finalSet + , MemoryManager* const manager) +:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::AnyURI, manager) ,fTempURI(0) { try @@ -158,9 +162,10 @@ AnyURIDatatypeValidator::AnyURIDatatypeValidator( DatatypeValidator* AnyURIDatatypeValidator::newInstance( RefHashTableOf<KVStringPair>* const facets , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) + , const int finalSet + , MemoryManager* const manager) { - return (DatatypeValidator*) new AnyURIDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new AnyURIDatatypeValidator(this, facets, enums, finalSet, manager); } // --------------------------------------------------------------------------- diff --git a/src/xercesc/validators/datatype/AnyURIDatatypeValidator.hpp b/src/xercesc/validators/datatype/AnyURIDatatypeValidator.hpp index 9e7edb787..5ca7fda85 100644 --- a/src/xercesc/validators/datatype/AnyURIDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/AnyURIDatatypeValidator.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -111,16 +114,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - AnyURIDatatypeValidator(); - - AnyURIDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + AnyURIDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + AnyURIDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~AnyURIDatatypeValidator(); //@} @@ -129,9 +137,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/Base64BinaryDatatypeValidator.cpp b/src/xercesc/validators/datatype/Base64BinaryDatatypeValidator.cpp index baf5d4fb0..cf123a778 100644 --- a/src/xercesc/validators/datatype/Base64BinaryDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/Base64BinaryDatatypeValidator.cpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2003/01/27 19:24:17 peiyongz * normalize Base64 data before checking against enumeration. * @@ -123,8 +126,8 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -Base64BinaryDatatypeValidator::Base64BinaryDatatypeValidator() -:AbstractStringValidator(0, 0, 0, DatatypeValidator::Base64Binary) +Base64BinaryDatatypeValidator::Base64BinaryDatatypeValidator(MemoryManager* const manager) +:AbstractStringValidator(0, 0, 0, DatatypeValidator::Base64Binary, manager) {} Base64BinaryDatatypeValidator::~Base64BinaryDatatypeValidator() @@ -133,19 +136,23 @@ Base64BinaryDatatypeValidator::~Base64BinaryDatatypeValidator() Base64BinaryDatatypeValidator::Base64BinaryDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::Base64Binary) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::Base64Binary, manager) { init(enums); } -DatatypeValidator* Base64BinaryDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* Base64BinaryDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new Base64BinaryDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) Base64BinaryDatatypeValidator(this, facets, enums, finalSet, manager); } // --------------------------------------------------------------------------- diff --git a/src/xercesc/validators/datatype/Base64BinaryDatatypeValidator.hpp b/src/xercesc/validators/datatype/Base64BinaryDatatypeValidator.hpp index f4b721e47..a2f4e3fe2 100644 --- a/src/xercesc/validators/datatype/Base64BinaryDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/Base64BinaryDatatypeValidator.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 1999-2001 The Apache Software Foundation. All rights + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.6 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2003/01/27 19:24:17 peiyongz * normalize Base64 data before checking against enumeration. * @@ -94,16 +97,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - Base64BinaryDatatypeValidator(); - - Base64BinaryDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + Base64BinaryDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + Base64BinaryDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~Base64BinaryDatatypeValidator(); //@} @@ -112,9 +120,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/BooleanDatatypeValidator.cpp b/src/xercesc/validators/datatype/BooleanDatatypeValidator.cpp index a5da5d201..e207c1899 100644 --- a/src/xercesc/validators/datatype/BooleanDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/BooleanDatatypeValidator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.6 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -122,9 +125,10 @@ const XMLCh fgValueSpace[][32] = BooleanDatatypeValidator::BooleanDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::Boolean) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::Boolean, manager) { // Set Facets if any defined @@ -180,7 +184,7 @@ void BooleanDatatypeValidator::checkContent( const XMLCh* const content, bool as // lazy construction if (getRegex() ==0) { try { - setRegex(new RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); + setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); } catch (XMLException &e) { diff --git a/src/xercesc/validators/datatype/BooleanDatatypeValidator.hpp b/src/xercesc/validators/datatype/BooleanDatatypeValidator.hpp index a2c5fd308..16403204d 100644 --- a/src/xercesc/validators/datatype/BooleanDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/BooleanDatatypeValidator.hpp @@ -75,12 +75,18 @@ public: /** @name Constructor. */ //@{ - BooleanDatatypeValidator(); - - BooleanDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + BooleanDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + BooleanDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~BooleanDatatypeValidator(); @@ -136,9 +142,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); private: @@ -154,8 +164,8 @@ private: // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -inline BooleanDatatypeValidator::BooleanDatatypeValidator() -:DatatypeValidator(0, 0, 0, DatatypeValidator::Boolean) +inline BooleanDatatypeValidator::BooleanDatatypeValidator(MemoryManager* const manager) +:DatatypeValidator(0, 0, 0, DatatypeValidator::Boolean, manager) { } @@ -172,12 +182,15 @@ inline BooleanDatatypeValidator::~BooleanDatatypeValidator() // Compare methods // ----------------------------------------------------------------------- -inline DatatypeValidator* BooleanDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +inline DatatypeValidator* BooleanDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new BooleanDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) BooleanDatatypeValidator(this, facets, enums, finalSet, manager); } inline void BooleanDatatypeValidator::validate( const XMLCh* const content) diff --git a/src/xercesc/validators/datatype/DatatypeValidator.cpp b/src/xercesc/validators/datatype/DatatypeValidator.cpp index 7da8ee35e..1c45cce87 100644 --- a/src/xercesc/validators/datatype/DatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/DatatypeValidator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2003/01/29 19:52:32 gareth * PSVI API additions. * @@ -99,6 +102,7 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/validators/datatype/DatatypeValidator.hpp> +#include <xercesc/framework/MemoryManager.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -108,8 +112,11 @@ XERCES_CPP_NAMESPACE_BEGIN DatatypeValidator::DatatypeValidator(DatatypeValidator* const baseValidator, RefHashTableOf<KVStringPair>* const facets, const int finalSet, - const ValidatorType type) - : fFinalSet(finalSet) + const ValidatorType type, + MemoryManager* const manager) + : fMemoryManager(manager) + , fAnonymous(false) + , fFinalSet(finalSet) , fFacetsDefined(0) , fFixed(0) , fType(type) @@ -117,10 +124,9 @@ DatatypeValidator::DatatypeValidator(DatatypeValidator* const baseValidator, , fFacets(facets) , fPattern(0) , fRegex(0) - , fTypeLocalName(0) + , fTypeLocalName(XMLUni::fgZeroLenString) , fTypeName(0) - , fTypeUri(0) - , fAnonymous(false) + , fTypeUri(XMLUni::fgZeroLenString) { } @@ -145,6 +151,91 @@ const XMLCh* DatatypeValidator::getWSstring(const short theType) const } +void DatatypeValidator::setTypeName(const XMLCh* const name, const XMLCh* const uri) +{ + if (fTypeName) { + + fMemoryManager->deallocate(fTypeName); + fTypeName = 0; + } + + if (name || uri) { + + unsigned int nameLen = XMLString::stringLen(name); + unsigned int uriLen = XMLString::stringLen(uri); + + fTypeName = (XMLCh*) fMemoryManager->allocate + ( + (nameLen + uriLen + 2)*sizeof(XMLCh) + ); + fTypeUri = fTypeName; + fTypeLocalName = &fTypeName[uriLen+1]; + + if (uri) + XMLString::moveChars(fTypeName, uri, uriLen+1); + else + fTypeName[0] = chNull; + + if (name) + XMLString::moveChars(&fTypeName[uriLen+1], name, nameLen+1); + else + fTypeName[uriLen+1] = chNull; + } + else + { + fTypeUri = fTypeLocalName = XMLUni::fgZeroLenString; + } +} + +void DatatypeValidator::setTypeName(const XMLCh* const typeName) +{ + if (fTypeName) + { + fMemoryManager->deallocate(fTypeName); + fTypeName = 0; + } + + if (typeName) + { + unsigned int nameLen = XMLString::stringLen(typeName); + int commaOffset = XMLString::indexOf(typeName, chComma); + + fTypeName = (XMLCh*) fMemoryManager->allocate + ( + (nameLen + 1) * sizeof(XMLCh) + ); + XMLString::moveChars(fTypeName, typeName, nameLen+1); + + if ( commaOffset == -1) { + fTypeUri = SchemaSymbols::fgURI_SCHEMAFORSCHEMA; + fTypeLocalName = fTypeName; + } + else { + fTypeUri = fTypeName; + fTypeLocalName = &fTypeName[commaOffset+1]; + fTypeName[commaOffset] = chNull; + } + } + else + { + fTypeUri = fTypeLocalName = XMLUni::fgZeroLenString; + } +} + +// --------------------------------------------------------------------------- +// DatatypeValidator: CleanUp methods +// --------------------------------------------------------------------------- +void DatatypeValidator::cleanUp() { + + delete fFacets; + delete fRegex; + if (fPattern) + fMemoryManager->deallocate(fPattern);//delete [] fPattern; + if (fTypeName) + fMemoryManager->deallocate(fTypeName); +} + + XERCES_CPP_NAMESPACE_END /** diff --git a/src/xercesc/validators/datatype/DatatypeValidator.hpp b/src/xercesc/validators/datatype/DatatypeValidator.hpp index d496db8a5..de24de16b 100644 --- a/src/xercesc/validators/datatype/DatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/DatatypeValidator.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -61,14 +61,18 @@ #if !defined(DATATYPEVALIDATOR_HPP) #define DATATYPEVALIDATOR_HPP +#include <xercesc/util/PlatformUtils.hpp> #include <xercesc/util/RefHashTableOf.hpp> #include <xercesc/util/KVStringPair.hpp> +#include <xercesc/util/XMLUniDefs.hpp> #include <xercesc/util/regx/RegularExpression.hpp> #include <xercesc/validators/schema/SchemaSymbols.hpp> -#include <xercesc/framework/XMLBuffer.hpp> + XERCES_CPP_NAMESPACE_BEGIN +class MemoryManager; + /** * DataTypeValidator defines the interface that data type validators must * obey. These validators can be supplied by the application writer and may @@ -85,7 +89,7 @@ XERCES_CPP_NAMESPACE_BEGIN */ -class VALIDATORS_EXPORT DatatypeValidator +class VALIDATORS_EXPORT DatatypeValidator : public XMemory { public: // ----------------------------------------------------------------------- @@ -269,9 +273,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const, - RefArrayVectorOf<XMLCh>* const enums, - const int finalSet) = 0; + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ) = 0; /** * Returns the uri,name of the type this validator is for @@ -300,6 +308,10 @@ public: */ const XMLCh* getTypeLocalName() const; + /** + * Returns the plugged-in memory manager + */ + MemoryManager* getMemoryManager() const; protected: // ----------------------------------------------------------------------- @@ -321,7 +333,8 @@ protected: DatatypeValidator(DatatypeValidator* const baseValidator, RefHashTableOf<KVStringPair>* const facets, const int finalSet, - const ValidatorType type); + const ValidatorType type, + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager); //@} @@ -363,6 +376,14 @@ protected: */ const XMLCh* getWSstring(const short WSType) const; + // ----------------------------------------------------------------------- + // Protected data members + // + // fMemoryManager + // Pluggable memory manager for dynamic allocation/deallocation. + // ----------------------------------------------------------------------- + MemoryManager* fMemoryManager; + private: // ----------------------------------------------------------------------- // CleanUp methods @@ -413,6 +434,7 @@ private: // true if this type is anonynous // // ----------------------------------------------------------------------- + bool fAnonymous; int fFinalSet; int fFacetsDefined; int fFixed; @@ -421,10 +443,9 @@ private: RefHashTableOf<KVStringPair>* fFacets; XMLCh* fPattern; RegularExpression* fRegex; - XMLCh* fTypeLocalName; XMLCh* fTypeName; - XMLCh* fTypeUri; - bool fAnonymous; + const XMLCh* fTypeLocalName; + const XMLCh* fTypeUri; }; @@ -456,88 +477,74 @@ inline DatatypeValidator::ValidatorType DatatypeValidator::getType() const return fType; } -inline void DatatypeValidator::setType(ValidatorType theType) +inline int DatatypeValidator::getFacetsDefined() const { - fType = theType; + return fFacetsDefined; } -// --------------------------------------------------------------------------- -// DatatypeValidator: CleanUp methods -// --------------------------------------------------------------------------- -inline void DatatypeValidator::cleanUp() { - - delete fFacets; - delete [] fPattern; - delete fRegex; - delete [] fTypeName; - delete [] fTypeLocalName; - delete [] fTypeUri; +inline int DatatypeValidator::getFixed() const +{ + return fFixed; } - -// --------------------------------------------------------------------------- -// DatatypeValidators: Compare methods -// --------------------------------------------------------------------------- -inline int DatatypeValidator::compare(const XMLCh* const lValue, - const XMLCh* const rValue) +inline const XMLCh* DatatypeValidator::getPattern() const { - return XMLString::compareString(lValue, rValue); + return fPattern; } -// --------------------------------------------------------------------------- -// DatatypeValidators: Validation methods -// --------------------------------------------------------------------------- -inline bool -DatatypeValidator::isSubstitutableBy(const DatatypeValidator* const toCheck) +inline RegularExpression* DatatypeValidator::getRegex() const { - const DatatypeValidator* dv = toCheck; - - while (dv != 0) { - - if (dv == this) { - return true; - } + return fRegex; +} - dv = dv->getBaseValidator(); - } +inline const XMLCh* DatatypeValidator::getTypeName() const +{ + return fTypeLocalName; +} - return false; +inline bool DatatypeValidator::getAnonymous() const +{ + return fAnonymous; } -inline int DatatypeValidator::getFacetsDefined() const +inline const XMLCh* DatatypeValidator::getTypeLocalName() const { - return fFacetsDefined; + return fTypeLocalName; } -inline void DatatypeValidator::setFacetsDefined(int facets) +inline const XMLCh* DatatypeValidator::getTypeUri() const { - fFacetsDefined |= facets; + return fTypeUri; } -inline int DatatypeValidator::getFixed() const +inline MemoryManager* DatatypeValidator::getMemoryManager() const { - return fFixed; + return fMemoryManager; } -inline void DatatypeValidator::setFixed(int fixed) +// --------------------------------------------------------------------------- +// DatatypeValidator: Setters +// --------------------------------------------------------------------------- +inline void DatatypeValidator::setType(ValidatorType theType) { - fFixed |= fixed; + fType = theType; } -inline const XMLCh* DatatypeValidator::getPattern() const +inline void DatatypeValidator::setFacetsDefined(int facets) { - return fPattern; + fFacetsDefined |= facets; } -inline void DatatypeValidator::setPattern(const XMLCh* pattern) +inline void DatatypeValidator::setFixed(int fixed) { - delete [] fPattern; - fPattern = XMLString::replicate(pattern); + fFixed |= fixed; } -inline RegularExpression* DatatypeValidator::getRegex() const +inline void DatatypeValidator::setPattern(const XMLCh* pattern) { - return fRegex; + if (fPattern) + fMemoryManager->deallocate(fPattern);//delete [] fPattern; + fPattern = XMLString::replicate(pattern, fMemoryManager); } inline void DatatypeValidator::setRegex(RegularExpression* const regex) @@ -550,75 +557,37 @@ inline bool DatatypeValidator::isAtomic() const { return true; } -inline const XMLCh* DatatypeValidator::getTypeName() const { - return fTypeName; -} - -inline const XMLCh* DatatypeValidator::getTypeLocalName() const { - if(!fTypeLocalName) { - int index = XMLString::indexOf(fTypeName, chComma); - int length = XMLString::stringLen(fTypeName); - XMLCh *tName = new XMLCh[length - index + 1]; - XMLString::subString(tName, fTypeName, index + 1, length); - ((DatatypeValidator *)this)->fTypeLocalName = tName; - } - - return fTypeLocalName; +inline void DatatypeValidator::setAnonymous() { + fAnonymous = true; } -inline const XMLCh* DatatypeValidator::getTypeUri() const { - if(!fTypeUri) { - int index = XMLString::indexOf(fTypeName, chComma); - XMLCh *uri = new XMLCh[index + 1]; - XMLString::subString(uri, fTypeName, 0, index); - ((DatatypeValidator *)this)->fTypeUri = uri; - } - - return fTypeUri; +// --------------------------------------------------------------------------- +// DatatypeValidators: Compare methods +// --------------------------------------------------------------------------- +inline int DatatypeValidator::compare(const XMLCh* const lValue, + const XMLCh* const rValue) +{ + return XMLString::compareString(lValue, rValue); } -inline void DatatypeValidator::setTypeName(const XMLCh* const name, const XMLCh* const uri) { +// --------------------------------------------------------------------------- +// DatatypeValidators: Validation methods +// --------------------------------------------------------------------------- +inline bool +DatatypeValidator::isSubstitutableBy(const DatatypeValidator* const toCheck) +{ + const DatatypeValidator* dv = toCheck; - delete [] fTypeName; - delete [] fTypeLocalName; - delete [] fTypeUri; + while (dv != 0) { - fTypeUri = XMLString::replicate(uri); - fTypeLocalName = XMLString::replicate(name); - XMLBuffer buf; - buf.set(uri); - buf.append(chComma); - buf.append(name); - fTypeName = XMLString::replicate(buf.getRawBuffer()); -} + if (dv == this) { + return true; + } -inline void DatatypeValidator::setTypeName(const XMLCh* const typeName) { - - delete [] fTypeName; - delete [] fTypeLocalName; - fTypeLocalName = 0; - delete [] fTypeUri; - fTypeUri = 0; - - //REVISIT this is a lot of work, cant we set this earlier when we have the info? - if( XMLString::indexOf( typeName, chComma ) < 0 ) { - XMLBuffer buf; - buf.set(SchemaSymbols::fgURI_SCHEMAFORSCHEMA); - buf.append(chComma); - buf.append(typeName); - fTypeName = XMLString::replicate(buf.getRawBuffer()); - } - else { - fTypeName = XMLString::replicate(typeName); + dv = dv->getBaseValidator(); } -} -inline void DatatypeValidator::setAnonymous() { - fAnonymous = true; -} - -inline bool DatatypeValidator::getAnonymous() const { - return fAnonymous; + return false; } diff --git a/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp b/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp index 2039ad94b..fc274a959 100644 --- a/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp +++ b/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.14 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.13 2003/03/18 19:42:17 knoaman * Schema Errata E2-18. * @@ -383,8 +386,9 @@ RefHashTableOf<DatatypeValidator>* DatatypeValidatorFactory::fBuiltInRegistry = // --------------------------------------------------------------------------- // DatatypeValidatorFactory: Constructors and Destructor // --------------------------------------------------------------------------- -DatatypeValidatorFactory::DatatypeValidatorFactory() +DatatypeValidatorFactory::DatatypeValidatorFactory(MemoryManager* const manager) : fUserDefinedRegistry(0) + , fMemoryManager(manager) { } @@ -718,29 +722,43 @@ void DatatypeValidatorFactory::expandRegistryToFullSchemaSet() // So instead of storing them in the static fBuiltInRegistry, // store them in local data fUserDefinedRegistry if (fUserDefinedRegistry == 0) - fUserDefinedRegistry = new RefHashTableOf<DatatypeValidator>(29); + fUserDefinedRegistry = new (fMemoryManager) RefHashTableOf<DatatypeValidator>(29); if (!getDatatypeValidator(XMLUni::fgIDRefsString)) { - DatatypeValidator *dv = new IDDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0); + DatatypeValidator *dv = new (fMemoryManager) IDDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0); dv->setTypeName(XMLUni::fgIDString, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); fUserDefinedRegistry->put((void*) XMLUni::fgIDString, dv); - dv = new IDREFDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0); + dv = new (fMemoryManager) IDREFDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0); dv->setTypeName(XMLUni::fgIDRefString, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); fUserDefinedRegistry->put((void*) XMLUni::fgIDRefString, dv); - dv = new ENTITYDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0); + dv = new (fMemoryManager) ENTITYDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0); dv->setTypeName(XMLUni::fgEntityString, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); fUserDefinedRegistry->put((void*) XMLUni::fgEntityString, dv); // Create 'IDREFS' datatype validator - createDatatypeValidator(XMLUni::fgIDRefsString, - getDatatypeValidator(XMLUni::fgIDRefString), 0, 0, true, 0, true); + createDatatypeValidator + ( + XMLUni::fgIDRefsString + , getDatatypeValidator(XMLUni::fgIDRefString) + , 0 + , 0 + , true + , 0 + ); // Create 'ENTITIES' datatype validator - createDatatypeValidator(XMLUni::fgEntitiesString, - getDatatypeValidator(XMLUni::fgEntityString), 0, 0, true, 0, true); + createDatatypeValidator + ( + XMLUni::fgEntitiesString + , getDatatypeValidator(XMLUni::fgEntityString) + , 0 + , 0 + , true + , 0 + ); } } @@ -748,14 +766,16 @@ void DatatypeValidatorFactory::expandRegistryToFullSchemaSet() // --------------------------------------------------------------------------- // DatatypeValidatorFactory: factory methods // --------------------------------------------------------------------------- -DatatypeValidator* -DatatypeValidatorFactory::createDatatypeValidator(const XMLCh* const typeName, - DatatypeValidator* const baseValidator, - RefHashTableOf<KVStringPair>* const facets, - RefArrayVectorOf<XMLCh>* const enums, - const bool derivedByList, - const int finalSet, - const bool userDefined) +DatatypeValidator* DatatypeValidatorFactory::createDatatypeValidator +( + const XMLCh* const typeName + , DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const bool isDerivedByList + , const int finalSet + , const bool isUserDefined +) { if (baseValidator == 0) { @@ -771,9 +791,11 @@ DatatypeValidatorFactory::createDatatypeValidator(const XMLCh* const typeName, } DatatypeValidator* datatypeValidator = 0; + MemoryManager* const manager = (isUserDefined) + ? fMemoryManager : XMLPlatformUtils::fgMemoryManager; - if (derivedByList) { - datatypeValidator = new ListDatatypeValidator(baseValidator, facets, enums, finalSet); + if (isDerivedByList) { + datatypeValidator = new (manager) ListDatatypeValidator(baseValidator, facets, enums, finalSet); } else { @@ -786,15 +808,21 @@ DatatypeValidatorFactory::createDatatypeValidator(const XMLCh* const typeName, } } - datatypeValidator = baseValidator->newInstance(facets, enums, finalSet); + datatypeValidator = baseValidator->newInstance + ( + facets + , enums + , finalSet + , manager + ); } if (datatypeValidator != 0) { - if (userDefined) { + if (isUserDefined) { if (!fUserDefinedRegistry) { - fUserDefinedRegistry = new RefHashTableOf<DatatypeValidator>(29); + fUserDefinedRegistry = new (fMemoryManager) RefHashTableOf<DatatypeValidator>(29); } fUserDefinedRegistry->put((void *)typeName, datatypeValidator); @@ -802,6 +830,7 @@ DatatypeValidatorFactory::createDatatypeValidator(const XMLCh* const typeName, else { fBuiltInRegistry->put((void *)typeName, datatypeValidator); } + datatypeValidator->setTypeName(typeName); } @@ -809,25 +838,29 @@ DatatypeValidatorFactory::createDatatypeValidator(const XMLCh* const typeName, } -DatatypeValidator* -DatatypeValidatorFactory::createDatatypeValidator(const XMLCh* const typeName, - RefVectorOf<DatatypeValidator>* const validators, - const int finalSet, - const bool userDefined) +DatatypeValidator* DatatypeValidatorFactory::createDatatypeValidator +( + const XMLCh* const typeName + , RefVectorOf<DatatypeValidator>* const validators + , const int finalSet + , const bool userDefined +) { if (validators == 0) return 0; DatatypeValidator* datatypeValidator = 0; + MemoryManager* const manager = (userDefined) + ? fMemoryManager : XMLPlatformUtils::fgMemoryManager; - datatypeValidator = new UnionDatatypeValidator(validators, finalSet); + datatypeValidator = new (manager) UnionDatatypeValidator(validators, finalSet); if (datatypeValidator != 0) { if (userDefined) { if (!fUserDefinedRegistry) { - fUserDefinedRegistry = new RefHashTableOf<DatatypeValidator>(29); + fUserDefinedRegistry = new (fMemoryManager) RefHashTableOf<DatatypeValidator>(29); } fUserDefinedRegistry->put((void *)typeName, datatypeValidator); diff --git a/src/xercesc/validators/datatype/DatatypeValidatorFactory.hpp b/src/xercesc/validators/datatype/DatatypeValidatorFactory.hpp index 989df51bf..b69916e54 100644 --- a/src/xercesc/validators/datatype/DatatypeValidatorFactory.hpp +++ b/src/xercesc/validators/datatype/DatatypeValidatorFactory.hpp @@ -97,7 +97,7 @@ typedef RefHashTableOf<DatatypeValidator> DVHashTable; typedef RefArrayVectorOf<XMLCh> XMLChRefVector; -class VALIDATORS_EXPORT DatatypeValidatorFactory +class VALIDATORS_EXPORT DatatypeValidatorFactory : public XMemory { public: @@ -107,7 +107,10 @@ public: /** @name Constructors */ //@{ - DatatypeValidatorFactory(); + DatatypeValidatorFactory + ( + MemoryManager* const manager// = XMLPlatformUtils::fgMemoryManager + ); //@} @@ -174,40 +177,53 @@ public: * Creates a new datatype validator of type baseValidator's class and * adds it to the registry * - * @param typeName Datatype validator name + * @param typeName Datatype validator name * - * @param baseValidator Base datatype validator + * @param baseValidator Base datatype validator * - * @param facets datatype facets if any + * @param facets datatype facets if any * - * @param enums vector of values for enum facet + * @param enums vector of values for enum facet * - * @param derivedByList Indicates whether the datatype is derived by - * list or not + * @param isDerivedByList Indicates whether the datatype is derived by + * list or not * * @param finalSet 'final' values of the simpleType + * + * @param isUserDefined Indicates whether the datatype is built-in or + * user defined */ - DatatypeValidator* createDatatypeValidator(const XMLCh* const, - DatatypeValidator* const, - RefHashTableOf<KVStringPair>* const, - RefArrayVectorOf<XMLCh>* const enums, - const bool, - const int = 0, - const bool = true); + DatatypeValidator* createDatatypeValidator + ( + const XMLCh* const typeName + , DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const bool isDerivedByList + , const int finalSet = 0 + , const bool isUserDefined = true + ); /** - * Creates a new datatype validator of type UnionDatatypeValidator and - * adds it to the registry - * - * @param typeName Datatype validator name - * - * @param validators Vector of datatype validators - * - */ - DatatypeValidator* createDatatypeValidator(const XMLCh* const, - RefVectorOf<DatatypeValidator>* const, - const int finalSet, - const bool = true); + * Creates a new datatype validator of type UnionDatatypeValidator and + * adds it to the registry + * + * @param typeName Datatype validator name + * + * @param validators Vector of datatype validators + * + * @param finalSet 'final' values of the simpleType + * + * @param isUserDefined Indicates whether the datatype is built-in or + * user defined + */ + DatatypeValidator* createDatatypeValidator + ( + const XMLCh* const typeName + , RefVectorOf<DatatypeValidator>* const validators + , const int finalSet + , const bool isUserDefined = true + ); //@} @@ -238,6 +254,7 @@ private: // ----------------------------------------------------------------------- XERCES_CPP_NAMESPACE_QUALIFIER RefHashTableOf<XERCES_CPP_NAMESPACE_QUALIFIER DatatypeValidator>* fUserDefinedRegistry; static XERCES_CPP_NAMESPACE_QUALIFIER RefHashTableOf<DatatypeValidator>* fBuiltInRegistry; + XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager* const fMemoryManager; friend class XPath2ContextImpl; }; diff --git a/src/xercesc/validators/datatype/DateDatatypeValidator.cpp b/src/xercesc/validators/datatype/DateDatatypeValidator.cpp index 69ce0eea5..1fb7d367a 100644 --- a/src/xercesc/validators/datatype/DateDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/DateDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -87,16 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -DateDatatypeValidator::DateDatatypeValidator() -:DateTimeValidator(0, 0, 0, DatatypeValidator::Date) +DateDatatypeValidator::DateDatatypeValidator(MemoryManager* const manager) +:DateTimeValidator(0, 0, 0, DatatypeValidator::Date, manager) {} DateDatatypeValidator::DateDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Date) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Date, manager) { init(enums); } @@ -104,12 +108,15 @@ DateDatatypeValidator::DateDatatypeValidator( DateDatatypeValidator::~DateDatatypeValidator() {} -DatatypeValidator* DateDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* DateDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new DateDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) DateDatatypeValidator(this, facets, enums, finalSet, manager); } // @@ -117,7 +124,7 @@ DatatypeValidator* DateDatatypeValidator::newInstance( // XMLDateTime* DateDatatypeValidator::parse(const XMLCh* const content) { - XMLDateTime *pRetDate = new XMLDateTime(content); + XMLDateTime *pRetDate = new (fMemoryManager) XMLDateTime(content); try { diff --git a/src/xercesc/validators/datatype/DateDatatypeValidator.hpp b/src/xercesc/validators/datatype/DateDatatypeValidator.hpp index 6522c2de7..e1c71ea52 100644 --- a/src/xercesc/validators/datatype/DateDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/DateDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -85,28 +88,36 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - DateDatatypeValidator(); - - DateDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + DateDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + DateDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); ~DateDatatypeValidator(); - //@} /** * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp b/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp index 0f519f8f3..851139108 100644 --- a/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/DateTimeDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -87,16 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -DateTimeDatatypeValidator::DateTimeDatatypeValidator() -:DateTimeValidator(0, 0, 0, DatatypeValidator::DateTime) +DateTimeDatatypeValidator::DateTimeDatatypeValidator(MemoryManager* const manager) +:DateTimeValidator(0, 0, 0, DatatypeValidator::DateTime, manager) {} DateTimeDatatypeValidator::DateTimeDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::DateTime) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::DateTime, manager) { init(enums); } @@ -104,12 +108,15 @@ DateTimeDatatypeValidator::DateTimeDatatypeValidator( DateTimeDatatypeValidator::~DateTimeDatatypeValidator() {} -DatatypeValidator* DateTimeDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* DateTimeDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new DateTimeDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) DateTimeDatatypeValidator(this, facets, enums, finalSet, manager); } // @@ -117,7 +124,7 @@ DatatypeValidator* DateTimeDatatypeValidator::newInstance( // XMLDateTime* DateTimeDatatypeValidator::parse(const XMLCh* const content) { - XMLDateTime *pRetDate = new XMLDateTime(content); + XMLDateTime *pRetDate = new (fMemoryManager) XMLDateTime(content); try { diff --git a/src/xercesc/validators/datatype/DateTimeDatatypeValidator.hpp b/src/xercesc/validators/datatype/DateTimeDatatypeValidator.hpp index e12473b15..b2a602045 100644 --- a/src/xercesc/validators/datatype/DateTimeDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/DateTimeDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -85,28 +88,36 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - DateTimeDatatypeValidator(); - - DateTimeDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + DateTimeDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + DateTimeDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); ~DateTimeDatatypeValidator(); - //@} /** * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/DateTimeValidator.cpp b/src/xercesc/validators/datatype/DateTimeValidator.cpp index 4cb2faeb0..0994dae09 100644 --- a/src/xercesc/validators/datatype/DateTimeValidator.cpp +++ b/src/xercesc/validators/datatype/DateTimeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.5 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2003/01/30 21:56:22 tng * Performance: call getRawData instead of toString * @@ -111,8 +114,9 @@ DateTimeValidator::DateTimeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:AbstractNumericFacetValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:AbstractNumericFacetValidator(baseValidator, facets, finalSet, type, manager) { //do not invoke init() here !!! } @@ -175,7 +179,7 @@ void DateTimeValidator::checkContent(const XMLCh* const content // lazy construction if (getRegex() ==0) { try { - setRegex(new RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); + setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); } catch (XMLException &e) { @@ -341,7 +345,7 @@ void DateTimeValidator::setEnumeration() return; int enumLength = fStrEnumeration->size(); - fEnumeration = new RefVectorOf<XMLNumber>(enumLength, true); + fEnumeration = new (fMemoryManager) RefVectorOf<XMLNumber>(enumLength, true); fEnumerationInherited = false; for ( int i = 0; i < enumLength; i++) diff --git a/src/xercesc/validators/datatype/DateTimeValidator.hpp b/src/xercesc/validators/datatype/DateTimeValidator.hpp index 27c55792c..7d4bfe266 100644 --- a/src/xercesc/validators/datatype/DateTimeValidator.hpp +++ b/src/xercesc/validators/datatype/DateTimeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.3 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:53:28 tng * C++ Namespace Support. * @@ -103,10 +106,14 @@ protected: // ----------------------------------------------------------------------- // ctor used by derived class // ----------------------------------------------------------------------- - DateTimeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + DateTimeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); // // Abstract interface diff --git a/src/xercesc/validators/datatype/DayDatatypeValidator.cpp b/src/xercesc/validators/datatype/DayDatatypeValidator.cpp index f93d11ef6..bc3c467f4 100644 --- a/src/xercesc/validators/datatype/DayDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/DayDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -87,16 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -DayDatatypeValidator::DayDatatypeValidator() -:DateTimeValidator(0, 0, 0, DatatypeValidator::Day) +DayDatatypeValidator::DayDatatypeValidator(MemoryManager* const manager) +:DateTimeValidator(0, 0, 0, DatatypeValidator::Day, manager) {} DayDatatypeValidator::DayDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Day) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Day, manager) { init(enums); } @@ -104,12 +108,15 @@ DayDatatypeValidator::DayDatatypeValidator( DayDatatypeValidator::~DayDatatypeValidator() {} -DatatypeValidator* DayDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* DayDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new DayDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) DayDatatypeValidator(this, facets, enums, finalSet, manager); } // @@ -117,7 +124,7 @@ DatatypeValidator* DayDatatypeValidator::newInstance( // XMLDateTime* DayDatatypeValidator::parse(const XMLCh* const content) { - XMLDateTime *pRetDate = new XMLDateTime(content); + XMLDateTime *pRetDate = new (fMemoryManager) XMLDateTime(content); try { diff --git a/src/xercesc/validators/datatype/DayDatatypeValidator.hpp b/src/xercesc/validators/datatype/DayDatatypeValidator.hpp index eb270f04b..24644bc53 100644 --- a/src/xercesc/validators/datatype/DayDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/DayDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -85,16 +88,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor*/ //@{ - DayDatatypeValidator(); - - DayDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + DayDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + DayDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); ~DayDatatypeValidator(); //@} @@ -103,9 +111,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/DecimalDatatypeValidator.cpp b/src/xercesc/validators/datatype/DecimalDatatypeValidator.cpp index 1edccb571..101b1be59 100644 --- a/src/xercesc/validators/datatype/DecimalDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/DecimalDatatypeValidator.cpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.9 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.8 2003/03/01 20:59:06 peiyongz * TotalDigits value must be a positiveInteger * @@ -145,6 +148,7 @@ #include <xercesc/validators/datatype/InvalidDatatypeFacetException.hpp> #include <xercesc/validators/datatype/InvalidDatatypeValueException.hpp> #include <xercesc/util/NumberFormatException.hpp> +#include <xercesc/util/XMLBigDecimal.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -155,8 +159,8 @@ static XMLCh value2[BUF_LEN+1]; // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -DecimalDatatypeValidator::DecimalDatatypeValidator() -:AbstractNumericValidator(0, 0, 0, DatatypeValidator::Decimal) +DecimalDatatypeValidator::DecimalDatatypeValidator(MemoryManager* const manager) +:AbstractNumericValidator(0, 0, 0, DatatypeValidator::Decimal, manager) , fTotalDigits(0) , fFractionDigits(0) {} @@ -165,8 +169,9 @@ DecimalDatatypeValidator::DecimalDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractNumericValidator(baseValidator, facets, finalSet, DatatypeValidator::Decimal) + , const int finalSet + , MemoryManager* const manager) +:AbstractNumericValidator(baseValidator, facets, finalSet, DatatypeValidator::Decimal, manager) , fTotalDigits(0) , fFractionDigits(0) { @@ -182,20 +187,21 @@ DecimalDatatypeValidator::~DecimalDatatypeValidator() int DecimalDatatypeValidator::compare(const XMLCh* const lValue , const XMLCh* const rValue) { - XMLBigDecimal * lObj = new XMLBigDecimal(lValue); - Janitor<XMLBigDecimal> jname1(lObj); - XMLBigDecimal * rObj = new XMLBigDecimal(rValue); - Janitor<XMLBigDecimal> jname2(rObj); + XMLBigDecimal lObj(lValue); + XMLBigDecimal rObj(rValue); - return compareValues(lObj, rObj); + return compareValues(&lObj, &rObj); } -DatatypeValidator* DecimalDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* DecimalDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new DecimalDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) DecimalDatatypeValidator(this, facets, enums, finalSet, manager); } // ----------------------------------------------------------------------- @@ -204,8 +210,9 @@ DatatypeValidator* DecimalDatatypeValidator::newInstance( DecimalDatatypeValidator::DecimalDatatypeValidator(DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:AbstractNumericValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:AbstractNumericValidator(baseValidator, facets, finalSet, type, manager) , fTotalDigits(0) , fFractionDigits(0) { @@ -399,22 +406,22 @@ int DecimalDatatypeValidator::compareValues(const XMLNumber* const lValue void DecimalDatatypeValidator::setMaxInclusive(const XMLCh* const value) { - fMaxInclusive = new XMLBigDecimal(value); + fMaxInclusive = new (fMemoryManager) XMLBigDecimal(value); } void DecimalDatatypeValidator::setMaxExclusive(const XMLCh* const value) { - fMaxExclusive = new XMLBigDecimal(value); + fMaxExclusive = new (fMemoryManager) XMLBigDecimal(value); } void DecimalDatatypeValidator::setMinInclusive(const XMLCh* const value) { - fMinInclusive = new XMLBigDecimal(value); + fMinInclusive = new (fMemoryManager) XMLBigDecimal(value); } void DecimalDatatypeValidator::setMinExclusive(const XMLCh* const value) { - fMinExclusive = new XMLBigDecimal(value); + fMinExclusive = new (fMemoryManager) XMLBigDecimal(value); } void DecimalDatatypeValidator::setEnumeration() @@ -456,12 +463,12 @@ void DecimalDatatypeValidator::setEnumeration() checkContent(fStrEnumeration->elementAt(i), false); } - fEnumeration = new RefVectorOf<XMLNumber>(enumLength, true); + fEnumeration = new (fMemoryManager) RefVectorOf<XMLNumber>(enumLength, true); fEnumerationInherited = false; for ( i = 0; i < enumLength; i++) { - fEnumeration->insertElementAt(new XMLBigDecimal(fStrEnumeration->elementAt(i)), i); + fEnumeration->insertElementAt(new (fMemoryManager) XMLBigDecimal(fStrEnumeration->elementAt(i)), i); } } @@ -485,7 +492,7 @@ void DecimalDatatypeValidator::checkContent( const XMLCh* const content, bool as // lazy construction if (getRegex() ==0) { try { - setRegex(new RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); + setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); } catch (XMLException &e) { diff --git a/src/xercesc/validators/datatype/DecimalDatatypeValidator.hpp b/src/xercesc/validators/datatype/DecimalDatatypeValidator.hpp index 663ad3918..18ec4755d 100644 --- a/src/xercesc/validators/datatype/DecimalDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/DecimalDatatypeValidator.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.5 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -88,7 +91,6 @@ #include <xercesc/validators/datatype/AbstractNumericValidator.hpp> #include <xercesc/util/RefVectorOf.hpp> -#include <xercesc/util/XMLBigDecimal.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -99,16 +101,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - DecimalDatatypeValidator(); - - DecimalDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + DecimalDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + DecimalDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~DecimalDatatypeValidator(); //@} @@ -134,19 +141,27 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: // ----------------------------------------------------------------------- // ctor provided to be used by derived classes // ----------------------------------------------------------------------- - DecimalDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + DecimalDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager + ); // ----------------------------------------------------------------------- // Abstract interface from AbstractNumericFacetValidator diff --git a/src/xercesc/validators/datatype/DoubleDatatypeValidator.cpp b/src/xercesc/validators/datatype/DoubleDatatypeValidator.cpp index 3326107ec..c6011482d 100644 --- a/src/xercesc/validators/datatype/DoubleDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/DoubleDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -91,7 +94,6 @@ // Includes // --------------------------------------------------------------------------- #include <xercesc/validators/datatype/DoubleDatatypeValidator.hpp> -#include <xercesc/validators/schema/SchemaSymbols.hpp> #include <xercesc/validators/datatype/InvalidDatatypeFacetException.hpp> #include <xercesc/validators/datatype/InvalidDatatypeValueException.hpp> @@ -100,16 +102,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -DoubleDatatypeValidator::DoubleDatatypeValidator() -:AbstractNumericValidator(0, 0, 0, DatatypeValidator::Double) +DoubleDatatypeValidator::DoubleDatatypeValidator(MemoryManager* const manager) +:AbstractNumericValidator(0, 0, 0, DatatypeValidator::Double, manager) {} DoubleDatatypeValidator::DoubleDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractNumericValidator(baseValidator, facets, finalSet, DatatypeValidator::Double) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:AbstractNumericValidator(baseValidator, facets, finalSet, DatatypeValidator::Double, manager) { init(enums); } @@ -123,20 +126,21 @@ DoubleDatatypeValidator::~DoubleDatatypeValidator() int DoubleDatatypeValidator::compare(const XMLCh* const lValue , const XMLCh* const rValue) { - XMLDouble * lObj = new XMLDouble(lValue); - Janitor<XMLDouble> jname1(lObj); - XMLDouble * rObj = new XMLDouble(rValue); - Janitor<XMLDouble> jname2(rObj); + XMLDouble lObj(lValue); + XMLDouble rObj(rValue); - return compareValues(lObj, rObj); + return compareValues(&lObj, &rObj); } -DatatypeValidator* DoubleDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* DoubleDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new DoubleDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) DoubleDatatypeValidator(this, facets, enums, finalSet, manager); } // ----------------------------------------------------------------------- @@ -145,8 +149,9 @@ DatatypeValidator* DoubleDatatypeValidator::newInstance( DoubleDatatypeValidator::DoubleDatatypeValidator(DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:AbstractNumericValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:AbstractNumericValidator(baseValidator, facets, finalSet, type, manager) { //do not invoke init here !!! } @@ -176,22 +181,22 @@ int DoubleDatatypeValidator::compareValues(const XMLNumber* const lValue void DoubleDatatypeValidator::setMaxInclusive(const XMLCh* const value) { - fMaxInclusive = new XMLDouble(value); + fMaxInclusive = new (fMemoryManager) XMLDouble(value); } void DoubleDatatypeValidator::setMaxExclusive(const XMLCh* const value) { - fMaxExclusive = new XMLDouble(value); + fMaxExclusive = new (fMemoryManager) XMLDouble(value); } void DoubleDatatypeValidator::setMinInclusive(const XMLCh* const value) { - fMinInclusive = new XMLDouble(value); + fMinInclusive = new (fMemoryManager) XMLDouble(value); } void DoubleDatatypeValidator::setMinExclusive(const XMLCh* const value) { - fMinExclusive = new XMLDouble(value); + fMinExclusive = new (fMemoryManager) XMLDouble(value); } void DoubleDatatypeValidator::setEnumeration() @@ -234,12 +239,12 @@ void DoubleDatatypeValidator::setEnumeration() checkContent(fStrEnumeration->elementAt(i), false); } - fEnumeration = new RefVectorOf<XMLNumber>(enumLength, true); + fEnumeration = new (fMemoryManager) RefVectorOf<XMLNumber>(enumLength, true); fEnumerationInherited = false; for ( i = 0; i < enumLength; i++) { - fEnumeration->insertElementAt(new XMLDouble(fStrEnumeration->elementAt(i)), i); + fEnumeration->insertElementAt(new (fMemoryManager) XMLDouble(fStrEnumeration->elementAt(i)), i); } } @@ -261,7 +266,7 @@ void DoubleDatatypeValidator::checkContent( const XMLCh* const content, bool asB // lazy construction if (getRegex() ==0) { try { - setRegex(new RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); + setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); } catch (XMLException &e) { diff --git a/src/xercesc/validators/datatype/DoubleDatatypeValidator.hpp b/src/xercesc/validators/datatype/DoubleDatatypeValidator.hpp index 5342594d1..5b6fcaac3 100644 --- a/src/xercesc/validators/datatype/DoubleDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/DoubleDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -101,16 +104,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - DoubleDatatypeValidator(); - - DoubleDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + DoubleDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + DoubleDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~DoubleDatatypeValidator(); //@} @@ -136,19 +144,27 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: // ----------------------------------------------------------------------- // ctor provided to be used by derived classes // ----------------------------------------------------------------------- - DoubleDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + DoubleDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); // ----------------------------------------------------------------------- // Abstract interface from AbstractNumericFacetValidator diff --git a/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp b/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp index 1288a009b..5a71573e8 100644 --- a/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/DurationDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -87,16 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -DurationDatatypeValidator::DurationDatatypeValidator() -:DateTimeValidator(0, 0, 0, DatatypeValidator::Duration) +DurationDatatypeValidator::DurationDatatypeValidator(MemoryManager* const manager) +:DateTimeValidator(0, 0, 0, DatatypeValidator::Duration, manager) {} DurationDatatypeValidator::DurationDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Duration) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Duration, manager) { init(enums); } @@ -104,12 +108,15 @@ DurationDatatypeValidator::DurationDatatypeValidator( DurationDatatypeValidator::~DurationDatatypeValidator() {} -DatatypeValidator* DurationDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* DurationDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new DurationDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) DurationDatatypeValidator(this, facets, enums, finalSet, manager); } // @@ -117,7 +124,7 @@ DatatypeValidator* DurationDatatypeValidator::newInstance( // XMLDateTime* DurationDatatypeValidator::parse(const XMLCh* const content) { - XMLDateTime *pRetDate = new XMLDateTime(content); + XMLDateTime *pRetDate = new (fMemoryManager) XMLDateTime(content); try { diff --git a/src/xercesc/validators/datatype/DurationDatatypeValidator.hpp b/src/xercesc/validators/datatype/DurationDatatypeValidator.hpp index e411e9b20..744efc08e 100644 --- a/src/xercesc/validators/datatype/DurationDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/DurationDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -85,28 +88,36 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor. */ //@{ - DurationDatatypeValidator(); - - DurationDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + DurationDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + DurationDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); ~DurationDatatypeValidator(); - //@} /** * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/ENTITYDatatypeValidator.cpp b/src/xercesc/validators/datatype/ENTITYDatatypeValidator.cpp index aa3d3f4e1..43a45ef29 100644 --- a/src/xercesc/validators/datatype/ENTITYDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/ENTITYDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.6 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2003/01/06 19:40:05 knoaman * Throw an invalid datatype value exception if fEntityDeclPool is NULL. * @@ -107,17 +110,18 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -ENTITYDatatypeValidator::ENTITYDatatypeValidator() -:StringDatatypeValidator(0, 0, 0, DatatypeValidator::ENTITY) +ENTITYDatatypeValidator::ENTITYDatatypeValidator(MemoryManager* const manager) +:StringDatatypeValidator(0, 0, 0, DatatypeValidator::ENTITY, manager) ,fEntityDeclPool(0) {} ENTITYDatatypeValidator::ENTITYDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::ENTITY) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::ENTITY, manager) ,fEntityDeclPool(0) { init(enums); @@ -126,12 +130,15 @@ ENTITYDatatypeValidator::ENTITYDatatypeValidator( ENTITYDatatypeValidator::~ENTITYDatatypeValidator() {} -DatatypeValidator* ENTITYDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* ENTITYDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new ENTITYDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) ENTITYDatatypeValidator(this, facets, enums, finalSet, manager); } // ----------------------------------------------------------------------- diff --git a/src/xercesc/validators/datatype/ENTITYDatatypeValidator.hpp b/src/xercesc/validators/datatype/ENTITYDatatypeValidator.hpp index 636fc3ffb..e34354789 100644 --- a/src/xercesc/validators/datatype/ENTITYDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/ENTITYDatatypeValidator.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -94,7 +97,8 @@ #define ENTITY_DATATYPEVALIDATOR_HPP #include <xercesc/validators/datatype/StringDatatypeValidator.hpp> -#include <xercesc/internal/XMLScanner.hpp> +#include <xercesc/util/NameIdPool.hpp> +#include <xercesc/validators/DTD/DTDEntityDecl.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -105,15 +109,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor. */ //@{ - ENTITYDatatypeValidator(); - - ENTITYDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + ENTITYDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + ENTITYDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~ENTITYDatatypeValidator(); @@ -158,9 +168,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); // ----------------------------------------------------------------------- // Setter methods diff --git a/src/xercesc/validators/datatype/FloatDatatypeValidator.cpp b/src/xercesc/validators/datatype/FloatDatatypeValidator.cpp index 0956a7400..263df44a9 100644 --- a/src/xercesc/validators/datatype/FloatDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/FloatDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -101,16 +104,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -FloatDatatypeValidator::FloatDatatypeValidator() -:AbstractNumericValidator(0, 0, 0, DatatypeValidator::Float) +FloatDatatypeValidator::FloatDatatypeValidator(MemoryManager* const manager) +:AbstractNumericValidator(0, 0, 0, DatatypeValidator::Float, manager) {} FloatDatatypeValidator::FloatDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractNumericValidator(baseValidator, facets, finalSet, DatatypeValidator::Float) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:AbstractNumericValidator(baseValidator, facets, finalSet, DatatypeValidator::Float, manager) { init(enums); } @@ -124,20 +128,21 @@ FloatDatatypeValidator::~FloatDatatypeValidator() int FloatDatatypeValidator::compare(const XMLCh* const lValue , const XMLCh* const rValue) { - XMLFloat * lObj = new XMLFloat(lValue); - Janitor<XMLFloat> jname1(lObj); - XMLFloat * rObj = new XMLFloat(rValue); - Janitor<XMLFloat> jname2(rObj); + XMLFloat lObj(lValue); + XMLFloat rObj(rValue); - return compareValues(lObj, rObj); + return compareValues(&lObj, &rObj); } -DatatypeValidator* FloatDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* FloatDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new FloatDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) FloatDatatypeValidator(this, facets, enums, finalSet, manager); } // ----------------------------------------------------------------------- @@ -146,8 +151,9 @@ DatatypeValidator* FloatDatatypeValidator::newInstance( FloatDatatypeValidator::FloatDatatypeValidator(DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:AbstractNumericValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:AbstractNumericValidator(baseValidator, facets, finalSet, type, manager) { //do not invoke init here !!! } @@ -177,22 +183,22 @@ int FloatDatatypeValidator::compareValues(const XMLNumber* const lValue void FloatDatatypeValidator::setMaxInclusive(const XMLCh* const value) { - fMaxInclusive = new XMLFloat(value); + fMaxInclusive = new (fMemoryManager) XMLFloat(value); } void FloatDatatypeValidator::setMaxExclusive(const XMLCh* const value) { - fMaxExclusive = new XMLFloat(value); + fMaxExclusive = new (fMemoryManager) XMLFloat(value); } void FloatDatatypeValidator::setMinInclusive(const XMLCh* const value) { - fMinInclusive = new XMLFloat(value); + fMinInclusive = new (fMemoryManager) XMLFloat(value); } void FloatDatatypeValidator::setMinExclusive(const XMLCh* const value) { - fMinExclusive = new XMLFloat(value); + fMinExclusive = new (fMemoryManager) XMLFloat(value); } void FloatDatatypeValidator::setEnumeration() @@ -235,12 +241,12 @@ void FloatDatatypeValidator::setEnumeration() checkContent(fStrEnumeration->elementAt(i), false); } - fEnumeration = new RefVectorOf<XMLNumber>(enumLength, true); + fEnumeration = new (fMemoryManager) RefVectorOf<XMLNumber>(enumLength, true); fEnumerationInherited = false; for ( i = 0; i < enumLength; i++) { - fEnumeration->insertElementAt(new XMLFloat(fStrEnumeration->elementAt(i)), i); + fEnumeration->insertElementAt(new (fMemoryManager) XMLFloat(fStrEnumeration->elementAt(i)), i); } } @@ -261,7 +267,7 @@ void FloatDatatypeValidator::checkContent( const XMLCh* const content, bool asBa // lazy construction if (getRegex() ==0) { try { - setRegex(new RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); + setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); } catch (XMLException &e) { diff --git a/src/xercesc/validators/datatype/FloatDatatypeValidator.hpp b/src/xercesc/validators/datatype/FloatDatatypeValidator.hpp index 28f58f6ff..9079d0a27 100644 --- a/src/xercesc/validators/datatype/FloatDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/FloatDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -102,16 +105,20 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - - FloatDatatypeValidator(); - - FloatDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + FloatDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + FloatDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~FloatDatatypeValidator(); //@} @@ -137,23 +144,31 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: -// ----------------------------------------------------------------------- -// ctor provided to be used by derived classes -// ----------------------------------------------------------------------- - FloatDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + // ----------------------------------------------------------------------- + // ctor provided to be used by derived classes + // ----------------------------------------------------------------------- + FloatDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); -// ----------------------------------------------------------------------- -// Abstract interface from AbstractNumericFacetValidator -// ----------------------------------------------------------------------- + // ----------------------------------------------------------------------- + // Abstract interface from AbstractNumericFacetValidator + // ----------------------------------------------------------------------- virtual void assignAdditionalFacet(const XMLCh* const key , const XMLCh* const value); diff --git a/src/xercesc/validators/datatype/HexBinaryDatatypeValidator.cpp b/src/xercesc/validators/datatype/HexBinaryDatatypeValidator.cpp index c19ac5885..509f71b46 100644 --- a/src/xercesc/validators/datatype/HexBinaryDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/HexBinaryDatatypeValidator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -117,8 +120,8 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -HexBinaryDatatypeValidator::HexBinaryDatatypeValidator() -:AbstractStringValidator(0, 0, 0, DatatypeValidator::HexBinary) +HexBinaryDatatypeValidator::HexBinaryDatatypeValidator(MemoryManager* const manager) +:AbstractStringValidator(0, 0, 0, DatatypeValidator::HexBinary, manager) {} HexBinaryDatatypeValidator::~HexBinaryDatatypeValidator() @@ -127,19 +130,23 @@ HexBinaryDatatypeValidator::~HexBinaryDatatypeValidator() HexBinaryDatatypeValidator::HexBinaryDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::HexBinary) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::HexBinary, manager) { init(enums); } -DatatypeValidator* HexBinaryDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* HexBinaryDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new HexBinaryDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) HexBinaryDatatypeValidator(this, facets, enums, finalSet, manager); } // --------------------------------------------------------------------------- diff --git a/src/xercesc/validators/datatype/HexBinaryDatatypeValidator.hpp b/src/xercesc/validators/datatype/HexBinaryDatatypeValidator.hpp index 723145580..ebc9f34c3 100644 --- a/src/xercesc/validators/datatype/HexBinaryDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/HexBinaryDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -88,15 +91,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - HexBinaryDatatypeValidator(); - - HexBinaryDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + HexBinaryDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + HexBinaryDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~HexBinaryDatatypeValidator(); @@ -106,9 +115,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/IDDatatypeValidator.cpp b/src/xercesc/validators/datatype/IDDatatypeValidator.cpp index 3298cec17..aab8261e1 100644 --- a/src/xercesc/validators/datatype/IDDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/IDDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -99,17 +102,18 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -IDDatatypeValidator::IDDatatypeValidator() -:StringDatatypeValidator(0, 0, 0, DatatypeValidator::ID) +IDDatatypeValidator::IDDatatypeValidator(MemoryManager* const manager) +:StringDatatypeValidator(0, 0, 0, DatatypeValidator::ID, manager) ,fIDRefList(0) {} IDDatatypeValidator::IDDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::ID) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::ID, manager) ,fIDRefList(0) { init(enums); @@ -118,20 +122,24 @@ IDDatatypeValidator::IDDatatypeValidator( IDDatatypeValidator::~IDDatatypeValidator() {} -DatatypeValidator* IDDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* IDDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new IDDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) IDDatatypeValidator(this, facets, enums, finalSet, manager); } IDDatatypeValidator::IDDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:StringDatatypeValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:StringDatatypeValidator(baseValidator, facets, finalSet, type, manager) ,fIDRefList(0) { // do not invoke init() here!!! @@ -164,7 +172,7 @@ void IDDatatypeValidator::addId(const XMLCh * const content) } else { - find = new XMLRefInfo(content); + find = new (fMemoryManager) XMLRefInfo(content); fIDRefList->put((void*)find->getRefName(), find); } diff --git a/src/xercesc/validators/datatype/IDDatatypeValidator.hpp b/src/xercesc/validators/datatype/IDDatatypeValidator.hpp index bfe12c91e..9c8fba25c 100644 --- a/src/xercesc/validators/datatype/IDDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/IDDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -99,7 +102,6 @@ #define ID_DATATYPEVALIDATOR_HPP #include <xercesc/validators/datatype/StringDatatypeValidator.hpp> -#include <xercesc/validators/schema/SchemaSymbols.hpp> #include <xercesc/framework/XMLRefInfo.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -111,16 +113,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - IDDatatypeValidator(); - - IDDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + IDDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + IDDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~IDDatatypeValidator(); //@} @@ -145,9 +152,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); //@} @@ -158,10 +169,14 @@ protected: // // ctor provided to be used by derived classes // - IDDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + IDDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual void checkValueSpace(const XMLCh* const content); diff --git a/src/xercesc/validators/datatype/IDREFDatatypeValidator.cpp b/src/xercesc/validators/datatype/IDREFDatatypeValidator.cpp index df8e7544a..bd457c596 100644 --- a/src/xercesc/validators/datatype/IDREFDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/IDREFDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -97,17 +100,18 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -IDREFDatatypeValidator::IDREFDatatypeValidator() -:StringDatatypeValidator(0, 0, 0, DatatypeValidator::IDREF) +IDREFDatatypeValidator::IDREFDatatypeValidator(MemoryManager* const manager) +:StringDatatypeValidator(0, 0, 0, DatatypeValidator::IDREF, manager) ,fIDRefList(0) {} IDREFDatatypeValidator::IDREFDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::IDREF) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::IDREF, manager) ,fIDRefList(0) { init(enums); @@ -116,20 +120,24 @@ IDREFDatatypeValidator::IDREFDatatypeValidator( IDREFDatatypeValidator::~IDREFDatatypeValidator() {} -DatatypeValidator* IDREFDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* IDREFDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new IDREFDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) IDREFDatatypeValidator(this, facets, enums, finalSet, manager); } IDREFDatatypeValidator::IDREFDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:StringDatatypeValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:StringDatatypeValidator(baseValidator, facets, finalSet, type, manager) ,fIDRefList(0) { // do not invoke init() here!!! @@ -158,7 +166,7 @@ void IDREFDatatypeValidator::addIdRef(const XMLCh* const content) XMLRefInfo* find = fIDRefList->get(content); if (!find) { - find = new XMLRefInfo(content); + find = new (fMemoryManager) XMLRefInfo(content); fIDRefList->put((void*)find->getRefName(), find); } diff --git a/src/xercesc/validators/datatype/IDREFDatatypeValidator.hpp b/src/xercesc/validators/datatype/IDREFDatatypeValidator.hpp index 8158cb224..c01547928 100644 --- a/src/xercesc/validators/datatype/IDREFDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/IDREFDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -108,15 +111,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - IDREFDatatypeValidator(); - - IDREFDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + IDREFDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + IDREFDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~IDREFDatatypeValidator(); @@ -144,9 +153,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); inline void setIDRefList(RefHashTableOf<XMLRefInfo>* fIDRefList); @@ -155,10 +168,14 @@ protected: // // ctor provided to be used by derived classes // - IDREFDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + IDREFDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual void checkValueSpace(const XMLCh* const content); diff --git a/src/xercesc/validators/datatype/ListDatatypeValidator.cpp b/src/xercesc/validators/datatype/ListDatatypeValidator.cpp index 7626142ab..7fbef053a 100644 --- a/src/xercesc/validators/datatype/ListDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/ListDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.8 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.7 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -123,8 +126,8 @@ static XMLCh value2[BUF_LEN+1]; // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -ListDatatypeValidator::ListDatatypeValidator() -:AbstractStringValidator(0, 0, 0, DatatypeValidator::List) +ListDatatypeValidator::ListDatatypeValidator(MemoryManager* const manager) +:AbstractStringValidator(0, 0, 0, DatatypeValidator::List, manager) ,fContent(0) {} @@ -132,8 +135,9 @@ ListDatatypeValidator::ListDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::List) + , const int finalSet + , MemoryManager* const manager) +:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::List, manager) ,fContent(0) { // @@ -152,12 +156,15 @@ ListDatatypeValidator::ListDatatypeValidator( ListDatatypeValidator::~ListDatatypeValidator() {} -DatatypeValidator* ListDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* ListDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new ListDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) ListDatatypeValidator(this, facets, enums, finalSet, manager); } @@ -232,7 +239,7 @@ void ListDatatypeValidator::checkContent( BaseRefVectorOf<XMLCh>* tokenVector if (getRegex() == 0) { try { - setRegex(new RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); + setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); } catch (XMLException &e) { diff --git a/src/xercesc/validators/datatype/ListDatatypeValidator.hpp b/src/xercesc/validators/datatype/ListDatatypeValidator.hpp index 9212ea3b5..cd94cd60a 100644 --- a/src/xercesc/validators/datatype/ListDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/ListDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.6 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -122,16 +125,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - ListDatatypeValidator(); - - ListDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + ListDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + ListDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~ListDatatypeValidator(); //@} @@ -183,9 +191,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); DatatypeValidator* getItemTypeDTV() const; diff --git a/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp b/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp index 6bd54a415..cebfb2a0b 100644 --- a/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/MonthDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -87,16 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -MonthDatatypeValidator::MonthDatatypeValidator() -:DateTimeValidator(0, 0, 0, DatatypeValidator::Month) +MonthDatatypeValidator::MonthDatatypeValidator(MemoryManager* const manager) +:DateTimeValidator(0, 0, 0, DatatypeValidator::Month, manager) {} MonthDatatypeValidator::MonthDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Month) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Month, manager) { init(enums); } @@ -104,12 +108,15 @@ MonthDatatypeValidator::MonthDatatypeValidator( MonthDatatypeValidator::~MonthDatatypeValidator() {} -DatatypeValidator* MonthDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* MonthDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new MonthDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) MonthDatatypeValidator(this, facets, enums, finalSet, manager); } // @@ -117,7 +124,7 @@ DatatypeValidator* MonthDatatypeValidator::newInstance( // XMLDateTime* MonthDatatypeValidator::parse(const XMLCh* const content) { - XMLDateTime *pRetDate = new XMLDateTime(content); + XMLDateTime *pRetDate = new (fMemoryManager) XMLDateTime(content); try { diff --git a/src/xercesc/validators/datatype/MonthDatatypeValidator.hpp b/src/xercesc/validators/datatype/MonthDatatypeValidator.hpp index a70f25a55..8a1cc29af 100644 --- a/src/xercesc/validators/datatype/MonthDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/MonthDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -85,28 +88,36 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - MonthDatatypeValidator(); - - MonthDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + MonthDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + MonthDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); ~MonthDatatypeValidator(); - //@} /** * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp b/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp index ba5ca7fc3..eaedba899 100644 --- a/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/MonthDayDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -87,16 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -MonthDayDatatypeValidator::MonthDayDatatypeValidator() -:DateTimeValidator(0, 0, 0, DatatypeValidator::MonthDay) +MonthDayDatatypeValidator::MonthDayDatatypeValidator(MemoryManager* const manager) +:DateTimeValidator(0, 0, 0, DatatypeValidator::MonthDay, manager) {} MonthDayDatatypeValidator::MonthDayDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::MonthDay) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::MonthDay, manager) { init(enums); } @@ -104,12 +108,15 @@ MonthDayDatatypeValidator::MonthDayDatatypeValidator( MonthDayDatatypeValidator::~MonthDayDatatypeValidator() {} -DatatypeValidator* MonthDayDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* MonthDayDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new MonthDayDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) MonthDayDatatypeValidator(this, facets, enums, finalSet, manager); } // @@ -117,7 +124,7 @@ DatatypeValidator* MonthDayDatatypeValidator::newInstance( // XMLDateTime* MonthDayDatatypeValidator::parse(const XMLCh* const content) { - XMLDateTime *pRetDate = new XMLDateTime(content); + XMLDateTime *pRetDate = new (fMemoryManager) XMLDateTime(content); try { diff --git a/src/xercesc/validators/datatype/MonthDayDatatypeValidator.hpp b/src/xercesc/validators/datatype/MonthDayDatatypeValidator.hpp index 3dd63fce5..60cc9c06c 100644 --- a/src/xercesc/validators/datatype/MonthDayDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/MonthDayDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -85,28 +88,36 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - MonthDayDatatypeValidator(); - - MonthDayDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + MonthDayDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + MonthDayDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); ~MonthDayDatatypeValidator(); - //@} /** * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/NCNameDatatypeValidator.cpp b/src/xercesc/validators/datatype/NCNameDatatypeValidator.cpp index 80ab8b26d..7a8025915 100644 --- a/src/xercesc/validators/datatype/NCNameDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/NCNameDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.5 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -91,8 +94,8 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -NCNameDatatypeValidator::NCNameDatatypeValidator() -:StringDatatypeValidator(0, 0, 0, DatatypeValidator::NCName) +NCNameDatatypeValidator::NCNameDatatypeValidator(MemoryManager* const manager) +:StringDatatypeValidator(0, 0, 0, DatatypeValidator::NCName, manager) {} NCNameDatatypeValidator::~NCNameDatatypeValidator() @@ -101,27 +104,32 @@ NCNameDatatypeValidator::~NCNameDatatypeValidator() NCNameDatatypeValidator::NCNameDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::NCName) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::NCName, manager) { init(enums); } -DatatypeValidator* NCNameDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* NCNameDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new NCNameDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) NCNameDatatypeValidator(this, facets, enums, finalSet, manager); } NCNameDatatypeValidator::NCNameDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:StringDatatypeValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:StringDatatypeValidator(baseValidator, facets, finalSet, type, manager) { // do not invoke init() here!!! } diff --git a/src/xercesc/validators/datatype/NCNameDatatypeValidator.hpp b/src/xercesc/validators/datatype/NCNameDatatypeValidator.hpp index d09902bbf..2016c6c1e 100644 --- a/src/xercesc/validators/datatype/NCNameDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/NCNameDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -91,15 +94,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - NCNameDatatypeValidator(); - - NCNameDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + NCNameDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + NCNameDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~NCNameDatatypeValidator(); @@ -144,19 +153,27 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: // // ctor provided to be used by derived classes // - NCNameDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + NCNameDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual void checkValueSpace(const XMLCh* const content); diff --git a/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp b/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp index 16215452d..92a00e9d8 100644 --- a/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -109,8 +112,8 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -NOTATIONDatatypeValidator::NOTATIONDatatypeValidator() -:AbstractStringValidator(0, 0, 0, DatatypeValidator::NOTATION) +NOTATIONDatatypeValidator::NOTATIONDatatypeValidator(MemoryManager* const manager) +:AbstractStringValidator(0, 0, 0, DatatypeValidator::NOTATION, manager) {} NOTATIONDatatypeValidator::~NOTATIONDatatypeValidator() @@ -120,18 +123,22 @@ NOTATIONDatatypeValidator::NOTATIONDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::NOTATION) + , const int finalSet + , MemoryManager* const manager) +:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::NOTATION, manager) { init(enums); } -DatatypeValidator* NOTATIONDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* NOTATIONDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new NOTATIONDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) NOTATIONDatatypeValidator(this, facets, enums, finalSet, manager); } // --------------------------------------------------------------------------- diff --git a/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp b/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp index cfd98ab74..174ae1317 100644 --- a/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:26 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -99,15 +102,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - NOTATIONDatatypeValidator(); - - NOTATIONDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + NOTATIONDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + NOTATIONDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~NOTATIONDatatypeValidator(); @@ -117,9 +126,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/NameDatatypeValidator.cpp b/src/xercesc/validators/datatype/NameDatatypeValidator.cpp index 18f85b97d..67ebc8490 100644 --- a/src/xercesc/validators/datatype/NameDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/NameDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.5 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -94,8 +97,8 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -NameDatatypeValidator::NameDatatypeValidator() -:StringDatatypeValidator(0, 0, 0, DatatypeValidator::Name) +NameDatatypeValidator::NameDatatypeValidator(MemoryManager* const manager) +:StringDatatypeValidator(0, 0, 0, DatatypeValidator::Name, manager) {} NameDatatypeValidator::~NameDatatypeValidator() @@ -104,27 +107,32 @@ NameDatatypeValidator::~NameDatatypeValidator() NameDatatypeValidator::NameDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::Name) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:StringDatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::Name, manager) { init(enums); } -DatatypeValidator* NameDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* NameDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new NameDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) NameDatatypeValidator(this, facets, enums, finalSet, manager); } NameDatatypeValidator::NameDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:StringDatatypeValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:StringDatatypeValidator(baseValidator, facets, finalSet, type, manager) { // do not invoke init() here!!! } diff --git a/src/xercesc/validators/datatype/NameDatatypeValidator.hpp b/src/xercesc/validators/datatype/NameDatatypeValidator.hpp index f98fb90b2..9cb57ea39 100644 --- a/src/xercesc/validators/datatype/NameDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/NameDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -91,16 +94,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - NameDatatypeValidator(); - - NameDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + NameDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + NameDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~NameDatatypeValidator(); //@} @@ -144,19 +152,27 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: // // ctor provided to be used by derived classes // - NameDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + NameDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual void checkValueSpace(const XMLCh* const content); diff --git a/src/xercesc/validators/datatype/QNameDatatypeValidator.cpp b/src/xercesc/validators/datatype/QNameDatatypeValidator.cpp index 604a61986..fd17e7f50 100644 --- a/src/xercesc/validators/datatype/QNameDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/QNameDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -105,8 +108,8 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -QNameDatatypeValidator::QNameDatatypeValidator() -:AbstractStringValidator(0, 0, 0, DatatypeValidator::QName) +QNameDatatypeValidator::QNameDatatypeValidator(MemoryManager* const manager) +:AbstractStringValidator(0, 0, 0, DatatypeValidator::QName, manager) {} QNameDatatypeValidator::~QNameDatatypeValidator() @@ -115,19 +118,23 @@ QNameDatatypeValidator::~QNameDatatypeValidator() QNameDatatypeValidator::QNameDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::QName) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::QName, manager) { init(enums); } -DatatypeValidator* QNameDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* QNameDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new QNameDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) QNameDatatypeValidator(this, facets, enums, finalSet, manager); } // --------------------------------------------------------------------------- diff --git a/src/xercesc/validators/datatype/QNameDatatypeValidator.hpp b/src/xercesc/validators/datatype/QNameDatatypeValidator.hpp index a3999606d..983284683 100644 --- a/src/xercesc/validators/datatype/QNameDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/QNameDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -99,16 +102,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - QNameDatatypeValidator(); - - QNameDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + QNameDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + QNameDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~QNameDatatypeValidator(); //@} @@ -117,9 +125,14 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + protected: virtual void assignAdditionalFacet(const XMLCh* const key diff --git a/src/xercesc/validators/datatype/StringDatatypeValidator.cpp b/src/xercesc/validators/datatype/StringDatatypeValidator.cpp index 202fac889..83cbb97eb 100644 --- a/src/xercesc/validators/datatype/StringDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/StringDatatypeValidator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -136,17 +139,18 @@ static XMLCh value2[BUF_LEN+1]; // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -StringDatatypeValidator::StringDatatypeValidator() -:AbstractStringValidator(0, 0, 0, DatatypeValidator::String) +StringDatatypeValidator::StringDatatypeValidator(MemoryManager* const manager) +:AbstractStringValidator(0, 0, 0, DatatypeValidator::String, manager) ,fWhiteSpace(DatatypeValidator::PRESERVE) {} StringDatatypeValidator::StringDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::String) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:AbstractStringValidator(baseValidator, facets, finalSet, DatatypeValidator::String, manager) ,fWhiteSpace(DatatypeValidator::PRESERVE) { init(enums); @@ -155,20 +159,24 @@ StringDatatypeValidator::StringDatatypeValidator( StringDatatypeValidator::~StringDatatypeValidator() {} -DatatypeValidator* StringDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* StringDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new StringDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) StringDatatypeValidator(this, facets, enums, finalSet, manager); } StringDatatypeValidator::StringDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets , const int finalSet - , const ValidatorType type) -:AbstractStringValidator(baseValidator, facets, finalSet, type) + , const ValidatorType type + , MemoryManager* const manager) +:AbstractStringValidator(baseValidator, facets, finalSet, type, manager) ,fWhiteSpace(DatatypeValidator::PRESERVE) { // do not invoke init() here!!! diff --git a/src/xercesc/validators/datatype/StringDatatypeValidator.hpp b/src/xercesc/validators/datatype/StringDatatypeValidator.hpp index 8f5f22e7e..b4b41bcba 100644 --- a/src/xercesc/validators/datatype/StringDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/StringDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -97,16 +100,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - StringDatatypeValidator(); - - StringDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + StringDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + StringDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~StringDatatypeValidator(); //@} @@ -125,19 +133,27 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: // // ctor provided to be used by derived classes // - StringDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , const int finalSet - , const ValidatorType type); + StringDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , const int finalSet + , const ValidatorType type + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual void assignAdditionalFacet(const XMLCh* const key , const XMLCh* const value); diff --git a/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp b/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp index 24eb435d6..12df015f8 100644 --- a/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/TimeDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -87,16 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -TimeDatatypeValidator::TimeDatatypeValidator() -:DateTimeValidator(0, 0, 0, DatatypeValidator::Time) +TimeDatatypeValidator::TimeDatatypeValidator(MemoryManager* const manager) +:DateTimeValidator(0, 0, 0, DatatypeValidator::Time, manager) {} TimeDatatypeValidator::TimeDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Time) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Time, manager) { init(enums); } @@ -104,12 +108,15 @@ TimeDatatypeValidator::TimeDatatypeValidator( TimeDatatypeValidator::~TimeDatatypeValidator() {} -DatatypeValidator* TimeDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* TimeDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new TimeDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) TimeDatatypeValidator(this, facets, enums, finalSet, manager); } // @@ -117,7 +124,7 @@ DatatypeValidator* TimeDatatypeValidator::newInstance( // XMLDateTime* TimeDatatypeValidator::parse(const XMLCh* const content) { - XMLDateTime *pRetDate = new XMLDateTime(content); + XMLDateTime *pRetDate = new (fMemoryManager) XMLDateTime(content); try { diff --git a/src/xercesc/validators/datatype/TimeDatatypeValidator.hpp b/src/xercesc/validators/datatype/TimeDatatypeValidator.hpp index fed032697..1423019e2 100644 --- a/src/xercesc/validators/datatype/TimeDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/TimeDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -86,16 +89,21 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - TimeDatatypeValidator(); - - TimeDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + TimeDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + TimeDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); ~TimeDatatypeValidator(); @@ -105,9 +113,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp b/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp index aab7c162f..b240388a1 100644 --- a/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.9 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.8 2003/02/06 13:51:55 gareth * fixed bug with multiple attributes being validated by the same union type. * @@ -115,8 +118,8 @@ static XMLCh value2[BUF_LEN+1]; // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -UnionDatatypeValidator::UnionDatatypeValidator() -:DatatypeValidator(0, 0, 0, DatatypeValidator::Union) +UnionDatatypeValidator::UnionDatatypeValidator(MemoryManager* const manager) +:DatatypeValidator(0, 0, 0, DatatypeValidator::Union, manager) ,fEnumerationInherited(false) ,fEnumeration(0) ,fMemberTypeValidators(0) @@ -130,8 +133,9 @@ UnionDatatypeValidator::~UnionDatatypeValidator() UnionDatatypeValidator::UnionDatatypeValidator( RefVectorOf<DatatypeValidator>* const memberTypeValidators - , const int finalSet) -:DatatypeValidator(0, 0, finalSet, DatatypeValidator::Union) + , const int finalSet + , MemoryManager* const manager) +:DatatypeValidator(0, 0, finalSet, DatatypeValidator::Union, manager) ,fEnumerationInherited(false) ,fEnumeration(0) ,fMemberTypeValidators(0) @@ -150,9 +154,10 @@ UnionDatatypeValidator::UnionDatatypeValidator( UnionDatatypeValidator::UnionDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::Union) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DatatypeValidator(baseValidator, facets, finalSet, DatatypeValidator::Union, manager) ,fEnumerationInherited(false) ,fEnumeration(0) ,fMemberTypeValidators(0) @@ -339,7 +344,7 @@ void UnionDatatypeValidator::checkContent(const XMLCh* const content, bool asBas if (getRegex() == 0) { try { - setRegex(new RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); + setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption)); } catch (XMLException &e) { diff --git a/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp b/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp index 27154a110..6a09dc92e 100644 --- a/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/UnionDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.9 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.8 2003/02/06 13:51:55 gareth * fixed bug with multiple attributes being validated by the same union type. * @@ -112,7 +115,6 @@ #define UNION_DATATYPEVALIDATOR_HPP #include <xercesc/validators/datatype/DatatypeValidator.hpp> -#include <xercesc/validators/schema/SchemaSymbols.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -123,10 +125,13 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor. */ //@{ - UnionDatatypeValidator(); + UnionDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); // // constructor for native Union datatype validator @@ -134,8 +139,12 @@ public: // <union memberTypes="member1 member2 ..."> // </simpleType> // - UnionDatatypeValidator(RefVectorOf<DatatypeValidator>* const memberTypeValidators - , const int finalSet); + UnionDatatypeValidator + ( + RefVectorOf<DatatypeValidator>* const memberTypeValidators + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); // // constructor for derived Union datatype validator @@ -146,10 +155,14 @@ public: // </restriction> // </simpleType> // - UnionDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + UnionDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); virtual ~UnionDatatypeValidator(); @@ -219,9 +232,13 @@ public: * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); RefVectorOf<DatatypeValidator>* getMemberTypeValidators() const; @@ -291,12 +308,15 @@ private: DatatypeValidator* fValidatedDatatype; }; -inline DatatypeValidator* UnionDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +inline DatatypeValidator* UnionDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new UnionDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) UnionDatatypeValidator(this, facets, enums, finalSet, manager); } inline void UnionDatatypeValidator::validate( const XMLCh* const content) diff --git a/src/xercesc/validators/datatype/YearDatatypeValidator.cpp b/src/xercesc/validators/datatype/YearDatatypeValidator.cpp index 92e589b9b..180f5227a 100644 --- a/src/xercesc/validators/datatype/YearDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/YearDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -87,16 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -YearDatatypeValidator::YearDatatypeValidator() -:DateTimeValidator(0, 0, 0, DatatypeValidator::Year) +YearDatatypeValidator::YearDatatypeValidator(MemoryManager* const manager) +:DateTimeValidator(0, 0, 0, DatatypeValidator::Year, manager) {} YearDatatypeValidator::YearDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Year) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::Year, manager) { init(enums); } @@ -104,12 +108,15 @@ YearDatatypeValidator::YearDatatypeValidator( YearDatatypeValidator::~YearDatatypeValidator() {} -DatatypeValidator* YearDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* YearDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new YearDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) YearDatatypeValidator(this, facets, enums, finalSet, manager); } // @@ -117,7 +124,7 @@ DatatypeValidator* YearDatatypeValidator::newInstance( // XMLDateTime* YearDatatypeValidator::parse(const XMLCh* const content) { - XMLDateTime *pRetDate = new XMLDateTime(content); + XMLDateTime *pRetDate = new (fMemoryManager) XMLDateTime(content); try { diff --git a/src/xercesc/validators/datatype/YearDatatypeValidator.hpp b/src/xercesc/validators/datatype/YearDatatypeValidator.hpp index 5d94c0808..e08c6f435 100644 --- a/src/xercesc/validators/datatype/YearDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/YearDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -85,28 +88,36 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - YearDatatypeValidator(); - - YearDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + YearDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + YearDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); ~YearDatatypeValidator(); - //@} /** * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp b/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp index 90a3fb271..474821c1b 100644 --- a/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp +++ b/src/xercesc/validators/datatype/YearMonthDatatypeValidator.cpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -87,16 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // Constructors and Destructor // --------------------------------------------------------------------------- -YearMonthDatatypeValidator::YearMonthDatatypeValidator() -:DateTimeValidator(0, 0, 0, DatatypeValidator::YearMonth) +YearMonthDatatypeValidator::YearMonthDatatypeValidator(MemoryManager* const manager) +:DateTimeValidator(0, 0, 0, DatatypeValidator::YearMonth, manager) {} YearMonthDatatypeValidator::YearMonthDatatypeValidator( DatatypeValidator* const baseValidator , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) -:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::YearMonth) + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager) +:DateTimeValidator(baseValidator, facets, finalSet, DatatypeValidator::YearMonth, manager) { init(enums); } @@ -104,12 +108,15 @@ YearMonthDatatypeValidator::YearMonthDatatypeValidator( YearMonthDatatypeValidator::~YearMonthDatatypeValidator() {} -DatatypeValidator* YearMonthDatatypeValidator::newInstance( - RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet) +DatatypeValidator* YearMonthDatatypeValidator::newInstance +( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager +) { - return (DatatypeValidator*) new YearMonthDatatypeValidator(this, facets, enums, finalSet); + return (DatatypeValidator*) new (manager) YearMonthDatatypeValidator(this, facets, enums, finalSet, manager); } // @@ -117,7 +124,7 @@ DatatypeValidator* YearMonthDatatypeValidator::newInstance( // XMLDateTime* YearMonthDatatypeValidator::parse(const XMLCh* const content) { - XMLDateTime *pRetDate = new XMLDateTime(content); + XMLDateTime *pRetDate = new (fMemoryManager) XMLDateTime(content); try { diff --git a/src/xercesc/validators/datatype/YearMonthDatatypeValidator.hpp b/src/xercesc/validators/datatype/YearMonthDatatypeValidator.hpp index 39e0939bb..81d9d8544 100644 --- a/src/xercesc/validators/datatype/YearMonthDatatypeValidator.hpp +++ b/src/xercesc/validators/datatype/YearMonthDatatypeValidator.hpp @@ -57,6 +57,9 @@ /* * $Id$ * $Log$ + * Revision 1.4 2003/05/15 18:53:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:55 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -85,28 +88,36 @@ public: // ----------------------------------------------------------------------- // Public ctor/dtor // ----------------------------------------------------------------------- - /** @name Constructor. */ + /** @name Constructors and Destructor */ //@{ - YearMonthDatatypeValidator(); - - YearMonthDatatypeValidator(DatatypeValidator* const baseValidator - , RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); - + YearMonthDatatypeValidator + ( + MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); + YearMonthDatatypeValidator + ( + DatatypeValidator* const baseValidator + , RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); ~YearMonthDatatypeValidator(); - //@} /** * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ - virtual DatatypeValidator* newInstance(RefHashTableOf<KVStringPair>* const facets - , RefArrayVectorOf<XMLCh>* const enums - , const int finalSet); + virtual DatatypeValidator* newInstance + ( + RefHashTableOf<KVStringPair>* const facets + , RefArrayVectorOf<XMLCh>* const enums + , const int finalSet + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); protected: diff --git a/src/xercesc/validators/schema/ComplexTypeInfo.cpp b/src/xercesc/validators/schema/ComplexTypeInfo.cpp index 680b74ebd..b105c67b6 100644 --- a/src/xercesc/validators/schema/ComplexTypeInfo.cpp +++ b/src/xercesc/validators/schema/ComplexTypeInfo.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.6 2003/01/29 19:57:30 gareth * API to retrive local and uri part of the type name * @@ -176,8 +179,9 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // ComplexTypeInfo: Constructors and Destructor // --------------------------------------------------------------------------- -ComplexTypeInfo::ComplexTypeInfo() - : fAbstract(false) +ComplexTypeInfo::ComplexTypeInfo(MemoryManager* const manager) + : fAnonymous(false) + , fAbstract(false) , fAdoptContentSpec(true) , fAttWithTypeId(false) , fPreprocessed(false) @@ -205,7 +209,7 @@ ComplexTypeInfo::ComplexTypeInfo() , fContentSpecOrgURISize(16) , fSpecNodesToDelete(0) , fLocator(0) - , fAnonymous(false) + , fMemoryManager(manager) { } @@ -213,9 +217,9 @@ ComplexTypeInfo::ComplexTypeInfo() ComplexTypeInfo::~ComplexTypeInfo() { - delete [] fTypeName; - delete [] fTypeLocalName; - delete [] fTypeUri; + fMemoryManager->deallocate(fTypeName); //delete [] fTypeName; + fMemoryManager->deallocate(fTypeLocalName); //delete [] fTypeLocalName; + fMemoryManager->deallocate(fTypeUri); //delete [] fTypeUri; if (fAdoptContentSpec) { delete fContentSpec; @@ -229,8 +233,8 @@ ComplexTypeInfo::~ComplexTypeInfo() delete fLocator; delete fContentModel; - delete [] fFormattedModel; - delete [] fContentSpecOrgURI; + fMemoryManager->deallocate(fFormattedModel); //delete [] fFormattedModel; + fMemoryManager->deallocate(fContentSpecOrgURI); //delete [] fContentSpecOrgURI; } // --------------------------------------------------------------------------- @@ -326,7 +330,7 @@ XMLAttDef* ComplexTypeInfo::findAttr(const XMLCh* const qName faultInAttDefList(); // And add a default attribute for this name - retVal = new SchemaAttDef(prefix, baseName, uriId); + retVal = new (fMemoryManager) SchemaAttDef(prefix, baseName, uriId); retVal->setElemId(getElementId()); fAttDefs->put((void*)retVal->getAttName()->getLocalPart(), uriId, retVal); @@ -364,7 +368,7 @@ void ComplexTypeInfo::checkUniqueParticleAttribution (SchemaGrammar* const pG XMLValidator* const pValidator) { if (fContentSpec) { - ContentSpecNode* specNode = new ContentSpecNode(*fContentSpec); + ContentSpecNode* specNode = new (fMemoryManager) ContentSpecNode(*fContentSpec); XMLContentModel* cm = makeContentModel(true, specNode); if (cm) { @@ -383,7 +387,7 @@ void ComplexTypeInfo::faultInAttDefList() const { // Use a hash modulus of 29 and tell it owns its elements ((ComplexTypeInfo*)this)->fAttDefs = - new RefHash2KeysTableOf<SchemaAttDef>(29, true); + new (fMemoryManager) RefHash2KeysTableOf<SchemaAttDef>(29, true); } XMLCh* ComplexTypeInfo::formatContentModel() const @@ -391,13 +395,13 @@ XMLCh* ComplexTypeInfo::formatContentModel() const XMLCh* newValue = 0; if (fContentType == SchemaElementDecl::Any) { - newValue = XMLString::replicate(XMLUni::fgAnyString); + newValue = XMLString::replicate(XMLUni::fgAnyString, fMemoryManager); } - else if (fContentType == SchemaElementDecl::Empty) + else if (fContentType == SchemaElementDecl::Empty) { - newValue = XMLString::replicate(XMLUni::fgEmptyString); + newValue = XMLString::replicate(XMLUni::fgEmptyString, fMemoryManager); } - else + else { // // Use a temp XML buffer to format into. Content models could be @@ -409,9 +413,12 @@ XMLCh* ComplexTypeInfo::formatContentModel() const if (specNode) { XMLBuffer bufFmt; - specNode->formatSpec(bufFmt); - newValue = XMLString::replicate(bufFmt.getRawBuffer()); + newValue = XMLString::replicate + ( + bufFmt.getRawBuffer() + , fMemoryManager + ); } } return newValue; @@ -420,14 +427,17 @@ XMLCh* ComplexTypeInfo::formatContentModel() const XMLContentModel* ComplexTypeInfo::makeContentModel(const bool checkUPA, ContentSpecNode* const specNode) { if ((specNode || fContentSpec) && !fSpecNodesToDelete) { - fSpecNodesToDelete = new RefVectorOf<ContentSpecNode>(8); + fSpecNodesToDelete = new (fMemoryManager) RefVectorOf<ContentSpecNode>(8); } // expand the content spec first ContentSpecNode* aSpecNode = specNode; if (aSpecNode) { - fContentSpecOrgURI = new unsigned int[fContentSpecOrgURISize]; + fContentSpecOrgURI = (unsigned int*) fMemoryManager->allocate + ( + fContentSpecOrgURISize * sizeof(unsigned int) + ); //new unsigned int[fContentSpecOrgURISize]; aSpecNode = convertContentSpecTree(aSpecNode, checkUPA); fSpecNodesToDelete->addElement(aSpecNode); } @@ -454,7 +464,7 @@ XMLContentModel* ComplexTypeInfo::makeContentModel(const bool checkUPA, ContentS // Just create a mixel content model object. This type of // content model is optimized for mixed content validation. // - cmRet = new MixedContentModel(false, aSpecNode); + cmRet = new (fMemoryManager) MixedContentModel(false, aSpecNode); } else if (fContentType == SchemaElementDecl::Mixed_Complex) { @@ -514,12 +524,12 @@ XMLContentModel* ComplexTypeInfo::createChildModel(ContentSpecNode* specNode, co // All the nodes under an ALL must be additional ALL nodes and // ELEMENTs (or ELEMENTs under ZERO_OR_ONE nodes.) // We collapse the ELEMENTs into a single vector. - return new AllContentModel(specNode, true); + return new (fMemoryManager) AllContentModel(specNode, true, fMemoryManager); } else if (specType == ContentSpecNode::ZeroOrOne) { // An ALL node can appear under a ZERO_OR_ONE node. if (specNode->getFirst()->getType() == ContentSpecNode::All) { - return new AllContentModel(specNode->getFirst(), true); + return new (fMemoryManager) AllContentModel(specNode->getFirst(), true, fMemoryManager); } } @@ -528,7 +538,7 @@ XMLContentModel* ComplexTypeInfo::createChildModel(ContentSpecNode* specNode, co else if (specType == ContentSpecNode::Leaf) { // Create a simple content model - return new SimpleContentModel + return new (fMemoryManager) SimpleContentModel ( false , specNode->getElement() @@ -547,7 +557,7 @@ XMLContentModel* ComplexTypeInfo::createChildModel(ContentSpecNode* specNode, co && (specNode->getSecond()) && (specNode->getSecond()->getType() == ContentSpecNode::Leaf)) { - return new SimpleContentModel + return new (fMemoryManager) SimpleContentModel ( false , specNode->getFirst()->getElement() @@ -567,7 +577,7 @@ XMLContentModel* ComplexTypeInfo::createChildModel(ContentSpecNode* specNode, co // if (specNode->getFirst()->getType() == ContentSpecNode::Leaf) { - return new SimpleContentModel + return new (fMemoryManager) SimpleContentModel ( false , specNode->getFirst()->getElement() @@ -576,11 +586,11 @@ XMLContentModel* ComplexTypeInfo::createChildModel(ContentSpecNode* specNode, co ); } else if (specNode->getFirst()->getType() == ContentSpecNode::All) - return new AllContentModel(specNode->getFirst(), false); + return new (fMemoryManager) AllContentModel(specNode->getFirst(), false, fMemoryManager); } else if (specType == ContentSpecNode::All) - return new AllContentModel(specNode, false); + return new (fMemoryManager) AllContentModel(specNode, false, fMemoryManager); else { @@ -588,7 +598,7 @@ XMLContentModel* ComplexTypeInfo::createChildModel(ContentSpecNode* specNode, co } // Its not any simple type of content, so create a DFA based content model - return new DFAContentModel(false, specNode, isMixed); + return new (fMemoryManager) DFAContentModel(false, specNode, isMixed, fMemoryManager); } ContentSpecNode* @@ -677,20 +687,20 @@ ContentSpecNode* ComplexTypeInfo::expandContentModel(ContentSpecNode* const spec } else if (minOccurs == 0 && maxOccurs == 1) { - retNode = new ContentSpecNode(ContentSpecNode::ZeroOrOne, retNode, 0); + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::ZeroOrOne, retNode, 0); } else if (minOccurs == 0 && maxOccurs == -1) { - retNode = new ContentSpecNode(ContentSpecNode::ZeroOrMore, retNode, 0); + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::ZeroOrMore, retNode, 0); } else if (minOccurs == 1 && maxOccurs == -1) { - retNode = new ContentSpecNode(ContentSpecNode::OneOrMore, retNode, 0); + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::OneOrMore, retNode, 0); } else if (maxOccurs == -1) { - retNode = new ContentSpecNode(ContentSpecNode::OneOrMore, retNode, 0); + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::OneOrMore, retNode, 0); for (int i=0; i < (int)(minOccurs-1); i++) { - retNode = new ContentSpecNode(ContentSpecNode::Sequence, + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::Sequence, saveNode, retNode, false); } } @@ -699,12 +709,12 @@ ContentSpecNode* ComplexTypeInfo::expandContentModel(ContentSpecNode* const spec if (minOccurs == 0) { ContentSpecNode* optional = - new ContentSpecNode(ContentSpecNode::ZeroOrOne, saveNode, 0); + new (fMemoryManager) ContentSpecNode(ContentSpecNode::ZeroOrOne, saveNode, 0); retNode = optional; for (int i=0; i < (int)(maxOccurs-minOccurs-1); i++) { - retNode = new ContentSpecNode(ContentSpecNode::Sequence, + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::Sequence, retNode, optional, true, false); } } @@ -712,11 +722,11 @@ ContentSpecNode* ComplexTypeInfo::expandContentModel(ContentSpecNode* const spec if (minOccurs > 1) { - retNode = new ContentSpecNode(ContentSpecNode::Sequence, + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::Sequence, retNode, saveNode, true, false); for (int i=1; i < (int)(minOccurs-1); i++) { - retNode = new ContentSpecNode(ContentSpecNode::Sequence, + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::Sequence, retNode, saveNode, true, false); } } @@ -725,13 +735,13 @@ ContentSpecNode* ComplexTypeInfo::expandContentModel(ContentSpecNode* const spec if (counter > 0) { - ContentSpecNode* optional = new ContentSpecNode(ContentSpecNode::ZeroOrOne, saveNode, 0, false); + ContentSpecNode* optional = new (fMemoryManager) ContentSpecNode(ContentSpecNode::ZeroOrOne, saveNode, 0, false); - retNode = new ContentSpecNode(ContentSpecNode::Sequence, retNode, optional); + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::Sequence, retNode, optional); for (int j=1; j < counter; j++) { - retNode = new ContentSpecNode(ContentSpecNode::Sequence, + retNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::Sequence, retNode, optional, true, false); } } @@ -744,7 +754,10 @@ ContentSpecNode* ComplexTypeInfo::expandContentModel(ContentSpecNode* const spec void ComplexTypeInfo::resizeContentSpecOrgURI() { unsigned int newSize = fContentSpecOrgURISize * 2; - unsigned int* newContentSpecOrgURI = new unsigned int[newSize]; + unsigned int* newContentSpecOrgURI = (unsigned int*) fMemoryManager->allocate + ( + newSize * sizeof(unsigned int) + ); //new unsigned int[newSize]; // Copy the existing values unsigned int index = 0; @@ -755,7 +768,7 @@ void ComplexTypeInfo::resizeContentSpecOrgURI() { newContentSpecOrgURI[index] = 0; // Delete the old array and udpate our members - delete [] fContentSpecOrgURI; + fMemoryManager->deallocate(fContentSpecOrgURI); //delete [] fContentSpecOrgURI; fContentSpecOrgURI = newContentSpecOrgURI; fContentSpecOrgURISize = newSize; } diff --git a/src/xercesc/validators/schema/ComplexTypeInfo.hpp b/src/xercesc/validators/schema/ComplexTypeInfo.hpp index 884b6b9f3..9490922c4 100644 --- a/src/xercesc/validators/schema/ComplexTypeInfo.hpp +++ b/src/xercesc/validators/schema/ComplexTypeInfo.hpp @@ -74,7 +74,6 @@ #include <xercesc/util/XMLString.hpp> #include <xercesc/util/RefHash2KeysTableOf.hpp> #include <xercesc/util/RefVectorOf.hpp> -#include <xercesc/util/Janitor.hpp> #include <xercesc/framework/XMLElementDecl.hpp> #include <xercesc/framework/XMLContentModel.hpp> #include <xercesc/validators/schema/SchemaAttDef.hpp> @@ -92,13 +91,13 @@ class SchemaElementDecl; class XSDLocator; -class VALIDATORS_EXPORT ComplexTypeInfo +class VALIDATORS_EXPORT ComplexTypeInfo : public XMemory { public: // ----------------------------------------------------------------------- // Public Constructors/Destructor // ----------------------------------------------------------------------- - ComplexTypeInfo(); + ComplexTypeInfo(MemoryManager* const manager); ~ComplexTypeInfo(); // ----------------------------------------------------------------------- @@ -213,6 +212,7 @@ private: // ----------------------------------------------------------------------- // Private data members // ----------------------------------------------------------------------- + bool fAnonymous; bool fAbstract; bool fAdoptContentSpec; bool fAttWithTypeId; @@ -241,7 +241,7 @@ private: unsigned int fUniqueURI; unsigned int fContentSpecOrgURISize; XSDLocator* fLocator; - bool fAnonymous; + MemoryManager* fMemoryManager; }; // --------------------------------------------------------------------------- @@ -402,7 +402,10 @@ inline const XMLCh* ComplexTypeInfo::getTypeLocalName() const if(!fTypeLocalName) { int index = XMLString::indexOf(fTypeName, chComma); int length = XMLString::stringLen(fTypeName); - XMLCh *tName = new XMLCh[length - index + 1]; + XMLCh *tName = (XMLCh*) fMemoryManager->allocate + ( + (length - index + 1) * sizeof(XMLCh) + ); //new XMLCh[length - index + 1]; XMLString::subString(tName, fTypeName, index + 1, length); ((ComplexTypeInfo *)this)->fTypeLocalName = tName; } @@ -414,7 +417,10 @@ inline const XMLCh* ComplexTypeInfo::getTypeUri() const { if(!fTypeUri) { int index = XMLString::indexOf(fTypeName, chComma); - XMLCh *uri = new XMLCh[index + 1]; + XMLCh *uri = (XMLCh*) fMemoryManager->allocate + ( + (index + 1) * sizeof(XMLCh) + ); //new XMLCh[index + 1]; XMLString::subString(uri, fTypeName, 0, index); ((ComplexTypeInfo *)this)->fTypeUri = uri; } @@ -478,13 +484,12 @@ ComplexTypeInfo::setContentType(const int contentType) { inline void ComplexTypeInfo::setTypeName(const XMLCh* const typeName) { - delete [] fTypeName; - delete [] fTypeLocalName; - fTypeLocalName = 0; - delete [] fTypeUri; - fTypeUri = 0; + fMemoryManager->deallocate(fTypeName);//delete [] fTypeName; + fMemoryManager->deallocate(fTypeLocalName);//delete [] fTypeLocalName; + fMemoryManager->deallocate(fTypeUri);//delete [] fTypeUri; + fTypeLocalName = fTypeUri = 0; - fTypeName = XMLString::replicate(typeName); + fTypeName = XMLString::replicate(typeName, fMemoryManager); } inline void @@ -508,7 +513,7 @@ ComplexTypeInfo::setBaseComplexTypeInfo(ComplexTypeInfo* const typeInfo) { inline void ComplexTypeInfo::addElement(SchemaElementDecl* const elem) { if (!fElements) { - fElements = new RefVectorOf<SchemaElementDecl>(8, false); + fElements = new (fMemoryManager) RefVectorOf<SchemaElementDecl>(8, false); } else if (fElements->containsElement(elem)) { return; diff --git a/src/xercesc/validators/schema/GeneralAttributeCheck.cpp b/src/xercesc/validators/schema/GeneralAttributeCheck.cpp index c095bc4e5..767bd2fd7 100644 --- a/src/xercesc/validators/schema/GeneralAttributeCheck.cpp +++ b/src/xercesc/validators/schema/GeneralAttributeCheck.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.13 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.12 2003/01/17 15:35:57 knoaman * Fix for attribute checking of schema declarations. * @@ -211,8 +214,10 @@ static XMLRegisterCleanup GeneralAttCheckCleanup; // --------------------------------------------------------------------------- // GeneralAttributeCheck: Constructors and Destructor // --------------------------------------------------------------------------- -GeneralAttributeCheck::GeneralAttributeCheck() - : fIDRefList(0) +GeneralAttributeCheck::GeneralAttributeCheck(MemoryManager* const manager) + : fMemoryManager(manager) + , fIDRefList(0) + , fIDValidator(manager) { mapElements(); } @@ -227,7 +232,7 @@ GeneralAttributeCheck::~GeneralAttributeCheck() // --------------------------------------------------------------------------- void GeneralAttributeCheck::setUpValidators() { - DatatypeValidatorFactory dvFactory; + DatatypeValidatorFactory dvFactory(fMemoryManager); dvFactory.expandRegistryToFullSchemaSet(); fNonNegIntDV = dvFactory.getDatatypeValidator(SchemaSymbols::fgDT_NONNEGATIVEINTEGER); diff --git a/src/xercesc/validators/schema/GeneralAttributeCheck.hpp b/src/xercesc/validators/schema/GeneralAttributeCheck.hpp index 9401b334a..95f8fcc22 100644 --- a/src/xercesc/validators/schema/GeneralAttributeCheck.hpp +++ b/src/xercesc/validators/schema/GeneralAttributeCheck.hpp @@ -69,11 +69,9 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/RefVectorOf.hpp> #include <xercesc/util/RefHashTableOf.hpp> -#include <xercesc/util/RefHash2KeysTableOf.hpp> -#include <xercesc/validators/datatype/IDDatatypeValidator.hpp> #include <xercesc/util/ValueHashTableOf.hpp> +#include <xercesc/validators/datatype/IDDatatypeValidator.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -84,7 +82,7 @@ class TraverseSchema; class DOMElement; -class VALIDATORS_EXPORT GeneralAttributeCheck +class VALIDATORS_EXPORT GeneralAttributeCheck : public XMemory { public: // ----------------------------------------------------------------------- @@ -219,7 +217,7 @@ public: // ----------------------------------------------------------------------- // Constructor/Destructor // ----------------------------------------------------------------------- - GeneralAttributeCheck(); + GeneralAttributeCheck(MemoryManager* const manager); ~GeneralAttributeCheck(); // ----------------------------------------------------------------------- @@ -285,8 +283,9 @@ private: static DatatypeValidator* fAnyURIDV; static unsigned short fgElemAttTable[E_Count][A_Count]; static const XMLCh* fAttNames[A_Count]; - IDDatatypeValidator fIDValidator; + MemoryManager* fMemoryManager; RefHashTableOf<XMLRefInfo>* fIDRefList; + IDDatatypeValidator fIDValidator; }; diff --git a/src/xercesc/validators/schema/NamespaceScope.cpp b/src/xercesc/validators/schema/NamespaceScope.cpp index ce9f7f67e..7c5ce40ae 100644 --- a/src/xercesc/validators/schema/NamespaceScope.cpp +++ b/src/xercesc/validators/schema/NamespaceScope.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:49:41 tng * C++ Namespace Support. * @@ -91,9 +94,13 @@ NamespaceScope::NamespaceScope() : , fStackCapacity(8) , fStackTop(0) , fStack(0) + , fMemoryManager(XMLPlatformUtils::fgMemoryManager) { // Do an initial allocation of the stack and zero it out - fStack = new StackElem*[fStackCapacity]; + fStack = (StackElem**) fMemoryManager->allocate + ( + fStackCapacity * sizeof(StackElem*) + );//new StackElem*[fStackCapacity]; memset(fStack, 0, fStackCapacity * sizeof(StackElem*)); } @@ -110,12 +117,12 @@ NamespaceScope::~NamespaceScope() break; // Delete the row for this entry, then delete the row structure - delete [] fStack[stackInd]->fMap; + fMemoryManager->deallocate(fStack[stackInd]->fMap);//delete [] fStack[stackInd]->fMap; delete fStack[stackInd]; } // Delete the stack array itself now - delete [] fStack; + fMemoryManager->deallocate(fStack);//delete [] fStack; } @@ -131,7 +138,7 @@ unsigned int NamespaceScope::increaseDepth() // If this element has not been initialized yet, then initialize it if (!fStack[fStackTop]) { - fStack[fStackTop] = new StackElem; + fStack[fStackTop] = new (fMemoryManager) StackElem; fStack[fStackTop]->fMapCapacity = 0; fStack[fStackTop]->fMap = 0; } @@ -258,7 +265,10 @@ void NamespaceScope::expandMap(StackElem* const toExpand) // const unsigned int newCapacity = oldCap ? (unsigned int)(oldCap * 1.25) : 16; - PrefMapElem* newMap = new PrefMapElem[newCapacity]; + PrefMapElem* newMap = (PrefMapElem*) fMemoryManager->allocate + ( + newCapacity * sizeof(PrefMapElem) + );//new PrefMapElem[newCapacity]; // // Copy over the old stuff. We DON'T have to zero out the new stuff @@ -268,7 +278,7 @@ void NamespaceScope::expandMap(StackElem* const toExpand) memcpy(newMap, toExpand->fMap, oldCap * sizeof(PrefMapElem)); // Delete the old map and store the new stuff - delete [] toExpand->fMap; + fMemoryManager->deallocate(toExpand->fMap);//delete [] toExpand->fMap; toExpand->fMap = newMap; toExpand->fMapCapacity = newCapacity; } @@ -277,7 +287,10 @@ void NamespaceScope::expandStack() { // Expand the capacity by 25% and allocate a new buffer const unsigned int newCapacity = (unsigned int)(fStackCapacity * 1.25); - StackElem** newStack = new StackElem*[newCapacity]; + StackElem** newStack = (StackElem**) fMemoryManager->allocate + ( + newCapacity * sizeof(StackElem*) + );//new StackElem*[newCapacity]; // Copy over the old stuff memcpy(newStack, fStack, fStackCapacity * sizeof(StackElem*)); @@ -295,7 +308,7 @@ void NamespaceScope::expandStack() ); // Delete the old array and update our members - delete [] fStack; + fMemoryManager->deallocate(fStack);//delete [] fStack; fStack = newStack; fStackCapacity = newCapacity; } diff --git a/src/xercesc/validators/schema/NamespaceScope.hpp b/src/xercesc/validators/schema/NamespaceScope.hpp index 0c5228e50..c208c401a 100644 --- a/src/xercesc/validators/schema/NamespaceScope.hpp +++ b/src/xercesc/validators/schema/NamespaceScope.hpp @@ -61,7 +61,6 @@ #if !defined(NAMESPACESCOPE_HPP) #define NAMESPACESCOPE_HPP -#include <xercesc/util/XercesDefs.hpp> #include <xercesc/util/StringPool.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -72,7 +71,7 @@ XERCES_CPP_NAMESPACE_BEGIN // at a particular instant in time. // -class VALIDATORS_EXPORT NamespaceScope +class VALIDATORS_EXPORT NamespaceScope : public XMemory { public : // ----------------------------------------------------------------------- @@ -90,13 +89,13 @@ public : // The fMapCapacity is how large fMap has grown so far. fMapCount // is how many of them are valid right now. // ----------------------------------------------------------------------- - struct PrefMapElem + struct PrefMapElem : public XMemory { unsigned int fPrefId; unsigned int fURIId; }; - struct StackElem + struct StackElem : public XMemory { PrefMapElem* fMap; unsigned int fMapCapacity; @@ -174,6 +173,7 @@ private : unsigned int fStackTop; XMLStringPool fPrefixPool; StackElem** fStack; + MemoryManager* fMemoryManager; }; diff --git a/src/xercesc/validators/schema/SchemaElementDecl.cpp b/src/xercesc/validators/schema/SchemaElementDecl.cpp index 339d1fd4d..47d55d5ef 100644 --- a/src/xercesc/validators/schema/SchemaElementDecl.cpp +++ b/src/xercesc/validators/schema/SchemaElementDecl.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.8 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.7 2003/01/29 19:47:16 gareth * added DOMTypeInfo and some PSVI methods * @@ -151,9 +154,9 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // SchemaElementDecl: Constructors and Destructor // --------------------------------------------------------------------------- -SchemaElementDecl::SchemaElementDecl() : - - fModelType(Any) +SchemaElementDecl::SchemaElementDecl(MemoryManager* const manager) : + XMLElementDecl(manager) + , fModelType(Any) , fDatatypeValidator(0) , fEnclosingScope(Grammar::TOP_LEVEL_SCOPE) , fBlockSet(0) @@ -180,8 +183,9 @@ SchemaElementDecl::SchemaElementDecl(const XMLCh* const prefix , const int uriId , const SchemaElementDecl::ModelTypes type , const int enclosingScope - ) : - fModelType(type) + , MemoryManager* const manager) : + XMLElementDecl(manager) + , fModelType(type) , fDatatypeValidator(0) , fEnclosingScope(enclosingScope) , fBlockSet(0) @@ -207,8 +211,9 @@ SchemaElementDecl::SchemaElementDecl(const XMLCh* const prefix SchemaElementDecl::SchemaElementDecl(const QName* const elementName , const SchemaElementDecl::ModelTypes type , const int enclosingScope - ) : - fModelType(type) + , MemoryManager* const manager) : + XMLElementDecl(manager) + , fModelType(type) , fDatatypeValidator(0) , fEnclosingScope(enclosingScope) , fBlockSet(0) @@ -233,7 +238,7 @@ SchemaElementDecl::SchemaElementDecl(const QName* const element SchemaElementDecl::~SchemaElementDecl() { - delete [] fDefaultValue; + getMemoryManager()->deallocate(fDefaultValue);//delete [] fDefaultValue; delete fAttDefs; delete fIdentityConstraints; delete fAttWildCard; @@ -263,7 +268,7 @@ XMLAttDef* SchemaElementDecl::findAttr(const XMLCh* const qName // If no att list exist yet, then create one if (!fAttDefs) { // Use a hash modulus of 29 and tell it owns its elements - ((SchemaElementDecl*)this)->fAttDefs = new RefHash2KeysTableOf<SchemaAttDef>(29, true); + ((SchemaElementDecl*)this)->fAttDefs = new (getMemoryManager()) RefHash2KeysTableOf<SchemaAttDef>(29, true); } retVal = fAttDefs->get(baseName, uriId); @@ -272,7 +277,7 @@ XMLAttDef* SchemaElementDecl::findAttr(const XMLCh* const qName if (!retVal) { // And add a default attribute for this name - retVal = new SchemaAttDef(prefix, baseName, uriId); + retVal = new (getMemoryManager()) SchemaAttDef(prefix, baseName, uriId); retVal->setElemId(getId()); fAttDefs->put((void*)retVal->getAttName()->getLocalPart(), uriId, retVal); diff --git a/src/xercesc/validators/schema/SchemaElementDecl.hpp b/src/xercesc/validators/schema/SchemaElementDecl.hpp index d48272d5b..2d7eb5740 100644 --- a/src/xercesc/validators/schema/SchemaElementDecl.hpp +++ b/src/xercesc/validators/schema/SchemaElementDecl.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.9 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.8 2003/01/29 19:47:16 gareth * added DOMTypeInfo and some PSVI methods * @@ -179,22 +182,23 @@ public : // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- - SchemaElementDecl(); - + SchemaElementDecl(MemoryManager* const manager); SchemaElementDecl ( - const XMLCh* const prefix - , const XMLCh* const localPart - , const int uriId - , const ModelTypes modelType = Any - , const int enclosingScope = Grammar::TOP_LEVEL_SCOPE + const XMLCh* const prefix + , const XMLCh* const localPart + , const int uriId + , const ModelTypes modelType// = Any + , const int enclosingScope// = Grammar::TOP_LEVEL_SCOPE + , MemoryManager* const manager ); SchemaElementDecl ( - const QName* const elementName - , const ModelTypes modelType = Any - , const int enclosingScope = Grammar::TOP_LEVEL_SCOPE + const QName* const elementName + , const ModelTypes modelType// = Any + , const int enclosingScope// = Grammar::TOP_LEVEL_SCOPE + , MemoryManager* const manager ); ~SchemaElementDecl(); @@ -783,10 +787,10 @@ inline void SchemaElementDecl::setMiscFlags(const int flags) inline void SchemaElementDecl::setDefaultValue(const XMLCh* const value) { if (fDefaultValue) { - delete[] fDefaultValue; + getMemoryManager()->deallocate(fDefaultValue);//delete[] fDefaultValue; } - fDefaultValue = XMLString::replicate(value); + fDefaultValue = XMLString::replicate(value, getMemoryManager()); } inline void diff --git a/src/xercesc/validators/schema/SchemaGrammar.cpp b/src/xercesc/validators/schema/SchemaGrammar.cpp index 5df70a996..b19d97f67 100644 --- a/src/xercesc/validators/schema/SchemaGrammar.cpp +++ b/src/xercesc/validators/schema/SchemaGrammar.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/11/04 14:49:41 tng * C++ Namespace Support. * @@ -117,7 +120,7 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // SchemaGrammar: Constructors and Destructor // --------------------------------------------------------------------------- -SchemaGrammar::SchemaGrammar() : +SchemaGrammar::SchemaGrammar(MemoryManager* const manager) : fTargetNamespace(0) , fElemDeclPool(0) , fElemNonDeclPool(0) @@ -130,7 +133,9 @@ SchemaGrammar::SchemaGrammar() : , fNamespaceScope(0) , fValidSubstitutionGroups(0) , fIDRefList(0) + , fMemoryManager(manager) , fValidated(false) + , fDatatypeRegistry(manager) { // // Init all the pool members. @@ -138,13 +143,13 @@ SchemaGrammar::SchemaGrammar() : // <TBD> Investigate what the optimum values would be for the various // pools. // - fElemDeclPool = new RefHash3KeysIdPool<SchemaElementDecl>(109); + fElemDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(109); try { - fElemNonDeclPool = new RefHash3KeysIdPool<SchemaElementDecl>(29); - fGroupElemDeclPool = new RefHash3KeysIdPool<SchemaElementDecl>(109, false); + fElemNonDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(29); + fGroupElemDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(109, false); fNotationDeclPool = new NameIdPool<XMLNotationDecl>(109); - fIDRefList = new RefHashTableOf<XMLRefInfo>(29); + fIDRefList = new (fMemoryManager) RefHashTableOf<XMLRefInfo>(29); fDatatypeRegistry.expandRegistryToFullSchemaSet(); // @@ -183,7 +188,15 @@ XMLElementDecl* SchemaGrammar::findOrAddElemDecl (const unsigned int uriId // if not, then add this in if (!retVal) { - retVal = new SchemaElementDecl(prefixName, baseName, uriId, SchemaElementDecl::Any); + retVal = new (fMemoryManager) SchemaElementDecl + ( + prefixName + , baseName + , uriId + , SchemaElementDecl::Any + , Grammar::TOP_LEVEL_SCOPE + , fMemoryManager + ); const unsigned int elemId = fElemNonDeclPool->put((void*)retVal->getBaseName(), uriId, scope, retVal); retVal->setId(elemId); wasAdded = true; @@ -202,7 +215,15 @@ XMLElementDecl* SchemaGrammar::putElemDecl (const unsigned int uriId , unsigned int scope , const bool notDeclared) { - SchemaElementDecl* retVal = new SchemaElementDecl(prefixName, baseName, uriId, SchemaElementDecl::Any); + SchemaElementDecl* retVal = new (fMemoryManager) SchemaElementDecl + ( + prefixName + , baseName + , uriId + , SchemaElementDecl::Any + , Grammar::TOP_LEVEL_SCOPE + , fMemoryManager + ); const unsigned int elemId = (notDeclared) ? fElemNonDeclPool->put((void*)retVal->getBaseName(), uriId, scope, retVal) : fElemDeclPool->put((void*)retVal->getBaseName(), uriId, scope, retVal); retVal->setId(elemId); @@ -228,7 +249,7 @@ void SchemaGrammar::cleanUp() delete fElemNonDeclPool; delete fGroupElemDeclPool; delete fNotationDeclPool; - delete [] fTargetNamespace; + fMemoryManager->deallocate(fTargetNamespace);//delete [] fTargetNamespace; delete fAttributeDeclRegistry; delete fComplexTypeRegistry; delete fGroupInfoRegistry; diff --git a/src/xercesc/validators/schema/SchemaGrammar.hpp b/src/xercesc/validators/schema/SchemaGrammar.hpp index 4567cdc72..376e4ee43 100644 --- a/src/xercesc/validators/schema/SchemaGrammar.hpp +++ b/src/xercesc/validators/schema/SchemaGrammar.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2002/11/04 14:49:41 tng * C++ Namespace Support. * @@ -159,7 +162,7 @@ public: // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- - SchemaGrammar(); + SchemaGrammar(MemoryManager* const manager); virtual ~SchemaGrammar(); // ----------------------------------------------------------------------- @@ -351,11 +354,12 @@ private: RefHashTableOf<ComplexTypeInfo>* fComplexTypeRegistry; RefHashTableOf<XercesGroupInfo>* fGroupInfoRegistry; RefHashTableOf<XercesAttGroupInfo>* fAttGroupInfoRegistry; - DatatypeValidatorFactory fDatatypeRegistry; NamespaceScope* fNamespaceScope; RefHash2KeysTableOf<ElemVector>* fValidSubstitutionGroups; RefHashTableOf<XMLRefInfo>* fIDRefList; + MemoryManager* fMemoryManager; bool fValidated; + DatatypeValidatorFactory fDatatypeRegistry; }; @@ -415,9 +419,11 @@ inline RefHashTableOf<XMLRefInfo>* SchemaGrammar::getIDRefList() const { // ----------------------------------------------------------------------- // Setter methods // ----------------------------------------------------------------------- -inline void SchemaGrammar::setTargetNamespace(const XMLCh* const targetNamespace) { - delete [] fTargetNamespace; - fTargetNamespace = XMLString::replicate(targetNamespace); +inline void SchemaGrammar::setTargetNamespace(const XMLCh* const targetNamespace) +{ + if (fTargetNamespace) + fMemoryManager->deallocate(fTargetNamespace);//delete [] fTargetNamespace; + fTargetNamespace = XMLString::replicate(targetNamespace, fMemoryManager); } inline void diff --git a/src/xercesc/validators/schema/SchemaInfo.hpp b/src/xercesc/validators/schema/SchemaInfo.hpp index 04b1335eb..3888ac573 100644 --- a/src/xercesc/validators/schema/SchemaInfo.hpp +++ b/src/xercesc/validators/schema/SchemaInfo.hpp @@ -83,7 +83,7 @@ XERCES_CPP_NAMESPACE_BEGIN -class VALIDATORS_EXPORT SchemaInfo +class VALIDATORS_EXPORT SchemaInfo : public XMemory { public: diff --git a/src/xercesc/validators/schema/SchemaValidator.cpp b/src/xercesc/validators/schema/SchemaValidator.cpp index 7883ceb43..ab547d9cd 100644 --- a/src/xercesc/validators/schema/SchemaValidator.cpp +++ b/src/xercesc/validators/schema/SchemaValidator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.29 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.28 2003/02/06 13:51:55 gareth * fixed bug with multiple attributes being validated by the same union type. * @@ -251,9 +254,11 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // SchemaValidator: Constructors and Destructor // --------------------------------------------------------------------------- -SchemaValidator::SchemaValidator(XMLErrorReporter* const errReporter) : +SchemaValidator::SchemaValidator( XMLErrorReporter* const errReporter + , MemoryManager* const manager) : XMLValidator(errReporter) + , fMemoryManager(manager) , fGrammarResolver(0) , fSchemaGrammar(0) , fTrailing(false) diff --git a/src/xercesc/validators/schema/SchemaValidator.hpp b/src/xercesc/validators/schema/SchemaValidator.hpp index 157af4ded..47af4c384 100644 --- a/src/xercesc/validators/schema/SchemaValidator.hpp +++ b/src/xercesc/validators/schema/SchemaValidator.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.14 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.13 2003/01/20 19:04:48 knoaman * Fix for particle derivation checking. * @@ -135,19 +138,19 @@ #if !defined(SCHEMAVALIDATOR_HPP) #define SCHEMAVALIDATOR_HPP -#include <xercesc/framework/XMLBuffer.hpp> #include <xercesc/framework/XMLValidator.hpp> -#include <xercesc/util/RefVectorOf.hpp> +#include <xercesc/framework/XMLBuffer.hpp> #include <xercesc/util/ValueStackOf.hpp> -#include <xercesc/validators/common/GrammarResolver.hpp> #include <xercesc/validators/common/ContentSpecNode.hpp> -#include <xercesc/validators/datatype/DatatypeValidator.hpp> -#include <xercesc/validators/schema/SchemaElementDecl.hpp> #include <xercesc/validators/schema/SchemaGrammar.hpp> #include <xercesc/validators/schema/XSDErrorReporter.hpp> XERCES_CPP_NAMESPACE_BEGIN +class GrammarResolver; +class DatatypeValidator; +class SchemaElementDecl; + // // This is a derivative of the abstract validator interface. This class // implements a validator that supports standard XML Schema semantics. @@ -160,7 +163,11 @@ public: // ----------------------------------------------------------------------- // Constructors and Destructor // ----------------------------------------------------------------------- - SchemaValidator(XMLErrorReporter* const errReporter = 0); + SchemaValidator + ( + XMLErrorReporter* const errReporter// = 0 + , MemoryManager* const manager + ); virtual ~SchemaValidator(); // ----------------------------------------------------------------------- @@ -368,17 +375,16 @@ private: // fTypeStack // Stack of complex type declarations. // ----------------------------------------------------------------------- - SchemaGrammar* fSchemaGrammar; - GrammarResolver* fGrammarResolver; - QName* fXsiType; - bool fNil; - - DatatypeValidator* fXsiTypeValidator; - - XMLBuffer fDatatypeBuffer; - bool fTrailing; - bool fSeenId; - XSDErrorReporter fSchemaErrorReporter; + MemoryManager* fMemoryManager; + SchemaGrammar* fSchemaGrammar; + GrammarResolver* fGrammarResolver; + QName* fXsiType; + bool fNil; + DatatypeValidator* fXsiTypeValidator; + XMLBuffer fDatatypeBuffer; + bool fTrailing; + bool fSeenId; + XSDErrorReporter fSchemaErrorReporter; ValueStackOf<ComplexTypeInfo*>* fTypeStack; }; diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp index 55462867c..ac3c0eea4 100644 --- a/src/xercesc/validators/schema/TraverseSchema.cpp +++ b/src/xercesc/validators/schema/TraverseSchema.cpp @@ -195,7 +195,8 @@ TraverseSchema::TraverseSchema( DOMElement* const schemaRoot , XMLScanner* const xmlScanner , const XMLCh* const schemaURL , XMLEntityHandler* const entityHandler - , XMLErrorReporter* const errorReporter) + , XMLErrorReporter* const errorReporter + , MemoryManager* const manager) : fFullConstraintChecking(false) , fTargetNSURI(-1) , fEmptyNamespaceURI(-1) @@ -238,6 +239,8 @@ TraverseSchema::TraverseSchema( DOMElement* const schemaRoot , fParser(0) , fPreprocessedNodes(0) , fLocator(0) + , fMemoryManager(manager) + , fAttributeCheck(manager) { try { @@ -318,7 +321,7 @@ void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot, if (fComplexTypeRegistry == 0 ) { - fComplexTypeRegistry = new RefHashTableOf<ComplexTypeInfo>(29); + fComplexTypeRegistry = new (fMemoryManager) RefHashTableOf<ComplexTypeInfo>(29); fSchemaGrammar->setComplexTypeRegistry(fComplexTypeRegistry); } @@ -326,7 +329,7 @@ void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot, if (fGroupRegistry == 0 ) { - fGroupRegistry = new RefHashTableOf<XercesGroupInfo>(13); + fGroupRegistry = new (fMemoryManager) RefHashTableOf<XercesGroupInfo>(13); fSchemaGrammar->setGroupInfoRegistry(fGroupRegistry); } @@ -334,7 +337,7 @@ void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot, if (fAttGroupRegistry == 0 ) { - fAttGroupRegistry = new RefHashTableOf<XercesAttGroupInfo>(13); + fAttGroupRegistry = new (fMemoryManager) RefHashTableOf<XercesAttGroupInfo>(13); fSchemaGrammar->setAttGroupInfoRegistry(fAttGroupRegistry); } @@ -342,7 +345,7 @@ void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot, if (fAttributeDeclRegistry == 0) { - fAttributeDeclRegistry = new RefHashTableOf<XMLAttDef>(29); + fAttributeDeclRegistry = new (fMemoryManager) RefHashTableOf<XMLAttDef>(29); fSchemaGrammar->setAttributeDeclRegistry(fAttributeDeclRegistry); } @@ -350,7 +353,7 @@ void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot, if (fNamespaceScope == 0) { - fNamespaceScope = new NamespaceScope(); + fNamespaceScope = new (fMemoryManager) NamespaceScope(); fNamespaceScope->reset(fEmptyNamespaceURI); fSchemaGrammar->setNamespaceScope(fNamespaceScope); } @@ -359,7 +362,7 @@ void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot, if (!fValidSubstitutionGroups) { - fValidSubstitutionGroups = new RefHash2KeysTableOf<ElemVector>(29); + fValidSubstitutionGroups = new (fMemoryManager) RefHash2KeysTableOf<ElemVector>(29); fSchemaGrammar->setValidSubstitutionGroups(fValidSubstitutionGroups); } @@ -375,7 +378,7 @@ void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot, fAttributeCheck.setIDRefList(fSchemaGrammar->getIDRefList()); // Save current schema info - SchemaInfo* currInfo = new SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, + SchemaInfo* currInfo = new (fMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, fNamespaceScope->increaseDepth(), XMLString::replicate(schemaURL), fTargetNSURIString, schemaRoot); @@ -513,7 +516,7 @@ void TraverseSchema::preprocessInclude(const DOMElement* const elem) { // Parse input source // ------------------------------------------------------------------ if (!fParser) - fParser = new XSDDOMParser; + fParser = new (fMemoryManager) XSDDOMParser; fParser->setValidationScheme(XercesDOMParser::Val_Never); fParser->setDoNamespaces(true); @@ -565,7 +568,7 @@ void TraverseSchema::preprocessInclude(const DOMElement* const elem) { // -------------------------------------------------------- SchemaInfo* saveInfo = fSchemaInfo; - fSchemaInfo = new SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, + fSchemaInfo = new (fMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, fNamespaceScope->increaseDepth(), XMLString::replicate(includeURL), fTargetNSURIString, root); @@ -691,7 +694,7 @@ void TraverseSchema::preprocessImport(const DOMElement* const elem) { // Parse input source // ------------------------------------------------------------------ if (!fParser) - fParser = new XSDDOMParser; + fParser = new (fMemoryManager) XSDDOMParser; fParser->setValidationScheme(XercesDOMParser::Val_Never); fParser->setDoNamespaces(true); @@ -735,7 +738,7 @@ void TraverseSchema::preprocessImport(const DOMElement* const elem) { // Preprocess new schema // -------------------------------------------------------- SchemaInfo* saveInfo = fSchemaInfo; - fSchemaGrammar = new SchemaGrammar(); + fSchemaGrammar = new (fMemoryManager) SchemaGrammar(fMemoryManager); preprocessSchema(root, importURL); fPreprocessedNodes->put((void*) elem, fSchemaInfo); @@ -804,7 +807,7 @@ void TraverseSchema::preprocessRedefine(const DOMElement* const redefineElem) { } if (!fRedefineComponents) { - fRedefineComponents = new RefHash2KeysTableOf<XMLCh>(13, false); + fRedefineComponents = new (fMemoryManager) RefHash2KeysTableOf<XMLCh>(13, false); } SchemaInfo* redefinedInfo = fSchemaInfo; @@ -882,7 +885,7 @@ TraverseSchema::traverseChoiceSequence(const DOMElement* const elem, continue; } - contentSpecNode = new ContentSpecNode(eltQName, false); + contentSpecNode = new (fMemoryManager) ContentSpecNode(eltQName, false); seeParticle = true; } else if (XMLString::equals(childName, SchemaSymbols::fgELT_GROUP)) { @@ -905,7 +908,7 @@ TraverseSchema::traverseChoiceSequence(const DOMElement* const elem, continue; } - contentSpecNode = new ContentSpecNode(*contentSpecNode); + contentSpecNode = new (fMemoryManager) ContentSpecNode(*contentSpecNode); seeParticle = true; } else if (XMLString::equals(childName, SchemaSymbols::fgELT_CHOICE)) { @@ -942,13 +945,13 @@ TraverseSchema::traverseChoiceSequence(const DOMElement* const elem, right = contentSpecNode; } else { - left = new ContentSpecNode((ContentSpecNode::NodeTypes) modelGroupType, left, right); + left = new (fMemoryManager) ContentSpecNode((ContentSpecNode::NodeTypes) modelGroupType, left, right); right = contentSpecNode; } } if (hadContent) { - left = new ContentSpecNode((ContentSpecNode::NodeTypes) modelGroupType, left, right); + left = new (fMemoryManager) ContentSpecNode((ContentSpecNode::NodeTypes) modelGroupType, left, right); } return left; @@ -1163,7 +1166,7 @@ int TraverseSchema::traverseComplexTypeDecl(const DOMElement* const elem, // ------------------------------------------------------------------ // Register the type // ------------------------------------------------------------------ - typeInfo = new ComplexTypeInfo(); + typeInfo = new (fMemoryManager) ComplexTypeInfo(fMemoryManager); if(isAnonymous) { typeInfo->setAnonymous(); } @@ -1366,7 +1369,7 @@ TraverseSchema::traverseGroupDecl(const DOMElement* const elem, ContentSpecNode* specNode = 0; XercesGroupInfo* saveGroupInfo = fCurrentGroupInfo; - groupInfo = new XercesGroupInfo(); + groupInfo = new (fMemoryManager) XercesGroupInfo(fMemoryManager); fCurrentGroupStack->addElement(nameIndex); fCurrentGroupInfo = groupInfo; @@ -1512,7 +1515,7 @@ TraverseSchema::traverseAttributeGroupDecl(const DOMElement* const elem, // Process contents of global attributeGroups // ------------------------------------------------------------------ XercesAttGroupInfo* saveAttGroupInfo = fCurrentAttGroupInfo; - XercesAttGroupInfo* attGroupInfo = new XercesAttGroupInfo(); + XercesAttGroupInfo* attGroupInfo = new (fMemoryManager) XercesAttGroupInfo(fMemoryManager); fDeclStack->addElement(elem); fCurrentAttGroupInfo = attGroupInfo; @@ -1671,14 +1674,14 @@ TraverseSchema::traverseAny(const DOMElement* const elem) { if ((!nameSpace || !*nameSpace) || XMLString::equals(nameSpace, SchemaSymbols::fgATTVAL_TWOPOUNDANY)) { - retSpecNode = new ContentSpecNode(new QName(XMLUni::fgZeroLenString, + retSpecNode = new (fMemoryManager) ContentSpecNode(new (fMemoryManager) QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, fEmptyNamespaceURI), false); retSpecNode->setType(anyType); } else if (XMLString::equals(nameSpace, SchemaSymbols::fgATTVAL_TWOPOUNDOTHER)) { - retSpecNode = new ContentSpecNode(new QName(XMLUni::fgZeroLenString, + retSpecNode = new (fMemoryManager) ContentSpecNode(new (fMemoryManager) QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, fTargetNSURI), false); @@ -1720,7 +1723,7 @@ TraverseSchema::traverseAny(const DOMElement* const elem) { uriList.addElement(uriIndex); - firstNode = new ContentSpecNode(new QName(XMLUni::fgZeroLenString, + firstNode = new (fMemoryManager) ContentSpecNode(new (fMemoryManager) QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, uriIndex), false); @@ -1730,7 +1733,7 @@ TraverseSchema::traverseAny(const DOMElement* const elem) { secondNode = firstNode; } else { - secondNode = new ContentSpecNode(ContentSpecNode::Choice, secondNode, firstNode); + secondNode = new (fMemoryManager) ContentSpecNode(ContentSpecNode::Choice, secondNode, firstNode); } } @@ -1787,7 +1790,7 @@ TraverseSchema::traverseAll(const DOMElement* const elem) { continue; } - contentSpecNode = new ContentSpecNode(eltQName, false); + contentSpecNode = new (fMemoryManager) ContentSpecNode(eltQName, false); checkMinMax(contentSpecNode, child, All_Element); } else { @@ -1805,13 +1808,13 @@ TraverseSchema::traverseAll(const DOMElement* const elem) { right = contentSpecNode; } else { - left = new ContentSpecNode(ContentSpecNode::All, left, right); + left = new (fMemoryManager) ContentSpecNode(ContentSpecNode::All, left, right); right = contentSpecNode; } } if (hadContent) { - left = new ContentSpecNode(ContentSpecNode::All, left, right); + left = new (fMemoryManager) ContentSpecNode(ContentSpecNode::All, left, right); } return left; @@ -2114,7 +2117,7 @@ void TraverseSchema::traverseAttributeDecl(const DOMElement* const elem, } // create SchemaAttDef - SchemaAttDef* attDef = new SchemaAttDef(XMLUni::fgZeroLenString, name, uriIndex, attType); + SchemaAttDef* attDef = new (fMemoryManager) SchemaAttDef(XMLUni::fgZeroLenString, name, uriIndex, attType); attDef->setDatatypeValidator(dv); @@ -2209,7 +2212,7 @@ QName* TraverseSchema::traverseElementDecl(const DOMElement* const elem, if (topLevel) { if (fSchemaGrammar->getElemDecl(fTargetNSURI, name, 0, Grammar::TOP_LEVEL_SCOPE) != 0) { - return new QName(name, fTargetNSURI); + return new (fMemoryManager) QName(name, fTargetNSURI); } } @@ -2450,20 +2453,20 @@ QName* TraverseSchema::traverseElementDecl(const DOMElement* const elem, subsElements = aGrammar->getValidSubstitutionGroups()->get(subsElemBaseName, subsElemURI); if (subsElements) { - subsElements = new ValueVectorOf<SchemaElementDecl*>(*subsElements); + subsElements = new (fMemoryManager) ValueVectorOf<SchemaElementDecl*>(*subsElements); fValidSubstitutionGroups->put(subsElemBaseName, subsElemURI, subsElements); } else if (fSchemaInfo->circularImportExist(subsElemURI)) { aGrammar->getValidSubstitutionGroups()->put( - subsElemBaseName, subsElemURI, new ValueVectorOf<SchemaElementDecl*>(8)); + subsElemBaseName, subsElemURI, new (fMemoryManager) ValueVectorOf<SchemaElementDecl*>(8)); } } } if (!subsElements) { - subsElements = new ValueVectorOf<SchemaElementDecl*>(8); + subsElements = new (fMemoryManager) ValueVectorOf<SchemaElementDecl*>(8); fValidSubstitutionGroups->put(subsElemBaseName, subsElemURI, subsElements); } @@ -2585,7 +2588,7 @@ QName* TraverseSchema::traverseElementDecl(const DOMElement* const elem, elemDecl->setContentSpec(contentSpecNode); if (isAnyType) { - elemDecl->setAttWildCard(new SchemaAttDef(XMLUni::fgZeroLenString, + elemDecl->setAttWildCard(new (fMemoryManager) SchemaAttDef(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, fEmptyNamespaceURI, XMLAttDef::Any_Any, XMLAttDef::ProcessContents_Lax)); @@ -2607,7 +2610,7 @@ QName* TraverseSchema::traverseElementDecl(const DOMElement* const elem, else { if (!icNodes) { - icNodes = new ValueVectorOf<DOMElement*>(8); + icNodes = new (fMemoryManager) ValueVectorOf<DOMElement*>(8); } icNodes->addElement(ic); @@ -2621,9 +2624,9 @@ QName* TraverseSchema::traverseElementDecl(const DOMElement* const elem, if (!fIC_ElementsNS) { - fIC_ElementsNS = new RefHashTableOf<ElemVector>(13); - fIC_NamespaceDepthNS = new RefHashTableOf<ValueVectorOf<unsigned int> >(13); - fIC_NodeListNS = new RefHashTableOf<ValueVectorOf<DOMElement*> >(29, true, new HashPtr()); + fIC_ElementsNS = new (fMemoryManager) RefHashTableOf<ElemVector>(13); + fIC_NamespaceDepthNS = new (fMemoryManager) RefHashTableOf<ValueVectorOf<unsigned int> >(13); + fIC_NodeListNS = new (fMemoryManager) RefHashTableOf<ValueVectorOf<DOMElement*> >(29, true, new (fMemoryManager) HashPtr()); } if (fIC_ElementsNS->containsKey(fTargetNSURIString)) { @@ -2634,8 +2637,8 @@ QName* TraverseSchema::traverseElementDecl(const DOMElement* const elem, if (!fIC_Elements) { - fIC_Elements = new ValueVectorOf<SchemaElementDecl*>(8); - fIC_NamespaceDepth = new ValueVectorOf<unsigned int>(8); + fIC_Elements = new (fMemoryManager) ValueVectorOf<SchemaElementDecl*>(8); + fIC_NamespaceDepth = new (fMemoryManager) ValueVectorOf<unsigned int>(8); fIC_ElementsNS->put((void*) fTargetNSURIString, fIC_Elements); fIC_NamespaceDepthNS->put((void*) fTargetNSURIString, fIC_NamespaceDepth); } @@ -2646,7 +2649,7 @@ QName* TraverseSchema::traverseElementDecl(const DOMElement* const elem, } } - return new QName(*elemDecl->getElementName()); + return new (fMemoryManager) QName(*elemDecl->getElementName()); } const XMLCh* TraverseSchema::traverseNotationDecl(const DOMElement* const elem) { @@ -2904,7 +2907,7 @@ TraverseSchema::traverseByRestriction(const DOMElement* const rootElem, fAttributeCheck.checkAttributes(content, scope, this); if (facets == 0) { - facets = new RefHashTableOf<KVStringPair>(29, true); + facets = new (fMemoryManager) RefHashTableOf<KVStringPair>(29, true); } if (XMLString::equals(facetName, SchemaSymbols::fgELT_ENUMERATION)) { @@ -2914,7 +2917,7 @@ TraverseSchema::traverseByRestriction(const DOMElement* const rootElem, // to get the qualified name first before adding it to the // enum buffer if (!enums) { - enums = new RefArrayVectorOf<XMLCh>(8, true); + enums = new (fMemoryManager) RefArrayVectorOf<XMLCh>(8, true); } if (baseValidator->getType() == DatatypeValidator::NOTATION) { @@ -2965,7 +2968,7 @@ TraverseSchema::traverseByRestriction(const DOMElement* const rootElem, else { const XMLCh* facetStr = fStringPool->getValueForId(fStringPool->addOrFind(facetName)); - facets->put((void*) facetStr, new KVStringPair(facetStr, attValue)); + facets->put((void*) facetStr, new (fMemoryManager) KVStringPair(facetStr, attValue)); checkFixedFacet(content, facetStr, baseValidator, fixedFlag); } } @@ -2982,14 +2985,14 @@ TraverseSchema::traverseByRestriction(const DOMElement* const rootElem, if (!pattern.isEmpty()) { facets->put((void*) SchemaSymbols::fgELT_PATTERN, - new KVStringPair(SchemaSymbols::fgELT_PATTERN, pattern.getRawBuffer())); + new (fMemoryManager) KVStringPair(SchemaSymbols::fgELT_PATTERN, pattern.getRawBuffer())); } if (fixedFlag) { XMLString::binToText(fixedFlag, fixedFlagStr, 15, 10); facets->put((void*) SchemaSymbols::fgATT_FIXED, - new KVStringPair(SchemaSymbols::fgATT_FIXED, fixedFlagStr)); + new (fMemoryManager) KVStringPair(SchemaSymbols::fgATT_FIXED, fixedFlagStr)); } try { @@ -3026,7 +3029,7 @@ TraverseSchema::traverseByUnion(const DOMElement* const rootElem, int size = 1; const XMLCh* baseTypeName = getElementAttValue(contentElem, SchemaSymbols::fgATT_MEMBERTYPES); DatatypeValidator* baseValidator = 0; - RefVectorOf<DatatypeValidator>* validators = new RefVectorOf<DatatypeValidator>(4, false); + RefVectorOf<DatatypeValidator>* validators = new (fMemoryManager) RefVectorOf<DatatypeValidator>(4, false); Janitor<DVRefVector> janValidators(validators); DOMElement* content = 0; @@ -3343,13 +3346,13 @@ void TraverseSchema::traverseSimpleContentDecl(const XMLCh* const typeName, const XMLCh* attValue = content->getAttribute(SchemaSymbols::fgATT_VALUE); if (facets == 0) { - facets = new RefHashTableOf<KVStringPair>(29, true); + facets = new (fMemoryManager) RefHashTableOf<KVStringPair>(29, true); } if (XMLString::equals(facetName, SchemaSymbols::fgELT_ENUMERATION)) { if (!enums) { - enums = new RefArrayVectorOf<XMLCh>(8, true); + enums = new (fMemoryManager) RefArrayVectorOf<XMLCh>(8, true); } enums->addElement(XMLString::replicate(attValue)); @@ -3377,7 +3380,7 @@ void TraverseSchema::traverseSimpleContentDecl(const XMLCh* const typeName, const XMLCh* facetNameStr = fStringPool->getValueForId(fStringPool->addOrFind(facetName)); - facets->put((void*) facetNameStr, new KVStringPair(facetNameStr, attValue)); + facets->put((void*) facetNameStr, new (fMemoryManager) KVStringPair(facetNameStr, attValue)); checkFixedFacet(content, facetNameStr, typeInfo->getBaseDatatypeValidator(), fixedFlag); } } @@ -3392,7 +3395,7 @@ void TraverseSchema::traverseSimpleContentDecl(const XMLCh* const typeName, facets->put ( (void*) SchemaSymbols::fgELT_PATTERN, - new KVStringPair + new (fMemoryManager) KVStringPair ( SchemaSymbols::fgELT_PATTERN, pattern.getRawBuffer() @@ -3404,7 +3407,7 @@ void TraverseSchema::traverseSimpleContentDecl(const XMLCh* const typeName, XMLString::binToText(fixedFlag, fixedFlagStr, 15, 10); facets->put((void*) SchemaSymbols::fgATT_FIXED, - new KVStringPair(SchemaSymbols::fgATT_FIXED, fixedFlagStr)); + new (fMemoryManager) KVStringPair(SchemaSymbols::fgATT_FIXED, fixedFlagStr)); } try { @@ -3707,7 +3710,7 @@ SchemaAttDef* TraverseSchema::traverseAnyAttribute(const DOMElement* const elem) // ------------------------------------------------------------------ // Create wildcard attribute // ------------------------------------------------------------------ - SchemaAttDef* attDef = new SchemaAttDef(XMLUni::fgZeroLenString, + SchemaAttDef* attDef = new (fMemoryManager) SchemaAttDef(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, uriIndex, attType, attDefType); @@ -3751,7 +3754,7 @@ void TraverseSchema::traverseKey(const DOMElement* const icElem, if (!fIdentityConstraintNames) { - fIdentityConstraintNames = new RefHash2KeysTableOf<IdentityConstraint>(29, false); + fIdentityConstraintNames = new (fMemoryManager) RefHash2KeysTableOf<IdentityConstraint>(29, false); } if (fIdentityConstraintNames->containsKey(name, fTargetNSURI)) { @@ -3760,7 +3763,7 @@ void TraverseSchema::traverseKey(const DOMElement* const icElem, return; } - IC_Key* icKey = new IC_Key(name, elemDecl->getBaseName()); + IC_Key* icKey = new (fMemoryManager) IC_Key(name, elemDecl->getBaseName(), fMemoryManager); Janitor<IC_Key> janKey(icKey); fIdentityConstraintNames->put((void*) name, fTargetNSURI, icKey); @@ -3812,7 +3815,7 @@ void TraverseSchema::traverseUnique(const DOMElement* const icElem, } if (!fIdentityConstraintNames) { - fIdentityConstraintNames = new RefHash2KeysTableOf<IdentityConstraint>(29, false); + fIdentityConstraintNames = new (fMemoryManager) RefHash2KeysTableOf<IdentityConstraint>(29, false); } if (fIdentityConstraintNames->containsKey(name, fTargetNSURI)) { @@ -3821,7 +3824,7 @@ void TraverseSchema::traverseUnique(const DOMElement* const icElem, return; } - IC_Unique* icUnique = new IC_Unique(name, elemDecl->getBaseName()); + IC_Unique* icUnique = new (fMemoryManager) IC_Unique(name, elemDecl->getBaseName(), fMemoryManager); Janitor<IC_Unique> janUnique(icUnique); fIdentityConstraintNames->put((void*) name, fTargetNSURI, icUnique); @@ -3895,7 +3898,7 @@ void TraverseSchema::traverseKeyRef(const DOMElement* const icElem, return; } - IC_KeyRef* icKeyRef = new IC_KeyRef(name, elemDecl->getBaseName(), icKey); + IC_KeyRef* icKeyRef = new (fMemoryManager) IC_KeyRef(name, elemDecl->getBaseName(), icKey, fMemoryManager); Janitor<IC_KeyRef> janKeyRef(icKeyRef); fIdentityConstraintNames->put((void*) name, fTargetNSURI, icKeyRef); @@ -3992,8 +3995,8 @@ bool TraverseSchema::traverseIdentityConstraint(IdentityConstraint* const ic, // ------------------------------------------------------------------ try { - XercesXPath* sXPath = new XercesXPath(fBuffer.getRawBuffer(), fStringPool, fNamespaceScope, fEmptyNamespaceURI, true); - IC_Selector* icSelector = new IC_Selector(sXPath, ic); + XercesXPath* sXPath = new (fMemoryManager) XercesXPath(fBuffer.getRawBuffer(), fStringPool, fNamespaceScope, fEmptyNamespaceURI, true); + IC_Selector* icSelector = new (fMemoryManager) IC_Selector(sXPath, ic); ic->setSelector(icSelector); } catch (const XPathException& e) { @@ -4044,8 +4047,8 @@ bool TraverseSchema::traverseIdentityConstraint(IdentityConstraint* const ic, try { - XercesXPath* fieldXPath = new XercesXPath(fBuffer.getRawBuffer(), fStringPool, fNamespaceScope, fEmptyNamespaceURI); - IC_Field* icField = new IC_Field(fieldXPath, ic); + XercesXPath* fieldXPath = new (fMemoryManager) XercesXPath(fBuffer.getRawBuffer(), fStringPool, fNamespaceScope, fEmptyNamespaceURI); + IC_Field* icField = new (fMemoryManager) IC_Field(fieldXPath, ic); ic->addField(icField); } catch (const XPathException& e) { @@ -4497,7 +4500,7 @@ QName* TraverseSchema::processElementDeclRef(const DOMElement* const elem, const XMLCh* prefix = getPrefix(refName); const XMLCh* localPart = getLocalPart(refName); const XMLCh* uriStr = resolvePrefixToURI(elem, prefix); - QName* eltName = new QName(prefix , localPart, uriStr != 0 + QName* eltName = new (fMemoryManager) QName(prefix , localPart, uriStr != 0 ? fURIStringPool->addOrFind(uriStr) : fEmptyNamespaceURI); @@ -5197,10 +5200,15 @@ TraverseSchema::createSchemaElementDecl(const DOMElement* const elem, } const XMLCh* prefix = getPrefix(name); - SchemaElementDecl* elemDecl = - new SchemaElementDecl(prefix, name, uriIndex, - (SchemaElementDecl::ModelTypes) elemType, - enclosingScope); + SchemaElementDecl* elemDecl = new (fMemoryManager) SchemaElementDecl + ( + prefix + , name + , uriIndex + , (SchemaElementDecl::ModelTypes) elemType + , enclosingScope + , fMemoryManager + ); elemDecl->setFinalSet(finalSet); elemDecl->setBlockSet(blockSet); @@ -5352,7 +5360,7 @@ void TraverseSchema::processAttributeDeclRef(const DOMElement* const elem, bool required = XMLString::equals(useAttr,SchemaSymbols::fgATTVAL_REQUIRED); bool prohibited = XMLString::equals(useAttr,SchemaSymbols::fgATTVAL_PROHIBITED); QName* attQName = refAttDef->getAttName(); - SchemaAttDef* attDef = new SchemaAttDef(attQName->getPrefix(), + SchemaAttDef* attDef = new (fMemoryManager) SchemaAttDef(attQName->getPrefix(), attQName->getLocalPart(), attQName->getURI(), refAttValue, @@ -5598,7 +5606,7 @@ void TraverseSchema::processComplexContent(const DOMElement* const ctElem, int contentContext = specNode->hasAllContent() ? Group_Ref_With_All : Not_All_Context; - specNode = new ContentSpecNode(*specNode); + specNode = new (fMemoryManager) ContentSpecNode(*specNode); checkMinMax(specNode, childElem, contentContext); } } @@ -5665,7 +5673,7 @@ void TraverseSchema::processComplexContent(const DOMElement* const ctElem, if (!specNode) { if (baseSpecNode) { - specNode = new ContentSpecNode(*baseSpecNode); + specNode = new (fMemoryManager) ContentSpecNode(*baseSpecNode); typeInfo->setContentSpec(specNode); typeInfo->setAdoptContentSpec(true); } @@ -5688,8 +5696,8 @@ void TraverseSchema::processComplexContent(const DOMElement* const ctElem, typeInfo->setAdoptContentSpec(false); typeInfo->setContentSpec( - new ContentSpecNode(ContentSpecNode::Sequence, - new ContentSpecNode(*baseSpecNode), + new (fMemoryManager) ContentSpecNode(ContentSpecNode::Sequence, + new (fMemoryManager) ContentSpecNode(*baseSpecNode), specNode)); typeInfo->setAdoptContentSpec(true); } @@ -5704,7 +5712,7 @@ void TraverseSchema::processComplexContent(const DOMElement* const ctElem, // ------------------------------------------------------------- if (isBaseAnyType && typeDerivedBy == SchemaSymbols::XSD_EXTENSION) { - ContentSpecNode* anySpecNode = new ContentSpecNode(new QName(XMLUni::fgZeroLenString, + ContentSpecNode* anySpecNode = new (fMemoryManager) ContentSpecNode(new (fMemoryManager) QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, fEmptyNamespaceURI), false); @@ -5720,7 +5728,7 @@ void TraverseSchema::processComplexContent(const DOMElement* const ctElem, else { typeInfo->setAdoptContentSpec(false); - typeInfo->setContentSpec(new ContentSpecNode(ContentSpecNode::Sequence, anySpecNode, specNode)); + typeInfo->setContentSpec(new (fMemoryManager) ContentSpecNode(ContentSpecNode::Sequence, anySpecNode, specNode)); typeInfo->setAdoptContentSpec(true); if (!isMixed) { @@ -5740,7 +5748,7 @@ void TraverseSchema::processComplexContent(const DOMElement* const ctElem, else { // add #PCDATA leaf and set its minOccurs to 0 ContentSpecNode* pcdataNode = - new ContentSpecNode(new QName(XMLUni::fgZeroLenString, + new (fMemoryManager) ContentSpecNode(new (fMemoryManager) QName(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, XMLElementDecl::fgPCDataElemId), false); @@ -6019,7 +6027,7 @@ void TraverseSchema::processAttributes(const DOMElement* const elem, if (!attGroupWildCard) { - attGroupWildCard = new SchemaAttDef(attGroupInfo->anyAttributeAt(0)); + attGroupWildCard = new (fMemoryManager) SchemaAttDef(attGroupInfo->anyAttributeAt(0)); for (unsigned int i= 1; i < anyAttCount; i++) { attWildCardIntersection(attGroupWildCard, attGroupInfo->anyAttributeAt(i)); @@ -6032,7 +6040,7 @@ void TraverseSchema::processAttributes(const DOMElement* const elem, attWildCardIntersection(completeWildCard, attGroupWildCard); } else { - completeWildCard = new SchemaAttDef(attGroupWildCard); + completeWildCard = new (fMemoryManager) SchemaAttDef(attGroupWildCard); janCompleteWildCard.reset(completeWildCard); } } @@ -6062,7 +6070,7 @@ void TraverseSchema::processAttributes(const DOMElement* const elem, if (isBaseAnyType) { - baseAttWildCard = new SchemaAttDef(XMLUni::fgZeroLenString, + baseAttWildCard = new (fMemoryManager) SchemaAttDef(XMLUni::fgZeroLenString, XMLUni::fgZeroLenString, fEmptyNamespaceURI, XMLAttDef::Any_Any, XMLAttDef::ProcessContents_Lax); @@ -6098,7 +6106,7 @@ void TraverseSchema::processAttributes(const DOMElement* const elem, } else { - SchemaAttDef* newWildCard = new SchemaAttDef(baseAttWildCard); + SchemaAttDef* newWildCard = new (fMemoryManager) SchemaAttDef(baseAttWildCard); typeInfo->setAttWildCard(newWildCard); } } @@ -6145,7 +6153,7 @@ void TraverseSchema::processAttributes(const DOMElement* const elem, if (attDef.getDefaultType() != XMLAttDef::Prohibited) { - SchemaAttDef* newAttDef = new SchemaAttDef(attName->getPrefix(), + SchemaAttDef* newAttDef = new (fMemoryManager) SchemaAttDef(attName->getPrefix(), attName->getLocalPart(), attName->getURI(), attDef.getValue(), @@ -6203,13 +6211,13 @@ InputSource* TraverseSchema::resolveSchemaLocation(const XMLCh* const loc) { else { if (fScanner->getStandardUriConformant() && urlTmp.hasInvalidChar()) ThrowXML(MalformedURLException, XMLExcepts::URL_MalformedURL); - srcToFill = new URLInputSource(urlTmp); + srcToFill = new (fMemoryManager) URLInputSource(urlTmp); } } catch(const MalformedURLException& e) { // Its not a URL, so lets assume its a local file name if non-standard URI is allowed if (!fScanner->getStandardUriConformant()) - srcToFill = new LocalFileInputSource(fSchemaInfo->getCurrentSchemaURL(),normalizedURI); + srcToFill = new (fMemoryManager) LocalFileInputSource(fSchemaInfo->getCurrentSchemaURL(),normalizedURI); else throw e; } @@ -6337,7 +6345,7 @@ TraverseSchema::buildValidSubstitutionListB(const DOMElement* const elem, break; } - validSubsElements = new ValueVectorOf<SchemaElementDecl*>(*validSubsElements); + validSubsElements = new (fMemoryManager) ValueVectorOf<SchemaElementDecl*>(*validSubsElements); fValidSubstitutionGroups->put((void*) chainElemName, chainElemURI, validSubsElements); } @@ -6401,7 +6409,7 @@ TraverseSchema::buildValidSubstitutionListF(const DOMElement* const elem, return; } - validSubs = new ValueVectorOf<SchemaElementDecl*>(*validSubs); + validSubs = new (fMemoryManager) ValueVectorOf<SchemaElementDecl*>(*validSubs); fValidSubstitutionGroups->put((void*) subsElemName, subsElemURI, validSubs); } @@ -6776,7 +6784,7 @@ void TraverseSchema::copyAttGroupAttributes(const DOMElement* const elem, typeInfo->setAttWithTypeId(true); } - typeInfo->addAttDef(new SchemaAttDef(attDef)); + typeInfo->addAttDef(new (fMemoryManager) SchemaAttDef(attDef)); if (toAttGroup) { toAttGroup->addAttDef(attDef, true); @@ -7390,7 +7398,7 @@ bool TraverseSchema::openRedefinedSchema(const DOMElement* const redefineElem) { // Parse input source // ------------------------------------------------------------------ if (!fParser) - fParser = new XSDDOMParser; + fParser = new (fMemoryManager) XSDDOMParser; fParser->setValidationScheme(XercesDOMParser::Val_Never); fParser->setDoNamespaces(true); @@ -7446,7 +7454,7 @@ bool TraverseSchema::openRedefinedSchema(const DOMElement* const redefineElem) { // Update schema information with redefined schema // -------------------------------------------------------- redefSchemaInfo = fSchemaInfo; - fSchemaInfo = new SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, + fSchemaInfo = new (fMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, fNamespaceScope->increaseDepth(), XMLString::replicate(includeURL), fTargetNSURIString, root); @@ -7917,18 +7925,21 @@ void TraverseSchema::init() { fDatatypeRegistry = fSchemaGrammar->getDatatypeRegistry(); fStringPool = fGrammarResolver->getStringPool(); fEmptyNamespaceURI = fScanner->getEmptyNamespaceId(); - fCurrentTypeNameStack = new ValueVectorOf<unsigned int>(8); - fCurrentGroupStack = new ValueVectorOf<unsigned int>(8); + fCurrentTypeNameStack = new (fMemoryManager) ValueVectorOf<unsigned int>(8); + fCurrentGroupStack = new (fMemoryManager) ValueVectorOf<unsigned int>(8); - fGlobalDeclarations = new ValueVectorOf<unsigned int>*[ENUM_ELT_SIZE]; + fGlobalDeclarations = (ValueVectorOf<unsigned int>**) fMemoryManager->allocate + ( + ENUM_ELT_SIZE * sizeof(ValueVectorOf<unsigned int>*) + );//new ValueVectorOf<unsigned int>*[ENUM_ELT_SIZE]; for(unsigned int i=0; i < ENUM_ELT_SIZE; i++) - fGlobalDeclarations[i] = new ValueVectorOf<unsigned int>(8); + fGlobalDeclarations[i] = new (fMemoryManager) ValueVectorOf<unsigned int>(8); - fNotationRegistry = new RefHash2KeysTableOf<XMLCh>(13, false); - fSchemaInfoList = new RefHash2KeysTableOf<SchemaInfo>(29); - fPreprocessedNodes = new RefHashTableOf<SchemaInfo>(29, false, new HashPtr()); + fNotationRegistry = new (fMemoryManager) RefHash2KeysTableOf<XMLCh>(13, false); + fSchemaInfoList = new (fMemoryManager) RefHash2KeysTableOf<SchemaInfo>(29); + fPreprocessedNodes = new (fMemoryManager) RefHashTableOf<SchemaInfo>(29, false, new (fMemoryManager) HashPtr()); fLocator = new XSDLocator(); - fDeclStack = new ValueVectorOf<const DOMElement*>(16); + fDeclStack = new (fMemoryManager) ValueVectorOf<const DOMElement*>(16); } void TraverseSchema::cleanUp() { @@ -7940,7 +7951,7 @@ void TraverseSchema::cleanUp() { for(unsigned int i=0; i < ENUM_ELT_SIZE; i++) delete fGlobalDeclarations[i]; - delete [] fGlobalDeclarations; + fMemoryManager->deallocate(fGlobalDeclarations);//delete [] fGlobalDeclarations; delete fNotationRegistry; delete fRedefineComponents; diff --git a/src/xercesc/validators/schema/TraverseSchema.hpp b/src/xercesc/validators/schema/TraverseSchema.hpp index 19d39f921..49cfd7016 100644 --- a/src/xercesc/validators/schema/TraverseSchema.hpp +++ b/src/xercesc/validators/schema/TraverseSchema.hpp @@ -107,7 +107,7 @@ class XSDDOMParser; class XMLErrorReporter; -class VALIDATORS_EXPORT TraverseSchema +class VALIDATORS_EXPORT TraverseSchema : public XMemory { public: // ----------------------------------------------------------------------- @@ -123,6 +123,7 @@ public: , const XMLCh* const schemaURL , XMLEntityHandler* const entityHandler , XMLErrorReporter* const errorReporter + , MemoryManager* const manager ); ~TraverseSchema(); @@ -773,10 +774,11 @@ private: RefHash2KeysTableOf<IdentityConstraint>* fIdentityConstraintNames; RefHash2KeysTableOf<ElemVector>* fValidSubstitutionGroups; RefHash2KeysTableOf<SchemaInfo>* fSchemaInfoList; - GeneralAttributeCheck fAttributeCheck; XSDDOMParser* fParser; XSDErrorReporter fXSDErrorReporter; XSDLocator* fLocator; + MemoryManager* fMemoryManager; + GeneralAttributeCheck fAttributeCheck; friend class GeneralAttributeCheck; }; diff --git a/src/xercesc/validators/schema/XSDDOMParser.cpp b/src/xercesc/validators/schema/XSDDOMParser.cpp index e793fa48c..ced05a3a9 100644 --- a/src/xercesc/validators/schema/XSDDOMParser.cpp +++ b/src/xercesc/validators/schema/XSDDOMParser.cpp @@ -72,8 +72,9 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // XSDDOMParser: Constructors and Destructor // --------------------------------------------------------------------------- -XSDDOMParser::XSDDOMParser(XMLValidator* const valToAdopt) : - XercesDOMParser(valToAdopt) +XSDDOMParser::XSDDOMParser( XMLValidator* const valToAdopt + , MemoryManager* const manager) : + XercesDOMParser(valToAdopt, manager) , fSawFatal(false) , fUserErrorReporter(0) { diff --git a/src/xercesc/validators/schema/XSDDOMParser.hpp b/src/xercesc/validators/schema/XSDDOMParser.hpp index c54d8e357..991f3435d 100644 --- a/src/xercesc/validators/schema/XSDDOMParser.hpp +++ b/src/xercesc/validators/schema/XSDDOMParser.hpp @@ -93,7 +93,11 @@ public : * @param valToAdopt Pointer to the validator instance to use. The * parser is responsible for freeing the memory. */ - XSDDOMParser(XMLValidator* const valToAdopt = 0); + XSDDOMParser + ( + XMLValidator* const valToAdopt = 0 + , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager + ); /** * Destructor diff --git a/src/xercesc/validators/schema/XSDErrorReporter.hpp b/src/xercesc/validators/schema/XSDErrorReporter.hpp index bd2dea4df..0554d9f87 100644 --- a/src/xercesc/validators/schema/XSDErrorReporter.hpp +++ b/src/xercesc/validators/schema/XSDErrorReporter.hpp @@ -62,7 +62,7 @@ #if !defined(XSDERRORREPORTER_HPP) #define XSDERRORREPORTER_HPP -#include <xercesc/util/XercesDefs.hpp> +#include <xercesc/util/XMemory.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -73,7 +73,7 @@ class XMLErrorReporter; /** * This class reports schema errors */ -class VALIDATORS_EXPORT XSDErrorReporter +class VALIDATORS_EXPORT XSDErrorReporter : public XMemory { public: // ----------------------------------------------------------------------- diff --git a/src/xercesc/validators/schema/XercesAttGroupInfo.cpp b/src/xercesc/validators/schema/XercesAttGroupInfo.cpp index 64b05d365..97b12cf76 100644 --- a/src/xercesc/validators/schema/XercesAttGroupInfo.cpp +++ b/src/xercesc/validators/schema/XercesAttGroupInfo.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/11/04 14:49:42 tng * C++ Namespace Support. * @@ -90,11 +93,12 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // XercesAttGroupInfo: Constructors and Destructor // --------------------------------------------------------------------------- -XercesAttGroupInfo::XercesAttGroupInfo() +XercesAttGroupInfo::XercesAttGroupInfo(MemoryManager* const manager) : fTypeWithId(false) , fAttributes(0) , fAnyAttributes(0) , fCompleteWildCard(0) + , fMemoryManager(manager) { } diff --git a/src/xercesc/validators/schema/XercesAttGroupInfo.hpp b/src/xercesc/validators/schema/XercesAttGroupInfo.hpp index 0ee1ec505..bed00b681 100644 --- a/src/xercesc/validators/schema/XercesAttGroupInfo.hpp +++ b/src/xercesc/validators/schema/XercesAttGroupInfo.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -76,13 +76,13 @@ XERCES_CPP_NAMESPACE_BEGIN -class VALIDATORS_EXPORT XercesAttGroupInfo +class VALIDATORS_EXPORT XercesAttGroupInfo : public XMemory { public: // ----------------------------------------------------------------------- // Public Constructors/Destructor // ----------------------------------------------------------------------- - XercesAttGroupInfo(); + XercesAttGroupInfo(MemoryManager* const manager); ~XercesAttGroupInfo(); // ----------------------------------------------------------------------- @@ -126,6 +126,7 @@ private: RefVectorOf<SchemaAttDef>* fAttributes; RefVectorOf<SchemaAttDef>* fAnyAttributes; SchemaAttDef* fCompleteWildCard; + MemoryManager* fMemoryManager; }; // --------------------------------------------------------------------------- @@ -212,11 +213,11 @@ inline void XercesAttGroupInfo::addAttDef(SchemaAttDef* const toAdd, const bool toClone) { if (!fAttributes) { - fAttributes = new RefVectorOf<SchemaAttDef>(4); + fAttributes = new (fMemoryManager) RefVectorOf<SchemaAttDef>(4); } if (toClone) { - fAttributes->addElement(new SchemaAttDef(toAdd)); + fAttributes->addElement(new (fMemoryManager) SchemaAttDef(toAdd)); } else { fAttributes->addElement(toAdd); @@ -227,11 +228,11 @@ inline void XercesAttGroupInfo::addAnyAttDef(SchemaAttDef* const toAdd, const bool toClone) { if (!fAnyAttributes) { - fAnyAttributes = new RefVectorOf<SchemaAttDef>(2); + fAnyAttributes = new (fMemoryManager) RefVectorOf<SchemaAttDef>(2); } if (toClone) { - fAnyAttributes->addElement(new SchemaAttDef(toAdd)); + fAnyAttributes->addElement(new (fMemoryManager) SchemaAttDef(toAdd)); } else { fAnyAttributes->addElement(toAdd); diff --git a/src/xercesc/validators/schema/XercesGroupInfo.cpp b/src/xercesc/validators/schema/XercesGroupInfo.cpp index 796383d7f..db512c5cb 100644 --- a/src/xercesc/validators/schema/XercesGroupInfo.cpp +++ b/src/xercesc/validators/schema/XercesGroupInfo.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:57:27 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2002/11/04 14:49:42 tng * C++ Namespace Support. * @@ -88,7 +91,7 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // XercesGroupInfo: Constructors and Destructor // --------------------------------------------------------------------------- -XercesGroupInfo::XercesGroupInfo() +XercesGroupInfo::XercesGroupInfo(MemoryManager* const manager) : fCheckElementConsistency(true) , fScope(-1) , fContentSpec(0) @@ -96,7 +99,7 @@ XercesGroupInfo::XercesGroupInfo() , fBaseGroup(0) , fLocator(0) { - fElements = new RefVectorOf<SchemaElementDecl>(4, false); + fElements = new (manager) RefVectorOf<SchemaElementDecl>(4, false); } diff --git a/src/xercesc/validators/schema/XercesGroupInfo.hpp b/src/xercesc/validators/schema/XercesGroupInfo.hpp index bc499929d..d17e242da 100644 --- a/src/xercesc/validators/schema/XercesGroupInfo.hpp +++ b/src/xercesc/validators/schema/XercesGroupInfo.hpp @@ -83,13 +83,13 @@ class ContentSpecNode; class XSDLocator; -class VALIDATORS_EXPORT XercesGroupInfo +class VALIDATORS_EXPORT XercesGroupInfo : public XMemory { public: // ----------------------------------------------------------------------- // Public Constructors/Destructor // ----------------------------------------------------------------------- - XercesGroupInfo(); + XercesGroupInfo(MemoryManager* const manager); ~XercesGroupInfo(); // ----------------------------------------------------------------------- diff --git a/src/xercesc/validators/schema/identity/FieldActivator.cpp b/src/xercesc/validators/schema/identity/FieldActivator.cpp index 9fc0fa301..96940197e 100644 --- a/src/xercesc/validators/schema/identity/FieldActivator.cpp +++ b/src/xercesc/validators/schema/identity/FieldActivator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/11/04 14:47:41 tng * C++ Namespace Support. * @@ -84,15 +87,18 @@ XERCES_CPP_NAMESPACE_BEGIN // FieldActivator: Constructors and Destructor // --------------------------------------------------------------------------- FieldActivator::FieldActivator(ValueStoreCache* const valueStoreCache, - XPathMatcherStack* const matcherStack) + XPathMatcherStack* const matcherStack, + MemoryManager* const manager) : fValueStoreCache(valueStoreCache) , fMatcherStack(matcherStack) + , fMemoryManager(manager) { } FieldActivator::FieldActivator(const FieldActivator& other) : fValueStoreCache(other.fValueStoreCache) , fMatcherStack(other.fMatcherStack) + , fMemoryManager(XMLPlatformUtils::fgMemoryManager) { } @@ -121,7 +127,7 @@ FieldActivator& FieldActivator::operator =(const FieldActivator& other) { XPathMatcher* FieldActivator::activateField(IC_Field* const field, const int initialDepth) { ValueStore* valueStore = fValueStoreCache->getValueStoreFor(field, initialDepth); - XPathMatcher* matcher = field->createMatcher(valueStore); + XPathMatcher* matcher = field->createMatcher(valueStore, fMemoryManager); field->setMayMatch(true); fMatcherStack->addMatcher(matcher); diff --git a/src/xercesc/validators/schema/identity/FieldActivator.hpp b/src/xercesc/validators/schema/identity/FieldActivator.hpp index 79ba13fc8..49f5444ff 100644 --- a/src/xercesc/validators/schema/identity/FieldActivator.hpp +++ b/src/xercesc/validators/schema/identity/FieldActivator.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -69,7 +69,7 @@ // --------------------------------------------------------------------------- // Includes // --------------------------------------------------------------------------- -#include <xercesc/util/XercesDefs.hpp> +#include <xercesc/util/XMemory.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -83,14 +83,15 @@ class IC_Field; class XPathMatcherStack; -class VALIDATORS_EXPORT FieldActivator +class VALIDATORS_EXPORT FieldActivator : public XMemory { public: // ----------------------------------------------------------------------- // Constructors/Destructor // ----------------------------------------------------------------------- FieldActivator(ValueStoreCache* const valueStoreCache, - XPathMatcherStack* const matcherStack); + XPathMatcherStack* const matcherStack, + MemoryManager* const manager); FieldActivator(const FieldActivator& other); ~FieldActivator(); @@ -132,6 +133,7 @@ private: // ----------------------------------------------------------------------- ValueStoreCache* fValueStoreCache; XPathMatcherStack* fMatcherStack; + MemoryManager* fMemoryManager; }; diff --git a/src/xercesc/validators/schema/identity/FieldValueMap.cpp b/src/xercesc/validators/schema/identity/FieldValueMap.cpp index 2b99c9cf7..79410c5dc 100644 --- a/src/xercesc/validators/schema/identity/FieldValueMap.cpp +++ b/src/xercesc/validators/schema/identity/FieldValueMap.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/12/18 14:17:59 gareth * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf. * @@ -80,10 +83,11 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // FieldValueMap: Constructors and Destructor // --------------------------------------------------------------------------- -FieldValueMap::FieldValueMap() +FieldValueMap::FieldValueMap(MemoryManager* const manager) : fFields(0) , fValidators(0) , fValues(0) + , fMemoryManager(manager) { } @@ -91,15 +95,16 @@ FieldValueMap::FieldValueMap(const FieldValueMap& other) : fFields(0) , fValidators(0) , fValues(0) + , fMemoryManager(XMLPlatformUtils::fgMemoryManager) { try { if (other.fFields) { unsigned int valuesSize = other.fValues->size(); - fFields = new ValueVectorOf<IC_Field*>(*(other.fFields)); - fValidators = new ValueVectorOf<DatatypeValidator*>(*(other.fValidators)); - fValues = new RefArrayVectorOf<XMLCh>(other.fFields->curCapacity()); + fFields = new (fMemoryManager) ValueVectorOf<IC_Field*>(*(other.fFields)); + fValidators = new (fMemoryManager) ValueVectorOf<DatatypeValidator*>(*(other.fValidators)); + fValues = new (fMemoryManager) RefArrayVectorOf<XMLCh>(other.fFields->curCapacity()); for (unsigned int i=0; i<valuesSize; i++) { fValues->addElement(XMLString::replicate(other.fValues->elementAt(i))); diff --git a/src/xercesc/validators/schema/identity/FieldValueMap.hpp b/src/xercesc/validators/schema/identity/FieldValueMap.hpp index 0ee9fd1f5..12f1c54bc 100644 --- a/src/xercesc/validators/schema/identity/FieldValueMap.hpp +++ b/src/xercesc/validators/schema/identity/FieldValueMap.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -82,13 +82,13 @@ class IC_Field; class DatatypeValidator; -class VALIDATORS_EXPORT FieldValueMap +class VALIDATORS_EXPORT FieldValueMap : public XMemory { public: // ----------------------------------------------------------------------- // Constructors/Destructor // ----------------------------------------------------------------------- - FieldValueMap(); + FieldValueMap(MemoryManager* const manager); FieldValueMap(const FieldValueMap& other); ~FieldValueMap(); @@ -125,6 +125,7 @@ private: ValueVectorOf<IC_Field*>* fFields; ValueVectorOf<DatatypeValidator*>* fValidators; RefArrayVectorOf<XMLCh>* fValues; + MemoryManager* fMemoryManager; }; @@ -198,9 +199,9 @@ inline void FieldValueMap::put(IC_Field* const key, const XMLCh* const value) { if (!fFields) { - fFields = new ValueVectorOf<IC_Field*>(4); - fValidators = new ValueVectorOf<DatatypeValidator*>(4); - fValues = new RefArrayVectorOf<XMLCh>(4); + fFields = new (fMemoryManager) ValueVectorOf<IC_Field*>(4); + fValidators = new (fMemoryManager) ValueVectorOf<DatatypeValidator*>(4); + fValues = new (fMemoryManager) RefArrayVectorOf<XMLCh>(4); } int keyIndex = indexOf(key); diff --git a/src/xercesc/validators/schema/identity/IC_Field.cpp b/src/xercesc/validators/schema/identity/IC_Field.cpp index 813fe5f72..145c02dfb 100644 --- a/src/xercesc/validators/schema/identity/IC_Field.cpp +++ b/src/xercesc/validators/schema/identity/IC_Field.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2003/01/13 16:30:19 knoaman * [Bug 14469] Validator doesn't enforce xsd:key. * @@ -85,9 +88,11 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // FieldMatcher: Constructors and Destructor // --------------------------------------------------------------------------- -FieldMatcher::FieldMatcher(XercesXPath* const xpath, IC_Field* const aField, - ValueStore* const valueStore) - : XPathMatcher(xpath, 0) +FieldMatcher::FieldMatcher(XercesXPath* const xpath, + IC_Field* const aField, + ValueStore* const valueStore, + MemoryManager* const manager) + : XPathMatcher(xpath, (IdentityConstraint*) 0, manager) , fField(aField) , fValueStore(valueStore) { @@ -144,9 +149,10 @@ bool IC_Field::operator!= (const IC_Field& other) const { // --------------------------------------------------------------------------- // IC_Field: Factory methods // --------------------------------------------------------------------------- -XPathMatcher* IC_Field::createMatcher(ValueStore* const valueStore) { +XPathMatcher* IC_Field::createMatcher(ValueStore* const valueStore, + MemoryManager* const manager) { - return new FieldMatcher(fXPath, this, valueStore); + return new (manager) FieldMatcher(fXPath, this, valueStore, manager); } XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/validators/schema/identity/IC_Field.hpp b/src/xercesc/validators/schema/identity/IC_Field.hpp index 1a60b59c4..79f804c5e 100644 --- a/src/xercesc/validators/schema/identity/IC_Field.hpp +++ b/src/xercesc/validators/schema/identity/IC_Field.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -75,7 +75,7 @@ XERCES_CPP_NAMESPACE_BEGIN class ValueStore; -class VALIDATORS_EXPORT IC_Field +class VALIDATORS_EXPORT IC_Field : public XMemory { public: // ----------------------------------------------------------------------- @@ -106,7 +106,8 @@ public: // ----------------------------------------------------------------------- // Factory methods // ----------------------------------------------------------------------- - XPathMatcher* createMatcher(ValueStore* const valueStore); + XPathMatcher* createMatcher(ValueStore* const valueStore, + MemoryManager* const manager); private: // ----------------------------------------------------------------------- @@ -148,8 +149,10 @@ private: // ----------------------------------------------------------------------- // Constructors/Destructor // ----------------------------------------------------------------------- - FieldMatcher(XercesXPath* const anXPath, IC_Field* const aField, - ValueStore* const valueStore); + FieldMatcher(XercesXPath* const anXPath, + IC_Field* const aField, + ValueStore* const valueStore, + MemoryManager* const manager); // ----------------------------------------------------------------------- // Unimplemented contstructors and operators diff --git a/src/xercesc/validators/schema/identity/IC_Key.cpp b/src/xercesc/validators/schema/identity/IC_Key.cpp index fe0702bda..088451bae 100644 --- a/src/xercesc/validators/schema/identity/IC_Key.cpp +++ b/src/xercesc/validators/schema/identity/IC_Key.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:47:41 tng * C++ Namespace Support. * @@ -78,8 +81,9 @@ XERCES_CPP_NAMESPACE_BEGIN // IC_Key: Constructors and Destructor // --------------------------------------------------------------------------- IC_Key::IC_Key(const XMLCh* const identityConstraintName, - const XMLCh* const elemName) - : IdentityConstraint(identityConstraintName, elemName) + const XMLCh* const elemName, + MemoryManager* const manager) + : IdentityConstraint(identityConstraintName, elemName, manager) { } diff --git a/src/xercesc/validators/schema/identity/IC_Key.hpp b/src/xercesc/validators/schema/identity/IC_Key.hpp index 20f582445..d07cc7076 100644 --- a/src/xercesc/validators/schema/identity/IC_Key.hpp +++ b/src/xercesc/validators/schema/identity/IC_Key.hpp @@ -76,7 +76,8 @@ public: // Constructors/Destructor // ----------------------------------------------------------------------- IC_Key(const XMLCh* const identityConstraintName, - const XMLCh* const elemName); + const XMLCh* const elemName, + MemoryManager* const manager); ~IC_Key(); // ----------------------------------------------------------------------- diff --git a/src/xercesc/validators/schema/identity/IC_KeyRef.cpp b/src/xercesc/validators/schema/identity/IC_KeyRef.cpp index 89b4b77dd..129aab7f4 100644 --- a/src/xercesc/validators/schema/identity/IC_KeyRef.cpp +++ b/src/xercesc/validators/schema/identity/IC_KeyRef.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:47:41 tng * C++ Namespace Support. * @@ -79,8 +82,9 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- IC_KeyRef::IC_KeyRef(const XMLCh* const identityConstraintName, const XMLCh* const elemName, - IdentityConstraint* const icKey) - : IdentityConstraint(identityConstraintName, elemName) + IdentityConstraint* const icKey, + MemoryManager* const manager) + : IdentityConstraint(identityConstraintName, elemName, manager) , fKey(icKey) { } diff --git a/src/xercesc/validators/schema/identity/IC_KeyRef.hpp b/src/xercesc/validators/schema/identity/IC_KeyRef.hpp index f17d6ddeb..2814af953 100644 --- a/src/xercesc/validators/schema/identity/IC_KeyRef.hpp +++ b/src/xercesc/validators/schema/identity/IC_KeyRef.hpp @@ -77,7 +77,8 @@ public: // ----------------------------------------------------------------------- IC_KeyRef(const XMLCh* const identityConstraintName, const XMLCh* const elemName, - IdentityConstraint* const icKey); + IdentityConstraint* const icKey, + MemoryManager* const manager); ~IC_KeyRef(); // ----------------------------------------------------------------------- diff --git a/src/xercesc/validators/schema/identity/IC_Selector.cpp b/src/xercesc/validators/schema/identity/IC_Selector.cpp index 25954f93a..fb8d281ac 100644 --- a/src/xercesc/validators/schema/identity/IC_Selector.cpp +++ b/src/xercesc/validators/schema/identity/IC_Selector.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.5 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.4 2003/01/13 16:30:19 knoaman * [Bug 14469] Validator doesn't enforce xsd:key. * @@ -96,8 +99,9 @@ XERCES_CPP_NAMESPACE_BEGIN SelectorMatcher::SelectorMatcher(XercesXPath* const xpath, IC_Selector* const selector, FieldActivator* const fieldActivator, - const int initialDepth) - : XPathMatcher(xpath, selector->getIdentityConstraint()) + const int initialDepth, + MemoryManager* const manager) + : XPathMatcher(xpath, selector->getIdentityConstraint(), manager) , fInitialDepth(initialDepth) , fElementDepth(0) , fMatchedDepth(-1) @@ -188,9 +192,11 @@ bool IC_Selector::operator !=(const IC_Selector& other) const { // --------------------------------------------------------------------------- // IC_Selector: Factory methods // --------------------------------------------------------------------------- -XPathMatcher* IC_Selector::createMatcher(FieldActivator* const fieldActivator, const int initialDepth) { +XPathMatcher* IC_Selector::createMatcher(FieldActivator* const fieldActivator, + const int initialDepth, + MemoryManager* const manager) { - return new SelectorMatcher(fXPath, this, fieldActivator, initialDepth); + return new (manager) SelectorMatcher(fXPath, this, fieldActivator, initialDepth, manager); } XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/validators/schema/identity/IC_Selector.hpp b/src/xercesc/validators/schema/identity/IC_Selector.hpp index 395277a83..8a3b28c3c 100644 --- a/src/xercesc/validators/schema/identity/IC_Selector.hpp +++ b/src/xercesc/validators/schema/identity/IC_Selector.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -75,7 +75,7 @@ XERCES_CPP_NAMESPACE_BEGIN class FieldActivator; -class VALIDATORS_EXPORT IC_Selector +class VALIDATORS_EXPORT IC_Selector : public XMemory { public: // ----------------------------------------------------------------------- @@ -100,7 +100,9 @@ public: // ----------------------------------------------------------------------- // Factory methods // ----------------------------------------------------------------------- - XPathMatcher* createMatcher(FieldActivator* const fieldActivator, const int initialDepth); + XPathMatcher* createMatcher(FieldActivator* const fieldActivator, + const int initialDepth, + MemoryManager* const manager); private: // ----------------------------------------------------------------------- @@ -143,8 +145,11 @@ private: // ----------------------------------------------------------------------- // Constructors/Destructor // ----------------------------------------------------------------------- - SelectorMatcher(XercesXPath* const anXPath, IC_Selector* const selector, - FieldActivator* const fieldActivator, const int initialDepth); + SelectorMatcher(XercesXPath* const anXPath, + IC_Selector* const selector, + FieldActivator* const fieldActivator, + const int initialDepth, + MemoryManager* const manager); // ----------------------------------------------------------------------- // Unimplemented contstructors and operators diff --git a/src/xercesc/validators/schema/identity/IC_Unique.cpp b/src/xercesc/validators/schema/identity/IC_Unique.cpp index e95c2cd97..6fecd2cf1 100644 --- a/src/xercesc/validators/schema/identity/IC_Unique.cpp +++ b/src/xercesc/validators/schema/identity/IC_Unique.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:47:41 tng * C++ Namespace Support. * @@ -78,8 +81,9 @@ XERCES_CPP_NAMESPACE_BEGIN // IC_Unique: Constructors and Destructor // --------------------------------------------------------------------------- IC_Unique::IC_Unique(const XMLCh* const identityConstraintName, - const XMLCh* const elemName) - : IdentityConstraint(identityConstraintName, elemName) + const XMLCh* const elemName, + MemoryManager* const manager) + : IdentityConstraint(identityConstraintName, elemName, manager) { } diff --git a/src/xercesc/validators/schema/identity/IC_Unique.hpp b/src/xercesc/validators/schema/identity/IC_Unique.hpp index f47cc4aa6..91dbc51e9 100644 --- a/src/xercesc/validators/schema/identity/IC_Unique.hpp +++ b/src/xercesc/validators/schema/identity/IC_Unique.hpp @@ -80,7 +80,8 @@ public: // Constructors/Destructor // ----------------------------------------------------------------------- IC_Unique(const XMLCh* const identityConstraintName, - const XMLCh* const elemName); + const XMLCh* const elemName, + MemoryManager* const manager); ~IC_Unique(); // ----------------------------------------------------------------------- diff --git a/src/xercesc/validators/schema/identity/IdentityConstraint.cpp b/src/xercesc/validators/schema/identity/IdentityConstraint.cpp index 519b4908d..53bab02e1 100644 --- a/src/xercesc/validators/schema/identity/IdentityConstraint.cpp +++ b/src/xercesc/validators/schema/identity/IdentityConstraint.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.4 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.3 2002/11/04 14:47:41 tng * C++ Namespace Support. * @@ -87,14 +90,17 @@ XERCES_CPP_NAMESPACE_BEGIN // IdentityConstraint: Constructors and Destructor // --------------------------------------------------------------------------- IdentityConstraint::IdentityConstraint(const XMLCh* const identityConstraintName, - const XMLCh* const elemName) - : fIdentityConstraintName(XMLString::replicate(identityConstraintName)) + const XMLCh* const elemName, + MemoryManager* const manager) + : fIdentityConstraintName(0) , fElemName(0) , fSelector(0) , fFields(0) + , fMemoryManager(manager) { try { - fElemName = XMLString::replicate(elemName); + fIdentityConstraintName = XMLString::replicate(identityConstraintName, fMemoryManager); + fElemName = XMLString::replicate(elemName, fMemoryManager); } catch(...) { @@ -159,8 +165,8 @@ void IdentityConstraint::setSelector(IC_Selector* const selector) { // --------------------------------------------------------------------------- void IdentityConstraint::cleanUp() { - delete [] fIdentityConstraintName; - delete [] fElemName; + fMemoryManager->deallocate(fIdentityConstraintName);//delete [] fIdentityConstraintName; + fMemoryManager->deallocate(fElemName);//delete [] fElemName; delete fFields; delete fSelector; } diff --git a/src/xercesc/validators/schema/identity/IdentityConstraint.hpp b/src/xercesc/validators/schema/identity/IdentityConstraint.hpp index eb2c7127d..552c1ac82 100644 --- a/src/xercesc/validators/schema/identity/IdentityConstraint.hpp +++ b/src/xercesc/validators/schema/identity/IdentityConstraint.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -79,7 +79,7 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- class IC_Selector; -class VALIDATORS_EXPORT IdentityConstraint +class VALIDATORS_EXPORT IdentityConstraint : public XMemory { public: // ----------------------------------------------------------------------- @@ -128,7 +128,8 @@ protected: // Constructors/Destructor // ----------------------------------------------------------------------- IdentityConstraint(const XMLCh* const identityConstraintName, - const XMLCh* const elementName); + const XMLCh* const elementName, + MemoryManager* const manager); private: // ----------------------------------------------------------------------- @@ -161,6 +162,7 @@ private: XMLCh* fElemName; IC_Selector* fSelector; RefVectorOf<IC_Field>* fFields; + MemoryManager* fMemoryManager; }; @@ -197,7 +199,7 @@ inline IC_Selector* IdentityConstraint::getSelector() const { inline void IdentityConstraint::addField(IC_Field* const field) { if (!fFields) { - fFields = new RefVectorOf<IC_Field>(4); + fFields = new (fMemoryManager) RefVectorOf<IC_Field>(4); } fFields->addElement(field); diff --git a/src/xercesc/validators/schema/identity/ValueStore.cpp b/src/xercesc/validators/schema/identity/ValueStore.cpp index 6e37e8fef..85285e2a6 100644 --- a/src/xercesc/validators/schema/identity/ValueStore.cpp +++ b/src/xercesc/validators/schema/identity/ValueStore.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2002/12/04 02:32:43 knoaman * #include cleanup. * @@ -99,13 +102,16 @@ XERCES_CPP_NAMESPACE_BEGIN // ValueStore: Constructors and Destructor // --------------------------------------------------------------------------- ValueStore::ValueStore(IdentityConstraint* const ic, - XMLScanner* const scanner) + XMLScanner* const scanner, + MemoryManager* const manager) : fDoReportError(false) , fValuesCount(0) , fIdentityConstraint(ic) + , fValues(manager) , fValueTuples(0) , fKeyValueStore(0) , fScanner(scanner) + , fMemoryManager(manager) { fDoReportError = (scanner && scanner->getDoValidation()); } @@ -156,10 +162,10 @@ void ValueStore::addValue(IC_Field* const field, // store values if (!fValueTuples) { - fValueTuples = new RefVectorOf<FieldValueMap>(4); + fValueTuples = new (fMemoryManager) RefVectorOf<FieldValueMap>(4); } - fValueTuples->addElement(new FieldValueMap(fValues)); + fValueTuples->addElement(new (fMemoryManager) FieldValueMap(fValues)); } } @@ -178,10 +184,10 @@ void ValueStore::append(const ValueStore* const other) { if (!contains(valueMap)) { if (!fValueTuples) { - fValueTuples = new RefVectorOf<FieldValueMap>(4); + fValueTuples = new (fMemoryManager) RefVectorOf<FieldValueMap>(4); } - fValueTuples->addElement(new FieldValueMap(*valueMap)); + fValueTuples->addElement(new (fMemoryManager) FieldValueMap(*valueMap)); } } } diff --git a/src/xercesc/validators/schema/identity/ValueStore.hpp b/src/xercesc/validators/schema/identity/ValueStore.hpp index 4f533339c..b10007b06 100644 --- a/src/xercesc/validators/schema/identity/ValueStore.hpp +++ b/src/xercesc/validators/schema/identity/ValueStore.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -83,13 +83,15 @@ class XMLScanner; class ValueStoreCache; -class VALIDATORS_EXPORT ValueStore +class VALIDATORS_EXPORT ValueStore : public XMemory { public: // ----------------------------------------------------------------------- // Constructors/Destructor // ----------------------------------------------------------------------- - ValueStore(IdentityConstraint* const ic, XMLScanner* const scanner); + ValueStore(IdentityConstraint* const ic, + XMLScanner* const scanner, + MemoryManager* const manager); ~ValueStore(); // ----------------------------------------------------------------------- @@ -150,6 +152,7 @@ private: RefVectorOf<FieldValueMap>* fValueTuples; ValueStore* fKeyValueStore; XMLScanner* fScanner; // for error reporting - REVISIT + MemoryManager* fMemoryManager; }; // --------------------------------------------------------------------------- diff --git a/src/xercesc/validators/schema/identity/ValueStoreCache.cpp b/src/xercesc/validators/schema/identity/ValueStoreCache.cpp index 2047ab9d1..ef8556bf4 100644 --- a/src/xercesc/validators/schema/identity/ValueStoreCache.cpp +++ b/src/xercesc/validators/schema/identity/ValueStoreCache.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2002/11/04 14:47:41 tng * C++ Namespace Support. * @@ -89,11 +92,13 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // ValueStoreCache: Constructors and Destructor // --------------------------------------------------------------------------- -ValueStoreCache::ValueStoreCache() +ValueStoreCache::ValueStoreCache(MemoryManager* const manager) : fValueStores(0) , fGlobalICMap(0) , fIC2ValueStoreMap(0) , fGlobalMapStack(0) + , fScanner(0) + , fMemoryManager(manager) { try { init(); @@ -124,7 +129,7 @@ void ValueStoreCache::startDocument() { void ValueStoreCache::startElement() { fGlobalMapStack->push(fGlobalICMap); - fGlobalICMap = new RefHashTableOf<ValueStore>(13, false, new HashPtr()); + fGlobalICMap = new (fMemoryManager) RefHashTableOf<ValueStore>(13, false, new (fMemoryManager) HashPtr()); } void ValueStoreCache::endElement() { @@ -166,10 +171,10 @@ void ValueStoreCache::cleanUp() { void ValueStoreCache::init() { - fValueStores = new RefVectorOf<ValueStore>(8); - fGlobalICMap = new RefHashTableOf<ValueStore>(13, false, new HashPtr()); - fIC2ValueStoreMap = new RefHash2KeysTableOf<ValueStore>(13, false, new HashPtr()); - fGlobalMapStack = new RefStackOf<RefHashTableOf<ValueStore> >(8); + fValueStores = new (fMemoryManager) RefVectorOf<ValueStore>(8); + fGlobalICMap = new (fMemoryManager) RefHashTableOf<ValueStore>(13, false, new (fMemoryManager) HashPtr()); + fIC2ValueStoreMap = new (fMemoryManager) RefHash2KeysTableOf<ValueStore>(13, false, new (fMemoryManager) HashPtr()); + fGlobalMapStack = new (fMemoryManager) RefStackOf<RefHashTableOf<ValueStore> >(8); } void ValueStoreCache::initValueStoresFor(SchemaElementDecl* const elemDecl, @@ -181,7 +186,7 @@ void ValueStoreCache::initValueStoresFor(SchemaElementDecl* const elemDecl, for (unsigned int i=0; i<icCount; i++) { IdentityConstraint* ic = elemDecl->getIdentityConstraintAt(i); - ValueStore* valueStore = valueStore = new ValueStore(ic, fScanner); + ValueStore* valueStore = valueStore = new (fMemoryManager) ValueStore(ic, fScanner, fMemoryManager); fValueStores->addElement(valueStore); fIC2ValueStoreMap->put(ic, initialDepth, valueStore); } @@ -199,7 +204,7 @@ void ValueStoreCache::transplant(IdentityConstraint* const ic, const int initial if (currVals) { currVals->append(newVals); } else { - ValueStore* valueStore = new ValueStore(ic, fScanner); + ValueStore* valueStore = new (fMemoryManager) ValueStore(ic, fScanner, fMemoryManager); fValueStores->addElement(valueStore); valueStore->append(newVals); fGlobalICMap->put(ic, valueStore); diff --git a/src/xercesc/validators/schema/identity/ValueStoreCache.hpp b/src/xercesc/validators/schema/identity/ValueStoreCache.hpp index c4143192a..d2b758f8f 100644 --- a/src/xercesc/validators/schema/identity/ValueStoreCache.hpp +++ b/src/xercesc/validators/schema/identity/ValueStoreCache.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -99,13 +99,13 @@ class SchemaElementDecl; class XMLScanner; -class VALIDATORS_EXPORT ValueStoreCache +class VALIDATORS_EXPORT ValueStoreCache : public XMemory { public: // ----------------------------------------------------------------------- // Constructors/Destructor // ----------------------------------------------------------------------- - ValueStoreCache(); + ValueStoreCache(MemoryManager* const manager); ~ValueStoreCache(); // ----------------------------------------------------------------------- @@ -164,6 +164,7 @@ private: RefHash2KeysTableOf<ValueStore>* fIC2ValueStoreMap; RefStackOf<RefHashTableOf<ValueStore> >* fGlobalMapStack; XMLScanner* fScanner; + MemoryManager* fMemoryManager; }; // --------------------------------------------------------------------------- diff --git a/src/xercesc/validators/schema/identity/XPathMatcher.cpp b/src/xercesc/validators/schema/identity/XPathMatcher.cpp index 5c06307b0..6d7ef9bcf 100644 --- a/src/xercesc/validators/schema/identity/XPathMatcher.cpp +++ b/src/xercesc/validators/schema/identity/XPathMatcher.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.7 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.6 2003/01/13 20:16:52 knoaman * [Bug 16024] SchemaSymbols.hpp conflicts C++ Builder 6 dir.h * @@ -97,7 +100,8 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // XPathMatcher: Constructors and Destructor // --------------------------------------------------------------------------- -XPathMatcher::XPathMatcher(XercesXPath* const xpath) +XPathMatcher::XPathMatcher( XercesXPath* const xpath + , MemoryManager* const manager) : fLocationPathSize(0) , fMatched(0) , fNoMatchDepth(0) @@ -105,6 +109,7 @@ XPathMatcher::XPathMatcher(XercesXPath* const xpath) , fStepIndexes(0) , fLocationPaths(0) , fIdentityConstraint(0) + , fMemoryManager(manager) { try { init(xpath); @@ -118,7 +123,8 @@ XPathMatcher::XPathMatcher(XercesXPath* const xpath) XPathMatcher::XPathMatcher(XercesXPath* const xpath, - IdentityConstraint* const ic) + IdentityConstraint* const ic, + MemoryManager* const manager) : fLocationPathSize(0) , fMatched(0) , fNoMatchDepth(0) @@ -126,6 +132,7 @@ XPathMatcher::XPathMatcher(XercesXPath* const xpath, , fStepIndexes(0) , fLocationPaths(0) , fIdentityConstraint(ic) + , fMemoryManager(manager) { try { init(xpath); @@ -155,13 +162,22 @@ void XPathMatcher::init(XercesXPath* const xpath) { if (fLocationPathSize) { - fStepIndexes = new RefVectorOf<ValueStackOf<int> >(fLocationPathSize); - fCurrentStep = new int[fLocationPathSize]; - fNoMatchDepth = new int[fLocationPathSize]; - fMatched = new int[fLocationPathSize]; + fStepIndexes = new (fMemoryManager) RefVectorOf<ValueStackOf<int> >(fLocationPathSize); + fCurrentStep = (int*) fMemoryManager->allocate + ( + fLocationPathSize * sizeof(int) + );//new int[fLocationPathSize]; + fNoMatchDepth = (int*) fMemoryManager->allocate + ( + fLocationPathSize * sizeof(int) + );//new int[fLocationPathSize]; + fMatched = (int*) fMemoryManager->allocate + ( + fLocationPathSize * sizeof(int) + );//new int[fLocationPathSize]; for(unsigned int i=0; i < fLocationPathSize; i++) { - fStepIndexes->addElement(new ValueStackOf<int>(8)); + fStepIndexes->addElement(new (fMemoryManager) ValueStackOf<int>(8)); } } } diff --git a/src/xercesc/validators/schema/identity/XPathMatcher.hpp b/src/xercesc/validators/schema/identity/XPathMatcher.hpp index db7cae234..d34ddd6ce 100644 --- a/src/xercesc/validators/schema/identity/XPathMatcher.hpp +++ b/src/xercesc/validators/schema/identity/XPathMatcher.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -82,21 +82,24 @@ class XMLStringPool; class XercesLocationPath; class XMLAttr; -class VALIDATORS_EXPORT XPathMatcher +class VALIDATORS_EXPORT XPathMatcher : public XMemory { public: // ----------------------------------------------------------------------- // Constructors/Destructor // ----------------------------------------------------------------------- - XPathMatcher(XercesXPath* const xpath); XPathMatcher(XercesXPath* const xpath, - IdentityConstraint* const ic); + MemoryManager* const manager); + XPathMatcher(XercesXPath* const xpath, + IdentityConstraint* const ic, + MemoryManager* const manager); virtual ~XPathMatcher(); // ----------------------------------------------------------------------- // Getter methods // ----------------------------------------------------------------------- IdentityConstraint* getIdentityConstraint() const { return fIdentityConstraint; } + MemoryManager* getMemoryManager() const { return fMemoryManager; } // ----------------------------------------------------------------------- // Match methods @@ -181,6 +184,7 @@ private: RefVectorOf<ValueStackOf<int> >* fStepIndexes; RefVectorOf<XercesLocationPath>* fLocationPaths; IdentityConstraint* fIdentityConstraint; + MemoryManager* fMemoryManager; }; // --------------------------------------------------------------------------- @@ -188,9 +192,9 @@ private: // --------------------------------------------------------------------------- inline void XPathMatcher::cleanUp() { - delete [] fMatched; - delete [] fNoMatchDepth; - delete [] fCurrentStep; + fMemoryManager->deallocate(fMatched);//delete [] fMatched; + fMemoryManager->deallocate(fNoMatchDepth);//delete [] fNoMatchDepth; + fMemoryManager->deallocate(fCurrentStep);//delete [] fCurrentStep; delete fStepIndexes; } diff --git a/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp b/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp index 2875f2aaf..8509f93a4 100644 --- a/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp +++ b/src/xercesc/validators/schema/identity/XPathMatcherStack.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.3 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.2 2002/11/04 14:47:41 tng * C++ Namespace Support. * @@ -77,13 +80,13 @@ XERCES_CPP_NAMESPACE_BEGIN // --------------------------------------------------------------------------- // XPathMatherStack: Constructors and Destructor // --------------------------------------------------------------------------- -XPathMatcherStack::XPathMatcherStack() +XPathMatcherStack::XPathMatcherStack(MemoryManager* const manager) : fMatchersCount(0) - , fContextStack(new ValueStackOf<int>(8)) + , fContextStack(new (manager) ValueStackOf<int>(8)) , fMatchers(0) { try { - fMatchers = new RefVectorOf<XPathMatcher>(8); + fMatchers = new (manager) RefVectorOf<XPathMatcher>(8); } catch(...) { diff --git a/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp b/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp index 80088d353..3b5dc8b9b 100644 --- a/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp +++ b/src/xercesc/validators/schema/identity/XPathMatcherStack.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -69,13 +69,13 @@ XERCES_CPP_NAMESPACE_BEGIN -class VALIDATORS_EXPORT XPathMatcherStack +class VALIDATORS_EXPORT XPathMatcherStack : public XMemory { public: // ----------------------------------------------------------------------- // Constructors/Destructor // ----------------------------------------------------------------------- - XPathMatcherStack(); + XPathMatcherStack(MemoryManager* const manager); ~XPathMatcherStack(); // ----------------------------------------------------------------------- diff --git a/src/xercesc/validators/schema/identity/XercesXPath.cpp b/src/xercesc/validators/schema/identity/XercesXPath.cpp index a4658ccac..2bd07f698 100644 --- a/src/xercesc/validators/schema/identity/XercesXPath.cpp +++ b/src/xercesc/validators/schema/identity/XercesXPath.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.6 2003/05/15 18:59:34 knoaman + * Partial implementation of the configurable memory manager. + * * Revision 1.5 2002/12/20 22:10:48 tng * XML 1.1 * @@ -270,10 +273,13 @@ XercesXPath::XercesXPath(const XMLCh* const xpathExpr, const unsigned int emptyNamespaceId, const bool isSelector) : fEmptyNamespaceId(emptyNamespaceId) - , fExpression(XMLString::replicate(xpathExpr)) + , fExpression(0) , fLocationPaths(0) + , fMemoryManager(XMLPlatformUtils::fgMemoryManager) { - try { + try + { + fExpression = XMLString::replicate(xpathExpr, fMemoryManager); parseExpression(stringPool, scopeContext); if (isSelector) { @@ -320,7 +326,7 @@ bool XercesXPath::operator!=(const XercesXPath& other) const { // --------------------------------------------------------------------------- void XercesXPath::cleanUp() { - delete [] fExpression; + fMemoryManager->deallocate(fExpression);//delete [] fExpression; delete fLocationPaths; } @@ -356,11 +362,11 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, bool success = scanner.scanExpression(fExpression, 0, length, &tokens); bool firstTokenOfLocationPath=true; unsigned int tokenCount = tokens.size(); - RefVectorOf<XercesStep>* stepsVector = new RefVectorOf<XercesStep>(16); + RefVectorOf<XercesStep>* stepsVector = new (fMemoryManager) RefVectorOf<XercesStep>(16); Janitor<RefVectorOf<XercesStep> > janSteps(stepsVector); if (tokenCount) { - fLocationPaths = new RefVectorOf<XercesLocationPath>(8); + fLocationPaths = new (fMemoryManager) RefVectorOf<XercesLocationPath>(8); } for (unsigned int i = 0; i < tokenCount; i++) { @@ -381,9 +387,9 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, ThrowXML(XPathException, XMLExcepts::XPath_NoMultipleUnion); } - fLocationPaths->addElement(new XercesLocationPath(stepsVector)); + fLocationPaths->addElement(new (fMemoryManager) XercesLocationPath(stepsVector)); janSteps.orphan(); - stepsVector = new RefVectorOf<XercesStep>(16); + stepsVector = new (fMemoryManager) RefVectorOf<XercesStep>(16); janSteps.reset(stepsVector); firstTokenOfLocationPath = true; } @@ -414,8 +420,8 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, case XercesXPath::EXPRTOKEN_NAMETEST_ANY: { - XercesNodeTest* nodeTest = new XercesNodeTest(XercesNodeTest::WILDCARD); - XercesStep* step = new XercesStep(XercesStep::ATTRIBUTE, nodeTest); + XercesNodeTest* nodeTest = new (fMemoryManager) XercesNodeTest(XercesNodeTest::WILDCARD); + XercesStep* step = new (fMemoryManager) XercesStep(XercesStep::ATTRIBUTE, nodeTest); stepsVector->addElement(step); break; } @@ -443,8 +449,8 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, if (isNamespaceAtt) { // build step - XercesNodeTest* nodeTest = new XercesNodeTest(prefix, uri); - XercesStep* step = new XercesStep(XercesStep::ATTRIBUTE, nodeTest); + XercesNodeTest* nodeTest = new (fMemoryManager) XercesNodeTest(prefix, uri); + XercesStep* step = new (fMemoryManager) XercesStep(XercesStep::ATTRIBUTE, nodeTest); stepsVector->addElement(step); break; } @@ -455,8 +461,8 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, QName aQName(prefix, localPart, uri); // build step - XercesNodeTest* nodeTest = new XercesNodeTest(&aQName); - XercesStep* step = new XercesStep(XercesStep::ATTRIBUTE, nodeTest); + XercesNodeTest* nodeTest = new (fMemoryManager) XercesNodeTest(&aQName); + XercesStep* step = new (fMemoryManager) XercesStep(XercesStep::ATTRIBUTE, nodeTest); stepsVector->addElement(step); break; } @@ -484,8 +490,8 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, } case XercesXPath::EXPRTOKEN_NAMETEST_ANY: { - XercesNodeTest* nodeTest = new XercesNodeTest(XercesNodeTest::WILDCARD); - XercesStep* step = new XercesStep(XercesStep::CHILD, nodeTest); + XercesNodeTest* nodeTest = new (fMemoryManager) XercesNodeTest(XercesNodeTest::WILDCARD); + XercesStep* step = new (fMemoryManager) XercesStep(XercesStep::CHILD, nodeTest); stepsVector->addElement(step); firstTokenOfLocationPath = false; break; @@ -515,8 +521,8 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, if (isNamespace) { // build step - XercesNodeTest* nodeTest = new XercesNodeTest(prefix, uri); - XercesStep* step = new XercesStep(XercesStep::CHILD, nodeTest); + XercesNodeTest* nodeTest = new (fMemoryManager) XercesNodeTest(prefix, uri); + XercesStep* step = new (fMemoryManager) XercesStep(XercesStep::CHILD, nodeTest); stepsVector->addElement(step); break; } @@ -526,8 +532,8 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, QName aQName(prefix, localPart, uri); // build step - XercesNodeTest* nodeTest = new XercesNodeTest(&aQName); - XercesStep* step = new XercesStep(XercesStep::CHILD, nodeTest); + XercesNodeTest* nodeTest = new (fMemoryManager) XercesNodeTest(&aQName); + XercesStep* step = new (fMemoryManager) XercesStep(XercesStep::CHILD, nodeTest); stepsVector->addElement(step); firstTokenOfLocationPath = false; break; @@ -535,8 +541,8 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, case XercesXPath::EXPRTOKEN_PERIOD: { // build step - XercesNodeTest* nodeTest = new XercesNodeTest(XercesNodeTest::NODE); - XercesStep* step = new XercesStep(XercesStep::SELF, nodeTest); + XercesNodeTest* nodeTest = new (fMemoryManager) XercesNodeTest(XercesNodeTest::NODE); + XercesStep* step = new (fMemoryManager) XercesStep(XercesStep::SELF, nodeTest); stepsVector->addElement(step); if (firstTokenOfLocationPath && i+1 < tokenCount) { @@ -558,8 +564,8 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, } } // build step - nodeTest = new XercesNodeTest(XercesNodeTest::NODE); - step = new XercesStep(XercesStep::DESCENDANT, nodeTest); + nodeTest = new (fMemoryManager) XercesNodeTest(XercesNodeTest::NODE); + step = new (fMemoryManager) XercesStep(XercesStep::DESCENDANT, nodeTest); stepsVector->addElement(step); } } @@ -604,7 +610,7 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool, } } - fLocationPaths->addElement(new XercesLocationPath(stepsVector)); + fLocationPaths->addElement(new (fMemoryManager) XercesLocationPath(stepsVector)); janSteps.orphan(); } diff --git a/src/xercesc/validators/schema/identity/XercesXPath.hpp b/src/xercesc/validators/schema/identity/XercesXPath.hpp index fb711f54a..8210212eb 100644 --- a/src/xercesc/validators/schema/identity/XercesXPath.hpp +++ b/src/xercesc/validators/schema/identity/XercesXPath.hpp @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -78,7 +78,7 @@ class XMLStringPool; class NamespaceScope; -class VALIDATORS_EXPORT XercesNodeTest +class VALIDATORS_EXPORT XercesNodeTest : public XMemory { public: // ----------------------------------------------------------------------- @@ -125,7 +125,8 @@ private: /** * A location path step comprised of an axis and node test. */ -class VALIDATORS_EXPORT XercesStep { +class VALIDATORS_EXPORT XercesStep : public XMemory +{ public: // ----------------------------------------------------------------------- // Constants @@ -169,7 +170,7 @@ private: /** * A location path representation for an XPath expression. */ -class VALIDATORS_EXPORT XercesLocationPath +class VALIDATORS_EXPORT XercesLocationPath : public XMemory { public: // ----------------------------------------------------------------------- @@ -206,7 +207,7 @@ private: }; -class VALIDATORS_EXPORT XercesXPath +class VALIDATORS_EXPORT XercesXPath : public XMemory { public: // ----------------------------------------------------------------------- @@ -311,10 +312,11 @@ private: unsigned int fEmptyNamespaceId; XMLCh* fExpression; RefVectorOf<XercesLocationPath>* fLocationPaths; + MemoryManager* fMemoryManager; }; -class VALIDATORS_EXPORT XPathScanner +class VALIDATORS_EXPORT XPathScanner : public XMemory { public: // ----------------------------------------------------------------------- -- GitLab