22#include <osl/endian.h>
23#include <osl/diagnose.h>
40 OSL_ENSURE(
mnSize >= 512,
"Unexpected page size is provided!" );
60 nVal = OSL_SWAPDWORD(nVal);
62 static_cast<sal_Int32*
>(rPage->GetData())[ nOff ] = nVal;
81 return (nFileSize >= 512) ? (nFileSize - 512 + nPageSize - 1) / nPageSize : 0;
91 , m_pStorageStream( nullptr )
93 , m_bMyStream( false )
106 OSL_ENSURE(
n >= 512,
"Unexpected page size is provided!" );
128 OSL_ENSURE( xElem.is(),
"The pointer should not be NULL!" );
131 [xElem](
const rtl::Reference<StgPage>& rxPage) { return rxPage.is() && rxPage->GetPage() == xElem->GetPage(); });
154 IndexToStgPage::iterator it2 =
maDirtyPages.find( nPage );
168 if( !
Read( nPage,
p->GetData() ) && bForce )
193 OSL_ENSURE(
p->GetSize() == q->GetSize(),
"Unexpected page size!" );
194 memcpy(
p->GetData(), q->GetData(),
p->GetSize() );
208 std::vector< StgPage * > aToWrite;
211 aToWrite.push_back( rEntry.second.get() );
217 if ( !
Write( pPage->GetPage(), pPage->GetData() ) )
277 if( nMode & StreamMode::SHARE_DENYALL )
278 nMode = ( ( nMode &
~StreamMode::SHARE_DENYALL ) | StreamMode::SHARE_DENYWRITE );
281 bool bAccessDenied =
false;
282 if( ( nMode & StreamMode::WRITE ) && !pFileStrm->
IsWritable() )
285 bAccessDenied =
true;
357 memset(
static_cast<sal_uInt8*
>(pBuf) + nRead, 0, nBytes - nRead);
426 if( nPage < 0 ) nPage = 0;
bool Open(const OUString &rName, StreamMode)
UCBStorageStream * m_pStorageStream
rtl::Reference< StgPage > Get(sal_Int32, bool)
rtl::Reference< StgPage > Copy(sal_Int32, sal_Int32=STG_FREE)
bool Write(sal_Int32 nPage, void const *pBuf)
rtl::Reference< StgPage > Find(sal_Int32)
void SetPhysPageSize(short)
void MoveError(StorageBase const &)
IndexToStgPage maDirtyPages
rtl::Reference< StgPage > Create(sal_Int32)
void SetStrm(SvStream *, bool)
void Erase(const rtl::Reference< StgPage > &)
bool SetSize(sal_Int32 nPages)
void SetToPage(const rtl::Reference< StgPage > &rPage, short nOff, sal_Int32 nVal)
void SetDirty(const rtl::Reference< StgPage > &rPage)
sal_Int32 Page2Pos(sal_Int32) const
bool Read(sal_Int32 nPage, void *pBuf)
static rtl::Reference< StgPage > Create(short nData, sal_Int32 nPage)
virtual ~StgPage() override
StgPage(short nData, sal_Int32 nPage)
std::unique_ptr< sal_uInt8[]> mpData
static bool IsPageGreater(const StgPage *pA, const StgPage *pB)
void SetError(ErrCode) const
virtual void ResetError()
virtual sal_uInt64 TellEnd()
std::size_t WriteBytes(const void *pData, std::size_t nSize)
bool SetStreamSize(sal_uInt64 nSize)
sal_uInt64 Seek(sal_uInt64 nPos)
std::size_t ReadBytes(void *pData, std::size_t nSize)
SvStream * GetModifySvStream()
#define SVSTREAM_WRITE_ERROR
#define ERRCODE_IO_ACCESSDENIED
#define SVSTREAM_READ_ERROR
oslInterlockedCount m_nRef
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
static sal_Int32 lcl_GetPageCount(sal_uInt64 nFileSize, short nPageSize)