//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1991 - 1997.
//
//  File:       XACT.HXX
//
//  Contents:   Transaction support
//
//  Classes:    CTransaction
//
//  History:    29-Mar-91   KyleP       Created
//
//----------------------------------------------------------------------------

#pragma once

class PStorage;

//+---------------------------------------------------------------------------
//
//  Class:  CTransaction (xact)
//
//  Purpose:    Transaction support
//
//  Interface:  CTransaction    - Constructor
//             ~CTransaction    - Destructor
//              GetStatus       - Retrieve status
//              Commit          - Set status to commit
//
//  History:
//              01-Apr-91       KyleP     Created.
//              23-Apr-91       KyleP     Replaced sesid with CSession
//              13-Jan-92       BartoszM  Reversed logic of Commit/Abort
//              16-Jul-92       BartoszM  Removed session
//
//  Notes:      CTransaction objects must be destroyed in the opposite
//              order to their creation.
//              A transaction is created in the aborted state.
//              Unless Commit is explicitely called the destructor
//              will abort the transaction.
//
//----------------------------------------------------------------------------
class CTransaction 
{
public:

    CTransaction();

    enum TStatus
    {
        XActCommit,     // Transaction is successful
        XActAbort       // Transaction will be aborted
    };


    inline TStatus GetStatus();
    inline void    Commit();

protected:

          TStatus         _status;

};

//+---------------------------------------------------------------------------
//
//  Member: CTransaction::GetStatus., public
//
//  Synopsis:   Returns the current status of the transaction.
//
//  Returns:    XActCommit if the transaction will commit during object
//      destruction. XActAbort if the transaction will abort
//      during object destruction.
//
//  History:    01-Apr-91   KyleP   Created.
//
//----------------------------------------------------------------------------

inline CTransaction::TStatus CTransaction::GetStatus()
{
    return(_status);
}

//+---------------------------------------------------------------------------
//
//  Member:     CTransaction::Commit, public
//
//  Synopsis:   Set the commit/abort status of the transaction to commit.
//
//  Effects:    When the transaction object is destroyed, this transaction
//              will be committed.
//
//  History:    13-Jan-92   BartoszM   Created.
//
//----------------------------------------------------------------------------

inline void CTransaction::Commit()
{
    _status = XActCommit;
}