3 changed files with 95 additions and 24 deletions
			
			
		@ -0,0 +1,41 @@
					 | 
				
			||||
#include <iostream> // std::ios | 
				
			||||
#include <memory>   // std::make_unique | 
				
			||||
 | 
				
			||||
#include "inferno/file.h" | 
				
			||||
 | 
				
			||||
namespace Inferno { | 
				
			||||
 | 
				
			||||
	std::string File::read(const std::string &path) | 
				
			||||
	{ | 
				
			||||
		// Create input stream object and open file
 | 
				
			||||
		std::ifstream file(path.c_str()); | 
				
			||||
		NF_CORE_ASSERT(file.is_open(), "File could not open: %s", path.c_str()); | 
				
			||||
 | 
				
			||||
		// Check if file exists
 | 
				
			||||
		if (!file.is_open()) { | 
				
			||||
			return nullptr; | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		// Get length of the file
 | 
				
			||||
		file.seekg(0, std::ios::end); | 
				
			||||
		int length = file.tellg(); | 
				
			||||
		file.seekg(0, std::ios::beg); | 
				
			||||
		NF_CORE_ASSERT(length != -1, "File could not determine length: %s", path.c_str()); | 
				
			||||
 | 
				
			||||
		// Check for valid file length
 | 
				
			||||
		if (length == -1) { | 
				
			||||
			return nullptr; | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		// Allocate memory filled with zeros
 | 
				
			||||
		auto buffer = std::make_unique<char[]>(length + 1); | 
				
			||||
 | 
				
			||||
		// Fill buffer with file contents
 | 
				
			||||
		file.read(buffer.get(), length); | 
				
			||||
		file.close(); | 
				
			||||
 | 
				
			||||
		// Create string from the buffer and return
 | 
				
			||||
		return std::string(buffer.get(), length + 1); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
} | 
				
			||||
@ -0,0 +1,45 @@
					 | 
				
			||||
#ifndef FILE_H | 
				
			||||
#define FILE_H | 
				
			||||
 | 
				
			||||
#include <fstream> // std::ifstream, std::ofstream | 
				
			||||
#include <iomanip> // std::setfill, std::setw | 
				
			||||
#include <string>  // std::string | 
				
			||||
 | 
				
			||||
#include "inferno/core.h" | 
				
			||||
#include "inferno/log.h" | 
				
			||||
 | 
				
			||||
namespace Inferno { | 
				
			||||
 | 
				
			||||
	class File { | 
				
			||||
	public: | 
				
			||||
		static std::string read(const std::string &path); | 
				
			||||
 | 
				
			||||
		template<typename T> | 
				
			||||
		static void ioRead(T &t, const std::string &path) | 
				
			||||
		{ | 
				
			||||
			std::ifstream file(path); | 
				
			||||
			NF_CORE_ASSERT(file.is_open(), "File could not open: %s", path.c_str()); | 
				
			||||
 | 
				
			||||
			if (file.is_open()) { | 
				
			||||
				file >> t; | 
				
			||||
				file.close(); | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		template<typename T> | 
				
			||||
		static void ioWrite(T &t, const std::string &path) | 
				
			||||
		{ | 
				
			||||
			std::ofstream file (path); | 
				
			||||
			NF_CORE_ASSERT(file.is_open(), "File could not open: %s", path.c_str()); | 
				
			||||
 | 
				
			||||
			if (file.is_open()) { | 
				
			||||
				// Write file with single tabs, nicely formatted
 | 
				
			||||
				file << std::setfill ('\t') << std::setw(1) << t << std::endl; | 
				
			||||
				file.close(); | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
	}; | 
				
			||||
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
#endif // FILE_H
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue