text: ﻿
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  #include <assert.h>
  #include <stdio.h>
  #include "Effekseer.DefaultFile.h"
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  namespace Effekseer { 
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  DefaultFileReader::DefaultFileReader( FILE* filePtr )
  	: m_filePtr( filePtr )
  {
  	assert( filePtr != NULL );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  DefaultFileReader::~DefaultFileReader()
  {
  	fclose( m_filePtr );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  size_t DefaultFileReader::Read( void* buffer, size_t size )
  {
  	return fread( buffer, 1, size, m_filePtr );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  void DefaultFileReader::Seek( int position )
  {
  	fseek( m_filePtr, (size_t)position, SEEK_SET );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  int DefaultFileReader::GetPosition()
  {
  	return (int)ftell( m_filePtr );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  size_t DefaultFileReader::GetLength()
  {
  	long position = ftell( m_filePtr );
  	fseek( m_filePtr, 0, SEEK_END );
  	long length = ftell( m_filePtr );
  	fseek( m_filePtr, position, SEEK_SET );
  	return (size_t)length;
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  DefaultFileWriter::DefaultFileWriter( FILE* filePtr )
  	: m_filePtr( filePtr )
  {
  	assert( filePtr != NULL );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  DefaultFileWriter::~DefaultFileWriter()
  {
  	fclose( m_filePtr );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  size_t DefaultFileWriter::Write( const void* buffer, size_t size )
  {
  	return fwrite( buffer, 1, size, m_filePtr );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  void DefaultFileWriter::Flush()
  {
  	fflush( m_filePtr );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  void DefaultFileWriter::Seek( int position )
  {
  	fseek( m_filePtr, (size_t)position, SEEK_SET );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  int DefaultFileWriter::GetPosition()
  {
  	return (int)ftell( m_filePtr );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  size_t DefaultFileWriter::GetLength()
  {
  	long position = ftell( m_filePtr );
  	fseek( m_filePtr, 0, SEEK_END );
  	long length = ftell( m_filePtr );
  	fseek( m_filePtr, position, SEEK_SET );
  	return (size_t)length;
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  FileReader* DefaultFileInterface::OpenRead( const EFK_CHAR* path )
  {
  	FILE* filePtr = NULL;
  #ifdef _WIN32
  	_wfopen_s( &filePtr, (const wchar_t*)path, L"rb" );
  #else
  	int8_t path8[256];
  	ConvertUtf16ToUtf8( path8, 256, (const int16_t*)path );
  	filePtr = fopen( (const char*)path8, "rb" );
  #endif
  	
  	if( filePtr == NULL )
  	{
  		return NULL;
  	}
  
  	return new DefaultFileReader( filePtr );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
  FileWriter* DefaultFileInterface::OpenWrite( const EFK_CHAR* path )
  {
  	FILE* filePtr = NULL;
  #ifdef _WIN32
  	_wfopen_s( &filePtr, (const wchar_t*)path, L"wb" );
  #else
  	int8_t path8[256];
  	ConvertUtf16ToUtf8( path8, 256, (const int16_t*)path );
  	filePtr = fopen( (const char*)path8, "wb" );
  #endif
  	
  	if( filePtr == NULL )
  	{
  		return NULL;
  	}
  
  	return new DefaultFileWriter( filePtr );
  }
  
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------
   } 
  //----------------------------------------------------------------------------------
  //
  //----------------------------------------------------------------------------------