|
|
/*****************************************************************************/ /** Microsoft LAN Manager **/ /** Copyright(c) Microsoft Corp., 1987-1999 **/ /*****************************************************************************/ /*****************************************************************************
File : usectxt.hxx Title : use context information manager. History : 24-Aug-1991 VibhasC Created
*****************************************************************************/ #ifndef __BADUSE_HXX__
#define __BADUSE_HXX__
/**
** enumeration of all reasons why a construct could be bad. **/
enum _badconstruct { BC_NONE ,BC_DERIVES_FROM_VOID ,BC_DERIVES_FROM_PTR_TO_VOID ,BC_DERIVES_FROM_INT ,BC_DERIVES_FROM_PTR_TO_INT ,BC_DERIVES_FROM_HANDLE_T ,BC_DERIVES_FROM_ELIPSIS ,BC_DERIVES_FROM_CONF ,BC_DERIVES_FROM_VARY ,BC_DERIVES_FROM_UNSIZED_ARRAY ,BC_DERIVES_FROM_FUNC ,BC_DERIVES_FROM_CONF_STRUCT ,BC_DERIVES_FROM_VARY_STRUCT ,BC_DERIVES_FROM_CDECL ,BC_DERIVES_FROM_E_STAT_T ,BC_MAY_DERIVE_ARRAY_OF_UNIONS ,BC_DERIVES_FROM_IGNORE ,BC_DERIVES_FROM_RECURSIVE_REF ,BC_DERIVES_FROM_UNNAMED_FIELD ,BC_DERIVES_FROM_CONF_UNION ,BC_DERIVES_FROM_UNSIZED_STRING ,BC_REF_PTR_BAD_RT ,BC_DERIVES_FROM_RECURSIVE_UNION ,BC_BAD_RT_NE_UNION ,BC_DERIVES_FROM_CONF_PTR ,BC_DERIVES_FROM_VARY_PTR ,BC_CV_PTR_STRUCT_BAD_IN_XMIT_AS };
/**
** enumeration of all reasons why a construct could be non-rpcable and should ** be checked at use time. **/
enum _nonrpcable { NR_NONE ,NR_DERIVES_FROM_INT ,NR_DERIVES_FROM_PTR_TO_INT ,NR_DERIVES_FROM_VOID ,NR_DERIVES_FROM_PTR_TO_VOID ,NR_DERIVES_FROM_CONST ,NR_DERIVES_FROM_PTR_TO_CONST ,NR_DERIVES_FROM_FUNC ,NR_DERIVES_FROM_PTR_TO_FUNC ,NR_DERIVES_FROM_UNSIZED_STRING ,NR_DERIVES_FROM_P_TO_U_STRING ,NR_DERIVES_FROM_PTR_TO_CONF ,NR_DERIVES_FROM_BIT_FIELDS ,NR_DERIVES_FROM_NON_RPC_UNION ,NR_DERIVES_FROM_CONF_STRUCT ,NR_DERIVES_FROM_P_TO_C_STRUCT ,NR_DERIVES_FROM_TRANSMIT_AS ,NR_DERIVES_FROM_NE_UNIQUE_PTR ,NR_DERIVES_FROM_NE_FULL_PTR ,NR_DERIVES_FROM_CDECL ,NR_BASIC_TYPE_HANDLE_T ,NR_PRIMITIVE_HANDLE ,NR_PTR_TO_PRIMITIVE_HANDLE ,NR_GENERIC_HANDLE ,NR_PTR_TO_GENERIC_HANDLE ,NR_CTXT_HDL ,NR_PTR_TO_CTXT_HDL ,NR_PTR_TO_PTR_TO_CTXT_HDL ,NR_DERIVES_FROM_WCHAR_T };
#define TRULY_NON_RPCABLE( p ) \
( \ p->NonRPCAbleBecause( NR_DERIVES_FROM_INT ) || \ p->NonRPCAbleBecause( NR_DERIVES_FROM_PTR_TO_INT ) || \ p->NonRPCAbleBecause( NR_DERIVES_FROM_VOID ) || \ p->NonRPCAbleBecause( NR_DERIVES_FROM_PTR_TO_VOID ) || \ p->NonRPCAbleBecause( NR_DERIVES_FROM_FUNC ) || \ p->NonRPCAbleBecause( NR_DERIVES_FROM_PTR_TO_FUNC ) || \ p->NonRPCAbleBecause( NR_DERIVES_FROM_BIT_FIELDS ) || \ p->NonRPCAbleBecause( NR_DERIVES_FROM_NON_RPC_UNION ) \ )
/**
** The basic bad use information structures **/
#define SIZE_BAD_CON_REASON_ARRAY (1)
#define SIZE_NON_RPC_REASON_ARRAY (1)
#define SIZE_USE_CONTEXT_ARRAY (1)
typedef unsigned long BAD_CONSTRUCT; typedef unsigned long NON_RPCABLE; typedef unsigned long USE_CONTEXT;
typedef BAD_CONSTRUCT BadConstructReason[SIZE_BAD_CON_REASON_ARRAY]; typedef NON_RPCABLE NonRPCAbleReason[SIZE_NON_RPC_REASON_ARRAY]; typedef USE_CONTEXT UseContextInfo[SIZE_USE_CONTEXT_ARRAY];
/**
** The use information block class **/ class BadUseInfo { private:
BadConstructReason AllBadConstructReasons; NonRPCAbleReason AllNonRPCAbleReasons; UseContextInfo UseContext; short NoOfArmsWithCaseLabels;
friend void CopyAllBadConstructReasons( class BadUseInfo *, class BadUseInfo * );
friend void CopyAllNonRPCAbleReasons( class BadUseInfo *, class BadUseInfo * );
friend void CopyAllBadUseReasons( class BadUseInfo *, class BadUseInfo * ); friend void CopyNoOfArmsWithCaseLabels( class BadUseInfo *, class BadUseInfo * );
public:
BadUseInfo();
void InitBadUseInfo();
BOOL BadConstructBecause( BAD_CONSTRUCT );
BOOL NonRPCAbleBecause( NON_RPCABLE );
void SetBadConstructBecause( BAD_CONSTRUCT );
void ResetBadConstructBecause( BAD_CONSTRUCT );
void SetNonRPCAbleBecause( NON_RPCABLE );
void ResetNonRPCAbleBecause( NON_RPCABLE );
BOOL AnyReasonForBadConstruct();
BOOL AnyReasonForNonRPCAble();
short GetNoOfArmsWithCaseLabels() { return NoOfArmsWithCaseLabels; }
void InitNoOfArmsWithCaseLabels() { NoOfArmsWithCaseLabels = 0; }
void IncrementNoOfArmsWithCaseLabels() { NoOfArmsWithCaseLabels++; }
BOOL HasAnyHandleSpecification();
void ResetAllHdlSpecifications(); };
#endif // __BADUSE_HXX__
|