mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-12 01:38:37 +12:00
57 lines
945 B
C++
57 lines
945 B
C++
#pragma once
|
|
#include "vfsStream.h"
|
|
|
|
class vfsStreamMemory : public vfsStream
|
|
{
|
|
u64 m_pos = 0;
|
|
u32 m_addr = 0;
|
|
u64 m_size = 0;
|
|
|
|
public:
|
|
vfsStreamMemory() = default;
|
|
|
|
vfsStreamMemory(u32 addr, u32 size = 0)
|
|
{
|
|
Open(addr, size);
|
|
}
|
|
|
|
void Open(u32 addr, u32 size = 0)
|
|
{
|
|
m_pos = 0;
|
|
m_addr = addr;
|
|
m_size = size ? size : 0x100000000ull - addr; // determine max possible size
|
|
}
|
|
|
|
virtual u64 GetSize() const override
|
|
{
|
|
return m_size;
|
|
}
|
|
|
|
virtual u64 Write(const void* src, u64 count) override;
|
|
|
|
virtual u64 Read(void* dst, u64 count) override;
|
|
|
|
virtual u64 Seek(s64 offset, u32 mode = from_begin) override
|
|
{
|
|
assert(mode < 3);
|
|
|
|
switch (mode)
|
|
{
|
|
case from_begin: return m_pos = offset;
|
|
case from_cur: return m_pos += offset;
|
|
case from_end: return m_pos = m_size + offset;
|
|
}
|
|
|
|
return m_pos;
|
|
}
|
|
|
|
virtual u64 Tell() const override
|
|
{
|
|
return m_pos;
|
|
}
|
|
|
|
virtual bool IsOpened() const override
|
|
{
|
|
return true;
|
|
}
|
|
};
|