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 <util/XercesDefs.hpp>
00066 #include <util/XMLException.hpp>
00067 
00068 class XMLMsgLoader;
00069 class XMLNetAccessor;
00070 class XMLTransService;
00071 
00072 
00073 
00074 
00075 
00076 
00077 
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 
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 
00300 
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     );
00356 
00359 
00369     static unsigned long getCurrentMillis();
00371 
00374 
00382     static void closeMutex(void* const mtxHandle);
00383 
00391     static void lockMutex(void* const mtxHandle);
00392 
00400     static void* makeMutex();
00401 
00414     static void unlockMutex(void* const mtxHandle);
00415 
00417 
00418 
00421 
00429     static XMLMsgLoader* loadMsgSet(const XMLCh* const msgDomain);
00430 
00432 
00435 
00461     static void* compareAndSwap
00462     (
00463                 void**      toFill
00464         , const void* const newValue
00465         , const void* const toCompare
00466     );
00467 
00469 
00470 
00473 
00493     static int atomicIncrement(int& location);
00494 
00514     static int atomicDecrement(int& location);
00515 
00517 
00520 
00528     static void recognizeNEL(bool state);
00529 
00533     static bool isNELRecognized();
00535 
00536 
00537 private :
00540 
00546     static XMLMsgLoader* loadAMsgSet(const XMLCh* const msgDomain);
00547 
00557     static XMLNetAccessor* makeNetAccessor();
00558 
00569     static XMLTransService* makeTransService();
00570 
00577     static void platformInit();
00578 
00585     static void platformTerm();
00586 
00588 };
00589 
00590 
00591 MakeXMLException(XMLPlatformUtilsException, )
00592 
00593 
00594 
00595 
00596 
00597 
00598 inline XMLDeleter::~XMLDeleter()
00599 {
00600 }
00601 
00602 
00603 
00604 
00605 inline XMLDeleter::XMLDeleter()
00606 {
00607 }
00608 
00609 #endif