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

155 lines
3.5 KiB
C++

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 1989-1999 Microsoft Corporation
Module Name:
dtable.hxx
Abstract:
Dispatch table manager defintions.
Notes:
History:
Oct-01-1993 VibhasC Created.
----------------------------------------------------------------------------*/
/****************************************************************************
* include files
***************************************************************************/
#ifndef __DTABLE_HXX__
#define __DTABLE_HXX__
#include "nulldefs.h"
extern "C"
{
#include <stdio.h>
}
#include "cgcommon.hxx"
#include "idict.hxx"
#include "listhndl.hxx"
#include "nodeskl.hxx"
//
// This is the dispatch table manager class. We chose to do this using a class
// derived from a simple array dictionary, because for MIDL's mixed model
// of stub generation, mop dispatch table generation needs to know a little
// more info about a procedure during dispatch table generation than normal
// stubs.
//
// Each entry in the this class is a pointer to a special structure that
// keeps the name of the function, along with some other information. This is
// used by MIDL's code generator to register procedures for final emission into
// the dispatch table. This class is NOT responsible for mangling names of the
// procedures. It is the responsibility of the code generator to mangle names
// before registering with the dispatch table.
//
#define INITIAL_SIZE_FOR_DISPATCH_TABLE 10
#define INCREMENT_FOR_DISPATCH_TABLE 10
//
// Additional info about dispatch table entries.
// These may overlap in the table: Read the comment about GetProcList.
typedef enum
{
DTF_NONE = 0x0000
,DTF_INTERPRETER = 0x0001
,DTF_PICKLING_PROC = 0x0008
} DISPATCH_TABLE_FLAGS;
//
// A dispatch table entry. The dispatch table class owns the structure, but
// does not own the name pointer. therefore while destroying the contents
// of this structure, DONT free the procedure name.
//
typedef struct
{
//
// The name of the procedure to be registered.
//
PNAME pName;
//
// The node_skl of the procedure.
//
node_skl * pNode;
//
// Additional info that qualifies the procedure entry.
//
DISPATCH_TABLE_FLAGS Flags;
} DISPATCH_TABLE_ENTRY;
//
// The actual dispatch table class.
//
class DISPATCH_TABLE : public IDICT
{
private:
public:
//
// The constructor.
//
DISPATCH_TABLE() : IDICT(
INITIAL_SIZE_FOR_DISPATCH_TABLE,
INCREMENT_FOR_DISPATCH_TABLE
)
{
}
//
// The destructor.
//
~DISPATCH_TABLE();
//
// Register the procedure.
//
void RegisterProcedure( node_skl * pProcName,
DISPATCH_TABLE_FLAGS Flags );
//
// Return the count of number of procedures in the table.
//
unsigned short GetCount()
{
return GetNumberOfElements();
}
//
// Get a list of procedures which conform to the specified flags. Return
// the count of such procedures. The flags field allows the caller to
// select a set of procedures which have certain properties. For example,
// the caller may want all procedures which are either mops procedures or
// normal procedures. The flags field should specify all the necessary
// flags which identify a mops dispatch table entry. This function will
// use the flags param as a filter for the dispatch table entries.
//
unsigned short GetProcList( ITERATOR& ProcList,
DISPATCH_TABLE_FLAGS );
};
#endif // __DTABLE_HXX__