Files
Leviathan/Library/Internal/include/sound/XStreamReader.h
T
2026-06-01 12:46:52 +02:00

54 lines
897 B
C++

#pragma once
#include <stdio.h>
#include <string.h>
#include "../toolkit/safe_function.h"
struct XStreamReader
{
virtual ~XStreamReader() {}
virtual size_t Read( void * p, size_t len ) = 0;
virtual bool Seek( long pos, int cur ) = 0;
virtual bool IsEOF() = 0;
};
struct XFileStreamReader : XStreamReader
{
XFileStreamReader( const char *szFileName )
{
if( szFileName ) s_strcpy( szName, _countof( szName ), szFileName );
fp = NULL;
fopen_s( &fp, szFileName, "rb" );
}
virtual ~XFileStreamReader()
{
if( fp )
{
fclose( fp );
}
}
size_t Read( void * p, size_t len )
{
if( p ) return fread( p, 1, len, fp );
if( fseek( fp, (long)len, SEEK_CUR ) ) return static_cast< size_t >( -1 );
return len;
}
bool IsEOF()
{
return !!feof( fp );
}
bool Seek( long pos, int cur )
{
return !fseek( fp, pos, cur );
}
private:
char szName[256];
FILE *fp;
};