/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */ #include #include #include #include #include "XalanMemoryManagerImpl.hpp" /** * Example of the ICU's customizable memory management which can * be used conjunction with Xalan's pluggable memory management feature. */ #if defined(XALAN_USE_ICU) #include "unicode/uclean.h" static XalanMemoryManagerImpl s_memoryManager; void* icu_malloc(const void * /* context */, size_t size) { return s_memoryManager.allocate(size); } void* icu_realloc(const void * /* context */, void * mem, size_t size) { s_memoryManager.deallocate(mem); return s_memoryManager.allocate(size); } void icu_free(const void * /* context */, void * mem) { s_memoryManager.deallocate(mem); } #endif int main( int argc, char* /* argv */[]) { using std::cerr; using std::endl; int theResult = -1; if (argc != 1) { cerr << "Usage: SimpleTransform" << endl << endl; } else { try { using xercesc::XMLPlatformUtils; using xercesc::XMLUni; using xalanc::XalanTransformer; XalanMemoryManagerImpl memoryManager; #ifdef XALAN_USE_ICU UErrorCode status = U_ZERO_ERROR; u_setMemoryFunctions(0, icu_malloc, icu_realloc, icu_free, &status); if(U_FAILURE(status)) { cerr << "Initialization of ICU failed! " << endl << endl; return -1; } #endif // Call the static initializer for Xerces. XMLPlatformUtils::Initialize( XMLUni::fgXercescDefaultLocale, 0, 0, &memoryManager ); // Initialize Xalan. XalanTransformer::initialize( memoryManager ); { // Create a XalanTransformer. XalanTransformer theXalanTransformer( memoryManager ); // The assumption is that the executable will be run // from same directory as the input files. theResult = theXalanTransformer.transform("foo.xml", "foo.xsl", "foo.out"); if(theResult != 0) { cerr << "SimpleTransform Error: \n" << theXalanTransformer.getLastError() << endl << endl; } } // Terminate Xalan... XalanTransformer::terminate(); // Terminate Xerces... XMLPlatformUtils::Terminate(); // Clean up the ICU, if it's integrated... XalanTransformer::ICUCleanUp(); } catch(...) { cerr << "Initialization failed!" << endl; } } return theResult; }