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 class XMLMsgLoader;
00069 class XMLNetAccessor;
00070 class XMLTransService;
00071
00072
00073
00074
00075
00076
00077
00078
00079 class XMLUTIL_EXPORT 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 XMLUTIL_EXPORT 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
00261 static FileHandle openStdInHandle();
00262
00278 static unsigned int readFileBuffer
00279 (
00280 FileHandle theFile
00281 , const unsigned int toRead
00282 , XMLByte* const toFill
00283 );
00284
00293 static void resetFile(FileHandle theFile);
00294
00296
00297
00314 static XMLCh* getFullPath(const XMLCh* const srcPath);
00315
00329 static bool isRelative(const XMLCh* const toCheck);
00330
00350 static XMLCh* weavePaths
00351 (
00352 const XMLCh* const basePath
00353 , const XMLCh* const relativePath
00354 );
00355
00371 static XMLCh* buildLocalPath
00372 (
00373 const XMLCh* const cacheDirPath
00374 , const XMLCh* const hostName
00375 , const XMLCh* const filePath
00376 );
00377
00385 static bool findFile(const XMLCh* const filePath);
00386
00395 static unsigned int createDirectory(const XMLCh* const basePath, const XMLCh* const pathName);
00396
00397 static bool URLCacheGetEnv(const char* urlEntityCaching);
00398
00399 static XMLCh* URLCacheDirGetEnv(const char* urlEntityCacheDir);
00400
00402
00405
00415 static unsigned long getCurrentMillis();
00417
00420
00428 static void closeMutex(void* const mtxHandle);
00429
00437 static void lockMutex(void* const mtxHandle);
00438
00446 static void* makeMutex();
00447
00460 static void unlockMutex(void* const mtxHandle);
00461
00463
00464
00467
00475 static XMLMsgLoader* loadMsgSet(const XMLCh* const msgDomain);
00476
00478
00481
00507 static void* compareAndSwap
00508 (
00509 void** toFill
00510 , const void* const newValue
00511 , const void* const toCompare
00512 );
00513
00515
00516
00519
00539 static int atomicIncrement(int& location);
00540
00560 static int atomicDecrement(int& location);
00561
00563
00574 static void recognizeNEL(bool state);
00575
00579 static bool isNELRecognized();
00581
00582
00583 private :
00586
00592 static XMLMsgLoader* loadAMsgSet(const XMLCh* const msgDomain);
00593
00603 static XMLNetAccessor* makeNetAccessor();
00604
00615 static XMLTransService* makeTransService();
00616
00623 static void platformInit();
00624
00631 static void platformTerm();
00632
00634 };
00635
00636
00637 MakeXMLException(XMLPlatformUtilsException, XMLUTIL_EXPORT)
00638
00639
00640
00641
00642
00643
00644 inline XMLDeleter::~XMLDeleter()
00645 {
00646 }
00647
00648
00649
00650
00651 inline XMLDeleter::XMLDeleter()
00652 {
00653 }
00654
00655 #endif