//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (c) Microsoft Corporation. All rights reserved.
//
//  File:       idiff.idl
//
//  Contents:	IDifferencing interface
//
//  History:	11-Nov-94	SethuR	Created
//
//  Notes:      There are three different way of extracting the differences
//              between a given storage and another point of reference
//              (another storage, a version id. or a time stamp). In the
//              first case there is no temporal significance to the differences
//              extracted, i.e., it is the difference in the snapshots at
//              that instant of time. For the second and third cases there
//              is a temporal significance attached to the differences. These
//              also require some form of history to be associated with the
//              storage.
//
//----------------------------------------------------------------------------

#include "idlmulti.h"

REMOTED_INTERFACE(994f0af0-2977-11ce-bb80-08002b36b2b0)
interface IDifferencing : IUnknown
{
    typedef enum {
        DIFF_TYPE_Ordinary,
        DIFF_TYPE_Urgent
    } DifferenceType;

    HRESULT SubtractMoniker(
        [in] IReconcileInitiator *pInitiator,
        [in] IMoniker            *pOtherStg,
        [in] DifferenceType      diffType,
        [in,out] STGMEDIUM       *pStgMedium,
        [in] DWORD               reserved);

    HRESULT SubtractVerid(
        [in] IReconcileInitiator *pInitiator,
        [in] VERID               *pVerid,
        [in] DifferenceType      diffType,
        [in,out] STGMEDIUM       *pStgMedium,
        [in] DWORD               reserved);

    HRESULT SubtractTimeStamp(
        [in] IReconcileInitiator *pInitiator,
        [in] FILETIME            *pTimeStamp,   // UTC
        [in] DifferenceType      diffType,
        [in,out] STGMEDIUM       *pStgMedium,
        [in] DWORD               reserved);

    HRESULT Add(
        [in] IReconcileInitiator *pInitiator,
        [in] STGMEDIUM           *pStgMedium);
}
