diff --git a/Include/Aurora/IO/Adapters/IOAdapterMemoryView.hpp b/Include/Aurora/IO/Adapters/IOAdapterMemoryView.hpp new file mode 100644 index 00000000..5b06d93c --- /dev/null +++ b/Include/Aurora/IO/Adapters/IOAdapterMemoryView.hpp @@ -0,0 +1,15 @@ +/*** + Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved. + + File: IOAdapterMemoryView.hpp + Date: 2023-09-23 + Author: Reece +***/ +#pragma once + +namespace Aurora::IO::Adapters +{ + AUKN_SYM AuSPtr NewMemoryViewReadAdapter(const AuSPtr &pView); + AUKN_SYM AuSPtr NewMemoryViewLinearSeekableAdapter(const AuSPtr &pView); + AUKN_SYM AuSPtr NewMemoryViewWriteAdapter(const AuSPtr &pView); +} \ No newline at end of file diff --git a/Include/Aurora/IO/IOExperimental.hpp b/Include/Aurora/IO/IOExperimental.hpp index b90e7f77..0d6b9bf3 100644 --- a/Include/Aurora/IO/IOExperimental.hpp +++ b/Include/Aurora/IO/IOExperimental.hpp @@ -50,6 +50,7 @@ #include "Adapters/IOAdapterByteBuffer.hpp" #include "Adapters/IOAdapterCompression.hpp" #include "Adapters/IOAdapterSeeking.hpp" +#include "Adapters/IOAdapterMemoryView.hpp" #include "IIOWaitableTickLimiter.hpp" #include "IIOWaitableIOTimer.hpp" diff --git a/Source/IO/Adapters/AuIOAdapterMemoryView.cpp b/Source/IO/Adapters/AuIOAdapterMemoryView.cpp new file mode 100644 index 00000000..df102a33 --- /dev/null +++ b/Source/IO/Adapters/AuIOAdapterMemoryView.cpp @@ -0,0 +1,58 @@ +/*** + Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved. + + File: AuIOAdapterMemoryView.cpp + Date: 2023-09-23 + Author: Reece +***/ +#include +#include +#include "AuIOAdapterByteBuffer.hpp" + +namespace Aurora::IO::Adapters +{ + AUKN_SYM AuSPtr NewMemoryViewReadAdapter(const AuSPtr &pView) + + { + SysCheckArgNotNull(pView, {}); + + auto pBuffer = AuMakeShared(pView, AuMemoryViewWrite { (void *)pView->ptr, pView->length }); + if (!pBuffer) + { + SysPushErrorArg(); + return {}; + } + + return AuMakeShared(pBuffer); + } + + AUKN_SYM AuSPtr NewMemoryViewLinearSeekableAdapter(const AuSPtr &pView) + { + SysCheckArgNotNull(pView, {}); + + auto pBuffer = AuMakeShared(pView, AuMemoryViewWrite { (void *)pView->ptr, pView->length }); + if (!pBuffer) + { + SysPushErrorArg(); + return {}; + } + + return AuMakeShared(pBuffer); + } + + AUKN_SYM AuSPtr NewMemoryViewWriteAdapter(const AuSPtr &pView) + { + SysCheckArgNotNull(pView, {}); + + auto pBuffer = AuMakeShared(pView, *pView); + if (!pBuffer) + { + SysPushErrorArg(); + return {}; + } + + pBuffer->writePtr = (AuUInt8 *)pView->ptr; + + return AuMakeShared(pBuffer); + } +} \ No newline at end of file diff --git a/Source/IO/Adapters/AuIOAdapterMemoryView.hpp b/Source/IO/Adapters/AuIOAdapterMemoryView.hpp new file mode 100644 index 00000000..9e9ba58a --- /dev/null +++ b/Source/IO/Adapters/AuIOAdapterMemoryView.hpp @@ -0,0 +1,13 @@ +/*** + Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved. + + File: AuIOAdapterMemoryView.hpp + Date: 2023-09-23 + Author: Reece +***/ +#pragma once + +namespace Aurora::IO::Adapters +{ + +} \ No newline at end of file