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

244 lines
6.5 KiB
C++

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 1989-1999 Microsoft Corporation
Module Name:
paddict.hxx
Abstract:
Implements a dictionary for handling padding expressions for unknown
represent as data types.
Notes:
History:
Jan 25, 1994 RyszardK Created
----------------------------------------------------------------------------*/
#ifndef __PADDICT_HXX__
#define __PADDICT_HXX__
#include "nulldefs.h"
extern "C"
{
#include <stdio.h>
#include <string.h>
}
#include "cgcommon.hxx"
#include "dict.hxx"
/////////////////////////////////////////////////////////////////////////////
//
// This class defines a dictionary with members for counting and traversing.
//
/////////////////////////////////////////////////////////////////////////////
class CountedDictionary : public Dictionary
{
private:
unsigned short CurrentIndex;
public:
CountedDictionary() : Dictionary()
{
CurrentIndex = 0;
}
~CountedDictionary() {}
unsigned short GetCount()
{
return CurrentIndex;
}
void IncrementCount()
{
CurrentIndex++;
}
unsigned short GetListOfItems( ITERATOR& ListIter );
void * GetFirst();
void * GetNext();
virtual
SSIZE_T Compare( pUserType pL, pUserType pR );
};
/////////////////////////////////////////////////////////////////////////////
//
// This class defines a dictionary for handling padding related to
// unknown represent as types.
//
/////////////////////////////////////////////////////////////////////////////
typedef struct _RepAsPadDictElem
{
unsigned long KeyOffset;
node_skl * pStructType;
char * pFieldName;
node_skl * pPrevFieldType;
} REP_AS_PAD_EXPR_DESC;
class RepAsPadExprDict : public Dictionary
{
private:
unsigned short EntryCount;
public:
RepAsPadExprDict() : Dictionary()
{
EntryCount = 0;
}
~RepAsPadExprDict() {}
// Register an entry.
void Register( unsigned long Offset,
node_skl * pStructType,
char * pFieldName,
node_skl * pPrevFieldType );
unsigned short GetCount()
{
return EntryCount;
}
REP_AS_PAD_EXPR_DESC * GetFirst();
REP_AS_PAD_EXPR_DESC * GetNext();
void WriteCurrentPadDesc( ISTREAM * pStream );
SSIZE_T Compare( pUserType pL, pUserType pR );
};
/////////////////////////////////////////////////////////////////////////////
//
// This class defines a dictionary for handling padding related to
// unknown represent as types.
//
/////////////////////////////////////////////////////////////////////////////
typedef struct _RepAsSizeDictElem
{
unsigned long KeyOffset;
char * pTypeName;
} REP_AS_SIZE_DESC;
class RepAsSizeDict : public Dictionary
{
private:
unsigned short EntryCount;
public:
RepAsSizeDict() : Dictionary()
{
EntryCount = 0;
}
~RepAsSizeDict() {}
// Register an entry.
void Register( unsigned long Offset,
char * pTypeName );
unsigned short GetCount()
{
return EntryCount;
}
REP_AS_SIZE_DESC * GetFirst();
REP_AS_SIZE_DESC * GetNext();
void WriteCurrentSizeDesc( ISTREAM * pStream );
SSIZE_T Compare( pUserType pL, pUserType pR );
};
/////////////////////////////////////////////////////////////////////////////
//
// This class defines a dictionary for handling quintuple routines.
// I.e. this is a support needed for transmit_as represent_as table,
// that is called the Quintuple table for historical reasons.
//
/////////////////////////////////////////////////////////////////////////////
class QuintupleDict : public Dictionary
{
private:
unsigned short CurrentIndex;
public:
QuintupleDict() : Dictionary()
{
CurrentIndex = 0;
}
~QuintupleDict() {}
// Register an entry.
BOOL Add( void * pContext );
unsigned short GetCount()
{
return CurrentIndex;
}
void * GetFirst();
void * GetNext();
SSIZE_T Compare( pUserType pL, pUserType pR );
};
/////////////////////////////////////////////////////////////////////////////
//
// This class defines a dictionary for Quadruples (usr_marshall support).
//
/////////////////////////////////////////////////////////////////////////////
class QuadrupleDict : public CountedDictionary
{
public:
QuadrupleDict() : CountedDictionary()
{}
~QuadrupleDict() {}
//
// Try to Add an entry.
//
BOOL Add( void * pContext );
SSIZE_T Compare( pUserType pL, pUserType pR );
};
#endif // __PADDICT_HXX__