// Copyright Epic Games, Inc. All Rights Reserved. #include #include #include #include #include #include namespace zen { MemoryInStream::MemoryInStream(const void* buffer, size_t size) : m_Buffer(reinterpret_cast(buffer), reinterpret_cast(buffer) + size) { } void MemoryInStream::Read(void* buffer, size_t byteCount, uint64_t offset) { RwLock::ExclusiveLockScope _(m_Lock); const size_t needEnd = offset + byteCount; if (needEnd > m_Buffer.size()) throw std::runtime_error("read past end of file!"); // TODO: better exception memcpy(buffer, m_Buffer.data() + offset, byteCount); } void MemoryOutStream::Write(const void* data, size_t byteCount, uint64_t offset) { RwLock::ExclusiveLockScope _(m_Lock); const size_t needEnd = offset + byteCount; if (needEnd > m_Buffer.size()) m_Buffer.resize(needEnd); memcpy(m_Buffer.data() + offset, data, byteCount); } void MemoryOutStream::Flush() { // No-op } ////////////////////////////////////////////////////////////////////////// // // Testing related code follows... // #if ZEN_WITH_TESTS void stream_forcelink() { } #endif } // namespace zen