xalan-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dmit...@apache.org
Subject cvs commit: xml-xalan/c/samples/SimpleTransform XalanMemoryManagerImpl.hpp SimpleTransform.cpp
Date Sun, 14 Nov 2004 23:24:28 GMT
dmitryh     2004/11/14 15:24:28

  Modified:    c/samples/SimpleTransform SimpleTransform.cpp
  Added:       c/samples/SimpleTransform XalanMemoryManagerImpl.hpp
  Log:
  Simple implementation of a memory manager and  a sample , demonstrating how to call Xalan-C
with a memory manager
  
  Revision  Changes    Path
  1.25      +12 -3     xml-xalan/c/samples/SimpleTransform/SimpleTransform.cpp
  
  Index: SimpleTransform.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/samples/SimpleTransform/SimpleTransform.cpp,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- SimpleTransform.cpp	26 Feb 2004 22:27:24 -0000	1.24
  +++ SimpleTransform.cpp	14 Nov 2004 23:24:27 -0000	1.25
  @@ -33,6 +33,8 @@
   #include <xalanc/XalanTransformer/XalanTransformer.hpp>
   
   
  +#include "XalanMemoryManagerImpl.hpp"
  +
   
   int
   main(
  @@ -55,19 +57,26 @@
   		try
   		{
   			XALAN_USING_XERCES(XMLPlatformUtils)
  +            
  +            XALAN_USING_XERCES(XMLUni)
   
   			XALAN_USING_XALAN(XalanTransformer)
   
  +            XalanMemoryManagerImpl memoryManager;
   
   			// Call the static initializer for Xerces.
  -			XMLPlatformUtils::Initialize();
  +			XMLPlatformUtils::Initialize( 
  +                                    XMLUni::fgXercescDefaultLocale,
  +                                    0,
  +                                    0,
  +                                    &memoryManager );
   
   			// Initialize Xalan.
  -			XalanTransformer::initialize();
  +			XalanTransformer::initialize( memoryManager );
   
   			{
   				// Create a XalanTransformer.
  -				XalanTransformer theXalanTransformer;
  +				XalanTransformer theXalanTransformer( memoryManager );
   
   				// The assumption is that the executable will be run
   				// from same directory as the input files.
  
  
  
  1.1                  xml-xalan/c/samples/SimpleTransform/XalanMemoryManagerImpl.hpp
  
  Index: XalanMemoryManagerImpl.hpp
  ===================================================================
  /*
   * Copyright 1999-2004 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  #if !defined(MEMORYMANAGERIMPL_HEADER_GUARD_1357924680)
  #define MEMORYMANAGERIMPL_HEADER_GUARD_1357924680
  
  
  // Base include file.  Must be first.
  #include <new>
  
  
  #include <xalanc/Include/PlatformDefinitions.hpp>
  
  
  
  #include <xercesc/framework/MemoryManager.hpp>
  
  #if defined(WIN32)
  #include <windows.h>
  #include <stdexcept>
  #include <stdlib.h>
  #endif
  
  
  
  #if defined(WIN32)
  
  
  class XalanMemoryManagerImpl : public XALAN_CPP_NAMESPACE_QUALIFIER MemoryManagerType
  {
      enum { npos = -1 }; 
  public:
      XalanMemoryManagerImpl( size_t defSize = npos ) :
  	    m_heapHandle(NULL)
  	{
  		m_heapHandle = HeapCreate(	HEAP_NO_SERIALIZE,
  		                            0, // dwInitialSize
  		                            ( defSize == npos) ? 0 : defSize  /* dwMaximumSize*/);
  		if( m_heapHandle == NULL )
  		{
              XALAN_USING_STD(runtime_error)
  
              char buffer[20];
              buffer[0] = 0;
  
              _ultoa( GetLastError(), buffer, 10);
  
              throw runtime_error(buffer);
  
  		}
  	}
  
  	virtual void*
  	allocate( size_t size )	
      {
          LPVOID ptr = HeapAlloc(
                          m_heapHandle,   //HANDLE hHeap
                          0,              //DWORD dwFlags
                          size            //SIZE_T dwBytes
                          );
          if( ptr == 0)
          {
              XALAN_USING_STD(bad_alloc)
  
              throw bad_alloc();
          }
  
          return ptr;
  
      }
  
  	virtual void
  	deallocate(  void* 	pDataPointer  )
  	{
          if ( 0 == HeapFree(
                          m_heapHandle,   //HANDLE hHeap,
                          0,              //DWORD dwFlags,
                          pDataPointer ) )//*LPVOID lpMem 
          {
              XALAN_USING_STD(bad_alloc)
  
              throw bad_alloc();
          }
  
      }
  
  	virtual 
  	~XalanMemoryManagerImpl()
  	{
         if( 0 == HeapDestroy(m_heapHandle) )
         {
              XALAN_USING_STD(runtime_error)
  
              char buffer[20];
              buffer[0] = 0;
  
              _ultoa( GetLastError(), buffer, 10);
  
              throw runtime_error(buffer);
         }
  	}
  
  private:
  	// Not implemented
  	XalanMemoryManagerImpl&
  	operator=(const XalanMemoryManagerImpl&);
  	
  	XalanMemoryManagerImpl(const XalanMemoryManagerImpl&);
  	
  	//Data
  	HANDLE m_heapHandle;	
  };
  
  #else
  
  class XalanMemoryManagerImpl : public XALAN_CPP_NAMESPACE_QUALIFIER MemoryManagerType
  {
  public:
  	virtual 
  	~XalanMemoryManagerImpl()
  	{
  	}
  	
  	virtual void*
  	allocate( size_t 	size )
  	{
  	     void* memptr = ::operator new(size);
  
  	    if (memptr != NULL) 
  	    {
  	        return memptr;
  	    }
  	    
  		XALAN_USING_STD(bad_alloc)
  		
  		throw bad_alloc();
  	}	
  	virtual void
  	deallocate(  void* 		pDataPointer  )
  	{
  		operator delete(pDataPointer);		
  		
  	}	
  };
  
  #endif
  
  
  
  
  
  
  
  #endif  // MEMORYMANAGERIMPL_HEADER_GUARD_1357924680
  
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org


Mime
View raw message