1 /* $Id$ $Revision$ */ 2 /* vim:set shiftwidth=4 ts=8: */ 3 4 /************************************************************************* 5 * Copyright (c) 2011 AT&T Intellectual Property 6 * All rights reserved. This program and the accompanying materials 7 * are made available under the terms of the Eclipse Public License v1.0 8 * which accompanies this distribution, and is available at 9 * http://www.eclipse.org/legal/epl-v10.html 10 * 11 * Contributors: See CVS logs. Details at http://www.graphviz.org/ 12 *************************************************************************/ 13 14 #ifndef GV_FILESTREAM_H 15 #define GV_FILESTREAM_H 16 17 #include <stdio.h> 18 #include <sys/stat.h> 19 #include <objbase.h> 20 21 22 23 class FileStream : public IStream 24 { 25 public: 26 static IStream *Create(char* name, FILE *file); 27 28 /* IUnknown methods */ 29 30 virtual HRESULT STDMETHODCALLTYPE QueryInterface( 31 REFIID riid, 32 void **ppvObject); 33 34 virtual ULONG STDMETHODCALLTYPE AddRef(); 35 36 virtual ULONG STDMETHODCALLTYPE Release(); 37 38 /* ISequentialStream methods */ 39 40 virtual HRESULT STDMETHODCALLTYPE Read( 41 void *pv, 42 ULONG cb, 43 ULONG *pcbRead); 44 45 virtual HRESULT STDMETHODCALLTYPE Write( 46 const void *pv, 47 ULONG cb, 48 ULONG *pcbWritten); 49 50 /* IStream methods */ 51 52 virtual HRESULT STDMETHODCALLTYPE Seek( 53 LARGE_INTEGER dlibMove, 54 DWORD dwOrigin, 55 ULARGE_INTEGER *plibNewPosition); 56 57 virtual HRESULT STDMETHODCALLTYPE SetSize( 58 ULARGE_INTEGER libNewSize); 59 60 virtual HRESULT STDMETHODCALLTYPE CopyTo( 61 IStream *pstm, 62 ULARGE_INTEGER cb, 63 ULARGE_INTEGER *pcbRead, 64 ULARGE_INTEGER *pcbWritten); 65 66 virtual HRESULT STDMETHODCALLTYPE Commit( 67 DWORD grfCommitFlags); 68 69 virtual HRESULT STDMETHODCALLTYPE Revert(); 70 71 virtual HRESULT STDMETHODCALLTYPE LockRegion( 72 ULARGE_INTEGER libOffset, 73 ULARGE_INTEGER cb, 74 DWORD dwLockType); 75 76 virtual HRESULT STDMETHODCALLTYPE UnlockRegion( 77 ULARGE_INTEGER libOffset, 78 ULARGE_INTEGER cb, 79 DWORD dwLockType); 80 81 virtual HRESULT STDMETHODCALLTYPE Stat( 82 STATSTG *pstatstg, 83 DWORD grfStatFlag); 84 85 virtual HRESULT STDMETHODCALLTYPE Clone( 86 IStream **ppstm); 87 88 private: 89 FileStream(char *name, FILE *file); 90 91 static void UnixTimeToFileTime(time_t unixTime, FILETIME &fileTime); 92 93 ULONG _ref; 94 char *_name; 95 FILE *_file; 96 97 }; 98 99 #endif 100