#pragma once

#include <iostream>
#include <fstream>
#include <vector>



namespace util
{


//! ストリームのサイズを取得する.
//! ストリームを開いた直後に実行しなければならない.
inline size_t GetStreamSize( std::istream& stream )
{
	stream.seekg( 0 , std::ios::end );
	std::fstream::pos_type pos_end = stream.tellg();

	stream.seekg( 0 , std::ios::beg );
	std::fstream::pos_type pos_beg = stream.tellg();

	size_t stream_size = pos_end - pos_beg;
	return stream_size;
}


//! ストリームの内容をメモリに読み込む
inline void LoadBufferFromStream(std::vector<char>& o_buffer, std::istream& stream)
{
	size_t filesize = GetStreamSize(stream);
	o_buffer.resize( filesize );
	stream.read( &o_buffer[0] , filesize );
}

//! ファイルの内容をメモリに読み込む
inline bool LoadBufferFromFile(std::vector<char>& o_buffer, const char* filename)
{
	std::ifstream ifs( filename , std::ios::binary );
	if( !ifs.is_open() )
		return false;

	LoadBufferFromStream( o_buffer , ifs );
	return true;
}


}
