| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef _TYPELIB_TYPEDESCRIPTION_H_ |
| #define _TYPELIB_TYPEDESCRIPTION_H_ |
| |
| #include <sal/types.h> |
| #include <typelib/uik.h> |
| #include <typelib/typeclass.h> |
| #include <rtl/ustring.h> |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| struct _typelib_TypeDescription; |
| |
| #if defined( SAL_W32) |
| #pragma pack(push, 8) |
| #elif defined(SAL_OS2) |
| #pragma pack(push, 8) |
| #endif |
| |
| /** Holds a weak reference to a type description. |
| */ |
| typedef struct _typelib_TypeDescriptionReference |
| { |
| /** reference count of type; don't ever modify this by yourself, use |
| typelib_typedescriptionreference_acquire() and typelib_typedescriptionreference_release() |
| */ |
| sal_Int32 nRefCount; |
| /** number of static references of type, because of the fact that some types are needed |
| until program termination and are commonly held static. |
| */ |
| sal_Int32 nStaticRefCount; |
| /** type class of type |
| */ |
| typelib_TypeClass eTypeClass; |
| /** fully qualified name of type |
| */ |
| rtl_uString * pTypeName; |
| /** pointer to full typedescription; this value is only valid if the type is never swapped out |
| */ |
| struct _typelib_TypeDescription * pType; |
| /** pointer to optimize the runtime; not for public use |
| */ |
| void * pUniqueIdentifier; |
| /** reserved for future use; 0 if not used |
| */ |
| void * pReserved; |
| } typelib_TypeDescriptionReference; |
| |
| /** Full type description of a type. Memory layout of this struct is identical to the |
| typelib_TypeDescriptionReference for the first six members. |
| So a typedescription can be used as type reference. |
| */ |
| typedef struct _typelib_TypeDescription |
| { |
| /** reference count; don't ever modify this by yourself, use |
| typelib_typedescription_acquire() and typelib_typedescription_release() |
| */ |
| sal_Int32 nRefCount; |
| /** number of static references of type, because of the fact that some types are needed |
| until program termination and are commonly held static. |
| */ |
| sal_Int32 nStaticRefCount; |
| /** type class of type |
| */ |
| typelib_TypeClass eTypeClass; |
| /** fully qualified name of type |
| */ |
| rtl_uString * pTypeName; |
| /** pointer to self to distinguish reference from description; for internal use only |
| */ |
| struct _typelib_TypeDescription * pSelf; |
| /** pointer to optimize the runtime; not for public use |
| */ |
| void * pUniqueIdentifier; |
| /** reserved for future use; 0 if not used |
| */ |
| void * pReserved; |
| |
| /** flag to determine whether the description is complete: |
| compound and union types lack of member names, enums lack of member types and names, |
| interfaces lack of members and table init. |
| Call typelib_typedescription_complete() if false. |
| */ |
| sal_Bool bComplete; |
| /** size of type |
| */ |
| sal_Int32 nSize; |
| /** alignment of type |
| */ |
| sal_Int32 nAlignment; |
| /** pointer to weak reference |
| */ |
| typelib_TypeDescriptionReference * pWeakRef; |
| /** determines, if type can be unloaded (and it is possible to reloaded it) |
| */ |
| sal_Bool bOnDemand; |
| } typelib_TypeDescription; |
| |
| /** Type description for exception types. |
| */ |
| typedef struct _typelib_CompoundTypeDescription |
| { |
| /** inherits all members of typelib_TypeDescription |
| */ |
| typelib_TypeDescription aBase; |
| |
| /** pointer to base type description, else 0 |
| */ |
| struct _typelib_CompoundTypeDescription * pBaseTypeDescription; |
| |
| /** number of members |
| */ |
| sal_Int32 nMembers; |
| /** byte offsets of each member including the size the base type |
| */ |
| sal_Int32 * pMemberOffsets; |
| /** members of the struct or exception |
| */ |
| typelib_TypeDescriptionReference ** ppTypeRefs; |
| /** member names of the struct or exception |
| */ |
| rtl_uString ** ppMemberNames; |
| } typelib_CompoundTypeDescription; |
| |
| /** |
| Type description for struct types. |
| |
| This is only used to represent plain struct types and instantiated |
| polymorphic struct types; there is no representation of polymorphic struct |
| type templates at this level. |
| |
| @since UDK 3.2.0 |
| */ |
| typedef struct _typelib_StructTypeDescription |
| { |
| /** |
| Derived from typelib_CompoundTypeDescription. |
| */ |
| typelib_CompoundTypeDescription aBase; |
| |
| /** |
| Flags for direct members, specifying whether they are of parameterized |
| type (true) or explict type (false). |
| |
| For a plain struct type, this is a null pointer. |
| */ |
| sal_Bool * pParameterizedTypes; |
| } typelib_StructTypeDescription; |
| |
| /** Type description of a union. The type class of this description is typelib_TypeClass_UNION. |
| */ |
| typedef struct _typelib_UnionTypeDescription |
| { |
| /** inherits all members of typelib_TypeDescription |
| */ |
| typelib_TypeDescription aBase; |
| |
| /** type of the discriminant |
| */ |
| typelib_TypeDescriptionReference * pDiscriminantTypeRef; |
| |
| /** union default descriminant |
| */ |
| sal_Int64 nDefaultDiscriminant; |
| /** union default member type (may be 0) |
| */ |
| typelib_TypeDescriptionReference * pDefaultTypeRef; |
| /** number of union member types |
| */ |
| sal_Int32 nMembers; |
| /** union member discriminant values (same order as idl declaration) |
| */ |
| sal_Int64 * pDiscriminants; |
| /** union member value types (same order as idl declaration) |
| */ |
| typelib_TypeDescriptionReference ** ppTypeRefs; |
| /** union member value names (same order as idl declaration) |
| */ |
| rtl_uString ** ppMemberNames; |
| /** union value offset for data access |
| */ |
| sal_Int32 nValueOffset; |
| } typelib_UnionTypeDescription; |
| |
| /** Type description of an array or sequence. |
| */ |
| typedef struct _typelib_IndirectTypeDescription |
| { |
| /** inherits all members of typelib_TypeDescription |
| */ |
| typelib_TypeDescription aBase; |
| |
| /** array, sequence: pointer to element type |
| */ |
| typelib_TypeDescriptionReference * pType; |
| } typelib_IndirectTypeDescription; |
| |
| /** Type description of an array. |
| */ |
| typedef struct _typelib_ArrayTypeDescription |
| { |
| /** inherits all members of typelib_IndirectTypeDescription |
| */ |
| typelib_IndirectTypeDescription aBase; |
| |
| /** number of dimensions |
| */ |
| sal_Int32 nDimensions; |
| /** number of total array elements |
| */ |
| sal_Int32 nTotalElements; |
| /** array of dimensions |
| */ |
| sal_Int32 * pDimensions; |
| } typelib_ArrayTypeDescription; |
| |
| /** Type description of an enum. The type class of this description is typelib_TypeClass_ENUM. |
| */ |
| typedef struct _typelib_EnumTypeDescription |
| { |
| /** inherits all members of typelib_TypeDescription |
| */ |
| typelib_TypeDescription aBase; |
| |
| /** first value of the enum |
| */ |
| sal_Int32 nDefaultEnumValue; |
| /** number of enum values |
| */ |
| sal_Int32 nEnumValues; |
| /** names of enum values |
| */ |
| rtl_uString ** ppEnumNames; |
| /** values of enum (corresponding to names in similar order) |
| */ |
| sal_Int32 * pEnumValues; |
| } typelib_EnumTypeDescription; |
| |
| /** Description of an interface method parameter. |
| */ |
| typedef struct _typelib_MethodParameter |
| { |
| /** name of parameter |
| */ |
| rtl_uString * pName; |
| /** type of parameter |
| */ |
| typelib_TypeDescriptionReference * pTypeRef; |
| /** true: the call type of this parameter is [in] or [inout] |
| false: the call type of this parameter is [out] |
| */ |
| sal_Bool bIn; |
| /** true: the call type of this parameter is [out] or [inout] |
| false: the call type of this parameter is [in] |
| */ |
| sal_Bool bOut; |
| } typelib_MethodParameter; |
| |
| /** Common base type description of typelib_InterfaceMethodTypeDescription and |
| typelib_InterfaceAttributeTypeDescription. |
| */ |
| typedef struct _typelib_InterfaceMemberTypeDescription |
| { |
| /** inherits all members of typelib_TypeDescription |
| */ |
| typelib_TypeDescription aBase; |
| |
| /** position of member in the interface including the number of members of |
| any base interfaces |
| */ |
| sal_Int32 nPosition; |
| /** name of member |
| */ |
| rtl_uString * pMemberName; |
| } typelib_InterfaceMemberTypeDescription; |
| |
| /** Type description of an interface method. The type class of this description is |
| typelib_TypeClass_INTERFACE_METHOD. The size and the alignment are 0. |
| */ |
| typedef struct _typelib_InterfaceMethodTypeDescription |
| { |
| /** inherits all members of typelib_InterfaceMemberTypeDescription |
| */ |
| typelib_InterfaceMemberTypeDescription aBase; |
| |
| /** type of the return value |
| */ |
| typelib_TypeDescriptionReference * pReturnTypeRef; |
| /** number of parameters |
| */ |
| sal_Int32 nParams; |
| /** array of parameters |
| */ |
| typelib_MethodParameter * pParams; |
| /** number of exceptions |
| */ |
| sal_Int32 nExceptions; |
| /** array of exception types |
| */ |
| typelib_TypeDescriptionReference ** ppExceptions; |
| /** determines whether method is declared oneway |
| */ |
| sal_Bool bOneWay; |
| |
| /** the interface description this method is a member of |
| |
| @since #i21150# |
| */ |
| struct _typelib_InterfaceTypeDescription * pInterface; |
| /** the inherited direct base method (null for a method that is not |
| inherited) |
| |
| @since UDK 3.2.0 |
| */ |
| typelib_TypeDescriptionReference * pBaseRef; |
| /** if pBaseRef is null, the member position of this method within |
| pInterface, not counting members inherited from bases; if pBaseRef is |
| not null, the index of the direct base within pInterface from which this |
| method is inherited |
| |
| @since UDK 3.2.0 |
| */ |
| sal_Int32 nIndex; |
| } typelib_InterfaceMethodTypeDescription; |
| |
| /** The description of an interface attribute. The type class of this description is |
| typelib_TypeClass_INTERFACE_ATTRIBUTE. The size and the alignment are 0. |
| */ |
| typedef struct _typelib_InterfaceAttributeTypeDescription |
| { |
| /** inherits all members of typelib_InterfaceMemberTypeDescription |
| */ |
| typelib_InterfaceMemberTypeDescription aBase; |
| |
| /** determines whether attribute is read only |
| */ |
| sal_Bool bReadOnly; |
| /** type of the attribute |
| */ |
| typelib_TypeDescriptionReference * pAttributeTypeRef; |
| |
| /** the interface description this attribute is a member of |
| |
| @since #i21150# |
| */ |
| struct _typelib_InterfaceTypeDescription * pInterface; |
| /** the inherited direct base attribute (null for an attribute that is not |
| inherited) |
| |
| @since UDK 3.2.0 |
| */ |
| typelib_TypeDescriptionReference * pBaseRef; |
| /** if pBaseRef is null, the member position of this attribute within |
| pInterface, not counting members inherited from bases; if pBaseRef is |
| not null, the index of the direct base within pInterface from which this |
| attribute is inherited |
| |
| @since UDK 3.2.0 |
| */ |
| sal_Int32 nIndex; |
| /** number of getter exceptions |
| |
| @since UDK 3.2.0 |
| */ |
| sal_Int32 nGetExceptions; |
| /** array of getter exception types |
| |
| @since UDK 3.2.0 |
| */ |
| typelib_TypeDescriptionReference ** ppGetExceptions; |
| /** number of setter exceptions |
| |
| @since UDK 3.2.0 |
| */ |
| sal_Int32 nSetExceptions; |
| /** array of setter exception types |
| |
| @since UDK 3.2.0 |
| */ |
| typelib_TypeDescriptionReference ** ppSetExceptions; |
| } typelib_InterfaceAttributeTypeDescription; |
| |
| /// @HTML |
| /** Type description of an interface. |
| |
| <p>Not all members are always initialized (not yet initialized members being |
| null); there are three levels:</p> |
| <ul> |
| <li>Minimally, only <code>aBase</code>, |
| <code>pBaseTypeDescription</code>, <code>aUik</code>, |
| <code>nBaseTypes</code>, and <code>ppBaseTypes</code> are initialized; |
| <code>aBase.bComplete</code> is false. This only happens when an |
| interface type description is created with |
| <code>typelib_static_mi_interface_type_init</code> or |
| <code>typelib_static_interface_type_init</code>.</li> |
| |
| <li>At the next level, <code>nMembers</code>, <code>ppMembers</code>, |
| <code>nAllMembers</code>, <code>ppAllMembers</code> are also |
| initialized; <code>aBase.bComplete</code> is still false. This happens |
| when an interface type description is created with |
| <code>typelib_typedescription_newMIInterface</cocde> or |
| <code>typelib_typedescription_newInterface</code>.</li> |
| |
| <li>At the final level, <code>pMapMemberIndexToFunctionIndex</code>, |
| <code>nMapFunctionIndexToMemberIndex</code>, and |
| <code>pMapFunctionIndexToMemberIndex</code> are also initialized; |
| <code>aBase.bComplete</code> is true. This happens after a call to |
| <code>typelib_typedescription_complete</code>.</li> |
| </ul> |
| */ |
| typedef struct _typelib_InterfaceTypeDescription |
| /// @NOHTML |
| { |
| /** inherits all members of typelib_TypeDescription |
| */ |
| typelib_TypeDescription aBase; |
| |
| /** pointer to base type description, else 0 |
| |
| @deprecated |
| use nBaseTypes and ppBaseTypes instead |
| */ |
| struct _typelib_InterfaceTypeDescription * pBaseTypeDescription; |
| /** unique identifier of interface |
| */ |
| typelib_Uik aUik; |
| /** number of members |
| */ |
| sal_Int32 nMembers; |
| /** array of members; references attributes or methods |
| */ |
| typelib_TypeDescriptionReference ** ppMembers; |
| /** number of members including members of base interface |
| */ |
| sal_Int32 nAllMembers; |
| /** array of members including members of base interface; references attributes or methods |
| */ |
| typelib_TypeDescriptionReference ** ppAllMembers; |
| /** array mapping index of the member description to an index doubling for read-write |
| attributes (called function index); size of array is nAllMembers |
| */ |
| sal_Int32 * pMapMemberIndexToFunctionIndex; |
| /** number of members plus number of read-write attributes |
| */ |
| sal_Int32 nMapFunctionIndexToMemberIndex; |
| /** array mapping function index to member index; size of arry is nMapFunctionIndexToMemberIndex |
| */ |
| sal_Int32 * pMapFunctionIndexToMemberIndex; |
| /** number of base types |
| |
| @since UDK 3.2.0 |
| */ |
| sal_Int32 nBaseTypes; |
| /** array of base type descriptions |
| |
| @since UDK 3.2.0 |
| */ |
| struct _typelib_InterfaceTypeDescription ** ppBaseTypes; |
| } typelib_InterfaceTypeDescription; |
| |
| /** Init struct of compound members for typelib_typedescription_new(). |
| */ |
| typedef struct _typelib_CompoundMember_Init |
| { |
| /** type class of compound member |
| */ |
| typelib_TypeClass eTypeClass; |
| /** name of type of compound member |
| |
| For a member of an instantiated polymorphic struct type that is of |
| parameterized type, this will be a null pointer. |
| */ |
| rtl_uString * pTypeName; |
| /** name of compound member |
| */ |
| rtl_uString * pMemberName; |
| } typelib_CompoundMember_Init; |
| |
| /** |
| Init struct of members for typelib_typedescription_newStruct(). |
| |
| @since UDK 3.2.0 |
| */ |
| typedef struct _typelib_StructMember_Init |
| { |
| /** |
| Derived from typelib_CompoundMember_Init; |
| */ |
| typelib_CompoundMember_Init aBase; |
| |
| /** |
| Flag specifying whether the member is of parameterized type (true) or |
| explict type (false). |
| */ |
| sal_Bool bParameterizedType; |
| } typelib_StructMember_Init; |
| |
| /** Init struct of interface methods for typelib_typedescription_new(). |
| */ |
| typedef struct _typelib_Parameter_Init |
| { |
| /** type class of parameter |
| */ |
| typelib_TypeClass eTypeClass; |
| /** name of parameter |
| */ |
| rtl_uString * pTypeName; |
| /** name of parameter |
| */ |
| rtl_uString * pParamName; |
| /** true, if parameter is [in] or [inout] |
| */ |
| sal_Bool bIn; |
| /** true, if parameter is [out] or [inout] |
| */ |
| sal_Bool bOut; |
| } typelib_Parameter_Init; |
| |
| /** Init struct of union types for typelib_typedescription_newUnion(). |
| */ |
| typedef struct _typelib_Union_Init |
| { |
| /** union member discriminant |
| */ |
| sal_Int64 nDiscriminant; |
| /** union member name |
| */ |
| rtl_uString * pMemberName; |
| /** union member type |
| */ |
| typelib_TypeDescriptionReference* pTypeRef; |
| } typelib_Union_Init; |
| |
| #if defined( SAL_W32) || defined(SAL_OS2) |
| #pragma pack(pop) |
| #endif |
| |
| |
| /** Creates a union type description. All discriminants are handled as int64 values. |
| The pDiscriminantTypeRef must be of type byte, short, ..., up to hyper. |
| |
| @param ppRet inout union type description |
| @param pTypeName name of union type |
| @param pDiscriminantTypeRef discriminant type |
| @param nDefaultDiscriminant default discriminant |
| @param pDefaultTypeRef default value type of union |
| @param nMembers number of union members |
| @param pMembers init members |
| */ |
| void SAL_CALL typelib_typedescription_newUnion( |
| typelib_TypeDescription ** ppRet, |
| rtl_uString * pTypeName, |
| typelib_TypeDescriptionReference * pDiscriminantTypeRef, |
| sal_Int64 nDefaultDiscriminant, |
| typelib_TypeDescriptionReference * pDefaultTypeRef, |
| sal_Int32 nMembers, |
| typelib_Union_Init * pMembers ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Creates an enum type description. |
| |
| @param ppRet inout enum type description |
| @param pTypeName name of enum |
| @param nDefaultEnumValue default enum value |
| @param nEnumValues number of enum values |
| @param ppEnumNames names of enum values |
| @param pEnumValues enum values |
| */ |
| void SAL_CALL typelib_typedescription_newEnum( |
| typelib_TypeDescription ** ppRet, |
| rtl_uString * pTypeName, |
| sal_Int32 nDefaultValue, |
| sal_Int32 nEnumValues, |
| rtl_uString ** ppEnumNames, |
| sal_Int32 * pEnumValues ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Creates an array type description. |
| |
| @param ppRet inout enum type description |
| @param pElementTypeRef element type |
| @param nDimensions number of dimensions |
| @param pDimensions dimensions |
| */ |
| void SAL_CALL typelib_typedescription_newArray( |
| typelib_TypeDescription ** ppRet, |
| typelib_TypeDescriptionReference * pElementTypeRef, |
| sal_Int32 nDimensions, |
| sal_Int32 * pDimensions ) |
| SAL_THROW_EXTERN_C (); |
| |
| /** Creates a new type description. |
| |
| Since this function can only be used to create type descriptions for plain |
| struct types, not for instantiated polymorphic struct types, the function |
| typelib_typedescription_newStruct should be used instead for all struct |
| types. |
| |
| @param ppRet inout type description |
| @param eTypeClass type class |
| @param pTypeName name of type |
| @param pType sequence, array: element type; |
| struct, Exception: base type; |
| @param nMembers number of members if struct, exception |
| @param pMember array of members if struct, exception |
| */ |
| void SAL_CALL typelib_typedescription_new( |
| typelib_TypeDescription ** ppRet, |
| typelib_TypeClass eTypeClass, |
| rtl_uString * pTypeName, |
| typelib_TypeDescriptionReference * pType, |
| sal_Int32 nMembers, |
| typelib_CompoundMember_Init * pMembers ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Creates a new struct type description. |
| |
| @param ppRet inout type description |
| @param pTypeName name of type |
| @param pType base type; |
| @param nMembers number of members |
| @param pMember array of members |
| |
| @since UDK 3.2.0 |
| */ |
| void SAL_CALL typelib_typedescription_newStruct( |
| typelib_TypeDescription ** ppRet, |
| rtl_uString * pTypeName, |
| typelib_TypeDescriptionReference * pType, |
| sal_Int32 nMembers, |
| typelib_StructMember_Init * pMembers ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Creates an interface type description. |
| |
| @param ppRet inout interface type description |
| @param pTypeName the fully qualified name of the interface. |
| @param nUik1 uik part |
| @param nUik2 uik part |
| @param nUik3 uik part |
| @param nUik4 uik part |
| @param nUik5 uik part |
| @param pBaseInterface base interface type, else 0 |
| @param nMembers number of members |
| @param ppMembers members; attributes or methods |
| |
| @deprecated |
| use typelib_typedescription_newMIInterface instead |
| */ |
| void SAL_CALL typelib_typedescription_newInterface( |
| typelib_InterfaceTypeDescription ** ppRet, |
| rtl_uString * pTypeName, |
| sal_uInt32 nUik1, sal_uInt16 nUik2, sal_uInt16 nUik3, sal_uInt32 nUik4, sal_uInt32 nUik5, |
| typelib_TypeDescriptionReference * pBaseInterface, |
| sal_Int32 nMembers, |
| typelib_TypeDescriptionReference ** ppMembers ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Creates a multiple-inheritance interface type description. |
| |
| @param ppRet inout interface type description |
| @param pTypeName the fully qualified name of the interface. |
| @param nUik1 uik part |
| @param nUik2 uik part |
| @param nUik3 uik part |
| @param nUik4 uik part |
| @param nUik5 uik part |
| @param nBaseInterfaces number of base interface types |
| @param ppBaseInterface base interface types |
| @param nMembers number of members |
| @param ppMembers members; attributes or methods |
| |
| @since UDK 3.2.0 |
| */ |
| void SAL_CALL typelib_typedescription_newMIInterface( |
| typelib_InterfaceTypeDescription ** ppRet, |
| rtl_uString * pTypeName, |
| sal_uInt32 nUik1, sal_uInt16 nUik2, sal_uInt16 nUik3, sal_uInt32 nUik4, sal_uInt32 nUik5, |
| sal_Int32 nBaseInterfaces, |
| typelib_TypeDescriptionReference ** ppBaseInterfaces, |
| sal_Int32 nMembers, |
| typelib_TypeDescriptionReference ** ppMembers ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Creates an interface method type description. |
| |
| @param ppRet inout method type description |
| @param nAbsolutePosition position of member including all members of base interfaces |
| @param bOneWay determines whether method is declared oneway |
| @param pTypeName fully qualified name of method including interface name |
| @param eReturnTypeClass type class of return type |
| @param pReturnTypeName type name of the return type |
| @param nParams number of parameters |
| @param pParams parameter types |
| @param nExceptions number of exceptions |
| @param ppExceptionNames type names of exceptions |
| */ |
| void SAL_CALL typelib_typedescription_newInterfaceMethod( |
| typelib_InterfaceMethodTypeDescription ** ppRet, |
| sal_Int32 nAbsolutePosition, |
| sal_Bool bOneWay, |
| rtl_uString * pMethodName, |
| typelib_TypeClass eReturnTypeClass, |
| rtl_uString * pReturnTypeName, |
| sal_Int32 nParams, |
| typelib_Parameter_Init * pParams, |
| sal_Int32 nExceptions, |
| rtl_uString ** ppExceptionNames ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Creates an interface attribute type description. |
| |
| @param ppRet inout attribute type description |
| @param nAbsolutePosition position of this attribute including all members of base interfaces |
| @param pAttributeName fully qualified name of attribute including interface |
| name |
| @param eAttributeTypeClass type class of attribute type |
| @param pAttributeTypeName type name of attribute type |
| @param bReadOnly determines whether attribute is read-only |
| |
| @deprecated |
| use typelib_typedescription_newExtendedInterfaceAttribute instead |
| */ |
| void SAL_CALL typelib_typedescription_newInterfaceAttribute( |
| typelib_InterfaceAttributeTypeDescription ** ppRet, |
| sal_Int32 nAbsolutePosition, |
| rtl_uString * pAttributeName, |
| typelib_TypeClass eAttributeTypeClass, |
| rtl_uString * pAttributeTypeName, |
| sal_Bool bReadOnly ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Creates an extended interface attribute type description. |
| |
| @param ppRet inout attribute type description |
| @param nAbsolutePosition position of this attribute including all members of |
| base interfaces |
| @param pAttributeName fully qualified name of attribute including interface |
| name |
| @param eAttributeTypeClass type class of attribute type |
| @param pAttributeTypeName type name of attribute type |
| @param bReadOnly determines whether attribute is read-only |
| @param nGetExceptions number of getter exceptions |
| @param ppGetExceptionNames type names of getter exceptions |
| @param nSetExceptions number of setter exceptions |
| @param ppSetExceptionNames type names of setter exceptions |
| |
| @since UDK 3.2.0 |
| */ |
| void SAL_CALL typelib_typedescription_newExtendedInterfaceAttribute( |
| typelib_InterfaceAttributeTypeDescription ** ppRet, |
| sal_Int32 nAbsolutePosition, |
| rtl_uString * pAttributeName, |
| typelib_TypeClass eAttributeTypeClass, |
| rtl_uString * pAttributeTypeName, |
| sal_Bool bReadOnly, |
| sal_Int32 nGetExceptions, rtl_uString ** ppGetExceptionNames, |
| sal_Int32 nSetExceptions, rtl_uString ** ppSetExceptionNames ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Increments reference count of given type description. |
| |
| @param pDesc type description |
| */ |
| void SAL_CALL typelib_typedescription_acquire( |
| typelib_TypeDescription * pDesc ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Decrements reference count of given type. If reference count reaches 0, the trype description |
| is deleted. |
| |
| @param pDesc type description |
| */ |
| void SAL_CALL typelib_typedescription_release( |
| typelib_TypeDescription * pDesc ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Registers a type description and creates a type description reference. Type descriptions |
| will be registered automatically if they are provided via the callback chain. |
| |
| @param ppNewDescription inout description to be registered; |
| */ |
| void SAL_CALL typelib_typedescription_register( |
| typelib_TypeDescription ** ppNewDescription ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Tests whether two types descriptions are equal, i.e. type class and names are equal. |
| |
| @param p1 a type description |
| @param p2 another type description |
| @return true, if type descriptions are equal |
| */ |
| sal_Bool SAL_CALL typelib_typedescription_equals( |
| const typelib_TypeDescription * p1, const typelib_TypeDescription * p2 ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Retrieves a type description via its fully qualified name. |
| |
| @param ppRet inout type description; *ppRet is 0, if type description was not found |
| @param pName name demanded type description |
| */ |
| void SAL_CALL typelib_typedescription_getByName( |
| typelib_TypeDescription ** ppRet, rtl_uString * pName ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Sets size of type description cache. |
| |
| @param nNewSize new size of cache |
| */ |
| void SAL_CALL typelib_setCacheSize( |
| sal_Int32 nNewSize ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Function pointer declaration of callback function get additional descriptions. Callbacks |
| must provide complete type descriptions (see typelib_typedescription_complete())! |
| |
| @param pContext callback context |
| @param ppRet inout type description |
| @param pTypeName name of demanded type description |
| */ |
| typedef void (SAL_CALL * typelib_typedescription_Callback)( |
| void * pContext, typelib_TypeDescription ** ppRet, rtl_uString * pTypeName ); |
| |
| /** Registers callback function providing additional type descriptions. |
| |
| @param pContext callback context |
| @param pCallback callback function |
| */ |
| void SAL_CALL typelib_typedescription_registerCallback( |
| void * pContext, typelib_typedescription_Callback pCallback ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Revokes a previously registered callback function. |
| |
| @param pContext callback context |
| @param pCallback registered callback function |
| */ |
| void SAL_CALL typelib_typedescription_revokeCallback( |
| void * pContext, typelib_typedescription_Callback pCallback ) |
| SAL_THROW_EXTERN_C(); |
| |
| |
| /*----------------------------------------------------------------------------*/ |
| /*----------------------------------------------------------------------------*/ |
| /*----------------------------------------------------------------------------*/ |
| |
| /** Creates a type description reference. This is a weak reference not holding the description. |
| If the description is already registered, the previous one is returned. |
| |
| @param ppTDR inout type description reference |
| @param eTypeClass type class of type |
| @param pTypeName name of type |
| */ |
| void SAL_CALL typelib_typedescriptionreference_new( |
| typelib_TypeDescriptionReference ** ppTDR, |
| typelib_TypeClass eTypeClass, |
| rtl_uString * pTypeName ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Creates a type description reference. This is a weak reference not holding the description. |
| If the description is already registered, the previous one is returned. |
| |
| @param ppTDR inout type description reference |
| @param eTypeClass type class of type |
| @param pTypeName ascii name of type |
| */ |
| void SAL_CALL typelib_typedescriptionreference_newByAsciiName( |
| typelib_TypeDescriptionReference ** ppTDR, |
| typelib_TypeClass eTypeClass, |
| const sal_Char * pTypeName ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Increments reference count of type description reference. |
| |
| @param pRef type description reference |
| */ |
| void SAL_CALL typelib_typedescriptionreference_acquire( |
| typelib_TypeDescriptionReference * pRef ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Increments reference count of type description reference. If the reference count reaches 0, |
| then the reference is deleted. |
| |
| @param pRef type description reference |
| */ |
| void SAL_CALL typelib_typedescriptionreference_release( |
| typelib_TypeDescriptionReference * pRef ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Retrieves the type description for a given reference. If it is not possible to resolve the |
| reference, null is returned. |
| |
| @param ppRet inout type description |
| */ |
| void SAL_CALL typelib_typedescriptionreference_getDescription( |
| typelib_TypeDescription ** ppRet, typelib_TypeDescriptionReference * pRef ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Tests whether two types description references are equal, i.e. type class and names are equal. |
| |
| @param p1 a type description reference |
| @param p2 another type description reference |
| @return true, if type description references are equal |
| */ |
| sal_Bool SAL_CALL typelib_typedescriptionreference_equals( |
| const typelib_TypeDescriptionReference * p1, const typelib_TypeDescriptionReference * p2 ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Assigns a type. |
| |
| @param ppDest destination type |
| @param pSource source type |
| */ |
| void SAL_CALL typelib_typedescriptionreference_assign( |
| typelib_TypeDescriptionReference ** ppDest, |
| typelib_TypeDescriptionReference * pSource ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Tests if values of type pAssignable can be assigned by values of type pFrom. This includes |
| widening conversion (e.g., long assignable from short), as long as there is no data loss. |
| |
| @param pAssignable type description of value to be assigned |
| @param pFrom type description of value |
| */ |
| sal_Bool SAL_CALL typelib_typedescription_isAssignableFrom( |
| typelib_TypeDescription * pAssignable, |
| typelib_TypeDescription * pFrom ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Tests if values of type pAssignable can be assigned by values of type pFrom. This includes |
| widening conversion (e.g., long assignable from short), as long as there is no data loss. |
| |
| @param pAssignable type of value to be assigned |
| @param pFrom type of value |
| */ |
| sal_Bool SAL_CALL typelib_typedescriptionreference_isAssignableFrom( |
| typelib_TypeDescriptionReference * pAssignable, |
| typelib_TypeDescriptionReference * pFrom ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Gets static type reference of standard types by type class. |
| ADDITIONAL OPT: provides Type com.sun.star.uno.Exception for typelib_TypeClass_EXCEPTION |
| and com.sun.star.uno.XInterface for typelib_TypeClass_INTERFACE. |
| |
| Thread synchronizes on typelib mutex. |
| |
| @param eTypeClass type class of basic type |
| @return pointer to type reference pointer |
| */ |
| typelib_TypeDescriptionReference ** SAL_CALL typelib_static_type_getByTypeClass( |
| typelib_TypeClass eTypeClass ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Inits static type reference. Thread synchronizes on typelib init mutex. |
| |
| @param ppRef pointer to type reference pointer |
| @param eTypeClass type class of type |
| @param pTypeName ascii name of type |
| */ |
| void SAL_CALL typelib_static_type_init( |
| typelib_TypeDescriptionReference ** ppRef, |
| typelib_TypeClass eTypeClass, const sal_Char * pTypeName ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Inits static sequence type reference. Thread synchronizes on typelib init mutex. |
| |
| @param ppRef pointer to type reference pointer |
| @param pElementType element type of sequence |
| */ |
| void SAL_CALL typelib_static_sequence_type_init( |
| typelib_TypeDescriptionReference ** ppRef, |
| typelib_TypeDescriptionReference * pElementType ) |
| SAL_THROW_EXTERN_C (); |
| |
| /** Inits static array type reference. Thread synchronizes on typelib init mutex. |
| |
| @param ppRef pointer to type reference pointer |
| @param pElementType element type of sequence |
| @param nDimensions number of dimensions |
| @param ... additional sal_Int32 parameter for each dimension |
| */ |
| void SAL_CALL typelib_static_array_type_init( |
| typelib_TypeDescriptionReference ** ppRef, |
| typelib_TypeDescriptionReference * pElementType, |
| sal_Int32 nDimensions, ... ) |
| SAL_THROW_EXTERN_C (); |
| |
| /** Inits incomplete static compound type reference. Thread synchronizes on typelib init mutex. |
| |
| Since this function can only be used to create type descriptions for plain |
| struct types, not for instantiated polymorphic struct types, the function |
| typelib_static_struct_type_init should be used instead for all struct types. |
| |
| @param ppRef pointer to type reference pointer |
| @param eTypeClass typelib_TypeClass_STRUCT or typelib_TypeClass_EXCEPTION |
| @param pTypeName name of type |
| @param pBaseType base type |
| @param nMembers number of members |
| @param ppMembers member types |
| */ |
| void SAL_CALL typelib_static_compound_type_init( |
| typelib_TypeDescriptionReference ** ppRef, |
| typelib_TypeClass eTypeClass, const sal_Char * pTypeName, |
| typelib_TypeDescriptionReference * pBaseType, |
| sal_Int32 nMembers, typelib_TypeDescriptionReference ** ppMembers ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Inits incomplete static struct type reference. |
| |
| Thread synchronizes on typelib init mutex. |
| |
| @param ppRef pointer to type reference pointer |
| @param pTypeName name of type |
| @param pBaseType base type |
| @param nMembers number of members |
| @param ppMembers member types |
| @param pParameterizedTypes flags for direct members, specifying whether they |
| are of parameterized type (true) or explict type (false); must be null |
| for a plain struct type |
| |
| @since UDK 3.2.0 |
| */ |
| void SAL_CALL typelib_static_struct_type_init( |
| typelib_TypeDescriptionReference ** ppRef, const sal_Char * pTypeName, |
| typelib_TypeDescriptionReference * pBaseType, |
| sal_Int32 nMembers, typelib_TypeDescriptionReference ** ppMembers, |
| sal_Bool const * pParameterizedTypes ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Inits incomplete static interface type reference. Thread synchronizes on typelib init mutex. |
| |
| @param ppRef pointer to type reference pointer |
| @param pTypeName name of interface |
| @param pBaseType base type |
| */ |
| void SAL_CALL typelib_static_interface_type_init( |
| typelib_TypeDescriptionReference ** ppRef, |
| const sal_Char * pTypeName, |
| typelib_TypeDescriptionReference * pBaseType ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Inits incomplete static multiple-inheritance interface type reference. |
| Thread synchronizes on typelib init mutex. |
| |
| @param ppRef pointer to type reference pointer |
| @param pTypeName name of interface |
| @param nBaseTypes number of base types |
| @param ppBaseTypes base types |
| |
| @since UDK 3.2.0 |
| */ |
| void SAL_CALL typelib_static_mi_interface_type_init( |
| typelib_TypeDescriptionReference ** ppRef, |
| const sal_Char * pTypeName, |
| sal_Int32 nBaseTypes, |
| typelib_TypeDescriptionReference ** ppBaseTypes ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Inits incomplete static enum type reference. Thread synchronizes on typelib init mutex. |
| |
| @param ppRef pointer to type reference pointer |
| @param pTypeName name of enum |
| @param nDefaultEnumValue default enum value |
| */ |
| void SAL_CALL typelib_static_enum_type_init( |
| typelib_TypeDescriptionReference ** ppRef, |
| const sal_Char * pTypeName, |
| sal_Int32 nDefaultValue ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Completes a typedescription to be used for, e.g., marshalling values. COMPOUND, UNION, |
| INTERFACE and ENUM type descriptions may be partly initialized (see typelib_static_...(), |
| typelib_TypeDescription::bComplete). For interface type descriptions, this will also |
| init index tables. |
| |
| @param ppTypeDescr [inout] type description to be completed (may be exchanged!) |
| @return true, if type description is complete |
| */ |
| sal_Bool SAL_CALL typelib_typedescription_complete( |
| typelib_TypeDescription ** ppTypeDescr ) |
| SAL_THROW_EXTERN_C(); |
| |
| /** Returns true, if the type description reference may lose the type description. Otherwise |
| pType is a valid pointer and cannot be discarded through the lifetime of this reference. |
| Remark: If the pWeakObj of the type is set too, you can avoid the call of |
| ...getDescription(...) and use the description directly. pWeakObj == 0 means, that the |
| description is not initialized. |
| @internal |
| */ |
| inline bool TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK( _typelib_TypeClass eTypeClass ) |
| { |
| return (eTypeClass == typelib_TypeClass_INTERFACE_METHOD) || |
| (eTypeClass == typelib_TypeClass_INTERFACE_ATTRIBUTE); |
| } |
| |
| /** Gets a description from the reference. The description may not be locked by this call. |
| You must use the TYPELIB_DANGER_RELEASE macro to release the description fetched with |
| this macro. |
| @internal |
| */ |
| inline void TYPELIB_DANGER_GET( typelib_TypeDescription** ppMacroTypeDescr, |
| typelib_TypeDescriptionReference* pMacroTypeRef ) |
| { |
| if (TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK( pMacroTypeRef->eTypeClass )) |
| { |
| typelib_typedescriptionreference_getDescription( ppMacroTypeDescr, pMacroTypeRef ); |
| } |
| else if (!pMacroTypeRef->pType || !pMacroTypeRef->pType->pWeakRef) |
| { |
| typelib_typedescriptionreference_getDescription( ppMacroTypeDescr, pMacroTypeRef ); |
| if (*ppMacroTypeDescr) |
| typelib_typedescription_release( *ppMacroTypeDescr ); |
| } |
| else |
| { |
| *ppMacroTypeDescr = pMacroTypeRef->pType; |
| } |
| } |
| |
| /** Releases the description previouse fetched by TYPELIB_DANGER_GET. |
| @internal |
| */ |
| inline void TYPELIB_DANGER_RELEASE( typelib_TypeDescription* pDescription ) |
| { |
| if (TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK( pDescription->eTypeClass )) |
| typelib_typedescription_release( pDescription ); |
| } |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |