diff --git a/src/fart/Parser.cpp b/src/fart/Parser.cpp index 319f6e2..f7efe17 100644 --- a/src/fart/Parser.cpp +++ b/src/fart/Parser.cpp @@ -1,6 +1,12 @@ #include +#include -Scene * load_scene(const string_view & input_file) +Scene * Parser::load_scene(const string_view & input_file) { + opt> input = read_file(input_file); + if (!input) + { + return nullptr; + } return nullptr; } diff --git a/src/fart/read_file.cpp b/src/fart/read_file.cpp new file mode 100644 index 0000000..f36bf7f --- /dev/null +++ b/src/fart/read_file.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +opt> read_file(string_view fname) +{ + string path(fname); + FILE * fh = fopen(path.c_str(), "rb"); + if (fh == nullptr) + { + fprintf(stderr, "Error opening input file '%s': %s\n", path.c_str(), strerror(errno)); + return std::nullopt; + } + + std::vector buffer; + uint8_t chunk[4096]; + size_t n; + while ((n = fread(chunk, 1u, sizeof(chunk), fh)) > 0u) + { + buffer.insert(buffer.end(), chunk, chunk + n); + } + if (ferror(fh)) + { + fprintf(stderr, "Error reading input file '%s': %s\n", path.c_str(), strerror(errno)); + fclose(fh); + return std::nullopt; + } + fclose(fh); + + return buffer; +} diff --git a/src/fart/read_file.h b/src/fart/read_file.h new file mode 100644 index 0000000..74741f1 --- /dev/null +++ b/src/fart/read_file.h @@ -0,0 +1,6 @@ +#pragma once + +#include +#include + +opt> read_file(string_view fname);