Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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__
|