diff --git a/file/file.h b/file/file.h index e0bb6ea59d17e9b73b05f71a9f67ecac4122298a..deb3de4a455151b677f882b2833699221d6a74f2 100644 --- a/file/file.h +++ b/file/file.h @@ -1,7 +1,7 @@ /** * file helper - * @author Tobias Weber - * @date 2013-2016 + * @author Tobias Weber + * @date 2013-2020 * @license GPLv2 or GPLv3 */ @@ -59,6 +59,36 @@ inline std::size_t get_file_size(const std::basic_string +std::pair> get_file_mem(std::basic_istream& istr, std::size_t offs, std::size_t len=1) +{ + bool ok = true; + + std::shared_ptr ptr(new T[len]); + if(!ptr) + return std::make_pair(false, ptr); + + std::streampos posOrig = istr.tellg(); + + istr.seekg(offs, std::ios_base::beg); + istr.read((char*)ptr.get(), len*sizeof(T)); + if(istr.gcount() != len*sizeof(T)) + ok = false; + + // move back to original position + istr.seekg(posOrig, std::ios_base::beg); + + return std::make_pair(ok, ptr); +} + + // ----------------------------------------------------------------------------