31#if !defined(_MEMORYSTREAMIMPL_H_INCLUDED_)
32#define _MEMORYSTREAMIMPL_H_INCLUDED_
51template <
class TBase = OdMemoryStreamDummyBase>
80 if(m_pCurrPage->m_pPrevPage)
84 m_pCurrPage = m_pCurrPage->m_pPrevPage;
150 m_pCurrPage = m_pFirstPage;
157 PAGE* pNext, *pCurr = m_pCurrPage->m_pNextPage;
158 m_pCurrPage->m_pNextPage = 0;
159 m_pLastPage = m_pCurrPage;
163 pNext = pCurr->m_pNextPage;
179template <
class TBase>
182 PAGE* pNext, *pCurr = m_pFirstPage;
185 pNext = pCurr->m_pNextPage;
192template <
class TBase>
198 pPage->m_pPrevPage = m_pLastPage;
199 pPage->m_pNextPage = 0;
202 m_pLastPage->m_pNextPage = pPage;
205 pPage->m_nPageStartAddr = pPage->m_pPrevPage->m_nPageStartAddr +
m_nPageDataSize;
209 m_pFirstPage = m_pCurrPage = pPage;
210 pPage->m_nPageStartAddr = 0;
216template <
class TBase>
226 if(!m_pCurrPage->m_pNextPage)
229 if(m_pCurrPage->m_pNextPage)
231 m_pCurrPage = m_pCurrPage->m_pNextPage;
238template <
class TBase>
269 bool bForward =
false;
273 if (nNewPos >= m_pCurrPage->m_nPageStartAddr)
285 m_pCurrPage = m_pLastPage;
290 if (nFromEnd < ((
OdInt64)nNewPos - (
OdInt64)m_pCurrPage->m_nPageStartAddr))
292 m_pCurrPage = m_pLastPage;
298 if (nNewPos < (m_pCurrPage->m_nPageStartAddr - nNewPos))
300 m_pCurrPage = m_pFirstPage;
308 m_pCurrPage = m_pFirstPage;
313 m_pCurrPage = m_pLastPage;
320 while(m_pCurrPage && m_pCurrPage->m_nPageStartAddr < nNewPos)
322 m_pCurrPage = m_pCurrPage->m_pNextPage;
327 while(m_pCurrPage->m_nPageStartAddr >
m_nCurPos)
329 m_pCurrPage = m_pCurrPage->m_pPrevPage;
336template <
class TBase>
339#ifndef TD_STRICT_ALIGNMENT
346template <
class TBase>
353 ret = m_pCurrPage->m_data[nPosInPage];
356 m_pCurrPage = m_pCurrPage->m_pNextPage;
365template <
class TBase>
378 ::memcpy(pDest,
currPos(), nToCopy);
386 ::memcpy(pDest, m_pCurrPage->m_data, nToCopy);
392 m_pCurrPage = m_pCurrPage->m_pNextPage;
400template <
class TBase>
408 m_pCurrPage->m_data[nPosInPage] = val;
412 m_pCurrPage = m_pCurrPage->m_pNextPage;
415template <
class TBase>
426 ::memcpy(
currPos(), pSrc, nToCopy);
434 ::memcpy(m_pCurrPage->m_data, pSrc, nToCopy);
440 m_pCurrPage = m_pCurrPage->m_pNextPage;
ALLOCDLL_EXPORT void * odrxAlloc(size_t nBytes)
ALLOCDLL_EXPORT void odrxFree(void *pMemBlock)
void putBytes(const void *buffer, OdUInt32 nLen)
void seekNextPage(bool bCreateNew=false)
void getBytes(void *buffer, OdUInt32 nLen)
OdUInt32 posInCurPage() const
void putByte(OdUInt8 val)
void setPageDataSize(OdUInt32 nPageSize)
OdUInt64 curPageNo() const
OdUInt32 leftInCurPage() const
OdMemoryStreamImpl(OdUInt32 nPageDataSize=0x2000)
friend class OdMemoryStream
OdUInt64 allocated() const
OdUInt64 seek(OdInt64 offset, OdDb::FilerSeekType whence)
const OdUInt8 * currPos() const
OdUInt32 pageDataSize() const
const void * pageAlignedAddress(OdUInt32 nLen)
void reserve(OdUInt64 nSize)