Cómo implementar en jna una estructura sizeof () con un tipo de unión

Actualicé el enlace jvm openvr a la última versión de openvr , 1.0.5, pero no estoy seguro de una cosa.

En cpp, existe la class IVROverlay con esta function virtual SetOverlayIntersectionMask :

 virtual EVROverlayError SetOverlayIntersectionMask( VROverlayHandle_t ulOverlayHandle, VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives, uint32_t unNumMaskPrimitives, uint32_t unPrimitiveSize = sizeof( VROverlayIntersectionMaskPrimitive_t ) ) = 0; 

Mis dudas se refieren a la última discusión.

VROverlayIntersectionMaskPrimitive_t :

 struct VROverlayIntersectionMaskPrimitive_t { EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType; VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; }; 

es una estructura con un tipo de enumeración y una variable de tipo de unión, llamada VROverlayIntersectionMaskPrimitive_Data_t :

 typedef union { IntersectionMaskRectangle_t m_Rectangle; IntersectionMaskCircle_t m_Circle; } VROverlayIntersectionMaskPrimitive_Data_t; 

Que está siendo implementado por las dos classs justo arriba, IntersectionMaskRectangle_t e IntersectionMaskCircle_t

Ahora, la enumeración se traduce a un Int pero el último? Como debería ser un puntero, supongo que será Pointer.SIZE ?

Sin embargo, esta es mi implementación, donde VROverlayIntersectionMaskPrimitive_Data_t es una class abstracta:

 abstract class VROverlayIntersectionMaskPrimitive_Data_t : Structure { constructor() : super() constructor(peer: Pointer) : super(peer) } 

Implementado a su vez por las otras dos classs .

Mi primera suposition es que sizeof(VROverlayIntersectionMaskPrimitive_Data_t) traduce a Int + Pointer.SIZE

 @JvmOverloads fun setOverlayIntersectionMask( ulOverlayHandle: VROverlayHandle_t, pMaskPrimitives: VROverlayIntersectionMaskPrimitive_t.ByReference, unNumMaskPrimitives: Int, unPrimitiveSize: Int = Int.BYTES + Pointer.SIZE) 

¿Mi razonamiento parece correcto?

    Obtiene el tamaño de una Structure (incluida Union ) con el método de size() . En el caso de los sindicatos, obtendrá el tamaño del miembro más grande.

    Establece el tipo deseado de la unión con Union.setType() .