org.apache.poi.hpsf

## Class Variant

- java.lang.Object
- - org.apache.poi.hpsf.Variant

- Direct Known Subclasses:
    VariantSupport

      public class Variant
      extends java.lang.Object

  The `Variant` types as defined by Microsoft's COM. In the variant types descriptions the following shortcuts are used:
  - [V] - may appear in a VARIANT
  - [T] - may appear in a TYPEDESC
  - [P] - may appear in an OLE property set
  - [S] - may appear in a Safe Array

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static java.lang.Integer` | `LENGTH_0` Denotes a variant type with a length of 0 bytes.
    `static java.lang.Integer` | `LENGTH_2` Denotes a variant type with a length of 2 bytes.
    `static java.lang.Integer` | `LENGTH_4` Denotes a variant type with a length of 4 bytes.
    `static java.lang.Integer` | `LENGTH_8` Denotes a variant type with a length of 8 bytes.
    `static java.lang.Integer` | `LENGTH_UNKNOWN` Denotes a variant type with a length that is unknown to HPSF yet.
    `static java.lang.Integer` | `LENGTH_VARIABLE` Denotes a variant type with a variable length.
    `static int` | `VT_ARRAY` [V] SAFEARRAY*.
    `static int` | `VT_BLOB` [P] Length prefixed bytes.
    `static int` | `VT_BLOB_OBJECT` [P] Blob contains an object.
    `static int` | `VT_BOOL` [V][T][P][S] True=-1, False=0.
    `static int` | `VT_BSTR` [V][T][P][S] OLE Automation string.
    `static int` | `VT_BYREF` [V] void* for local use.
    `static int` | `VT_CARRAY` [T] C style array.
    `static int` | `VT_CF` [P] Clipboard format.
    `static int` | `VT_CLSID` [P] A Class ID.
    `static int` | `VT_CY` [V][T][P][S] currency.
    `static int` | `VT_DATE` [V][T][P][S] date.
    `static int` | `VT_DECIMAL` [V][T][S] 16 byte fixed point.
    `static int` | `VT_DISPATCH` [V][T][P][S] IDispatch
    `static int` | `VT_EMPTY` [V][P] Nothing, i.e.
    `static int` | `VT_ERROR` [V][T][S] SCODE
    `static int` | `VT_FILETIME` [P] FILETIME.
    `static int` | `VT_HRESULT` [T] Standard return type.
    `static int` | `VT_I1` [T] signed char.
    `static int` | `VT_I2` [V][T][P][S] 2 byte signed int.
    `static int` | `VT_I4` [V][T][P][S] 4 byte signed int.
    `static int` | `VT_I8` [T][P] signed 64-bit int.
    `static int` | `VT_ILLEGAL`
    `static int` | `VT_ILLEGALMASKED`
    `static int` | `VT_INT` [T] signed machine int.
    `static int` | `VT_LPSTR` [T][P] null terminated string.
    `static int` | `VT_LPWSTR` [T][P] wide (Unicode) null terminated string.
    `static int` | `VT_NULL` [V][P] SQL style Null.
    `static int` | `VT_PTR` [T] pointer type.
    `static int` | `VT_R4` [V][T][P][S] 4 byte real.
    `static int` | `VT_R8` [V][T][P][S] 8 byte real.
    `static int` | `VT_RESERVED`
    `static int` | `VT_SAFEARRAY` [T] (use VT_ARRAY in VARIANT).
    `static int` | `VT_STORAGE` [P] Name of the storage follows.
    `static int` | `VT_STORED_OBJECT` [P] Storage contains an object.
    `static int` | `VT_STREAM` [P] Name of the stream follows.
    `static int` | `VT_STREAMED_OBJECT` [P] Stream contains an object.
    `static int` | `VT_TYPEMASK`
    `static int` | `VT_UI1` [V][T][P][S] unsigned char.
    `static int` | `VT_UI2` [T][P] unsigned short.
    `static int` | `VT_UI4` [T][P] unsigned int.
    `static int` | `VT_UI8` [T][P] unsigned 64-bit int.
    `static int` | `VT_UINT` [T] unsigned machine int.
    `static int` | `VT_UNKNOWN` [V][T][S] IUnknown
    `static int` | `VT_USERDEFINED` [T] user defined type.
    `static int` | `VT_VARIANT` [V][T][P][S] VARIANT
    `static int` | `VT_VECTOR` [P] simple counted array.
    `static int` | `VT_VERSIONED_STREAM` "MUST be a VersionedStream.
    `static int` | `VT_VOID` [T] C style void.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `Variant()`

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static int` | `getVariantLength(long variantType)` Returns a variant type's length.
    `static java.lang.String` | `getVariantName(long variantType)` Returns the variant type name associated with a variant type number.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### VT_EMPTY

          public static final int VT_EMPTY

      [V][P] Nothing, i.e. not a single byte of data.
      See Also:
        Constant Field Values

    - #### VT_NULL

          public static final int VT_NULL

      [V][P] SQL style Null.
      See Also:
        Constant Field Values

    - #### VT_I2

          public static final int VT_I2

      [V][T][P][S] 2 byte signed int.
      See Also:
        Constant Field Values

    - #### VT_I4

          public static final int VT_I4

      [V][T][P][S] 4 byte signed int.
      See Also:
        Constant Field Values

    - #### VT_R4

          public static final int VT_R4

      [V][T][P][S] 4 byte real.
      See Also:
        Constant Field Values

    - #### VT_R8

          public static final int VT_R8

      [V][T][P][S] 8 byte real.
      See Also:
        Constant Field Values

    - #### VT_CY

          public static final int VT_CY

      [V][T][P][S] currency.
      See Also:
        Constant Field Values

    - #### VT_DATE

          public static final int VT_DATE

      [V][T][P][S] date.
      See Also:
        Constant Field Values

    - #### VT_BSTR

          public static final int VT_BSTR

      [V][T][P][S] OLE Automation string.
      See Also:
        Constant Field Values

    - #### VT_DISPATCH

          public static final int VT_DISPATCH

      [V][T][P][S] IDispatch
      See Also:
        Constant Field Values

    - #### VT_ERROR

          public static final int VT_ERROR

      [V][T][S] SCODE
      See Also:
        Constant Field Values

    - #### VT_BOOL

          public static final int VT_BOOL

      [V][T][P][S] True=-1, False=0.
      See Also:
        Constant Field Values

    - #### VT_VARIANT

          public static final int VT_VARIANT

      [V][T][P][S] VARIANT
      See Also:
        Constant Field Values

    - #### VT_UNKNOWN

          public static final int VT_UNKNOWN

      [V][T][S] IUnknown
      See Also:
        Constant Field Values

    - #### VT_DECIMAL

          public static final int VT_DECIMAL

      [V][T][S] 16 byte fixed point.
      See Also:
        Constant Field Values

    - #### VT_I1

          public static final int VT_I1

      [T] signed char.
      See Also:
        Constant Field Values

    - #### VT_UI1

          public static final int VT_UI1

      [V][T][P][S] unsigned char.
      See Also:
        Constant Field Values

    - #### VT_UI2

          public static final int VT_UI2

      [T][P] unsigned short.
      See Also:
        Constant Field Values

    - #### VT_UI4

          public static final int VT_UI4

      [T][P] unsigned int.
      See Also:
        Constant Field Values

    - #### VT_I8

          public static final int VT_I8

      [T][P] signed 64-bit int.
      See Also:
        Constant Field Values

    - #### VT_UI8

          public static final int VT_UI8

      [T][P] unsigned 64-bit int.
      See Also:
        Constant Field Values

    - #### VT_INT

          public static final int VT_INT

      [T] signed machine int.
      See Also:
        Constant Field Values

    - #### VT_UINT

          public static final int VT_UINT

      [T] unsigned machine int.
      See Also:
        Constant Field Values

    - #### VT_VOID

          public static final int VT_VOID

      [T] C style void.
      See Also:
        Constant Field Values

    - #### VT_HRESULT

          public static final int VT_HRESULT

      [T] Standard return type.
      See Also:
        Constant Field Values

    - #### VT_PTR

          public static final int VT_PTR

      [T] pointer type.
      See Also:
        Constant Field Values

    - #### VT_SAFEARRAY

          public static final int VT_SAFEARRAY

      [T] (use VT_ARRAY in VARIANT).
      See Also:
        Constant Field Values

    - #### VT_CARRAY

          public static final int VT_CARRAY

      [T] C style array. How long is this? How is it to be interpreted?
      See Also:
        Constant Field Values

    - #### VT_USERDEFINED

          public static final int VT_USERDEFINED

      [T] user defined type.
      See Also:
        Constant Field Values

    - #### VT_LPSTR

          public static final int VT_LPSTR

      [T][P] null terminated string.
      See Also:
        Constant Field Values

    - #### VT_LPWSTR

          public static final int VT_LPWSTR

      [T][P] wide (Unicode) null terminated string.
      See Also:
        Constant Field Values

    - #### VT_FILETIME

          public static final int VT_FILETIME

      [P] FILETIME. The FILETIME structure holds a date and time associated with a file. The structure identifies a 64-bit integer specifying the number of 100-nanosecond intervals which have passed since January 1, 1601. This 64-bit value is split into the two dwords stored in the structure.
      See Also:
        Constant Field Values

    - #### VT_BLOB

          public static final int VT_BLOB

      [P] Length prefixed bytes.
      See Also:
        Constant Field Values

    - #### VT_STREAM

          public static final int VT_STREAM

      [P] Name of the stream follows.
      See Also:
        Constant Field Values

    - #### VT_STORAGE

          public static final int VT_STORAGE

      [P] Name of the storage follows.
      See Also:
        Constant Field Values

    - #### VT_STREAMED_OBJECT

          public static final int VT_STREAMED_OBJECT

      [P] Stream contains an object.
      See Also:
        Constant Field Values

    - #### VT_STORED_OBJECT

          public static final int VT_STORED_OBJECT

      [P] Storage contains an object.
      See Also:
        Constant Field Values

    - #### VT_BLOB_OBJECT

          public static final int VT_BLOB_OBJECT

      [P] Blob contains an object.
      See Also:
        Constant Field Values

    - #### VT_CF

          public static final int VT_CF

      [P] Clipboard format.
      See Also:
        Constant Field Values

    - #### VT_CLSID

          public static final int VT_CLSID

      [P] A Class ID.

      It consists of a 32 bit unsigned integer indicating the size of the structure, a 32 bit signed integer indicating (Clipboard Format Tag) indicating the type of data that it contains, and then a byte array containing the data.

      The valid Clipboard Format Tags are:

      - `Thumbnail.CFTAG_WINDOWS`
      - `Thumbnail.CFTAG_MACINTOSH`
      - `Thumbnail.CFTAG_NODATA`
      - `Thumbnail.CFTAG_FMTID`

           typedef struct tagCLIPDATA {
           // cbSize is the size of the buffer pointed to
           // by pClipData, plus sizeof(ulClipFmt)
           ULONG              cbSize;
           long               ulClipFmt;
           BYTE*              pClipData;
           } CLIPDATA;

      See Also:
        PROPVARIANT structure, Constant Field Values

    - #### VT_VERSIONED_STREAM

          public static final int VT_VERSIONED_STREAM

      "MUST be a VersionedStream. The storage representing the (non-simple) property set MUST have a stream element with the name in the StreamName field." -- [MS-OLEPS] -- v20110920; Object Linking and Embedding (OLE) Property Set Data Structures; page 24 / 63
      See Also:
        Constant Field Values

    - #### VT_VECTOR

          public static final int VT_VECTOR

      [P] simple counted array. How long is this? How is it to be interpreted?
      See Also:
        Constant Field Values

    - #### VT_ARRAY

          public static final int VT_ARRAY

      [V] SAFEARRAY*. How long is this? How is it to be interpreted?
      See Also:
        Constant Field Values

    - #### VT_BYREF

          public static final int VT_BYREF

      [V] void* for local use. How long is this? How is it to be interpreted?
      See Also:
        Constant Field Values

    - #### VT_RESERVED

          public static final int VT_RESERVED

      See Also:
        Constant Field Values

    - #### VT_ILLEGAL

          public static final int VT_ILLEGAL

      See Also:
        Constant Field Values

    - #### VT_ILLEGALMASKED

          public static final int VT_ILLEGALMASKED

      See Also:
        Constant Field Values

    - #### VT_TYPEMASK

          public static final int VT_TYPEMASK

      See Also:
        Constant Field Values

    - #### LENGTH_UNKNOWN

          public static final java.lang.Integer LENGTH_UNKNOWN

      Denotes a variant type with a length that is unknown to HPSF yet.

    - #### LENGTH_VARIABLE

          public static final java.lang.Integer LENGTH_VARIABLE

      Denotes a variant type with a variable length.

    - #### LENGTH_0

          public static final java.lang.Integer LENGTH_0

      Denotes a variant type with a length of 0 bytes.

    - #### LENGTH_2

          public static final java.lang.Integer LENGTH_2

      Denotes a variant type with a length of 2 bytes.

    - #### LENGTH_4

          public static final java.lang.Integer LENGTH_4

      Denotes a variant type with a length of 4 bytes.

    - #### LENGTH_8

          public static final java.lang.Integer LENGTH_8

      Denotes a variant type with a length of 8 bytes.

  - ### Constructor Detail

    - #### Variant

          public Variant()

  - ### Method Detail

    - #### getVariantName

          public static java.lang.String getVariantName(long variantType)

      Returns the variant type name associated with a variant type number.
      Parameters:
        `variantType` - The variant type number
      Returns:
        The variant type name or the string "unknown variant type"

    - #### getVariantLength

          public static int getVariantLength(long variantType)

      Returns a variant type's length.
      Parameters:
        `variantType` - The variant type number
      Returns:
        The length of the variant type's data in bytes. If the length is variable, i.e. the length of a string, -1 is returned. If HPSF does not know the length, -2 is returned. The latter usually indicates an unsupported variant type.

Copyright 2020 The Apache Software Foundation or its licensors, as applicable.