windows-nt/Source/XPSP1/NT/com/rpc/midl/codegen/treg.cxx
2020-09-26 16:20:57 +08:00

136 lines
2.5 KiB
C++

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 1989-1999 Microsoft Corporation
Module Name:
treg.cxx
Abstract:
This file implements the type registry for header file generation.
Notes:
History:
Oc-23-1993 VibhasC Created.
----------------------------------------------------------------------------*/
#pragma warning ( disable : 4514 )
/****************************************************************************
* include files
***************************************************************************/
#include "becls.hxx"
#pragma hdrstop
node_skl *
TREGISTRY::IsRegistered(
node_skl * pType )
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine Description:
Register a type with the type registry.
Arguments:
pType - A pointer to the type being registered.
Return Value:
The node that gets registered.
Notes:
----------------------------------------------------------------------------*/
{
Dict_Status Status = Dict_Find( pType );
switch( Status )
{
case EMPTY_DICTIONARY:
case ITEM_NOT_FOUND:
return (node_skl *)0;
default:
return (node_skl *)Dict_Curr_Item();
}
}
node_skl *
TREGISTRY::Register(
node_skl * pType )
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine Description:
Register a type with the dictionary.
Arguments:
pType - A pointer to the type node.
Return Value:
The final inserted type.
Notes:
----------------------------------------------------------------------------*/
{
if( !IsRegistered( pType ) )
{
Dict_Insert( (pUserType) pType );
return pType;
}
return (node_skl *)pType;
}
short
TREGISTRY::GetListOfTypes(
ITERATOR& ListIter )
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine Description:
Get the list of types in this registry.
Arguments:
ListIter - A pre- constructed iterator where the list of types is
returned.
Return Value:
The count of the number of items.
Notes:
----------------------------------------------------------------------------*/
{
node_skl * pN;
Dict_Status Status;
short Count = 0;
// Get to the top of the dictionary.
Status = Dict_Next( (pUserType)0 );
// make sure we start with a clean iterator
ITERATOR_DISCARD( ListIter );
// Iterate till the entire dictionary is looked at.
while( SUCCESS == Status )
{
pN = (node_skl *)Dict_Curr_Item();
ITERATOR_INSERT( ListIter, pN );
Count++;
Status = Dict_Next( (pUserType)pN );
}
return Count;
}