com.jogamp.common.os

## Class DynamicLibraryBundle

- java.lang.Object
- - com.jogamp.common.os.DynamicLibraryBundle

- All Implemented Interfaces:
    DynamicLookupHelper

      public class DynamicLibraryBundle
      extends Object
      implements DynamicLookupHelper

  Provides bundling of:
  - The to-be-glued native library, eg OpenGL32.dll. From here on this is referred as the Tool.
  - The JNI glue-code native library, eg jogl_desktop.dll. From here on this is referred as the Glue

  An `DynamicLibraryBundleInfo` instance is being passed in the constructor, providing the required information about the tool and glue libraries. The ClassLoader of it's implementation is also being used to help locating the native libraries.

  An instance provides a complete `DynamicLookupHelper` to `reset` the `ProcAddressTable`.
  At construction, it:
  - loads the Tool native library via `NativeLibrary's open method`
  - loads the `Glue native library`
  - resolves the Tool's `GetProcAddress`. (optional)

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected List<NativeLibrary>` | `nativeLibraries`

    - ### Fields inherited from interface com.jogamp.common.os.DynamicLookupHelper

      `DEBUG, DEBUG_LOOKUP`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DynamicLibraryBundle(DynamicLibraryBundleInfo info)` Instantiates and loads all `NativeLibrary`s incl.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `destroy()` Unload all `NativeLibrary`s, and remove all references.
    `long` | `dynamicLookupFunction(String funcName)` Returns the function handle for function 'funcName'.
    `DynamicLibraryBundleInfo` | `getBundleInfo()`
    `static RunnableExecutor` | `getDefaultRunnableExecutor()` Returns an AWT-EDT `RunnableExecutor` implementation if AWT is available, otherwise `RunnableExecutor.currentThreadExecutor`.
    `int` | `getGlueLibLoadedNumber()`
    `int` | `getGlueLibNumber()`
    `protected long` | `getToolGetProcAddressHandle()`
    `int` | `getToolLibLoadedNumber()`
    `int` | `getToolLibNumber()`
    `boolean` | `isFunctionAvailable(String funcName)` Queries whether function 'funcName' is available.
    `boolean` | `isGlueLibComplete()`
    `boolean` | `isGlueLibLoaded(int i)`
    `boolean` | `isLibComplete()`
    `boolean` | `isToolLibComplete()`
    `boolean` | `isToolLibLoaded()`
    `boolean` | `isToolLibLoaded(int i)`
    `protected NativeLibrary` | `loadFirstAvailable(List<String> libNames, ClassLoader loader, boolean global)`

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

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

- - ### Field Detail

    - #### nativeLibraries

          protected final List<NativeLibrary> nativeLibraries

  - ### Constructor Detail

    - #### DynamicLibraryBundle

          public DynamicLibraryBundle(DynamicLibraryBundleInfo info)

      Instantiates and loads all `NativeLibrary`s incl. JNI libraries.

      The ClassLoader of the `DynamicLibraryBundleInfo` implementation class is being used to help locating the native libraries.

  - ### Method Detail

    - #### getDefaultRunnableExecutor

          public static RunnableExecutor getDefaultRunnableExecutor()

      Returns an AWT-EDT `RunnableExecutor` implementation if AWT is available, otherwise `RunnableExecutor.currentThreadExecutor`.

    - #### destroy

          public final void destroy()

      Unload all `NativeLibrary`s, and remove all references.

    - #### isLibComplete

          public final boolean isLibComplete()

    - #### getToolLibNumber

          public final int getToolLibNumber()

    - #### getToolLibLoadedNumber

          public final int getToolLibLoadedNumber()

    - #### isToolLibComplete

          public final boolean isToolLibComplete()

      Returns:
        true if all tool libraries are loaded, otherwise false.
      See Also:
        `DynamicLibraryBundleInfo.getToolLibNames()`

    - #### isToolLibLoaded

          public final boolean isToolLibLoaded()

    - #### isToolLibLoaded

          public final boolean isToolLibLoaded(int i)

    - #### getGlueLibNumber

          public final int getGlueLibNumber()

    - #### getGlueLibLoadedNumber

          public final int getGlueLibLoadedNumber()

    - #### isGlueLibComplete

          public final boolean isGlueLibComplete()

      Returns:
        true if the last entry has been loaded, while ignoring the preload dependencies. Otherwise false.
      See Also:
        `DynamicLibraryBundleInfo.getGlueLibNames()`

    - #### isGlueLibLoaded

          public final boolean isGlueLibLoaded(int i)

    - #### getBundleInfo

          public final DynamicLibraryBundleInfo getBundleInfo()

    - #### getToolGetProcAddressHandle

          protected final long getToolGetProcAddressHandle()

    - #### loadFirstAvailable

          protected final NativeLibrary loadFirstAvailable(List<String> libNames,
                                         ClassLoader loader,
                                         boolean global)

    - #### dynamicLookupFunction

          public final long dynamicLookupFunction(String funcName)

      Description copied from interface: `DynamicLookupHelper`
      Returns the function handle for function 'funcName'.
      Specified by:
        `dynamicLookupFunction` in interface `DynamicLookupHelper`

    - #### isFunctionAvailable

          public final boolean isFunctionAvailable(String funcName)

      Description copied from interface: `DynamicLookupHelper`
      Queries whether function 'funcName' is available.
      Specified by:
        `isFunctionAvailable` in interface `DynamicLookupHelper`