home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / ocfinc.pak / OCSTORAG.H < prev    next >
C/C++ Source or Header  |  1997-07-23  |  9KB  |  249 lines

  1. //
  2. //----------------------------------------------------------------------------
  3. // ObjectComponents
  4. // (C) Copyright 1994 by Borland International, All Rights Reserved
  5. //
  6. //   Definition of TOcStorage & TOcStream classes
  7. //----------------------------------------------------------------------------
  8. #if !defined(OCF_OCSTORAG_H)
  9. #define OCF_OCSTORAG_H
  10.  
  11. #if !defined(OCF_OCDEFS_H)
  12. # include <ocf/ocdefs.h>
  13. #endif
  14.  
  15. // Classes defined
  16. //
  17. class _ICLASS TOcStream;
  18. class _ICLASS TOcStorage;
  19.  
  20. // Classes referenced
  21. //
  22. class _ICLASS IRootStorage;
  23. class _ICLASS IStorage;
  24. class _ICLASS IStream;
  25. class _ICLASS ILockBytes;
  26. class _ICLASS IEnumSTATSTG;
  27.  
  28. //----------------------------------------------------------------------------
  29. // Storage definitions & types
  30. //----------------------------------------------------------------------------
  31. #if !defined(HUGE)
  32. # if defined(BI_PLAT_WIN16)
  33. #   define HUGE  __huge
  34. # else
  35. #   define HUGE
  36. # endif
  37. #endif
  38.  
  39. #if !defined(__WIN32__)
  40.  
  41. #if !defined(_COMPOBJ_H_)
  42.   struct far ULARGE_INTEGER {unsigned long LowPart; unsigned long HighPart;};
  43.   struct far  LARGE_INTEGER {unsigned long LowPart;   signed long HighPart;};
  44. #endif
  45.  
  46. typedef char far* far* SNB;
  47.  
  48. #if !defined(_FILETIME_)
  49. # define _FILETIME_
  50.   struct far FILETIME {uint32 dwLowDateTime; uint32 dwHighDateTime;};
  51. #endif
  52.  
  53. #if !defined(_STORAGE_H_)
  54. struct far STATSTG {
  55.   char far* pwcsName;
  56.   uint32    type;
  57.   ULARGE_INTEGER cbSize;
  58.   FILETIME  mtime;
  59.   FILETIME  ctime;
  60.   FILETIME  atime;
  61.   uint32    grfMode;
  62.   uint32    grfLocksSupported;
  63.   IID       clsid;
  64.   uint32    grfStateBits;
  65.   uint32    reserved;
  66. };
  67. #define STATFLAG_NONAME 1
  68.  
  69. #define STGM_DIRECT           0x00000000L
  70. #define STGM_TRANSACTED       0x00010000L
  71. #define STGM_READ             0x00000000L
  72. #define STGM_WRITE            0x00000001L
  73. #define STGM_READWRITE        0x00000002L
  74. #define STGM_SHARE_EXCLUSIVE  0x00000010L
  75. #define STGM_SHARE_DENY_WRITE 0x00000020L
  76. #define STGM_SHARE_DENY_READ  0x00000030L
  77. #define STGM_SHARE_DENY_NONE  0x00000040L
  78. #define STGM_CREATE           0x00001000L
  79. #define STGM_TRANSACTED       0x00010000L
  80. #define STGM_CONVERT          0x00020000L
  81. #define STGM_PRIORITY         0x00040000L
  82. #define STGM_DELETEONRELEASE  0x04000000L
  83.  
  84. enum STREAM_SEEK {
  85.   STREAM_SEEK_SET = 0,
  86.   STREAM_SEEK_CUR = 1,
  87.   STREAM_SEEK_END = 2
  88. };
  89.  
  90. enum STGC {
  91.   STGC_DEFAULT = 0,
  92.   STGC_OVERWRITE  = 1,
  93.   STGC_ONLYIFCURRENT  = 2,
  94.   STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4
  95. };
  96.  
  97. DEFINE_OLEGUID(IID_IRootStorage, 0x00000012L, 0, 0);    // coguid.h
  98.  
  99. class _ICLASS IStream : public IUnknown {
  100.   public:
  101.     virtual HRESULT _IFUNC Read(void _huge*, uint32, uint32 far*);
  102.     virtual HRESULT _IFUNC Write(void const _huge*, uint32, uint32 far*);
  103.     virtual HRESULT _IFUNC Seek(LARGE_INTEGER, uint32, ULARGE_INTEGER far*);
  104.     virtual HRESULT _IFUNC SetSize(ULARGE_INTEGER);
  105.     virtual HRESULT _IFUNC CopyTo(IStream*, ULARGE_INTEGER, ULARGE_INTEGER far*, ULARGE_INTEGER far*);
  106.     virtual HRESULT _IFUNC Commit(uint32);
  107.     virtual HRESULT _IFUNC Revert();
  108.     virtual HRESULT _IFUNC LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, uint32);
  109.     virtual HRESULT _IFUNC UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER, uint32);
  110.     virtual HRESULT _IFUNC Stat(STATSTG far*, uint32);
  111.     virtual HRESULT _IFUNC Clone(IStream* far*);
  112. };
  113.  
  114. class _ICLASS IStorage : public IUnknown {
  115.   public:
  116.     virtual HRESULT _IFUNC CreateStream(const char far*, uint32, uint32, uint32, IStream* far*);
  117.     virtual HRESULT _IFUNC OpenStream(const char far*, void far*, uint32, uint32, IStream* far*);
  118.     virtual HRESULT _IFUNC CreateStorage(const char far*, uint32, uint32, uint32, IStorage* far*);
  119.     virtual HRESULT _IFUNC OpenStorage(const char far*, IStorage*, uint32, SNB, uint32, IStorage* far*);
  120.     virtual HRESULT _IFUNC CopyTo(uint32, IID const far*, SNB, IStorage*);
  121.     virtual HRESULT _IFUNC MoveElementTo(char const far*, IStorage*, char const far*, uint32);
  122.     virtual HRESULT _IFUNC Commit(uint32);
  123.     virtual HRESULT _IFUNC Revert();
  124.     virtual HRESULT _IFUNC EnumElements(uint32, void far*, uint32, IEnumSTATSTG* far*);
  125.     virtual HRESULT _IFUNC DestroyElement(const char far*);
  126.     virtual HRESULT _IFUNC RenameElement(const char far*, const char far*);
  127.     virtual HRESULT _IFUNC SetElementTimes(const char far*, FILETIME const far*, FILETIME const far*, FILETIME const far*);
  128.     virtual HRESULT _IFUNC SetClass(const IID far&);
  129.     virtual HRESULT _IFUNC SetStateBits(uint32, uint32);
  130.     virtual HRESULT _IFUNC Stat(STATSTG far*, uint32);
  131. };
  132.  
  133. class _ICLASS IRootStorage : public IUnknown {
  134.   public:
  135.     virtual HRESULT _IFUNC SwitchToFile(const char far* lpstrFile);
  136. };
  137.  
  138. class _ICLASS ILockBytes : public IUnknown {};  // member functions not called
  139. #endif  // #if !defined(_STORAGE_H_)
  140. #endif  // #if !defined(__WIN32__)
  141.  
  142. //
  143. //
  144. //
  145. class _OCFCLASS TOcStream {
  146.   public:
  147.     TOcStream(TOcStorage& storage, const char far* name, bool create,
  148.               uint32 mode = STGM_READWRITE);
  149.     TOcStream(TOcStream& stream);
  150.     TOcStream(IStream* stream);
  151.    ~TOcStream();
  152.  
  153.     IStream* GetIStream();
  154.  
  155.     HRESULT Read(void HUGE* pv, ulong cb, ulong far* read = 0);
  156.     HRESULT Write(void const HUGE* pv, ulong cb, ulong far* written = 0);
  157.     HRESULT Seek(int64 move, uint32 origin= STREAM_SEEK_SET,
  158.                  uint64 far* newPosition = 0);
  159.     HRESULT SetSize(uint64 newSize);
  160.     HRESULT CopyTo(TOcStream& stream, uint64 cb, uint64 far* read = 0,
  161.                    uint64 far* written = 0);
  162.     HRESULT Commit(uint32 commitFlags);
  163.     HRESULT Revert();
  164.     HRESULT LockRegion(uint64 offset, uint64 cb, uint32 lockType);
  165.     HRESULT UnlockRegion(uint64 offset, uint64 cb, uint32 lockType);
  166.     HRESULT Stat(STATSTG far* statstg, uint32 statFlag);
  167.  
  168.   protected:
  169.     HRESULT Clone(IStream far* far* ppstm);
  170.  
  171.     IStream* StreamI;
  172. };
  173.  
  174. //
  175. //
  176. //
  177. class _OCFCLASS TOcStorage {
  178.   public:
  179.     TOcStorage(const char far* fileName, bool create,
  180.                uint32 mode = STGM_READWRITE|STGM_TRANSACTED);
  181.     TOcStorage(ILockBytes far* lkbyt, bool create,
  182.                uint32 mode = STGM_READWRITE|STGM_TRANSACTED);
  183.     TOcStorage(TOcStorage& parent, const char far* name, bool create,
  184.                uint32 mode = STGM_READWRITE);
  185.     TOcStorage(IStorage* storage);
  186.    ~TOcStorage();
  187.  
  188.     IStorage* GetIStorage();
  189.  
  190.     HRESULT CopyTo(uint32 ciidExclude, IID const far* rgiidExclude,
  191.                    SNB snbExclude, TOcStorage& dest);
  192.     HRESULT MoveElementTo(char const far* name, TOcStorage& dest,
  193.                           char const far* newName, uint32 grfFlags);
  194.     HRESULT Commit(uint32 grfCommitFlags);
  195.     HRESULT Revert();
  196.     HRESULT EnumElements(uint32 reserved1, void far* reserved2,
  197.                          uint32 reserved3, IEnumSTATSTG far*far* ppenm);
  198.     HRESULT DestroyElement(const char far* name);
  199.     HRESULT RenameElement(const char far* oldName, const char far* newName);
  200.     HRESULT SetElementTimes(const char far* name, FILETIME const far* pctime,
  201.                             FILETIME const far* patime,
  202.                             FILETIME const far* pmtime);
  203.     HRESULT SetClass(const IID far& clsid);
  204.     HRESULT SetStateBits(uint32 grfStateBits, uint32 grfMask);
  205.     HRESULT Stat(STATSTG far *pstatstg, uint32 grfStatFlag);
  206.  
  207.     HRESULT SwitchToFile(const char far* newPath);
  208.  
  209.     static HRESULT IsStorageFile(const char far* pwcsName);
  210.     static HRESULT IsStorageILockBytes(ILockBytes far* plkbyt);
  211.     static HRESULT SetTimes(char const far* lpszName,
  212.                             FILETIME const far* pctime,
  213.                             FILETIME const far* patime,
  214.                             FILETIME const far* pmtime);
  215.  
  216.   protected:
  217.     HRESULT CreateStream(const char far* name, uint32 mode, uint32 rsrvd1,
  218.                          uint32 rsrvd2, IStream far* far* stream);
  219.     HRESULT OpenStream(const char far* name, void far *rsrvd1, uint32 grfMode,
  220.                        uint32 rsrvd2, IStream far *far *stream);
  221.     HRESULT CreateStorage(const char far* name, uint32 mode, uint32 rsrvd1,
  222.                           uint32 rsrvd2, IStorage far*far* storage);
  223.     HRESULT OpenStorage(const char far* name, IStorage far* stgPriority,
  224.                         uint32 mode, SNB snbExclude, uint32 rsrvd,
  225.                         IStorage far*far* storage);
  226.     ulong   AddRef();
  227.     ulong   Release();
  228.  
  229. #if 0  // not currently implemented
  230. //    TOcStorage*    GetParent() const {return Parent;}
  231. //    int            GetOpenMode() const {return OpenMode;}
  232. //    void           SetOpenMode(int mode) const {OpenMode = mode;}
  233.  
  234.   protected:
  235. //    int         ThisOpen;     // actual mode bits used for opening storage
  236.  
  237.   private:
  238. //    int         OpenMode;     // mode and protection flags
  239. //    int         OpenCount;
  240. //    TOcStorage* Parent;
  241. #endif
  242.     IStorage*   StorageI;
  243.     
  244.   friend TOcStream;
  245. };
  246.  
  247. #endif  // OCF_OCSTORAG_H
  248.  
  249.