You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
241 lines
5.4 KiB
241 lines
5.4 KiB
//+------------------------------------------------------------
|
|
//
|
|
// Copyright (C) 1998, Microsoft Corporation
|
|
//
|
|
// File: icatqueries.cpp
|
|
//
|
|
// Contents: CICategorizerQueriesIMP implementation
|
|
//
|
|
// Classes:
|
|
// CICategorizerQueriesIMP
|
|
//
|
|
// Functions:
|
|
//
|
|
// History:
|
|
// jstamerj 1998/07/15 14:25:18: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
#include "precomp.h"
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: QueryInterface
|
|
//
|
|
// Synopsis: Returns pointer to this object for IUnknown and ICategorizerQueries
|
|
//
|
|
// Arguments:
|
|
// iid -- interface ID
|
|
// ppv -- pvoid* to fill in with pointer to interface
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
// E_NOINTERFACE: Don't support that interface
|
|
//
|
|
// History:
|
|
// jstamerj 980612 14:07:57: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
STDMETHODIMP CICategorizerQueriesIMP::QueryInterface(
|
|
REFIID iid,
|
|
LPVOID *ppv)
|
|
{
|
|
*ppv = NULL;
|
|
|
|
if(iid == IID_IUnknown) {
|
|
*ppv = (LPVOID) this;
|
|
} else if (iid == IID_ICategorizerQueries) {
|
|
*ppv = (LPVOID) this;
|
|
} else {
|
|
return E_NOINTERFACE;
|
|
}
|
|
AddRef();
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: AddRef
|
|
//
|
|
// Synopsis: adds a reference to this object
|
|
//
|
|
// Arguments: NONE
|
|
//
|
|
// Returns: New reference count
|
|
//
|
|
// History:
|
|
// jstamerj 980611 20:07:14: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
ULONG CICategorizerQueriesIMP::AddRef()
|
|
{
|
|
return InterlockedIncrement((PLONG)&m_cRef);
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: Release
|
|
//
|
|
// Synopsis: releases a reference
|
|
//
|
|
// Arguments: NONE
|
|
//
|
|
// Returns: New reference count
|
|
//
|
|
// History:
|
|
// jstamerj 980611 20:07:33: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
ULONG CICategorizerQueriesIMP::Release()
|
|
{
|
|
LONG lNewRefCount;
|
|
lNewRefCount = InterlockedDecrement((PLONG)&m_cRef);
|
|
|
|
// We are allocated on the stack
|
|
|
|
return lNewRefCount;
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: CICategorizerQueriesIMP::SetQueryString
|
|
//
|
|
// Synopsis: Set the query string for a batch of ICategorizerItems
|
|
//
|
|
// Arguments:
|
|
// pszQueryString: QueryString to set or NULL to unset any query string
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
// E_OUTOFMEMORY
|
|
//
|
|
// History:
|
|
// jstamerj 1998/07/15 14:28:18: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
STDMETHODIMP CICategorizerQueriesIMP::SetQueryString(
|
|
IN LPSTR pszQueryString)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
DWORD dwOldLength;
|
|
DWORD dwNewLength;
|
|
|
|
CatFunctEnterEx((LPARAM)this, "CICategorizerQueriesIMP::SetQueryString");
|
|
//
|
|
// If pszQueryString is NULL, release any existing buffer and set
|
|
// ptr to NULL
|
|
//
|
|
if(pszQueryString == NULL) {
|
|
if(*m_ppsz != NULL)
|
|
delete *m_ppsz;
|
|
*m_ppsz = NULL;
|
|
return S_OK;
|
|
}
|
|
|
|
//
|
|
// Get the lengths of new and old strings
|
|
//
|
|
dwNewLength = lstrlen(pszQueryString);
|
|
|
|
if(*m_ppsz) {
|
|
|
|
dwOldLength = lstrlen(*m_ppsz);
|
|
|
|
if(dwNewLength <= dwOldLength) {
|
|
//
|
|
// Re-use the same buffer
|
|
//
|
|
lstrcpy(*m_ppsz, pszQueryString);
|
|
return S_OK;
|
|
|
|
} else {
|
|
//
|
|
// Free the existing buffer and realloc below
|
|
//
|
|
delete *m_ppsz;
|
|
}
|
|
}
|
|
*m_ppsz = new CHAR[ dwNewLength + 1 ];
|
|
|
|
if(*m_ppsz == NULL)
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
ERROR_LOG("new CHAR[]");
|
|
return hr;
|
|
}
|
|
|
|
lstrcpy(*m_ppsz, pszQueryString);
|
|
|
|
CatFunctLeaveEx((LPARAM)this);
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: CICategorizerQueriesIMP::SetQueryStringNoAlloc
|
|
//
|
|
// Synopsis: Internal method to set the query string without
|
|
// ReAllocing the buffer
|
|
//
|
|
// Arguments:
|
|
// pszQueryString: QueryString to set
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
//
|
|
// History:
|
|
// jstamerj 1998/07/15 16:08:45: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
HRESULT CICategorizerQueriesIMP::SetQueryStringNoAlloc(
|
|
IN LPSTR pszQueryString)
|
|
{
|
|
//
|
|
// Free the old buffer, if any
|
|
//
|
|
if(*m_ppsz)
|
|
delete *m_ppsz;
|
|
|
|
//
|
|
// Set the new string to the caller's pointer
|
|
//
|
|
*m_ppsz = pszQueryString;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
|
|
//+------------------------------------------------------------
|
|
//
|
|
// Function: CICategorizerQueriesIMP::GetQueryString
|
|
//
|
|
// Synopsis: Retrieve pointer to the current query string. Note that
|
|
// this pointer will become bogus of SetQueryString is called again
|
|
//
|
|
// Arguments:
|
|
// ppszQueryString: ptr to set to the query string ptr.
|
|
//
|
|
// Returns:
|
|
// S_OK: Success
|
|
//
|
|
// History:
|
|
// jstamerj 1998/07/20 15:06:34: Created.
|
|
//
|
|
//-------------------------------------------------------------
|
|
STDMETHODIMP CICategorizerQueriesIMP::GetQueryString(
|
|
LPSTR *ppszQueryString)
|
|
{
|
|
_ASSERT(ppszQueryString);
|
|
//
|
|
// Give out our string pointer
|
|
//
|
|
*ppszQueryString = *m_ppsz;
|
|
|
|
return S_OK;
|
|
}
|