diff options
-rw-r--r-- | libadhocutil/fileUtils.h | 8 | ||||
-rw-r--r-- | libadhocutil/unittests/testFileUtils.cpp | 9 |
2 files changed, 17 insertions, 0 deletions
diff --git a/libadhocutil/fileUtils.h b/libadhocutil/fileUtils.h index 4224643..56ece22 100644 --- a/libadhocutil/fileUtils.h +++ b/libadhocutil/fileUtils.h @@ -4,6 +4,7 @@ #include <boost/filesystem/path.hpp> #include <sys/stat.h> #include <fcntl.h> +#include <string_view> #include "visibility.h" namespace AdHoc { @@ -150,6 +151,13 @@ namespace AdHoc { /// The file data. void * const data; + template<typename T = char> + auto + sv() const + { + return std::basic_string_view<T>((const T *)data, st.st_size / sizeof(T)); + } + private: DLL_PUBLIC void * setupMapInt(int flags) const; DLL_PUBLIC void * setupMap(int flags) const; diff --git a/libadhocutil/unittests/testFileUtils.cpp b/libadhocutil/unittests/testFileUtils.cpp index 973b9bb..01f1738 100644 --- a/libadhocutil/unittests/testFileUtils.cpp +++ b/libadhocutil/unittests/testFileUtils.cpp @@ -103,6 +103,15 @@ BOOST_AUTO_TEST_CASE( memmap ) BOOST_REQUIRE(f.fh); BOOST_REQUIRE_EQUAL(f.getStat().st_mode, 0100644); BOOST_REQUIRE_EQUAL(0, memcmp(f.data, "#define BOOST_TEST_MODULE FileUtils", 35)); + // String things + auto s = f.sv(); + BOOST_REQUIRE_EQUAL(s.substr(0, 35), "#define BOOST_TEST_MODULE FileUtils"); + BOOST_REQUIRE_EQUAL(s.length(), f.getStat().st_size); + // Objects + auto i = f.sv<int>(); + BOOST_REQUIRE_EQUAL(i[0], *reinterpret_cast<const int *>("#def")); + BOOST_REQUIRE_EQUAL(i[1], *reinterpret_cast<const int *>("ine ")); + BOOST_REQUIRE_EQUAL(i.length(), f.getStat().st_size / sizeof(int)); } BOOST_AUTO_TEST_CASE( openmode ) |