SBcacheMisc.hpp
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:5k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. // -----1=0-------2=0-------3=0-------4=0-------5=0-------6=0-------7=0-------8
  23. #ifndef _SBCACHE_MISC_H__
  24. #define _SBCACHE_MISC_H__
  25. #include <string>                // For STL string and wstring classes
  26. #include <sys/types.h> 
  27. #include <sys/stat.h>            // For stat( )
  28. #include "VXIcache.h"            // For VXIcacheResult
  29. #include "SBinetLogger.hpp"      // For SBinetLogger
  30. #include "SBcacheLog.h"          // For logging defines
  31. #include "SBtrdMutex.hpp"        // For SBtrd[...]Mutex
  32. #include "SBtrdRefCount.hpp"     // For SBtrdRefCount
  33. // String types
  34. typedef std::string SBcacheNString;
  35. typedef std::basic_string<VXIchar> SBcacheString;
  36. // Mutex for the cache
  37. typedef SBtrdMutex SBcacheMutex;
  38. typedef SBtrdReaderWriterMutex SBcacheReaderWriterMutex;
  39. typedef SBtrdMutexPool SBcacheMutexPool;
  40. typedef SBtrdRefCount SBcacheRefCount;
  41. // Key for the cache
  42. typedef SBcacheString SBcacheKey;
  43. // Path for a cache entry
  44. class SBcachePath {
  45. public:
  46.   static const char PATH_SEPARATOR;
  47. public:
  48.   // Constructors and destructor
  49.   SBcachePath( ) : _path(), _baseLen(0) { }
  50.   SBcachePath (const SBcacheNString &base, const SBcacheNString &relative) :
  51.     _path(base + PATH_SEPARATOR + relative), _baseLen(base.length( )) { }
  52.   virtual ~SBcachePath( ) { }
  53.   bool operator == (const SBcachePath& p) const { return _path == p._path; }
  54.   bool operator != (const SBcachePath& p) const { return _path != p._path; }
  55.   // Create the directory tree for the path
  56.   VXIcacheResult CreateDirectories( ) const;
  57.   // Clear the path
  58.   void Clear( ) { _baseLen = 0; _path = ""; }
  59.   // Accessors
  60.   SBcacheNString::size_type length( ) const { return _path.length( ); }
  61.   const SBcacheNString & str( ) const { return _path; }
  62.   const char * const c_str( ) const { return _path.c_str( ); }
  63. private:
  64.   SBcacheNString::size_type  _baseLen;
  65.   SBcacheNString             _path;
  66. };
  67. // VXIcacheStream base class definition, read/write access to an entry
  68. struct VXIcacheStream : public SBinetLogger {
  69. public:
  70.   // Constructor and destructor
  71.   VXIcacheStream (VXIlogInterface      *log, 
  72.   VXIunsigned           diagTagBase,
  73.   const SBcacheString  &moduleName,
  74.   const SBcacheKey     &key) : 
  75.     SBinetLogger(MODULE_SBCACHE, log, diagTagBase), _moduleName(moduleName),
  76.     _key(key) { }
  77.   virtual ~VXIcacheStream( ) { }
  78.   // Read and write
  79.   virtual VXIcacheResult Read (VXIbyte          *buffer,
  80.        VXIulong          buflen,
  81.        VXIulong         *nread) = 0;
  82.   virtual VXIcacheResult Write (const VXIbyte   *buffer,
  83. VXIulong         buflen,
  84. VXIulong        *nwritten) = 0;
  85.   // Close
  86.   virtual VXIcacheResult Close(bool invalidate) = 0;
  87.   // Get the key name
  88.   const SBcacheKey &GetKey( ) const { return _key; }
  89.   // Get the module name
  90.   const SBcacheString &GetModuleName( ) const { return _moduleName; }
  91. private:
  92.   SBcacheString _moduleName;
  93.   SBcacheKey    _key;
  94. };
  95. #ifdef WIN32
  96. #define WIN32_LEAN_AND_MEAN
  97. #include <windows.h>             // for CreateDirectory( )
  98. typedef struct _stat SBcacheStatInfo;
  99. inline bool SBcacheStat(const SBcacheNString &path, 
  100. SBcacheStatInfo *statInfo) {
  101.   return (_stat (path.c_str( ), statInfo) == 0 ? true : false); }
  102. inline bool SBcacheIsDir(const SBcacheStatInfo &statInfo) {
  103. #ifdef _S_ISDIR
  104.   return (_S_ISDIR(statInfo->st_mode) ? true : false);
  105. #else
  106.   return ((statInfo.st_mode & _S_IFDIR) ? true : false);
  107. #endif
  108. }
  109. inline bool SBcacheMkdir(const SBcacheNString &path) {
  110.   return (CreateDirectory (path.c_str( ), NULL) ? true : false); }
  111. #else /* ! WIN32 */
  112. typedef struct stat SBcacheStatInfo;
  113. inline bool SBcacheStat(const SBcacheNString &path, 
  114. SBcacheStatInfo *statInfo) {
  115.   return (stat (path.c_str( ), statInfo) == 0 ? true : false); }
  116. inline bool SBcacheIsDir(const SBcacheStatInfo &statInfo) {
  117. #ifdef S_ISDIR
  118.   return (S_ISDIR(statInfo.st_mode) ? true : false);
  119. #else
  120.   return ((statInfo.st_mode & S_IFDIR) ? true : false);
  121. #endif
  122. }
  123. #ifdef S_IRWXU
  124. #define SBCACHE_DIR_MASK (S_IRWXU|S_IRWXG|S_IRWXO)
  125. #else
  126. #edfine SBCACHE_DIR_MASK 777
  127. #endif
  128. inline bool SBcacheMkdir(const SBcacheNString &path) {
  129.   return (mkdir (path.c_str( ), SBCACHE_DIR_MASK) == 0 ? true : false); }
  130. #endif /* WIN32 */
  131. #endif /* include guard */