00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
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 XERCES_CPP_NAMESPACE_BEGIN
00069
00070 class XMLMsgLoader;
00071 class XMLNetAccessor;
00072 class XMLTransService;
00073
00074
00075
00076
00077
00078
00079
00080
00081 class XMLDeleter
00082 {
00083 public :
00084 virtual ~XMLDeleter();
00085
00086 protected :
00087 XMLDeleter();
00088
00089 private :
00090 XMLDeleter(const XMLDeleter&);
00091 void operator=(const XMLDeleter&);
00092 };
00093
00094
00103 class XMLPlatformUtils
00104 {
00105 public :
00108 enum PanicReasons
00109 {
00110 Panic_NoTransService
00111 , Panic_NoDefTranscoder
00112 , Panic_CantFindLib
00113 , Panic_UnknownMsgDomain
00114 , Panic_CantLoadMsgDomain
00115 , Panic_SynchronizationErr
00116 , Panic_SystemInit
00117
00118 , PanicReasons_Count
00119 };
00121
00124
00137 static XMLNetAccessor* fgNetAccessor;
00138
00149 static XMLTransService* fgTransService;
00150
00152
00153
00156
00175 static void Initialize(const char* const locale = XMLUni::fgXercescDefaultLocale);
00176
00183 static void Terminate();
00184
00198 static void panic
00199 (
00200 const PanicReasons reason
00201 );
00203
00206
00219 static unsigned int curFilePos(FileHandle theFile);
00220
00230 static void closeFile(FileHandle theFile);
00231
00242 static unsigned int fileSize(FileHandle theFile);
00243
00254 static FileHandle openFile(const char* const fileName);
00255
00266 static FileHandle openFile(const XMLCh* const fileName);
00267
00278 static FileHandle openFileToWrite(const char* const fileName);
00279
00290 static FileHandle openFileToWrite(const XMLCh* const fileName);
00291
00301 static FileHandle openStdInHandle();
00302
00318 static unsigned int readFileBuffer
00319 (
00320 FileHandle theFile
00321 , const unsigned int toRead
00322 , XMLByte* const toFill
00323 );
00324
00339 static void writeBufferToFile
00340 (
00341 FileHandle const theFile
00342 , long toWrite
00343 , const XMLByte* const toFlush
00344 );
00345
00354 static void resetFile(FileHandle theFile);
00355
00357
00358
00375 static XMLCh* getFullPath(const XMLCh* const srcPath);
00376
00390 static bool isRelative(const XMLCh* const toCheck);
00391
00411 static XMLCh* weavePaths
00412 (
00413 const XMLCh* const basePath
00414 , const XMLCh* const relativePath
00415 );
00417
00420
00430 static unsigned long getCurrentMillis();
00432
00435
00443 static void closeMutex(void* const mtxHandle);
00444
00452 static void lockMutex(void* const mtxHandle);
00453
00461 static void* makeMutex();
00462
00475 static void unlockMutex(void* const mtxHandle);
00476
00478
00479
00482
00490 static XMLMsgLoader* loadMsgSet(const XMLCh* const msgDomain);
00491
00493
00496
00522 static void* compareAndSwap
00523 (
00524 void** toFill
00525 , const void* const newValue
00526 , const void* const toCompare
00527 );
00528
00530
00531
00534
00554 static int atomicIncrement(int& location);
00555
00575 static int atomicDecrement(int& location);
00576
00578
00592 static void recognizeNEL(bool state);
00593
00597 static bool isNELRecognized();
00599
00611 static void strictIANAEncoding(const bool state);
00612
00617 static bool isStrictIANAEncoding();
00619
00620
00621 private :
00624
00630 static XMLMsgLoader* loadAMsgSet(const XMLCh* const msgDomain);
00631
00641 static XMLNetAccessor* makeNetAccessor();
00642
00653 static XMLTransService* makeTransService();
00654
00661 static void platformInit();
00662
00669 static void platformTerm();
00670
00672 };
00673
00674
00675 MakeXMLException(XMLPlatformUtilsException, )
00676
00677
00678
00679
00680
00681
00682 inline XMLDeleter::~XMLDeleter()
00683 {
00684 }
00685
00686
00687
00688
00689 inline XMLDeleter::XMLDeleter()
00690 {
00691 }
00692
00693 XERCES_CPP_NAMESPACE_END
00694
00695 #endif