BLT/include/blt/fs/loader.h

58 lines
1.6 KiB
C
Raw Permalink Normal View History

2023-02-08 22:30:20 -05:00
/*
* Created by Brett on 08/02/23.
* Licensed under GNU General Public License V3.0
* See LICENSE file for license detail
*/
#ifndef BLT_TESTS_LOADER_H
#define BLT_TESTS_LOADER_H
#include <fstream>
#include <ios>
#include <vector>
#include <unordered_map>
#include <string>
#include <blt/std/string.h>
#include <blt/std/logging.h>
2023-11-13 15:15:27 -05:00
#include <unordered_set>
2023-02-08 22:30:20 -05:00
2023-11-13 15:15:27 -05:00
namespace blt::fs
{
struct include_guard
{
char open = '<';
char close = '>';
};
2024-01-19 16:30:35 -05:00
std::string getFile(std::string_view path);
2024-01-19 16:30:35 -05:00
std::vector<std::string> getLinesFromFile(std::string_view path);
2023-02-08 22:30:20 -05:00
2023-11-13 15:15:27 -05:00
/**
* Recursively include files
* @param path initial file to load
* @param include_header the beginning of the line that should be used to recognize when a line is to be treated as an include
* @param guards characters used to identify the parts that specify the file path. if empty it will assume everything after the include header
* @return a list of lines in all files. added together in order.
*/
2024-01-19 16:30:35 -05:00
std::vector<std::string> recursiveInclude(std::string_view path, const std::string& include_header = "#include",
2023-11-13 15:15:27 -05:00
const std::vector<include_guard>& guards = {{'<', '>'}, {'"', '"'}});
static inline std::string loadBrainFuckFile(const std::string& path)
{
std::string buffer;
auto lines = recursiveInclude(path, "~", {});
for (auto& line : lines)
{
buffer += line;
buffer += '\n';
}
2023-11-13 15:15:27 -05:00
return buffer;
}
2023-02-08 22:30:20 -05:00
}
#endif //BLT_TESTS_LOADER_H