204 lines
5.4 KiB
C++
204 lines
5.4 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1994-1999.
|
|
//
|
|
// File: cluster.h
|
|
//
|
|
// Contents: Temporary interfaces for clustering.
|
|
//
|
|
// History: 14 Feb 1994 Alanw Created
|
|
//
|
|
// Notes: These are temporary for the purpose of integrating
|
|
// clustering with the Explorer until such time as the
|
|
// real interface are available via the DNA table
|
|
// implementation.
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#if !defined( __CLUSTER_H__ )
|
|
#define __CLUSTER_H__
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <query.h>
|
|
|
|
//
|
|
// Structure definitions used with the CluStartClustering API
|
|
//
|
|
|
|
|
|
#ifndef WEIGHTEDPROPID_DEFINED
|
|
#define WEIGHTEDPROPID_DEFINED
|
|
|
|
struct WEIGHTEDPROPID {
|
|
PROPID Id;
|
|
unsigned Weight; // weight of this property
|
|
};
|
|
|
|
#ifndef __cplusplus
|
|
typedef struct WEIGHTEDPROPID WEIGHTEDPROPID;
|
|
#endif // ndef __cplusplus
|
|
|
|
struct WEIGHTEDPROPIDLIST {
|
|
unsigned cProps;
|
|
// [sizeis (cProps)]
|
|
WEIGHTEDPROPID* paProps;
|
|
};
|
|
|
|
|
|
#ifndef __cplusplus
|
|
typedef struct WEIGHTEDPROPIDLIST WEIGHTEDPROPIDLIST;
|
|
#endif // ndef __cplusplus
|
|
#endif // WEIGHTEDPROPID_DEFINED
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CClustering
|
|
//
|
|
// Purpose: Virtual base class for clustering.
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CClustering
|
|
{
|
|
public:
|
|
virtual ~CClustering();
|
|
|
|
//
|
|
// Temporarily stop the clustering process. Let us say the
|
|
// clustering algorithm intended to do 6 iterations and was in the middle
|
|
// of the third iteration when the the pause command was issued.
|
|
// This command will discontinue the third, fourth, fifth, and the sixth
|
|
// iterations. Clustering can be resumed by the function given below.
|
|
//
|
|
virtual NTSTATUS PauseClustering() = 0;
|
|
|
|
//
|
|
// Perform some more iterations. Other pending iterations will
|
|
// be cancelled.
|
|
//
|
|
virtual NTSTATUS ResumeClustering(ULONG iExtraIterations) = 0;
|
|
|
|
//
|
|
// Perform up to current limit of iterations
|
|
//
|
|
virtual NTSTATUS ResumeClustering() = 0;
|
|
};
|
|
|
|
#else // __cplusplus
|
|
typedef VOID* CClustering;
|
|
#endif // __cplusplus
|
|
|
|
|
|
|
|
//
|
|
// APIs for clustering
|
|
//
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif // __cplusplus
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: CluStartClustering, public
|
|
//
|
|
// Synopsis: This function will get the clustering process started,
|
|
// and return a CClustTable through which it can be controlled.
|
|
//
|
|
// Arguments: [pITable] -- the ITable to be clustered
|
|
// [hEvent] -- a handle to an event on which important state
|
|
// changes are signalled.
|
|
// [pPropidList] -- the properties to be clustered; prop-ids
|
|
// are column indexes in this prototype.
|
|
// [NumberOfClusters] -- the desired number of clusters
|
|
// [MaxClusteringTime] -- maximum execution time
|
|
// [MaxIterations] -- maximum number of iterations
|
|
// [ppClustTable] -- on return the CClustTable which controls
|
|
// the clustering.
|
|
//
|
|
// Returns: NTSTATUS - result of the operation. If successful, clustering
|
|
// may be going on asynchronously.
|
|
//
|
|
// Notes: Temporary scaffolding code. This will be replaced by the
|
|
// official DNA interface ICategorize someday
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
NTSTATUS CluStartClustering(
|
|
/*[in] */ ITable* pITable,
|
|
/*[in] */ HANDLE hEvent,
|
|
/*[in] */ WEIGHTEDPROPIDLIST* pPropidList,
|
|
/*[in] */ unsigned NumberOfClusters,
|
|
/*[in] */ unsigned MaxClusteringTime,
|
|
/*[in] */ unsigned MaxIterations,
|
|
/*[out] */ CClustering** ppClustTable
|
|
);
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: CluCreateClusteringTable,public
|
|
//
|
|
// Synopsis: Create an ITable for a clustering given a CClustTable
|
|
// pointer returned by CluStartClustering.
|
|
//
|
|
// Arguments: [pClustTable] -- the clustering table object as
|
|
// returned from CluStartClustering.
|
|
// [ppITable] -- a pointer to the location where the
|
|
// clustering ITable is returned.
|
|
//
|
|
// Returns: HRESULT - success indication
|
|
//
|
|
// Notes: Temporary scaffolding code. This will be replaced by the
|
|
// official DNA interface ICategorize someday
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
NTSTATUS CluCreateClusteringTable(
|
|
/*[in] */ CClustering* pClustTable,
|
|
/*[out] */ ITable** ppITable
|
|
);
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: CluCreateClusterSubTable,public
|
|
//
|
|
// Synopsis: Create an ITable for a sub-cluster given a CClustTable
|
|
// pointer returned by CluStartClustering.
|
|
//
|
|
// Arguments: [pClustTable] -- the clustering table object as
|
|
// returned from CluStartClustering.
|
|
// [iCluster] -- cluster number of sub-table.
|
|
// [ppITable] -- a pointer to the location where the
|
|
// clustering ITable is returned.
|
|
//
|
|
// Returns: HRESULT - success indication
|
|
//
|
|
// Notes: Temporary scaffolding code. This will be replaced by the
|
|
// official DNA interface ICategorize someday
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
NTSTATUS CluCreateClusterSubTable(
|
|
/*[in] */ CClustering* pClustTable,
|
|
/*[in] */ unsigned iCluster,
|
|
/*[out] */ ITable** ppITable
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif // __cplusplus
|
|
|
|
|
|
|
|
#endif // __CLUSTER_H__
|