136 lines
2.5 KiB
C++
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;
|
||
|
}
|