From 9b5df00ca90ea6cc22da75ada5da519c0ee99f62 Mon Sep 17 00:00:00 2001 From: Scott Doxey Date: Sat, 18 Jan 2025 17:18:56 -0500 Subject: [PATCH] Added ReadBytesFromFile method. Updated documentation. --- .../API/Parsers/ParseBpmFromChartSection.md | 2 +- .../Parsers/ParseLyricsFromChartSection.md | 2 +- .../Parsers/ParseMetaDataFromChartSection.md | 2 +- .../API/Parsers/ParseNotesFromChartSection.md | 2 +- .../API/Parsers/ParseSectionsFromChart.md | 2 +- .../ParseTimeSignaturesFromChartSection.md | 2 +- README.md | 12 +++---- RhythmGameUtilities/README.md | 12 +++---- UnityPackage/README.md | 12 +++---- include/RhythmGameUtilities/File.hpp | 33 +++++++++++++++++-- tests/RhythmGameUtilities/File.cpp | 14 ++++++-- 11 files changed, 66 insertions(+), 29 deletions(-) diff --git a/Documentation/API/Parsers/ParseBpmFromChartSection.md b/Documentation/API/Parsers/ParseBpmFromChartSection.md index cdb6249..d81ee01 100644 --- a/Documentation/API/Parsers/ParseBpmFromChartSection.md +++ b/Documentation/API/Parsers/ParseBpmFromChartSection.md @@ -27,7 +27,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); diff --git a/Documentation/API/Parsers/ParseLyricsFromChartSection.md b/Documentation/API/Parsers/ParseLyricsFromChartSection.md index f47a744..199f5b5 100644 --- a/Documentation/API/Parsers/ParseLyricsFromChartSection.md +++ b/Documentation/API/Parsers/ParseLyricsFromChartSection.md @@ -27,7 +27,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); diff --git a/Documentation/API/Parsers/ParseMetaDataFromChartSection.md b/Documentation/API/Parsers/ParseMetaDataFromChartSection.md index b2cad17..dea4a15 100644 --- a/Documentation/API/Parsers/ParseMetaDataFromChartSection.md +++ b/Documentation/API/Parsers/ParseMetaDataFromChartSection.md @@ -29,7 +29,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); diff --git a/Documentation/API/Parsers/ParseNotesFromChartSection.md b/Documentation/API/Parsers/ParseNotesFromChartSection.md index 35f6020..26aeb85 100644 --- a/Documentation/API/Parsers/ParseNotesFromChartSection.md +++ b/Documentation/API/Parsers/ParseNotesFromChartSection.md @@ -27,7 +27,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); diff --git a/Documentation/API/Parsers/ParseSectionsFromChart.md b/Documentation/API/Parsers/ParseSectionsFromChart.md index 8705ad3..ee1a448 100644 --- a/Documentation/API/Parsers/ParseSectionsFromChart.md +++ b/Documentation/API/Parsers/ParseSectionsFromChart.md @@ -25,7 +25,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); diff --git a/Documentation/API/Parsers/ParseTimeSignaturesFromChartSection.md b/Documentation/API/Parsers/ParseTimeSignaturesFromChartSection.md index 936caba..c50aeaf 100644 --- a/Documentation/API/Parsers/ParseTimeSignaturesFromChartSection.md +++ b/Documentation/API/Parsers/ParseTimeSignaturesFromChartSection.md @@ -27,7 +27,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); diff --git a/README.md b/README.md index 3312b20..6b5d031 100644 --- a/README.md +++ b/README.md @@ -303,7 +303,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -361,7 +361,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -421,7 +421,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -481,7 +481,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -545,7 +545,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -598,7 +598,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); diff --git a/RhythmGameUtilities/README.md b/RhythmGameUtilities/README.md index 3312b20..6b5d031 100644 --- a/RhythmGameUtilities/README.md +++ b/RhythmGameUtilities/README.md @@ -303,7 +303,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -361,7 +361,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -421,7 +421,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -481,7 +481,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -545,7 +545,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -598,7 +598,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); diff --git a/UnityPackage/README.md b/UnityPackage/README.md index 3312b20..6b5d031 100644 --- a/UnityPackage/README.md +++ b/UnityPackage/README.md @@ -303,7 +303,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -361,7 +361,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -421,7 +421,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -481,7 +481,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -545,7 +545,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); @@ -598,7 +598,7 @@ using namespace RhythmGameUtilities; int main() { - auto content = ReadFromFile("./tests/Mocks/song.chart"); + auto content = ReadStringFromFile("./tests/Mocks/song.chart"); auto sections = ParseSectionsFromChart(content.c_str()); diff --git a/include/RhythmGameUtilities/File.hpp b/include/RhythmGameUtilities/File.hpp index eac96e0..c7e1278 100644 --- a/include/RhythmGameUtilities/File.hpp +++ b/include/RhythmGameUtilities/File.hpp @@ -1,20 +1,49 @@ #pragma once +#include #include #include #include +#include namespace RhythmGameUtilities { /** - * Reads the entire contents of a file. + * Reads the entire contents of a file as a byte array. * * @param path The path of the file to read. * @public */ -std::string ReadFromFile(const char *path) +std::vector ReadBytesFromFile(const char *path) +{ + std::ifstream file(path, std::ios::binary | std::ios::ate); + + if (!file.is_open()) + { + std::cerr << "Failed to open " << path << "." << std::endl; + } + + auto fileSize = file.tellg(); + + std::vector buffer(static_cast(fileSize)); + + file.seekg(0, std::ios::beg); + + file.read(reinterpret_cast(buffer.data()), fileSize); + + return buffer; +} + +/** + * Reads the entire contents of a file as a string. + * + * @param path The path of the file to read. + * @public + */ + +std::string ReadStringFromFile(const char *path) { std::ifstream file(path); diff --git a/tests/RhythmGameUtilities/File.cpp b/tests/RhythmGameUtilities/File.cpp index d1650eb..b42cf3b 100644 --- a/tests/RhythmGameUtilities/File.cpp +++ b/tests/RhythmGameUtilities/File.cpp @@ -5,16 +5,24 @@ using namespace RhythmGameUtilities; -void testReadFromFile() +void testReadBytesFromFile() { - assert(ReadFromFile("./tests/Mocks/test.txt") == "Hello, world!\n"); + assert(size(ReadBytesFromFile("./tests/Mocks/test.txt")) == 14); + + std::cout << "."; +} + +void testReadStringFromFile() +{ + assert(ReadStringFromFile("./tests/Mocks/test.txt") == "Hello, world!\n"); std::cout << "."; } int main() { - testReadFromFile(); + testReadBytesFromFile(); + testReadStringFromFile(); return 0; }