http://xml.apache.org/http://www.apache.org/http://www.w3.org/

Home

Readme
Release Info

Installation
Download
Build

FAQs
Samples
API Docs

DOM C++ Binding
Programming
Migration Guide

Feedback
Bug-Reporting
PDF Document

CVS Repository
Mail Archive

API Docs for SAX and DOM
 

Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

PlatformUtils.hpp

Go to the documentation of this file.
00001 /*
00002  * The Apache Software License, Version 1.1
00003  *
00004  * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
00005  * reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions
00009  * are met:
00010  *
00011  * 1. Redistributions of source code must retain the above copyright
00012  *    notice, this list of conditions and the following disclaimer.
00013  *
00014  * 2. Redistributions in binary form must reproduce the above copyright
00015  *    notice, this list of conditions and the following disclaimer in
00016  *    the documentation and/or other materials provided with the
00017  *    distribution.
00018  *
00019  * 3. The end-user documentation included with the redistribution,
00020  *    if any, must include the following acknowledgment:
00021  *       "This product includes software developed by the
00022  *        Apache Software Foundation (http://www.apache.org/)."
00023  *    Alternately, this acknowledgment may appear in the software itself,
00024  *    if and wherever such third-party acknowledgments normally appear.
00025  *
00026  * 4. The names "Xerces" and "Apache Software Foundation" must
00027  *    not be used to endorse or promote products derived from this
00028  *    software without prior written permission. For written
00029  *    permission, please contact apache\@apache.org.
00030  *
00031  * 5. Products derived from this software may not be called "Apache",
00032  *    nor may "Apache" appear in their name, without prior written
00033  *    permission of the Apache Software Foundation.
00034  *
00035  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
00036  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00037  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00038  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
00039  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00040  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00041  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
00042  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00043  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00044  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00045  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00046  * SUCH DAMAGE.
00047  * ====================================================================
00048  *
00049  * This software consists of voluntary contributions made by many
00050  * individuals on behalf of the Apache Software Foundation, and was
00051  * originally based on software copyright (c) 1999, International
00052  * Business Machines, Inc., http://www.ibm.com .  For more information
00053  * on the Apache Software Foundation, please see
00054  * <http://www.apache.org/>.
00055  */
00056 
00057 /*
00058  * $Id: PlatformUtils.hpp,v 1.4 2002/07/18 20:05:31 knoaman Exp $
00059  */
00060 
00061 
00062 #if !defined(PLATFORMUTILS_HPP)
00063 #define PLATFORMUTILS_HPP
00064 
00065 #include <xercesc/util/XercesDefs.hpp>
00066 #include <xercesc/util/XMLException.hpp>
00067 
00068 class XMLMsgLoader;
00069 class XMLNetAccessor;
00070 class XMLTransService;
00071 
00072 
00073 //
00074 //  For internal use only
00075 //
00076 //  This class provides a simple abstract API via which lazily evaluated
00077 //  data can be cleaned up.
00078 //
00079 class  XMLDeleter
00080 {
00081 public :
00082     virtual ~XMLDeleter();
00083 
00084 protected :
00085     XMLDeleter();
00086 
00087 private :
00088     XMLDeleter(const XMLDeleter&);
00089     void operator=(const XMLDeleter&);
00090 };
00091 
00092 
00101 class  XMLPlatformUtils
00102 {
00103 public :
00106     enum PanicReasons
00107     {
00108         Panic_NoTransService
00109         , Panic_NoDefTranscoder
00110         , Panic_CantFindLib
00111         , Panic_UnknownMsgDomain
00112         , Panic_CantLoadMsgDomain
00113         , Panic_SynchronizationErr
00114         , Panic_SystemInit
00115 
00116         , PanicReasons_Count
00117     };
00119 
00122 
00135     static XMLNetAccessor*      fgNetAccessor;
00136 
00147     static XMLTransService*     fgTransService;
00148 
00150 
00151 
00154 
00159     static void Initialize();
00160 
00167     static void Terminate();
00168 
00182     static void panic
00183     (
00184         const   PanicReasons    reason
00185     );
00187 
00190 
00203     static unsigned int curFilePos(FileHandle theFile);
00204 
00214     static void closeFile(FileHandle theFile);
00215 
00226     static unsigned int fileSize(FileHandle theFile);
00227 
00238     static FileHandle openFile(const char* const fileName);
00239 
00250     static FileHandle openFile(const XMLCh* const fileName);
00251 
00262     static FileHandle openFileToWrite(const char* const fileName);
00263 
00274     static FileHandle openFileToWrite(const XMLCh* const fileName);
00275 
00285     static FileHandle openStdInHandle();
00286 
00302     static unsigned int readFileBuffer
00303     (
00304                 FileHandle      theFile
00305         , const unsigned int    toRead
00306         ,       XMLByte* const  toFill
00307     );
00308 
00323     static void writeBufferToFile
00324     (
00325           FileHandle     const  theFile
00326         , long                  toWrite
00327         , const XMLByte* const  toFlush
00328     );
00329 
00338     static void resetFile(FileHandle theFile);
00339 
00341 
00342 
00345 
00359     static XMLCh* getFullPath(const XMLCh* const srcPath);
00360 
00374     static bool isRelative(const XMLCh* const toCheck);
00375 
00395     static XMLCh* weavePaths
00396     (
00397         const   XMLCh* const    basePath
00398         , const XMLCh* const    relativePath
00399     );
00401 
00404 
00414     static unsigned long getCurrentMillis();
00416 
00419 
00427     static void closeMutex(void* const mtxHandle);
00428 
00436     static void lockMutex(void* const mtxHandle);
00437 
00445     static void* makeMutex();
00446 
00459     static void unlockMutex(void* const mtxHandle);
00460 
00462 
00463 
00466 
00474     static XMLMsgLoader* loadMsgSet(const XMLCh* const msgDomain);
00475 
00477 
00480 
00506     static void* compareAndSwap
00507     (
00508                 void**      toFill
00509         , const void* const newValue
00510         , const void* const toCompare
00511     );
00512 
00514 
00515 
00518 
00538     static int atomicIncrement(int& location);
00539 
00559     static int atomicDecrement(int& location);
00560 
00562 
00565 
00573     static void recognizeNEL(bool state);
00574 
00578     static bool isNELRecognized();
00580 
00583 
00592     static void strictIANAEncoding(const bool state);
00593 
00598     static bool isStrictIANAEncoding();
00600 
00601 
00602 private :
00605 
00611     static XMLMsgLoader* loadAMsgSet(const XMLCh* const msgDomain);
00612 
00622     static XMLNetAccessor* makeNetAccessor();
00623 
00634     static XMLTransService* makeTransService();
00635 
00642     static void platformInit();
00643 
00650     static void platformTerm();
00651 
00653 };
00654 
00655 
00656 MakeXMLException(XMLPlatformUtilsException, )
00657 
00658 
00659 
00660 // ---------------------------------------------------------------------------
00661 //  XMLDeleter: Public Destructor
00662 // ---------------------------------------------------------------------------
00663 inline XMLDeleter::~XMLDeleter()
00664 {
00665 }
00666 
00667 // ---------------------------------------------------------------------------
00668 //  XMLDeleter: Hidden constructors and operators
00669 // ---------------------------------------------------------------------------
00670 inline XMLDeleter::XMLDeleter()
00671 {
00672 }
00673 
00674 #endif


Copyright © 2000 The Apache Software Foundation. All Rights Reserved.