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