Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
filestream.cpp
#include "filestream.h"
P6DECLARE_IID( p6ICom );
P6DECLARE_IID( p6IDataStream );
using namespace P6R;
P6COMMETHODIMPL CFileStream::queryInterface( const P6R::IID &iid, P6R::P6VOID **ppIface )
{
if (!ppIface) return eAccessFault;
*ppIface = NULL;
if (iid == IID_p6ICom ) *ppIface = static_cast<p6IDataStream*>(this);
else if (iid == IID_p6IDataStream) *ppIface = static_cast<p6IDataStream*>(this);
else return eNoInterface;
reinterpret_cast<p6ICom*>(*ppIface)->addref();
return eOk;
}
CFileStream::~CFileStream()
{
if (NULL != m_pFile ) fclose( m_pFile );
if (NULL != m_pFilePath) free( m_pFilePath );
}
P6COMMETHODIMPL CFileStream::initialize( const P6R::P6CHAR* pFilePath )
{
if (m_bInitialized) return eAlreadyInitialized;
m_pFilePath = strdup( pFilePath );
if ( NULL != m_pFilePath )
{
m_bInitialized = P6TRUE;
return eOk;
}
else return eNoMemory;
}
P6COMMETHODIMPL CFileStream::beginStream()
{
if (!m_bInitialized) return P6R::eNotInitialized;
if ( NULL == m_pFile ) m_pFile = fopen ( m_pFilePath, "w+" );
if ( NULL == m_pFile )
return P6R::eFail;
else return P6R::eOk;
}
P6COMMETHODIMPL CFileStream::processStream( const P6R::P6VOID *pData, P6R::P6UINT32 cData )
{
if (!m_bInitialized) return eNotInitialized;
if (NULL == m_pFile) return eInvalidState;
P6UINT32 cWritten = (P6UINT32) fwrite( pData, 1, cData, m_pFile );
return (cWritten == cData ? eOk : eFail );
}
P6COMMETHODIMPL CFileStream::endStream()
{
if (!m_bInitialized) return eNotInitialized;
if (NULL == m_pFile) return eOk;
if ( 0 == fclose( m_pFile ))
{
m_pFile = NULL;
return eOk;
}
else return eFail;
}