windows-nt/Source/XPSP1/NT/inetsrv/query/fsci/indexing/docname.hxx
2020-09-26 16:20:57 +08:00

132 lines
2.9 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1997.
//
// File: docname.hxx
//
// Contents: Storage Client for document
//
// History: 11-22-96 srikants Created
//
//----------------------------------------------------------------------------
#pragma once
#include <ciintf.h>
#include <cifrmcom.hxx>
//+---------------------------------------------------------------------------
//
// Class: CCiCDocName
//
// Purpose: Storage system's notion of a document name. It is a NULL terminated
// wide char full path to the file.
//
// History: 11-22-96 srikants Created
//
// Notes: This class is NOT multi-thread safe. The user must make sure
// that only one thread is using it at a time.
//
//----------------------------------------------------------------------------
class CCiCDocName : public ICiCDocName
{
public:
//
// Constructor and Destructor
//
CCiCDocName( WCHAR const * pwszPath = 0 );
CCiCDocName( WCHAR const * pwszPath, ULONG cwc );
//
// IUnknown methods.
//
STDMETHOD(QueryInterface) (THIS_ REFIID riid,LPVOID *ppiuk );
STDMETHOD_(ULONG, AddRef) (THIS);
STDMETHOD_(ULONG, Release) (THIS);
//
// ICiCDocName methods.
//
STDMETHOD(Init) ( const BYTE * pbData, ULONG cbData );
STDMETHOD(Set) ( const ICiCDocName * pICiCDocName );
STDMETHOD(Clear) (void);
STDMETHOD(IsValid) (void);
STDMETHOD(Duplicate) ( ICiCDocName ** ppICiCDocName );
STDMETHOD(Get) ( BYTE * pbName, ULONG * pcbName ) ;
STDMETHOD(GetNameBuffer) ( BYTE const * * ppbName, ULONG * pcbName );
STDMETHOD(GetBufSizeNeeded) ( ULONG * pcbName );
//
// Methods specific to CCiCDocName.
//
WCHAR const * GetPath() const
{
return _pwszPath;
}
void SetPath( WCHAR const * pwszPath, ULONG cwc );
static BOOL IsEvenNumber( ULONG n )
{
return 0 == (n & 0x1);
}
protected:
virtual ~CCiCDocName()
{
Win4Assert( 0 == _refCount );
FreeResources();
}
private:
enum { CWC_DELTA = 32 };
void FreeResources()
{
if ( 0 != _pwszPath && _wszBuffer != _pwszPath )
{
delete [] _pwszPath;
_pwszPath = 0;
_cwcMax = _cwcPath = 0;
}
}
ULONG ComputeBufSize() const
{
return (_cwcPath+1) * sizeof(WCHAR);
}
WCHAR * _pwszPath; // Actual path
LONG _refCount; // Refcounting
BOOL _fIsInit; // Is it initialized ??
ULONG _cwcMax; // Maximum number of chars in _pwszPath
ULONG _cwcPath; // Number of characters in the path
WCHAR _wszBuffer[MAX_PATH]; // used for default path name
};