288 lines
7.4 KiB
C++
288 lines
7.4 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1992.
|
|
//
|
|
// File: dffuncs.hxx
|
|
//
|
|
// Contents: CDocFile inline functions
|
|
// In a separate file to avoid circular dependencies
|
|
//
|
|
// History: 06-Nov-92 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef __DFFUNCS_HXX__
|
|
#define __DFFUNCS_HXX__
|
|
|
|
#include <dfbasis.hxx>
|
|
#include <cdocfile.hxx>
|
|
#include <sstream.hxx>
|
|
|
|
//+--------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::operator new, public
|
|
//
|
|
// Synopsis: Unreserved object allocator
|
|
//
|
|
// Arguments: [size] -- byte count to allocate
|
|
// [pMalloc] -- allocator
|
|
//
|
|
// History: 25-May-93 AlexT Created
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
inline void *CDocFile::operator new(size_t size, IMalloc * const pMalloc)
|
|
{
|
|
return(CMallocBased::operator new(size, pMalloc));
|
|
}
|
|
|
|
//+--------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::operator new, public
|
|
//
|
|
// Synopsis: Reserved object allocator
|
|
//
|
|
// Arguments: [size] -- byte count to allocate
|
|
// [pdfb] -- basis
|
|
//
|
|
// History: 25-May-93 AlexT Created
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
inline void *CDocFile::operator new(size_t size, CDFBasis * const pdfb)
|
|
{
|
|
olAssert(size == sizeof(CDocFile));
|
|
|
|
return pdfb->GetFreeList(CDFB_DIRECTDOCFILE)->GetReserved();
|
|
}
|
|
|
|
//+--------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::ReturnToReserve, public
|
|
//
|
|
// Synopsis: Reserved object return
|
|
//
|
|
// Arguments: [pdfb] -- basis
|
|
//
|
|
// History: 25-May-93 AlexT Created
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
inline void CDocFile::ReturnToReserve(CDFBasis * const pdfb)
|
|
{
|
|
CDocFile::~CDocFile();
|
|
pdfb->GetFreeList(CDFB_DIRECTDOCFILE)->ReturnToReserve(this);
|
|
}
|
|
|
|
//+--------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::Reserve, public
|
|
//
|
|
// Synopsis: Reserve instances
|
|
//
|
|
// Arguments: [cItems] -- count of items
|
|
// [pdfb] -- basis
|
|
//
|
|
// History: 25-May-93 AlexT Created
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
inline SCODE CDocFile::Reserve(UINT cItems, CDFBasis * const pdfb)
|
|
{
|
|
return pdfb->Reserve(cItems, CDFB_DIRECTDOCFILE);
|
|
}
|
|
|
|
//+--------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::Unreserve, public
|
|
//
|
|
// Synopsis: Unreserve instances
|
|
//
|
|
// Arguments: [cItems] -- count of items
|
|
// [pdfb] -- basis
|
|
//
|
|
// History: 25-May-93 AlexT Created
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
inline void CDocFile::Unreserve(UINT cItems, CDFBasis * const pdfb)
|
|
{
|
|
pdfb->Unreserve(cItems, CDFB_DIRECTDOCFILE);
|
|
}
|
|
|
|
//+--------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::CDocFile, public
|
|
//
|
|
// Synopsis: Empty object ctor
|
|
//
|
|
// Arguments: [dl] - LUID
|
|
// [pdfb] - Basis
|
|
//
|
|
// History: 30-Mar-92 DrewB Created
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
inline CDocFile::CDocFile(DFLUID dl, CDFBasis *pdfb)
|
|
: PDocFile(dl), _pdfb(P_TO_BP(CBasedDFBasisPtr, pdfb))
|
|
{
|
|
_cReferences = 0;
|
|
_sig = CDOCFILE_SIG;
|
|
}
|
|
|
|
//+--------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::CDocFile, public
|
|
//
|
|
// Synopsis: Handle-setting construction
|
|
//
|
|
// Arguments: [pms] - MultiStream to use
|
|
// [sid] - SID to use
|
|
// [dl] - LUID
|
|
// [pdfb] - Basis
|
|
//
|
|
// History: 29-Jan-92 DrewB Created
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
inline CDocFile::CDocFile(CMStream *pms,
|
|
SID sid,
|
|
DFLUID dl,
|
|
CDFBasis *pdfb)
|
|
: PDocFile(dl), _pdfb(P_TO_BP(CBasedDFBasisPtr, pdfb))
|
|
{
|
|
_stgh.Init(pms, sid);
|
|
_cReferences = 0;
|
|
_sig = CDOCFILE_SIG;
|
|
}
|
|
|
|
//+--------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::~CDocFile, public
|
|
//
|
|
// Synopsis: Destructor
|
|
//
|
|
// History: 19-Dec-91 DrewB Created
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
inline CDocFile::~CDocFile(void)
|
|
{
|
|
olAssert(_cReferences == 0);
|
|
_sig = CDOCFILE_SIGDEL;
|
|
if (_stgh.IsValid())
|
|
{
|
|
if (_stgh.IsRoot())
|
|
DllReleaseMultiStream(_stgh.GetMS());
|
|
}
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::GetReservedDocfile, public
|
|
//
|
|
// Synopsis: Gets a previously reserved object
|
|
//
|
|
// History: 09-Nov-92 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline CDocFile *CDocFile::GetReservedDocfile(DFLUID luid)
|
|
{
|
|
CDFBasis *pdfb = BP_TO_P(CDFBasis *, _pdfb);
|
|
|
|
return new(pdfb) CDocFile(luid, pdfb);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::GetReservedStream, public
|
|
//
|
|
// Synopsis: Gets a previously reserved object
|
|
//
|
|
// History: 09-Nov-92 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline CDirectStream *CDocFile::GetReservedStream(DFLUID luid)
|
|
{
|
|
return new(_pdfb) CDirectStream(luid);
|
|
}
|
|
|
|
//+--------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::GetHandle, public
|
|
//
|
|
// Synopsis: Returns the handle
|
|
//
|
|
// History: 05-Aug-92 DrewB Created
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
inline CStgHandle *CDocFile::GetHandle(void)
|
|
{
|
|
return &_stgh;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::DecRef, public
|
|
//
|
|
// Synopsis: Decrements the ref count
|
|
//
|
|
// History: 23-Nov-92 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline void CDocFile::DecRef(void)
|
|
{
|
|
AtomicDec(&_cReferences);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::ReturnDocFile, public
|
|
//
|
|
// Synopsis: Returns a child to the freelist
|
|
//
|
|
// Arguments: [pdf] - Docfile
|
|
//
|
|
// History: 23-Nov-92 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline void CDocFile::ReturnDocFile(CDocFile *pdf)
|
|
{
|
|
olDebugOut((DEB_ITRACE, "In CDocFile::ReturnDocFile:%p(%p)\n",
|
|
this, pdf));
|
|
// Force ref count to zero without freeing memory
|
|
pdf->DecRef();
|
|
pdf->ReturnToReserve(BP_TO_P(CDFBasis *, _pdfb));
|
|
olDebugOut((DEB_ITRACE, "Out CDocFile::ReturnDocFile\n"));
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CDocFile::ReturnStream, public
|
|
//
|
|
// Synopsis: Returns a stream to the freelist
|
|
//
|
|
// Arguments: [pstm] - Stream
|
|
//
|
|
// History: 23-Nov-92 DrewB Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
inline void CDocFile::ReturnStream(CDirectStream *pstm)
|
|
{
|
|
olDebugOut((DEB_ITRACE, "In CDocFile::ReturnStream:%p(%p)\n",
|
|
this, pstm));
|
|
// Force ref count to zero without freeing memory
|
|
pstm->DecRef();
|
|
pstm->ReturnToReserve(BP_TO_P(CDFBasis *, _pdfb));
|
|
olDebugOut((DEB_ITRACE, "Out CDocFile::ReturnStream\n"));
|
|
}
|
|
|
|
#endif // #ifndef __DFFUNCS_HXX__
|