//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1993.
//
//  File:	tset.cxx
//
//  Contents:	PTSetMember methods
//
//  History:	16-Apr-93	DrewB	Created
//
//----------------------------------------------------------------------------

#include "dfhead.cxx"

#pragma hdrstop

#include <entry.hxx>

//+---------------------------------------------------------------------------
//
//  Member:	PTSetMember::Stat, public
//
//  Synopsis:	Fills in a STATSTG for the XSM
//
//  Arguments:	[pstat] - Buffer to fill in
//              [dwFlags] - STATFLAG_*
//
//  Returns:	Appropriate status code
//
//  Modifies:	[pstat]
//
//  History:	12-Apr-93	DrewB	Created
//
//----------------------------------------------------------------------------

SCODE PTSetMember::Stat(STATSTGW *pstat, DWORD dwFlags)
{
    CWrappedDocFile *pwdf;
    CTransactedStream *ptstm;
    SCODE sc;

    olDebugOut((DEB_ITRACE, "In  PTSetMember::Stat:%p(%p, %lX)\n",
                this, pstat, dwFlags));

    pstat->type = ObjectType();

    if ((pstat->type & STGTY_REAL) == STGTY_STORAGE)
    {
        PTimeEntry *pen;
        
        pwdf = (CWrappedDocFile *)this;
        pen = pwdf;
        olChk(pen->GetTime(WT_CREATION, &pstat->ctime));
        olChk(pen->GetTime(WT_ACCESS, &pstat->atime));
        olChk(pen->GetTime(WT_MODIFICATION, &pstat->mtime));

        olChk(pwdf->GetClass(&pstat->clsid));
        olChk(pwdf->GetStateBits(&pstat->grfStateBits));
        
        ULISet32(pstat->cbSize, 0);
    }
    else
    {
#ifdef LARGE_STREAMS
        ULONGLONG cbSize;
#else
        ULONG cbSize;
#endif

        ptstm = (CTransactedStream *)this;
        ptstm->GetSize(&cbSize);
        pstat->cbSize.QuadPart = cbSize;
    }

    if ((dwFlags & STATFLAG_NONAME) == 0)
    {
        olMem(pstat->pwcsName =
              (WCHAR *)TaskMemAlloc(_dfnName.GetLength()));
        memcpy(pstat->pwcsName, _dfnName.GetBuffer(), _dfnName.GetLength());
    }
    else
    {
        pstat->pwcsName = NULL;
    }
    
    sc = S_OK;

    olDebugOut((DEB_ITRACE, "Out PTSetMember::Stat\n"));
    // Fall through
 EH_Err:
    return sc;
}

//+--------------------------------------------------------------
//
//  Member: PTSetMember::BeginCommit, public
//
//  Synopsis:   calls to derived object
//
//  History:    20-Jan-98   HenryLee Created
//
//---------------------------------------------------------------

SCODE PTSetMember::BeginCommit(DWORD const dwFlags)
{
    if (_sig == CWRAPPEDDOCFILE_SIG)
        return ((CWrappedDocFile *)this)->BeginCommit(dwFlags);
    else if (_sig == CTRANSACTEDSTREAM_SIG)
        return ((CTransactedStream *)this)->BeginCommit (dwFlags);
    else
        olAssert (!"Invalid signature on PTSetMember!");
    return STG_E_INVALIDFUNCTION;
}

//+--------------------------------------------------------------
//
//  Member: PTSetMember::EndCommit, public
//
//  Synopsis:   calls to derived object
//
//  History:    20-Jan-98   HenryLee Created
//
//---------------------------------------------------------------

void PTSetMember::EndCommit(DFLAGS const df)
{
    if (_sig == CWRAPPEDDOCFILE_SIG)
        ((CWrappedDocFile *)this)->EndCommit (df);
    else if (_sig == CTRANSACTEDSTREAM_SIG)
        ((CTransactedStream *)this)->EndCommit (df);
    else
        olAssert (!"Invalid signature on PTSetMember!");
    return;
}

//+--------------------------------------------------------------
//
//  Member: PTSetMember::Revert, public
//
//  Synopsis:   calls to derived object
//
//  History:    20-Jan-98   HenryLee Created
//
//---------------------------------------------------------------

void PTSetMember::Revert(void)
{
    if (_sig == CWRAPPEDDOCFILE_SIG)
        ((CWrappedDocFile *)this)->Revert ();
    else if (_sig == CTRANSACTEDSTREAM_SIG)
        ((CTransactedStream *)this)->Revert ();
    else
        olAssert (!"Invalid signature on PTSetMember!");
    return;
}

//+--------------------------------------------------------------
//
//  Member: PTSetMember::GetCommitInfo, public
//
//  Synopsis:   calls to derived object
//
//  History:    20-Jan-98   HenryLee Created
//
//---------------------------------------------------------------

#ifdef LARGE_STREAMS
void PTSetMember::GetCommitInfo(ULONGLONG *pulRet1, ULONGLONG *pulRet2) 
#else
void PTSetMember::GetCommitInfo(ULONG *pulRet1, ULONG *pulRet2) 
#endif
{
    if (_sig == CWRAPPEDDOCFILE_SIG)
        ((CWrappedDocFile *)this)->GetCommitInfo (pulRet1, pulRet2);
    else if (_sig == CTRANSACTEDSTREAM_SIG)
        ((CTransactedStream *)this)->GetCommitInfo (pulRet1, pulRet2);
    else
    {
        *pulRet1 = 0;
        *pulRet2 = 0;
        olAssert (!"Invalid signature on PTSetMember!");
    }
    return;
}

//+--------------------------------------------------------------
//
//  Member: PTSetMember::AddRef, public
//
//  Synopsis:   calls to derived object
//
//  History:    20-Jan-98   HenryLee Created
//
//---------------------------------------------------------------

void PTSetMember::AddRef(void)
{
    if (_sig == CWRAPPEDDOCFILE_SIG)
        ((CWrappedDocFile *)this)->AddRef ();
    else if (_sig == CTRANSACTEDSTREAM_SIG)
        ((CTransactedStream *)this)->AddRef ();
    else
        olAssert (!"Invalid signature on PTSetMember!");
    return;
}

//+--------------------------------------------------------------
//
//  Member: PTSetMember::Release, public
//
//  Synopsis:   calls to derived object
//
//  History:    20-Jan-98   HenryLee Created
//
//---------------------------------------------------------------

void PTSetMember::Release (void)
{
    if (_sig == CWRAPPEDDOCFILE_SIG)
        ((CWrappedDocFile *)this)->Release ();
    else if (_sig == CTRANSACTEDSTREAM_SIG)
        ((CTransactedStream *)this)->Release ();
    else
        olAssert (!"Invalid signature on PTSetMember!");
    return;
}