|
|
/**********************************************************************/ /** Microsoft LAN Manager **/ /** Copyright(c) Microsoft Corp., 1987-1999 **/ /**********************************************************************/
/*
midlnode.hxx MIDL Constants for Type Graph
This class introduces constants used throughout the type graph.
*/
/*
FILE HISTORY :
VibhasC 28-Aug-1990 Created. DonnaLi 17-Oct-1990 Split midltype.hxx off rpctypes.hxx. DonnaLi 11-Dec-1990 Changed to midlnode.hxx.
*/
#ifndef __MIDLNODE_HXX__
#define __MIDLNODE_HXX__
/****************************************************************************
* definitions ****************************************************************************/
#include "common.hxx"
//
// node decriptor mask
//
/**
** they are broken into groups, and there is an array of names in ** front\attrnode.cxx **/
typedef enum _attr_t { ATTR_NONE
,ATTR_FIRST ,ATTR_LAST ,ATTR_LENGTH ,ATTR_MIN ,ATTR_MAX ,ATTR_SIZE ,ATTR_RANGE ,ATTR_CASE ,ATTR_FUNCDESCATTR ,ATTR_IDLDESCATTR ,ATTR_TYPEDESCATTR ,ATTR_VARDESCATTR ,ATTR_TYPE ,ATTR_MEMBER ,REDUNDANT_ATTR_END = ATTR_MEMBER
// attributes which may not be duplicated
,ATTR_ID ,ATTR_HELPCONTEXT ,ATTR_HELPSTRINGCONTEXT ,ATTR_LCID ,ATTR_DLLNAME ,ATTR_HELPSTRING ,ATTR_HELPFILE ,ATTR_HELPSTRINGDLL ,ATTR_ENTRY ,ATTR_GUID ,ATTR_ASYNCUUID ,ATTR_VERSION ,ATTR_SWITCH_IS ,ATTR_IID_IS ,ATTR_DEFAULTVALUE
/*
* type attributes other than * <usage_attributes> * <inline/outofline_attributes> * <heap_attribute> */
,ATTR_TRANSMIT ,ATTR_WIRE_MARSHAL ,ATTR_REPRESENT_AS ,ATTR_CALL_AS // last attribute that may not be duplicated
,NO_DUPLICATES_END = ATTR_CALL_AS ,ATTR_CUSTOM ,ATTR_SWITCH_TYPE ,ATTR_HANDLE ,ATTR_USER_MARSHAL ,ATTR_MS_UNION ,ATTR_MS_CONF_STRUCT ,ATTR_V1_ENUM
// <usage_attributes> from idl
,ATTR_FLCID ,ATTR_HIDDEN ,ATTR_PTR_KIND
,ATTR_STRING ,ATTR_BSTRING
/*
* interface attributes other than * <pointer_attributes> * <code/nocode_attributes> * <inline/outofline_attributes> */
,ATTR_ENDPOINT ,ATTR_LOCAL ,ATTR_OBJECT
/*
* field attributes other than * <usage_attributes> * <pointer_attributes> */
,ATTR_IGNORE ,ATTR_UNUSED1 //was ATTR_OPAQUE
/*
* operation attributes other than * <usage_attributes> * <pointer_attributes> * <code/nocode_attributes> * <comm_status_attribute> */
,ATTR_IDEMPOTENT ,ATTR_BROADCAST ,ATTR_MAYBE ,ATTR_ASYNC ,ATTR_INPUTSYNC ,ATTR_BYTE_COUNT ,ATTR_CALLBACK ,ATTR_MESSAGE
/*
* param attributes other than * <comm_status_attribute> * <heap_attribute> */
,ATTR_IN ,ATTR_OUT ,ATTR_PARTIAL_IGNORE // attribute on base types
,ATTR_DEFAULT
// acf attributes
,ACF_ATTR_START ,ATTR_CONTEXT = ACF_ATTR_START ,ATTR_CODE ,ATTR_NOCODE ,ATTR_OPTIMIZE ,ATTR_COMMSTAT ,ATTR_FAULTSTAT ,ATTR_ALLOCATE ,ATTR_HEAP ,ATTR_IMPLICIT ,ATTR_EXPLICIT ,ATTR_AUTO ,ATTR_PTRSIZE ,ATTR_NOTIFY ,ATTR_NOTIFY_FLAG
,ATTR_ENABLE_ALLOCATE ,ATTR_ENCODE ,ATTR_DECODE ,ATTR_STRICT_CONTEXT_HANDLE ,ATTR_NOSERIALIZE ,ATTR_SERIALIZE ,ATTR_FORCEALLOCATE /*
* international character support attributes */ ,ATTR_DRTAG ,ATTR_RTAG ,ATTR_STAG ,ATTR_CSCHAR ,ATTR_CSTAGRTN
,ACF_ATTR_END // end of acf attributes
/** Temp padding has been introduced to bunch all the new attributes together */
,ATTR_CPORT_ATTRIBUTES_START = ACF_ATTR_END ,ATTR_EXTERN = ATTR_CPORT_ATTRIBUTES_START ,ATTR_STATIC ,ATTR_AUTOMATIC ,ATTR_REGISTER ,ATTR_FAR ,ATTR_NEAR ,ATTR_MSCUNALIGNED ,ATTR_HUGE ,ATTR_PASCAL ,ATTR_FORTRAN ,ATTR_CDECL ,ATTR_STDCALL ,ATTR_LOADDS ,ATTR_SAVEREGS ,ATTR_FASTCALL ,ATTR_SEGMENT ,ATTR_INTERRUPT ,ATTR_SELF ,ATTR_EXPORT ,ATTR_CONST ,ATTR_VOLATILE ,ATTR_BASE ,ATTR_UNSIGNED ,ATTR_SIGNED ,ATTR_PROC_CONST ,ATTR_C_INLINE // c compiler _inline
,ATTR_RPC_FAR ,ATTR_TAGREF ,ATTR_DLLIMPORT ,ATTR_DLLEXPORT ,ATTR_W64 ,ATTR_PTR32 ,ATTR_PTR64 ,ATTR_DECLSPEC_ALIGN ,ATTR_DECLSPEC_UNKNOWN
,ATTR_CPORT_ATTRIBUTES_END = ATTR_PTR64 ,ATTR_END = ATTR_CPORT_ATTRIBUTES_END
} ATTR_T;
#define MODIFIER_BITS ( ATTR_CPORT_ATTRIBUTES_END - ATTR_CPORT_ATTRIBUTES_START )
#define MAX_ATTR_SUMMARY_ELEMENTS 3
#define ATTR_VECTOR_SIZE (MAX_ATTR_SUMMARY_ELEMENTS)
typedef unsigned long ATTR_SUMMARY[ATTR_VECTOR_SIZE];
typedef ATTR_SUMMARY ATTR_VECTOR;
// array of pointers to attributes
class node_base_attr; typedef node_base_attr * ATTR_POINTER_VECTOR[ ACF_ATTR_END ];
#define SetModifierBit(A) ( (A)<ATTR_CPORT_ATTRIBUTES_START ? 0 : \
((unsigned __int64) 1) \ << ((A) - ATTR_CPORT_ATTRIBUTES_START) ) #define SET_ATTR(Array, A) ( (Array)[(A) / 32UL] |= (1UL << ((A) % 32UL)) )
#define RESET_ATTR(Array, A) ( (Array)[(A) / 32UL] &= ~(1UL << ((A) % 32UL)) )
#define IS_ATTR(Array, A) ( (Array)[(A) / 32UL] & (1UL << ((A) % 32UL)) )
BOOL COMPARE_ATTR( ATTR_VECTOR &, ATTR_VECTOR & ); void OR_ATTR( ATTR_VECTOR &, ATTR_VECTOR & ); void XOR_ATTR( ATTR_VECTOR &, ATTR_VECTOR & );
inline void AND_ATTR( ATTR_VECTOR & A1, ATTR_VECTOR & A2 ) { A1[0] &= A2[0]; A1[1] &= A2[1]; #if MAX_ATTR_SUMMARY_ELEMENTS > 2
A1[2] &= A2[2]; #if MAX_ATTR_SUMMARY_ELEMENTS > 3
A1[3] &= A2[3]; #endif
#endif
}
inline void COPY_ATTR( ATTR_VECTOR & A1, ATTR_VECTOR & A2 ) { A1[0] = A2[0]; A1[1] = A2[1]; #if MAX_ATTR_SUMMARY_ELEMENTS > 2
A1[2] = A2[2]; #if MAX_ATTR_SUMMARY_ELEMENTS > 3
A1[3] = A2[3]; #endif
#endif
}
inline void MASKED_COPY_ATTR( ATTR_VECTOR & A1, ATTR_VECTOR & A2, ATTR_VECTOR & M ) { A1[0] = A2[0] & M[0]; A1[1] = A2[1] & M[1]; #if MAX_ATTR_SUMMARY_ELEMENTS > 2
A1[2] = A2[2] & M[2]; #if MAX_ATTR_SUMMARY_ELEMENTS > 3
A1[3] = A2[3] & M[3]; #endif
#endif
}
inline BOOL IS_CLEAR_ATTR( ATTR_VECTOR & A) { return (BOOL) ( ( A[0] | A[1] #if MAX_ATTR_SUMMARY_ELEMENTS > 2
| A[2] #if MAX_ATTR_SUMMARY_ELEMENTS > 3
| A[3] #endif
#endif
) == 0); }
void CLEAR_ATTR( ATTR_VECTOR &); void SET_ALL_ATTR( ATTR_VECTOR &); ATTR_T CLEAR_FIRST_SET_ATTR ( ATTR_VECTOR & );
typedef enum _tattr_t { TATTR_BEGIN, TATTR_PUBLIC = TATTR_BEGIN, TATTR_APPOBJECT, TATTR_CONTROL, TATTR_DUAL, TATTR_LICENSED, TATTR_NONEXTENSIBLE, TATTR_OLEAUTOMATION, TATTR_NONCREATABLE, TATTR_AGGREGATABLE, TATTR_PROXY, TATTR_END = TATTR_OLEAUTOMATION } TATTR_T;
typedef enum _mattr_t { MATTR_BEGIN, MATTR_READONLY = MATTR_BEGIN, MATTR_SOURCE, MATTR_BINDABLE, MATTR_DISPLAYBIND, MATTR_DEFAULTBIND, MATTR_REQUESTEDIT, MATTR_PROPGET, MATTR_PROPPUT, MATTR_PROPPUTREF, MATTR_RESTRICTED, MATTR_OPTIONAL, MATTR_RETVAL, MATTR_VARARG, MATTR_PREDECLID, MATTR_UIDEFAULT, MATTR_NONBROWSABLE, MATTR_DEFAULTCOLLELEM, MATTR_DEFAULTVTABLE, MATTR_IMMEDIATEBIND, MATTR_USESGETLASTERROR, MATTR_REPLACEABLE, MATTR_END = MATTR_PREDECLID } MATTR_T;
///////////////////////////////////////////////////////////////////////////////
enum _edge_t { EDGE_DEF ,EDGE_USE }; typedef _edge_t EDGE_T;
//
// Note: type lib generator has a table that depends on the order of node_t enums.
// Please modify rgMapBaseTypeToVARTYPE in tlgen.cxx when you add a base node.
//
enum node_t { NODE_ILLEGAL = 0 ,BASE_NODE_START = 1 ,NODE_FLOAT = BASE_NODE_START ,NODE_DOUBLE ,NODE_FLOAT80 ,NODE_FLOAT128 ,NODE_HYPER ,NODE_INT64 ,NODE_INT128 ,NODE_INT3264 ,NODE_INT32 ,NODE_LONG ,NODE_LONGLONG ,NODE_SHORT ,NODE_INT ,NODE_SMALL ,NODE_CHAR ,NODE_BOOLEAN ,NODE_BYTE ,NODE_VOID ,NODE_HANDLE_T ,NODE_FORWARD ,NODE_WCHAR_T ,BASE_NODE_END
,INTERNAL_NODE_START = BASE_NODE_END
// constructed types
,NODE_STRUCT = INTERNAL_NODE_START ,NODE_UNION ,NODE_ENUM ,NODE_LABEL ,NODE_PIPE
// midl compiler internal representation node types
,NODE_PROC ,NODE_PARAM ,NODE_FIELD ,NODE_DEF ,NODE_ID ,NODE_FILE ,NODE_INTERFACE ,NODE_ECHO_STRING ,NODE_E_STATUS_T ,NODE_INTERFACE_REFERENCE ,NODE_PIPE_INTERFACE ,NODE_HREF ,NODE_LIBRARY ,NODE_MODULE ,NODE_DISPINTERFACE ,NODE_ASYNC_HANDLE ,NODE_DECL_GUID ,NODE_COCLASS ,NAMED_NODE_END = NODE_COCLASS
,NODE_POINTER ,NODE_ARRAY ,NODE_SAFEARRAY ,NODE_SOURCE ,NODE_ERROR ,NODE_MIDL_PRAGMA ,INTERNAL_NODE_END
// attribute node types
}; typedef node_t NODE_T;
//
// useful macros
//
#define IS_BASE_TYPE_NODE( t ) ((t >= BASE_NODE_START) && (t < BASE_NODE_END))
#define IS_NAMED_NODE( t ) (t <= NAMED_NODE_END)
#endif // __MIDLNODE_HXX__
|