windows-nt/Source/XPSP1/NT/com/rpc/midl/inc/midlnode.hxx

462 lines
9.1 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/**********************************************************************/
/** 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__