Skip to content

Commit f8d2019

Browse files
IFileStream: added GetPos and SetPos methods
1 parent 53ad6f3 commit f8d2019

File tree

5 files changed

+53
-2
lines changed

5 files changed

+53
-2
lines changed

Common/interface/BasicFileStream.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ class BasicFileStream : public ObjectBase<IFileStream>
6464

6565
virtual size_t DILIGENT_CALL_TYPE GetSize() override;
6666

67+
virtual size_t DILIGENT_CALL_TYPE GetPos() override;
68+
69+
virtual bool DILIGENT_CALL_TYPE SetPos(size_t Offset, int Origin) override;
70+
6771
virtual bool DILIGENT_CALL_TYPE IsValid() override;
6872

6973
private:

Common/interface/MemoryFileStream.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2023 Diligent Graphics LLC
2+
* Copyright 2019-2024 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -60,6 +60,10 @@ class MemoryFileStream final : public ObjectBase<IFileStream>
6060

6161
virtual size_t DILIGENT_CALL_TYPE GetSize() override final;
6262

63+
virtual size_t DILIGENT_CALL_TYPE GetPos() override;
64+
65+
virtual bool DILIGENT_CALL_TYPE SetPos(size_t Offset, int Origin) override;
66+
6367
virtual bool DILIGENT_CALL_TYPE IsValid() override final;
6468

6569
static RefCntAutoPtr<MemoryFileStream> Create(IDataBlob* pData);

Common/src/BasicFileStream.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,14 @@ size_t BasicFileStream::GetSize()
7777
return m_FileWrpr->GetSize();
7878
}
7979

80+
size_t BasicFileStream::GetPos()
81+
{
82+
return m_FileWrpr->GetPos();
83+
}
84+
85+
bool BasicFileStream::SetPos(size_t Offset, int Origin)
86+
{
87+
return m_FileWrpr->SetPos(Offset, static_cast<FilePosOrigin>(Origin));
88+
}
89+
8090
} // namespace Diligent

Common/src/MemoryFileStream.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,29 @@ size_t MemoryFileStream::GetSize()
8989
return m_DataBlob->GetSize();
9090
}
9191

92+
size_t MemoryFileStream::GetPos()
93+
{
94+
return m_CurrentOffset;
95+
}
96+
97+
bool MemoryFileStream::SetPos(size_t Offset, int Origin)
98+
{
99+
switch (static_cast<FilePosOrigin>(Origin))
100+
{
101+
case FilePosOrigin::Start:
102+
m_CurrentOffset = Offset;
103+
break;
104+
105+
case FilePosOrigin::Curr:
106+
m_CurrentOffset += Offset;
107+
break;
108+
109+
case FilePosOrigin::End:
110+
m_CurrentOffset = m_DataBlob->GetSize() + Offset;
111+
break;
112+
}
113+
114+
return true;
115+
}
116+
92117
} // namespace Diligent

Primitives/interface/FileStream.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2019-2023 Diligent Graphics LLC
2+
* Copyright 2019-2024 Diligent Graphics LLC
33
* Copyright 2015-2019 Egor Yusov
44
*
55
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -67,6 +67,12 @@ DILIGENT_BEGIN_INTERFACE(IFileStream, IObject)
6767

6868
VIRTUAL size_t METHOD(GetSize)(THIS) PURE;
6969

70+
VIRTUAL size_t METHOD(GetPos)(THIS) PURE;
71+
72+
VIRTUAL bool METHOD(SetPos)(THIS_
73+
size_t Offset,
74+
int Origin) PURE;
75+
7076
VIRTUAL bool METHOD(IsValid)(THIS) PURE;
7177
};
7278
DILIGENT_END_INTERFACE
@@ -81,6 +87,8 @@ DILIGENT_END_INTERFACE
8187
# define IFileStream_ReadBlob(This, ...) CALL_IFACE_METHOD(FileStream, ReadBlob, This, __VA_ARGS__)
8288
# define IFileStream_Write(This, ...) CALL_IFACE_METHOD(FileStream, Write, This, __VA_ARGS__)
8389
# define IFileStream_GetSize(This) CALL_IFACE_METHOD(FileStream, GetSize, This)
90+
# define IFileStream_GetPos(This) CALL_IFACE_METHOD(FileStream, GetPos, This)
91+
# define IFileStream_SetPos(This, ...) CALL_IFACE_METHOD(FileStream, SetPos, This, __VA_ARGS__)
8492
# define IFileStream_IsValid(This) CALL_IFACE_METHOD(FileStream, IsValid, This)
8593

8694
// clang-format on

0 commit comments

Comments
 (0)