/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Teigha(R) software pursuant to a license // agreement with Open Design Alliance. // Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// #ifndef _ODRXSYSTEMSERVICES_INCLUDED_ #define _ODRXSYSTEMSERVICES_INCLUDED_ #include #include "RxObject.h" #include "OdStreamBuf.h" #include "OdCodePage.h" #if defined(_DEBUG) && defined(_WIN32) #define STL_USING_VECTOR #include "OdaSTL.h" #endif class OdTimeStamp; class OdRxModule; class OdRxDictionary; typedef OdSmartPtr OdRxDictionaryPtr; #include "TD_PackPush.h" /** \details */ namespace Oda { ///////////////// FILE SYSTEM SERVICES ////////////////// enum FileAccessMode // Access { kFileRead = (long) 0x80000000, // Read access. Use kFileRead | kFileWrite for read/write access. kFileWrite = 0x40000000, // Write access. Use kFileRead | kFileWrite for read/write access. kFileTmp = 0x20000000, // hint to use FILE_ATTRIBUTE_TEMPORARY for 'FlagsAndAttributes' kFileDelete = 0x10000000 // hint to use FILE_FLAG_DELETE_ON_CLOSE for 'FlagsAndAttributes' }; enum FileShareMode { kShareDenyReadWrite = 0x10, // deny read/write mode kShareDenyWrite = 0x20, // deny write mode kShareDenyRead = 0x30, // deny read mode kShareDenyNo = 0x40 // deny none mode }; enum FileCreationDisposition { kCreateNew = 1, // Creates a new file; fails if the specified file already exists. kCreateAlways = 2, // Creates a new file; overwrites any existing file. kOpenExisting = 3, // Opens the file; fails if the file does not exist. kOpenAlways = 4, // Opens the file; creates the file if it does not exist. kTruncateExisting = 5 // Truncates the file; fails if the file does not exist. The file must be open at least kFileWrite. }; } /** \details This class implements OdError objects with access to the Result codes and filenames of the objects related to the errors. Library: TD_Root */ class FIRSTDLL_EXPORT OdError_FileException : public OdError { public: /** \param code [in] Result code. \param filename [in] Filename. */ OdError_FileException(OdResult code, const OdString& filename); /** \details Returns the filename of this Error object. */ OdString getFileName() const; }; /** \details This class implements FileException object with a Result code of eFileNotFound, and the filename of the object related to the error. Library: TD_Root */ class FIRSTDLL_EXPORT OdError_FileNotFound : public OdError_FileException { public: /** \param filename [in] Filename. */ OdError_FileNotFound(const OdString& filename); }; /** \details This class implements FileException object with a Result code of eFileException, and the filename of the object related to the error. Library: TD_Root */ class FIRSTDLL_EXPORT OdError_CantOpenFile : public OdError_FileException { public: /** \param filename [in] Filename. */ OdError_CantOpenFile(const OdString& filename); }; /** \details This class implements FileException object with a Result code of eFileWriteError, and the filename of the object related to the error. Library: TD_Root */ class FIRSTDLL_EXPORT OdError_FileWriteError : public OdError_FileException { public: /** \param filename [in] Filename. */ OdError_FileWriteError(const OdString& filename); }; /** \details This class implements OdError objects with Result codes of eInvalidIndex. Library: TD_Root */ class FIRSTDLL_EXPORT OdError_InvalidIndex : public OdError { public: OdError_InvalidIndex(); }; /** \details This class implements OdError objects with Result codes of eInvalidKey. Library: TD_Root */ class FIRSTDLL_EXPORT OdError_InvalidKey: public OdError { public: OdError_InvalidKey(); }; /** \details This class is the base class for classes that provide platform-dependent file operations for Teigha. Library: TD_Root */ class FIRSTDLL_EXPORT OdRxSystemServices : public OdRxObject { public: OdRxSystemServices() { #if defined _WIN32_WCE srand(GetTickCount()); #else Od_srand((unsigned int) time(0)); #endif } ///////////////// FILE SYSTEM SERVICES ////////////////// /** \details Creates and/or opens the specified file. \param filename [in] Filename. \param accessMode [in] Access mode. \param shareMode [in] Share mode. \param creationDisposition [in] Creation disposition. \remarks Returns a SmartPointer to an OdStreamBuf object for the file. accessMode must be a combination of one or more of the following: Name Value Description Oda::kFileRead 0x80000000 Read access. Oda::kFileWrite 0x40000000 Write access.
shareMode must be one of the following: Name Value Description Oda::kShareDenyReadWrite 0x10 deny read/write mode Oda::kShareDenyWrite 0x20 deny write mode Oda::kShareDenyRead 0x30 deny read mode Oda::kShareDenyNo 0x40 deny none mode
Creation disposition must be one of the following: Name Value Description Oda::kCreateNew 1 Creates a new file; fails if the specified file already exists. Oda::kCreateAlways 2 Creates a new file; overwrites any existing file. Oda::kOpenExisting 3 Opens the file; fails if the file does not exist. Oda::kOpenAlways 4 Opens the file; creates the file if it does not exist. Oda::kTruncateExisting 5 Truncates the file; fails if the file does not exist. The file must be open at least Oda::kFileWrite.
*/ virtual OdStreamBufPtr createFile( const OdString& filename, Oda::FileAccessMode accessMode = Oda::kFileRead, Oda::FileShareMode shareMode = Oda::kShareDenyNo, Oda::FileCreationDisposition creationDisposition = Oda::kOpenExisting) = 0; /** \details Returns true if and only if the specified file can be accessed in the specified mode. \param filename [in] Filename. \param accessMode [in] Access mode. \remarks accessMode must be a combination of one or more of the following: Name Value Description .. 0 File exists. Oda::kFileRead 0x80000000 Read access. Oda::kFileWrite 0x40000000 Write access.
*/ virtual bool accessFile(const OdString& filename, int accessMode) = 0; /** \details Returns the creation time of the specified file. \param filename [in] Filename. \remarks On most platforms, this function will be implemented with the stat function (stat::st_ctime). */ virtual OdInt64 getFileCTime(const OdString& filename) = 0; /** \details Returns the modification time of the specified file. \param filename [in] Filename. \remarks On most platforms, this function will be implemented with the stat function (stat::st_mtime). */ virtual OdInt64 getFileMTime(const OdString& filename) = 0; /** \details Returns the size of the specified file. \param filename [in] Filename. \remarks On most platforms, this function will be implemented with the stat function (stat::st_size). */ virtual OdInt64 getFileSize(const OdString& filename) = 0; /** \details Returns a message string formatted using a vsprintf-style format string and argument list. \param formatID [in] String resource identifier containing the format string. \param argList [in] Argument list. */ virtual OdString formatMessage(unsigned int formatId, va_list* argList= 0) = 0; /** \details Assigns a value to this String object using a printf-style format string and arguments. \param formatID [in] String resource identifier containing the format string. \remarks Returns a reference to this String Object. */ virtual OdString formatMsg(unsigned int formatId, ...); /** \details Returns the system code page. */ virtual OdCodePageId systemCodePage() const = 0; /** \details Returns a newly generated Globally Unique IDentifier (GUID) for this SystemServices object. */ virtual OdString createGuid(); /** \details Loads the specified physical (platform-dependent) module. \remarks Appends the appropriate version suffix onto the supplied module name. Returns the abstract (platform independent) module object, which represents module functionality in Teigha. \param moduleFileName [in] Module filename to load. \param silent [in] If true, no load status message will be printed. */ virtual OdRxModule* loadModule(const OdString& moduleFileName, bool silent); /** \details Unloads the specified physical (platform-dependent) module. \param pModuleObj [in] Pointer to the module object to be unloaded. */ virtual void unloadModule(OdRxModule* pModuleObj); /** \details Returns the filename associated with the specified application name. \param applicationName [in] TX application name. */ virtual OdString findModule(const OdString& applicationName); /** \details Displays in some manner the specified warning message. \param warnVisGroup [in] Group of warning message visibility (always visible if it is an empty) \param message [in] Warning message. */ virtual void warning(const OdString& message); virtual void warning(const char* warnVisGroup, const OdString& message); /** \details Loads the specified physical (platform-dependent) module. \remarks Returns the abstract (platform independent) module object, which represents module functionality in Teigha. \param moduleFileName [in] Module filename to load. \param silent [in] If true, no load status message will be printed. */ static OdRxModule* loadModuleLib(const OdString& moduleFileName, bool silent); /** \details Inits/Uninits the modeler library (platform-dependent) module. \remarks Should return eOk, if (un)initialization is implemented inside (un)initModelerLibrary. Or eNotImplemented if default module (un)initialization required. \note Used for custom initialization/uninitialization of Spatial ACIS library. */ virtual OdResult initModelerLibrary(OdRxDictionary *pDict); virtual OdResult uninitModelerLibrary(OdRxDictionary *pDict); #if defined(_DEBUG) && defined(_WIN32) static void dontFreeLibrary(std::vector* notFreedDlls) { s_notFreedDlls = notFreedDlls; } private: FIRSTDLL_EXPORT_STATIC static std::vector* s_notFreedDlls; #endif }; /** \details This template class is a specialization of the OdSmartPtr class for OdRxSystemServices object pointers. */ typedef OdSmartPtr OdRxSystemServicesPtr; FIRSTDLL_EXPORT OdRxSystemServices* odrxSystemServices(); #include "TD_PackPop.h" #endif // #ifndef _ODRXSYSTEMSERVICES_INCLUDED_