//+--------------------------------------------------------------------------- // // 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 #include #include //+-------------------------------------------------------------- // // 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__