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

115 lines
2.4 KiB
C++

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 1989-1999 Microsoft Corporation
Module Name:
cgcls.cxx
Abstract:
Routines for the cgcls code generation class.
Notes:
History:
Aug-31-1993 VibhasC Created.
----------------------------------------------------------------------------*/
/****************************************************************************
* include files
***************************************************************************/
#include "becls.hxx"
#pragma hdrstop
/****************************************************************************
* local definitions
***************************************************************************/
/****************************************************************************
* local data
***************************************************************************/
/****************************************************************************
* externs
***************************************************************************/
/****************************************************************************/
short
CG_CLASS::GetMembers(
ITERATOR& I )
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine Description:
GetMembers (list of child+its siblings) of the code generation class.
Arguments:
I - An iterator for the member list.
Return Value:
Count of number of members.
Notes:
----------------------------------------------------------------------------*/
{
CG_CLASS * pC;
short Count = 0;
if( ( pC = GetChild() ) != 0 )
{
ITERATOR_INSERT( I, pC );
Count++;
while( ( pC = pC->GetSibling() ) != 0 )
{
ITERATOR_INSERT( I, pC );
Count++;
}
}
return Count;
}
CG_CLASS *
CG_CLASS::GetLastSibling()
{
CG_CLASS * pLast = this;
CG_CLASS * pS;
while ( ( pS = pLast->GetSibling() ) != 0 )
pLast = pS;
return pLast;
}
// Set the member list on a class
void CG_CLASS::SetMembers( ITERATOR & I )
{
CG_CLASS *pHead = NULL;
ITERATOR_INIT( I );
ITERATOR_GETNEXT( I, pHead );
if (pHead)
{
CG_CLASS *pCurrent = pHead;
CG_CLASS *pNext = NULL;
while( ITERATOR_GETNEXT( I, pNext ) )
{
pCurrent->SetSibling( pNext );
pCurrent = pNext;
}
pCurrent->SetSibling( NULL );
}
SetChild( pHead );
return;
}