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