MemoryStream.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* MemoryStream.h */
  2. /* Copyright (c) 1998 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01h,10dec01,dbs  diab build
  7. 01g,27jun01,dbs  fix include paths and names
  8. 01f,01feb00,nel  Added ComTrack code
  9. 01e,28may99,dbs  use new STL usage
  10. 01d,26may99,dbs  move over to STL collections
  11. 01c,12may99,dbs  add methods to stream-class to access raw storage
  12. 01b,23apr99,dbs  added SimpleStream interface
  13. 01a,19apr99,dbs  created
  14.   */
  15. #ifndef __INCMemoryStream_h
  16. #define __INCMemoryStream_h
  17. // Inhibit ComTrack for these internal classes
  18. #ifdef VXDCOM_COMTRACK_LEVEL
  19. #undef VXDCOM_COMTRACK_LEVEL
  20. #endif
  21. #define VXDCOM_COMTRACK_LEVEL 0
  22. #include "comObjLib.h" // for IStream
  23. #include "private/comStl.h"             // for std::vector class
  24. ///////////////////////////////////////////////////////////////////////////
  25. //
  26. // ISimpleStream interface - purely for internal use within VxDCOM,
  27. // this interface provides a lightweight version of the official COM
  28. // IStream interface, with 32-bit args (rather than 64-bit as in
  29. // IStream) and fewer members.
  30. //
  31. // As this is a LOCAL interface, and not intended ever to be remoted
  32. // (that is what IStream is for) it does not return HRESULTs but
  33. // rather returns results directly as return values.
  34. //
  35. interface ISimpleStream : public IUnknown
  36.     {
  37.     virtual ULONG STDMETHODCALLTYPE extract
  38. (
  39. void* pv, // buffer to extract to
  40. ULONG nb // num bytes to extract
  41. ) =0;
  42.     virtual ULONG STDMETHODCALLTYPE insert
  43. (
  44. const void* pv, // data to insert
  45. ULONG nb // num bytes to insert
  46. ) =0;
  47.     virtual ULONG STDMETHODCALLTYPE locationSet
  48. (
  49. ULONG index // index to seek to
  50. ) =0;
  51.     virtual ULONG STDMETHODCALLTYPE locationGet () =0;
  52.     virtual ULONG STDMETHODCALLTYPE size () =0;
  53.     };
  54. EXTERN_C const IID IID_ISimpleStream;
  55. ///////////////////////////////////////////////////////////////////////////
  56. //
  57. // Memory-based IStream objects. Built using WOTL classes, so uses
  58. // task-allocator for memory automatically. Implements both IStream
  59. // and ISimpleStream.
  60. //
  61. class MemoryStream : public CComObjectRoot,
  62.      public IStream,
  63.      public ISimpleStream
  64.     {
  65.   private:
  66.     typedef STL_VECTOR(char) VECTOR;
  67.     typedef VECTOR::iterator ITERATOR;
  68.     
  69.     VECTOR m_vector; // storage
  70.     ULONG m_curr; // curr location
  71.   public:
  72.     MemoryStream ();
  73.     ~MemoryStream ();
  74. #ifdef __DCC__
  75.     char*  begin () { return &(*(m_vector.begin ())); }
  76.     char*  end ()   { return &(*(m_vector.end ())); }
  77. #else
  78.     char*  begin () { return m_vector.begin (); }
  79.     char*  end () { return m_vector.end (); }
  80. #endif
  81.     size_t size () const { return m_vector.size (); }
  82.     //
  83.     // ISimpleStream methods
  84.     //
  85.     ULONG STDMETHODCALLTYPE extract (void*, ULONG);
  86.     ULONG STDMETHODCALLTYPE insert (const void*,ULONG);
  87.     ULONG STDMETHODCALLTYPE locationSet (ULONG);
  88.     ULONG STDMETHODCALLTYPE locationGet ();
  89.     ULONG STDMETHODCALLTYPE size ();
  90.     //
  91.     // IStream methods
  92.     //
  93.     HRESULT STDMETHODCALLTYPE Read (void*, ULONG, ULONG*);
  94.     HRESULT STDMETHODCALLTYPE Write (const void*, ULONG, ULONG*);
  95.     HRESULT STDMETHODCALLTYPE Seek (LARGE_INTEGER, DWORD, ULARGE_INTEGER*);
  96.     HRESULT STDMETHODCALLTYPE SetSize (ULARGE_INTEGER)
  97.         { return E_NOTIMPL; }
  98.     HRESULT STDMETHODCALLTYPE CopyTo (IStream*,
  99.       ULARGE_INTEGER,
  100.       ULARGE_INTEGER*,
  101.       ULARGE_INTEGER*)
  102.         { return E_NOTIMPL; }
  103.     HRESULT STDMETHODCALLTYPE Commit (DWORD)
  104.         { return E_NOTIMPL; }
  105.     HRESULT STDMETHODCALLTYPE Revert ()
  106.         { return E_NOTIMPL; }
  107.     HRESULT STDMETHODCALLTYPE LockRegion (ULARGE_INTEGER,
  108.   ULARGE_INTEGER,
  109.   DWORD)
  110.         { return E_NOTIMPL; }
  111.     HRESULT STDMETHODCALLTYPE UnlockRegion (ULARGE_INTEGER,
  112.     ULARGE_INTEGER,
  113.     DWORD)
  114.         { return E_NOTIMPL; }
  115.     HRESULT STDMETHODCALLTYPE Stat (STATSTG*, DWORD)
  116.         { return E_NOTIMPL; }
  117.     HRESULT STDMETHODCALLTYPE Clone (IStream**)
  118.         { return E_NOTIMPL; }
  119.     BEGIN_COM_MAP(MemoryStream)
  120.         COM_INTERFACE_ENTRY(ISimpleStream)
  121.         COM_INTERFACE_ENTRY(IStream)
  122.     END_COM_MAP()
  123.     };
  124. typedef CComObject<MemoryStream> VxRWMemStream;
  125. #endif