Rick van Vonderen
5 years ago
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