mirror of https://github.com/tongzx/nt5src
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.
115 lines
2.1 KiB
115 lines
2.1 KiB
//____________________________________________________________________________
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1999
|
|
//
|
|
// File: ScopIter.cpp
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History:
|
|
//____________________________________________________________________________
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "scopiter.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
DEBUG_DECLARE_INSTANCE_COUNTER(CScopeTreeIterator);
|
|
|
|
CScopeTreeIterator::CScopeTreeIterator() : m_pMTNodeCurr(NULL)
|
|
{
|
|
DEBUG_INCREMENT_INSTANCE_COUNTER(CScopeTreeIterator);
|
|
}
|
|
|
|
CScopeTreeIterator::~CScopeTreeIterator()
|
|
{
|
|
DEBUG_DECREMENT_INSTANCE_COUNTER(CScopeTreeIterator);
|
|
}
|
|
|
|
STDMETHODIMP CScopeTreeIterator::SetCurrent(HMTNODE hMTNode)
|
|
{
|
|
MMC_TRY
|
|
|
|
if (hMTNode == 0)
|
|
return E_INVALIDARG;
|
|
|
|
m_pMTNodeCurr = CMTNode::FromHandle(hMTNode);
|
|
|
|
return S_OK;
|
|
|
|
MMC_CATCH
|
|
}
|
|
|
|
STDMETHODIMP CScopeTreeIterator::Next(UINT nRequested, HMTNODE* rghScopeItems,
|
|
UINT* pnFetched)
|
|
{
|
|
MMC_TRY
|
|
|
|
if (rghScopeItems == NULL || pnFetched == NULL)
|
|
return E_POINTER;
|
|
|
|
*pnFetched = 0; // init
|
|
|
|
if (nRequested == 0)
|
|
return S_OK;
|
|
|
|
int i = 0;
|
|
CMTNode** rgpMTNodes = reinterpret_cast<CMTNode**>(rghScopeItems);
|
|
|
|
while (m_pMTNodeCurr != NULL && nRequested--)
|
|
{
|
|
rgpMTNodes[i++] = m_pMTNodeCurr;
|
|
m_pMTNodeCurr = m_pMTNodeCurr->Next();
|
|
}
|
|
|
|
*pnFetched = i;
|
|
|
|
return S_OK;
|
|
|
|
MMC_CATCH
|
|
}
|
|
|
|
STDMETHODIMP CScopeTreeIterator::Child(HMTNODE* phsiChild)
|
|
{
|
|
MMC_TRY
|
|
|
|
if (phsiChild == NULL)
|
|
return E_POINTER;
|
|
|
|
*phsiChild = 0; // init
|
|
|
|
if (m_pMTNodeCurr != NULL)
|
|
*phsiChild = CMTNode::ToHandle(m_pMTNodeCurr->Child());
|
|
|
|
return S_OK;
|
|
|
|
MMC_CATCH
|
|
}
|
|
|
|
STDMETHODIMP CScopeTreeIterator::Parent(HMTNODE* phsiParent)
|
|
{
|
|
MMC_TRY
|
|
|
|
if (phsiParent == NULL)
|
|
return E_POINTER;
|
|
|
|
*phsiParent = 0; // init
|
|
|
|
if (m_pMTNodeCurr != NULL)
|
|
*phsiParent = CMTNode::ToHandle(m_pMTNodeCurr->Child());
|
|
|
|
return S_OK;
|
|
|
|
MMC_CATCH
|
|
}
|
|
|
|
|