#pragma once
#include <iostream>
#include <fstream>

namespace BinaryIO {
	template<typename T>
	std::ostream& BinaryWrite(std::ostream& stream, const T& value) {
		return stream.write(reinterpret_cast<const char*>(&value), sizeof(T));
	}

	template<typename T>
	std::istream & BinaryRead(std::istream& stream, T& value) {
		if (!stream.good()) 
			printf("bla");

		return stream.read(reinterpret_cast<char*>(&value), sizeof(T));
	}

	void WriteString(const std::string& stringToWrite, std::ofstream& outstream);
	std::string ReadString(std::ifstream & instream);
	std::string ReadString(std::ifstream& instream, size_t size);
	std::string ReadWString(std::ifstream& instream);

	inline bool DoesFileExist(const std::string& name) {
		std::ifstream f(name.c_str());
		return f.good();
	}
}