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

183 lines
3.7 KiB
C++

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 1989-1999 Microsoft Corporation
Module Name:
resdict.hxx
Abstract:
resource dictionary class definitions.
Notes:
History:
VibhasC Aug-08-1993 Created.
----------------------------------------------------------------------------*/
#ifndef __RESDICT_HXX__
#define __RESDICT_HXX__
/****************************************************************************
* include files
***************************************************************************/
#include "nulldefs.h"
extern "C"
{
#include <stdio.h>
}
#include "dict.hxx"
#include "resdef.hxx"
#include "listhndl.hxx"
/****************************************************************************
* externs
***************************************************************************/
extern int CompareResourceKey( void *, void *);
extern void PrintResourceKey( void * );
class RESOURCE_DICT : public Dictionary
{
public:
//
// The resource dictionary constructor must be supplied with the
// comparison and print routines.
//
RESOURCE_DICT() : Dictionary( )
{
}
//
// The resource dictionary must delete all the resources it allocated.
//
~RESOURCE_DICT()
{
Clear();
}
//
// Insert a resource of a given name into the dictionary.
//
RESOURCE * Insert( PNAME pResName, node_skl * pT );
//
// Search for a resource of a particular name in the dictionary.
//
RESOURCE * Search( PNAME pResName );
//
// Get a list of all resources.
//
short GetListOfResources( ITERATOR& ListIter );
//
// Clear up the dictionary by deleting all the resources allocated.
//
void Clear();
//
// Comparison function...
//
virtual
SSIZE_T Compare (pUserType pL, pUserType pR);
};
//
// This class is a data base of resource dictionaries.
//
class RESOURCE_DICT_DATABASE
{
private:
//
// The global resource dictionary. This refers to resources used by the
// stub which are globally available. For example, these may include
// global variables declared for implicit_handles.
//
RESOURCE_DICT GlobalResourceDict;
//
// Parameter resource dictionary. All parameters are treated as resources.
// They may or may not be used as local variables by the stub during
// marshalling or unmarshalling.
//
RESOURCE_DICT ParamResourceDict;
//
// Local variable resource dictionary. These refer to local variables
// the stub declares for its own use. For example, on the client side,
// the stub message and the rpc message are treated as local variables.
// On the server side, the stub may declare local variables corresponding
// to the parameters in the procedure signature.
//
RESOURCE_DICT LocalResourceDict;
//
// Transient resource dictionary. This dictionary is to keep track of
// the local variables declared for special data structures (like arrays)
// which have even more locality than the local variables declared at the
// stub prolog level.
//
RESOURCE_DICT TransientResourceDict;
public:
//
// The constructor. The embedded resource dictionaries will be automatically
// inited.
//
RESOURCE_DICT_DATABASE()
{
}
//
// Get methods.
//
RESOURCE_DICT * GetGlobalResourceDict()
{
return &GlobalResourceDict;
}
RESOURCE_DICT * GetParamResourceDict()
{
return &ParamResourceDict;
}
RESOURCE_DICT * GetLocalResourceDict()
{
return &LocalResourceDict;
}
RESOURCE_DICT * GetTransientResourceDict()
{
return &TransientResourceDict;
}
void ClearTransientResourceDict()
{
TransientResourceDict.Clear();
}
};
#endif // __RESDICT_HXX__