/*
* Copyright 2011 Google Inc .
*
* Use of this source code is governed by a BSD - style license that can be
* found in the LICENSE file .
*/
#ifndef SkIStream_DEFINED
#define SkIStream_DEFINED
#include "include/core/SkTypes.h"
#ifdef SK_BUILD_FOR_WIN
#include "src/base/SkLeanWindows.h"
#include "src/utils/win/SkObjBase.h"
#include <ole2.h>
class SkStream;
class SkWStream;
/**
* A bare IStream implementation which properly reference counts
* but returns E_NOTIMPL for all ISequentialStream and IStream methods .
*/
class SkBaseIStream : public IStream {
public:
// IUnknown methods
SK_STDMETHODIMP QueryInterface(REFIID iid, void ** ppvObject) override;
SK_STDMETHODIMP_(ULONG) AddRef() override;
SK_STDMETHODIMP_(ULONG) Release() override;
// ISequentialStream methods
SK_STDMETHODIMP Read(void * pv, ULONG cb, ULONG* pcbRead) override;
SK_STDMETHODIMP Write(void const * pv, ULONG cb, ULONG* pcbWritten) override;
// IStream methods
SK_STDMETHODIMP SetSize(ULARGE_INTEGER) override;
SK_STDMETHODIMP CopyTo(IStream*, ULARGE_INTEGER, ULARGE_INTEGER*, ULARGE_INTEGER*) override;
SK_STDMETHODIMP Commit(DWORD) override;
SK_STDMETHODIMP Revert() override;
SK_STDMETHODIMP LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) override;
SK_STDMETHODIMP UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD) override;
SK_STDMETHODIMP Clone(IStream**) override;
SK_STDMETHODIMP Seek(LARGE_INTEGER liDistanceToMove,
DWORD dwOrigin,
ULARGE_INTEGER* lpNewFilePointer) override;
SK_STDMETHODIMP Stat(STATSTG* pStatstg, DWORD grfStatFlag) override;
protected :
explicit SkBaseIStream();
virtual ~SkBaseIStream();
private :
LONG _refcount;
};
/**
* A minimal read - only IStream implementation which wraps an SkStream .
*/
class SkIStream : public SkBaseIStream {
public:
HRESULT static CreateFromSkStream(std::unique_ptr<SkStreamAsset>, IStream** ppStream);
SK_STDMETHODIMP Read(void * pv, ULONG cb, ULONG* pcbRead) override;
SK_STDMETHODIMP Write(void const * pv, ULONG cb, ULONG* pcbWritten) override;
SK_STDMETHODIMP Seek(LARGE_INTEGER liDistanceToMove,
DWORD dwOrigin,
ULARGE_INTEGER* lpNewFilePointer) override;
SK_STDMETHODIMP Stat(STATSTG* pStatstg, DWORD grfStatFlag) override;
private :
const std::unique_ptr<SkStream> fSkStream;
ULARGE_INTEGER fLocation;
explicit SkIStream(std::unique_ptr<SkStreamAsset>);
~SkIStream() override;
};
/**
* A minimal write - only IStream implementation which wraps an SkWIStream .
*/
class SkWIStream : public SkBaseIStream {
public:
HRESULT static CreateFromSkWStream(SkWStream* stream, IStream ** ppStream);
SK_STDMETHODIMP Write(void const * pv, ULONG cb, ULONG* pcbWritten) override;
SK_STDMETHODIMP Commit(DWORD) override;
SK_STDMETHODIMP Stat(STATSTG* pStatstg, DWORD grfStatFlag) override;
private :
SkWStream *fSkWStream;
SkWIStream(SkWStream* stream);
~SkWIStream() override;
};
#endif // SK_BUILD_FOR_WIN
#endif // SkIStream_DEFINED
Messung V0.5 in Prozent C=80 H=92 G=86
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-08-26)
¤
*© Formatika GbR, Deutschland