/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 4.0.1
 *
 * Do not make changes to this file unless you know what you are doing--modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */

package com.java.helics;

public class helics {
  /**
   *  definition of time zero-the beginning of simulation 
   */
  public static double getHelics_time_zero() {
    return helicsJNI.helics_time_zero_get();
  }

  /**
   *  definition of the minimum time resolution 
   */
  public static double getHelics_time_epsilon() {
    return helicsJNI.helics_time_epsilon_get();
  }

  /**
   *  definition of an invalid time that has no meaning 
   */
  public static double getHelics_time_invalid() {
    return helicsJNI.helics_time_invalid_get();
  }

  /**
   *  definition of time signifying the federate has<br>
   *                                                              terminated or to run until the end of the simulation
   */
  public static double getHelics_time_maxtime() {
    return helicsJNI.helics_time_maxtime_get();
  }

  /**
   *  indicator used for a true response 
   */
  public static int getHelics_true() {
    return helicsJNI.helics_true_get();
  }

  /**
   *  indicator used for a false response 
   */
  public static int getHelics_false() {
    return helicsJNI.helics_false_get();
  }

  /**
   * Get a version string for HELICS.
   */
  public static String helicsGetVersion() {
    return helicsJNI.helicsGetVersion();
  }

  /**
   * Get the build flags used to compile HELICS.
   */
  public static String helicsGetBuildFlags() {
    return helicsJNI.helicsGetBuildFlags();
  }

  /**
   * Get the compiler version used to compile HELICS.
   */
  public static String helicsGetCompilerVersion() {
    return helicsJNI.helicsGetCompilerVersion();
  }

  /**
   * Returns true if core/broker type specified is available in current compilation.<br>
   * <br>
   * @param type A string representing a core type.<br>
   * <br>
   * Options include "zmq", "udp", "ipc", "interprocess", "tcp", "default", "mpi".
   */
  public static int helicsIsCoreTypeAvailable(String type) {
    return helicsJNI.helicsIsCoreTypeAvailable(type);
  }

  /**
   * Create a core object.<br>
   * <br>
   * @param type The type of the core to create.<br>
   * @param name The name of the core. It can be a nullptr or empty string to have a name automatically assigned.<br>
   * @param initString An initialization string to send to the core. The format is similar to command line arguments.<br>
   *                   Typical options include a broker name, the broker address, the number of federates, etc.<br>
   * <br>
   * <br>
   * @return A helics_core object.
   */
  public static SWIGTYPE_p_void helicsCreateCore(String type, String name, String initString) {
    long cPtr = helicsJNI.helicsCreateCore(type, name, initString);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a core object by passing command line arguments.<br>
   * <br>
   * @param type The type of the core to create.<br>
   * @param name The name of the core. It can be a nullptr or empty string to have a name automatically assigned.<br>
   * <br>
   * @param argv The list of string values from a command line.<br>
   * <br>
   * <br>
   * @return A helics_core object.
   */
  public static SWIGTYPE_p_void helicsCreateCoreFromArgs(String type, String name, String[] argc) {
    long cPtr = helicsJNI.helicsCreateCoreFromArgs(type, name, argc);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a new reference to an existing core.<br>
   * <br>
   * This will create a new broker object that references the existing broker. The new broker object must be freed as well.<br>
   * <br>
   * @param core An existing helics_core.<br>
   * <br>
   * <br>
   * @return A new reference to the same broker.
   */
  public static SWIGTYPE_p_void helicsCoreClone(SWIGTYPE_p_void core) {
    long cPtr = helicsJNI.helicsCoreClone(SWIGTYPE_p_void.getCPtr(core));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Check if a core object is a valid object.<br>
   * <br>
   * @param core The helics_core object to test.
   */
  public static int helicsCoreIsValid(SWIGTYPE_p_void core) {
    return helicsJNI.helicsCoreIsValid(SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Create a broker object.<br>
   * <br>
   * @param type The type of the broker to create.<br>
   * @param name The name of the broker. It can be a nullptr or empty string to have a name automatically assigned.<br>
   * @param initString An initialization string to send to the core-the format is similar to command line arguments.<br>
   *                   Typical options include a broker address such as --broker="XSSAF" if this is a subbroker, or the number of federates,<br>
   * or the address.<br>
   * <br>
   * <br>
   * @return A helics_broker object.
   */
  public static SWIGTYPE_p_void helicsCreateBroker(String type, String name, String initString) {
    long cPtr = helicsJNI.helicsCreateBroker(type, name, initString);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a core object by passing command line arguments.<br>
   * <br>
   * @param type The type of the core to create.<br>
   * @param name The name of the core. It can be a nullptr or empty string to have a name automatically assigned.<br>
   * <br>
   * @param argv The list of string values from a command line.<br>
   * <br>
   * <br>
   * @return A helics_core object.
   */
  public static SWIGTYPE_p_void helicsCreateBrokerFromArgs(String type, String name, String[] argc) {
    long cPtr = helicsJNI.helicsCreateBrokerFromArgs(type, name, argc);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a new reference to an existing broker.<br>
   * <br>
   * This will create a new broker object that references the existing broker it must be freed as well.<br>
   * <br>
   * @param broker An existing helics_broker.<br>
   * <br>
   * <br>
   * @return A new reference to the same broker.
   */
  public static SWIGTYPE_p_void helicsBrokerClone(SWIGTYPE_p_void broker) {
    long cPtr = helicsJNI.helicsBrokerClone(SWIGTYPE_p_void.getCPtr(broker));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Check if a broker object is a valid object.<br>
   * <br>
   * @param broker The helics_broker object to test.
   */
  public static int helicsBrokerIsValid(SWIGTYPE_p_void broker) {
    return helicsJNI.helicsBrokerIsValid(SWIGTYPE_p_void.getCPtr(broker));
  }

  /**
   * Check if a broker is connected.<br>
   * <br>
   * A connected broker implies it is attached to cores or cores could reach out to communicate.<br>
   * <br>
   * @return helics_false if not connected.
   */
  public static int helicsBrokerIsConnected(SWIGTYPE_p_void broker) {
    return helicsJNI.helicsBrokerIsConnected(SWIGTYPE_p_void.getCPtr(broker));
  }

  /**
   * Link a named publication and named input using a broker.<br>
   * <br>
   * @param broker The broker to generate the connection from.<br>
   * @param source The name of the publication (cannot be NULL).<br>
   * @param target The name of the target to send the publication data (cannot be NULL).
   */
  public static void helicsBrokerDataLink(SWIGTYPE_p_void broker, String source, String target) {
    helicsJNI.helicsBrokerDataLink(SWIGTYPE_p_void.getCPtr(broker), source, target);
  }

  /**
   * Link a named filter to a source endpoint.<br>
   * <br>
   * @param broker The broker to generate the connection from.<br>
   * @param filter The name of the filter (cannot be NULL).<br>
   * @param endpoint The name of the endpoint to filter the data from (cannot be NULL).
   */
  public static void helicsBrokerAddSourceFilterToEndpoint(SWIGTYPE_p_void broker, String filter, String endpoint) {
    helicsJNI.helicsBrokerAddSourceFilterToEndpoint(SWIGTYPE_p_void.getCPtr(broker), filter, endpoint);
  }

  /**
   * Link a named filter to a destination endpoint.<br>
   * <br>
   * @param broker The broker to generate the connection from.<br>
   * @param filter The name of the filter (cannot be NULL).<br>
   * @param endpoint The name of the endpoint to filter the data going to (cannot be NULL).
   */
  public static void helicsBrokerAddDestinationFilterToEndpoint(SWIGTYPE_p_void broker, String filter, String endpoint) {
    helicsJNI.helicsBrokerAddDestinationFilterToEndpoint(SWIGTYPE_p_void.getCPtr(broker), filter, endpoint);
  }

  /**
   * Load a file containing connection information.<br>
   * <br>
   * @param broker The broker to generate the connections from.<br>
   * @param file A JSON or TOML file containing connection information.
   */
  public static void helicsBrokerMakeConnections(SWIGTYPE_p_void broker, String file) {
    helicsJNI.helicsBrokerMakeConnections(SWIGTYPE_p_void.getCPtr(broker), file);
  }

  /**
   * Wait for the core to disconnect.<br>
   * <br>
   * @param core The core to wait for.<br>
   * @param msToWait The time out in millisecond (&lt;0 for infinite timeout).<br>
   * <br>
   * <br>
   * @return helics_true if the disconnect was successful, helics_false if there was a timeout.
   */
  public static int helicsCoreWaitForDisconnect(SWIGTYPE_p_void core, int msToWait) {
    return helicsJNI.helicsCoreWaitForDisconnect(SWIGTYPE_p_void.getCPtr(core), msToWait);
  }

  /**
   * Wait for the broker to disconnect.<br>
   * <br>
   * @param broker The broker to wait for.<br>
   * @param msToWait The time out in millisecond (&lt;0 for infinite timeout).<br>
   * <br>
   * <br>
   * @return helics_true if the disconnect was successful, helics_false if there was a timeout.
   */
  public static int helicsBrokerWaitForDisconnect(SWIGTYPE_p_void broker, int msToWait) {
    return helicsJNI.helicsBrokerWaitForDisconnect(SWIGTYPE_p_void.getCPtr(broker), msToWait);
  }

  /**
   * Check if a core is connected.<br>
   * <br>
   * A connected core implies it is attached to federates or federates could be attached to it<br>
   * <br>
   * @return helics_false if not connected, helics_true if it is connected.
   */
  public static int helicsCoreIsConnected(SWIGTYPE_p_void core) {
    return helicsJNI.helicsCoreIsConnected(SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Link a named publication and named input using a core.<br>
   * <br>
   * @param core The core to generate the connection from.<br>
   * @param source The name of the publication (cannot be NULL).<br>
   * @param target The name of the target to send the publication data (cannot be NULL).
   */
  public static void helicsCoreDataLink(SWIGTYPE_p_void core, String source, String target) {
    helicsJNI.helicsCoreDataLink(SWIGTYPE_p_void.getCPtr(core), source, target);
  }

  /**
   * Link a named filter to a source endpoint.<br>
   * <br>
   * @param core The core to generate the connection from.<br>
   * @param filter The name of the filter (cannot be NULL).<br>
   * @param endpoint The name of the endpoint to filter the data from (cannot be NULL).
   */
  public static void helicsCoreAddSourceFilterToEndpoint(SWIGTYPE_p_void core, String filter, String endpoint) {
    helicsJNI.helicsCoreAddSourceFilterToEndpoint(SWIGTYPE_p_void.getCPtr(core), filter, endpoint);
  }

  /**
   * Link a named filter to a destination endpoint.<br>
   * <br>
   * @param core The core to generate the connection from.<br>
   * @param filter The name of the filter (cannot be NULL).<br>
   * @param endpoint The name of the endpoint to filter the data going to (cannot be NULL).
   */
  public static void helicsCoreAddDestinationFilterToEndpoint(SWIGTYPE_p_void core, String filter, String endpoint) {
    helicsJNI.helicsCoreAddDestinationFilterToEndpoint(SWIGTYPE_p_void.getCPtr(core), filter, endpoint);
  }

  /**
   * Load a file containing connection information.<br>
   * <br>
   * @param core The core to generate the connections from.<br>
   * @param file A JSON or TOML file containing connection information.
   */
  public static void helicsCoreMakeConnections(SWIGTYPE_p_void core, String file) {
    helicsJNI.helicsCoreMakeConnections(SWIGTYPE_p_void.getCPtr(core), file);
  }

  /**
   * Get an identifier for the broker.<br>
   * <br>
   * @param broker The broker to query.<br>
   * <br>
   * @return A string containing the identifier for the broker.
   */
  public static String helicsBrokerGetIdentifier(SWIGTYPE_p_void broker) {
    return helicsJNI.helicsBrokerGetIdentifier(SWIGTYPE_p_void.getCPtr(broker));
  }

  /**
   * Get an identifier for the core.<br>
   * <br>
   * @param core The core to query.<br>
   * <br>
   * @return A string with the identifier of the core.
   */
  public static String helicsCoreGetIdentifier(SWIGTYPE_p_void core) {
    return helicsJNI.helicsCoreGetIdentifier(SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Get the network address associated with a broker.<br>
   * <br>
   * @param broker The broker to query.<br>
   * <br>
   * @return A string with the network address of the broker.
   */
  public static String helicsBrokerGetAddress(SWIGTYPE_p_void broker) {
    return helicsJNI.helicsBrokerGetAddress(SWIGTYPE_p_void.getCPtr(broker));
  }

  /**
   * Get the network address associated with a core.<br>
   * <br>
   * @param core The core to query.<br>
   * <br>
   * @return A string with the network address of the broker.
   */
  public static String helicsCoreGetAddress(SWIGTYPE_p_void core) {
    return helicsJNI.helicsCoreGetAddress(SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Set the core to ready for init.<br>
   * <br>
   * This function is used for cores that have filters but no federates so there needs to be<br>
   *          a direct signal to the core to trigger the federation initialization.<br>
   * <br>
   * @param core The core object to enable init values for.
   */
  public static void helicsCoreSetReadyToInit(SWIGTYPE_p_void core) {
    helicsJNI.helicsCoreSetReadyToInit(SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Connect a core to the federate based on current configuration.<br>
   * <br>
   * @param core The core to connect.<br>
   * <br>
   * <br>
   * @return helics_false if not connected, helics_true if it is connected.
   */
  public static int helicsCoreConnect(SWIGTYPE_p_void core) {
    return helicsJNI.helicsCoreConnect(SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Disconnect a core from the federation.<br>
   * <br>
   * @param core The core to query.
   */
  public static void helicsCoreDisconnect(SWIGTYPE_p_void core) {
    helicsJNI.helicsCoreDisconnect(SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Get an existing federate object from a core by name.<br>
   * <br>
   * The federate must have been created by one of the other functions and at least one of the objects referencing the created<br>
   *          federate must still be active in the process.<br>
   * <br>
   * @param fedName The name of the federate to retrieve.<br>
   * <br>
   * <br>
   * @return NULL if no fed is available by that name otherwise a helics_federate with that name.
   */
  public static SWIGTYPE_p_void helicsGetFederateByName(String fedName) {
    long cPtr = helicsJNI.helicsGetFederateByName(fedName);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Disconnect a broker.<br>
   * <br>
   * @param broker The broker to disconnect.
   */
  public static void helicsBrokerDisconnect(SWIGTYPE_p_void broker) {
    helicsJNI.helicsBrokerDisconnect(SWIGTYPE_p_void.getCPtr(broker));
  }

  /**
   * Disconnect and free a federate.
   */
  public static void helicsFederateDestroy(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateDestroy(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Disconnect and free a broker.
   */
  public static void helicsBrokerDestroy(SWIGTYPE_p_void broker) {
    helicsJNI.helicsBrokerDestroy(SWIGTYPE_p_void.getCPtr(broker));
  }

  /**
   * Disconnect and free a core.
   */
  public static void helicsCoreDestroy(SWIGTYPE_p_void core) {
    helicsJNI.helicsCoreDestroy(SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Release the memory associated with a core.
   */
  public static void helicsCoreFree(SWIGTYPE_p_void core) {
    helicsJNI.helicsCoreFree(SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Release the memory associated with a broker.
   */
  public static void helicsBrokerFree(SWIGTYPE_p_void broker) {
    helicsJNI.helicsBrokerFree(SWIGTYPE_p_void.getCPtr(broker));
  }

  /**
   * Create a value federate from a federate info object.<br>
   * <br>
   * helics_federate objects can be used in all functions that take a helics_federate or helics_federate object as an argument.<br>
   * <br>
   * @param fedName The name of the federate to create, can NULL or an empty string to use the default name from fi or an assigned name.<br>
   * @param fi The federate info object that contains details on the federate.<br>
   * <br>
   * <br>
   * @return An opaque value federate object.
   */
  public static SWIGTYPE_p_void helicsCreateValueFederate(String fedName, SWIGTYPE_p_void fi) {
    long cPtr = helicsJNI.helicsCreateValueFederate(fedName, SWIGTYPE_p_void.getCPtr(fi));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a value federate from a JSON file, JSON string, or TOML file.<br>
   * <br>
   * helics_federate objects can be used in all functions that take a helics_federate or helics_federate object as an argument.<br>
   * <br>
   * @param configFile A JSON file or a JSON string or TOML file that contains setup and configuration information.<br>
   * <br>
   * <br>
   * @return An opaque value federate object.
   */
  public static SWIGTYPE_p_void helicsCreateValueFederateFromConfig(String configFile) {
    long cPtr = helicsJNI.helicsCreateValueFederateFromConfig(configFile);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a message federate from a federate info object.<br>
   * <br>
   * helics_message_federate objects can be used in all functions that take a helics_message_federate or helics_federate object as an<br>
   * argument.<br>
   * <br>
   * @param fedName The name of the federate to create.<br>
   * @param fi The federate info object that contains details on the federate.<br>
   * <br>
   * <br>
   * @return An opaque message federate object.
   */
  public static SWIGTYPE_p_void helicsCreateMessageFederate(String fedName, SWIGTYPE_p_void fi) {
    long cPtr = helicsJNI.helicsCreateMessageFederate(fedName, SWIGTYPE_p_void.getCPtr(fi));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a message federate from a JSON file or JSON string or TOML file.<br>
   * <br>
   * helics_message_federate objects can be used in all functions that take a helics_message_federate or helics_federate object as an<br>
   * argument.<br>
   * <br>
   * @param configFile A Config(JSON,TOML) file or a JSON string that contains setup and configuration information.<br>
   * <br>
   * <br>
   * @return An opaque message federate object.
   */
  public static SWIGTYPE_p_void helicsCreateMessageFederateFromConfig(String configFile) {
    long cPtr = helicsJNI.helicsCreateMessageFederateFromConfig(configFile);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a combination federate from a federate info object.<br>
   * <br>
   * Combination federates are both value federates and message federates, objects can be used in all functions<br>
   *                      that take a helics_federate, helics_message_federate or helics_federate object as an argument<br>
   * <br>
   * @param fedName A string with the name of the federate, can be NULL or an empty string to pull the default name from fi.<br>
   * @param fi The federate info object that contains details on the federate.<br>
   * <br>
   * <br>
   * @return An opaque value federate object nullptr if the object creation failed.
   */
  public static SWIGTYPE_p_void helicsCreateCombinationFederate(String fedName, SWIGTYPE_p_void fi) {
    long cPtr = helicsJNI.helicsCreateCombinationFederate(fedName, SWIGTYPE_p_void.getCPtr(fi));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a combination federate from a JSON file or JSON string or TOML file.<br>
   * <br>
   * Combination federates are both value federates and message federates, objects can be used in all functions<br>
   *          that take a helics_federate, helics_message_federate or helics_federate object as an argument<br>
   * <br>
   * @param configFile A JSON file or a JSON string or TOML file that contains setup and configuration information.<br>
   * <br>
   * <br>
   * @return An opaque combination federate object.
   */
  public static SWIGTYPE_p_void helicsCreateCombinationFederateFromConfig(String configFile) {
    long cPtr = helicsJNI.helicsCreateCombinationFederateFromConfig(configFile);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a new reference to an existing federate.<br>
   * <br>
   * This will create a new helics_federate object that references the existing federate. The new object must be freed as well.<br>
   * <br>
   * @param fed An existing helics_federate.<br>
   * <br>
   * <br>
   * @return A new reference to the same federate.
   */
  public static SWIGTYPE_p_void helicsFederateClone(SWIGTYPE_p_void fed) {
    long cPtr = helicsJNI.helicsFederateClone(SWIGTYPE_p_void.getCPtr(fed));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a federate info object for specifying federate information when constructing a federate.<br>
   * <br>
   * @return A helics_federate_info object which is a reference to the created object.
   */
  public static SWIGTYPE_p_void helicsCreateFederateInfo() {
    long cPtr = helicsJNI.helicsCreateFederateInfo();
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a federate info object from an existing one and clone the information.<br>
   * <br>
   * @param fi A federateInfo object to duplicate.<br>
   * <br>
   * <br>
   *  @return A helics_federate_info object which is a reference to the created object.
   */
  public static SWIGTYPE_p_void helicsFederateInfoClone(SWIGTYPE_p_void fi) {
    long cPtr = helicsJNI.helicsFederateInfoClone(SWIGTYPE_p_void.getCPtr(fi));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Load federate info from command line arguments.<br>
   * <br>
   * @param fi A federateInfo object.<br>
   * @param argc The number of command line arguments.<br>
   * @param argv An array of strings from the command line.
   */
  public static void helicsFederateInfoLoadFromArgs(SWIGTYPE_p_void fi, String[] argc) {
    helicsJNI.helicsFederateInfoLoadFromArgs(SWIGTYPE_p_void.getCPtr(fi), argc);
  }

  /**
   * Delete the memory associated with a federate info object.
   */
  public static void helicsFederateInfoFree(SWIGTYPE_p_void fi) {
    helicsJNI.helicsFederateInfoFree(SWIGTYPE_p_void.getCPtr(fi));
  }

  /**
   * Check if a federate_object is valid.<br>
   * <br>
   * @return helics_true if the federate is a valid active federate, helics_false otherwise
   */
  public static int helicsFederateIsValid(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateIsValid(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Set the name of the core to link to for a federate.<br>
   * <br>
   * @param fi The federate info object to alter.<br>
   * @param corename The identifier for a core to link to.
   */
  public static void helicsFederateInfoSetCoreName(SWIGTYPE_p_void fi, String corename) {
    helicsJNI.helicsFederateInfoSetCoreName(SWIGTYPE_p_void.getCPtr(fi), corename);
  }

  /**
   * Set the initialization string for the core usually in the form of command line arguments.<br>
   * <br>
   * @param fi The federate info object to alter.<br>
   * @param coreInit A string containing command line arguments to be passed to the core.
   */
  public static void helicsFederateInfoSetCoreInitString(SWIGTYPE_p_void fi, String coreInit) {
    helicsJNI.helicsFederateInfoSetCoreInitString(SWIGTYPE_p_void.getCPtr(fi), coreInit);
  }

  /**
   * Set the initialization string that a core will pass to a generated broker usually in the form of command line arguments.<br>
   * <br>
   * @param fi The federate info object to alter.<br>
   * @param brokerInit A string with command line arguments for a generated broker.
   */
  public static void helicsFederateInfoSetBrokerInitString(SWIGTYPE_p_void fi, String brokerInit) {
    helicsJNI.helicsFederateInfoSetBrokerInitString(SWIGTYPE_p_void.getCPtr(fi), brokerInit);
  }

  /**
   * Set the core type by integer code.<br>
   * <br>
   * Valid values available by definitions in api-data.h.<br>
   * @param fi The federate info object to alter.<br>
   * @param coretype An numerical code for a core type see /ref helics_core_type.
   */
  public static void helicsFederateInfoSetCoreType(SWIGTYPE_p_void fi, int coretype) {
    helicsJNI.helicsFederateInfoSetCoreType(SWIGTYPE_p_void.getCPtr(fi), coretype);
  }

  /**
   * Set the core type from a string.<br>
   * <br>
   * @param fi The federate info object to alter.<br>
   * @param coretype A string naming a core type.
   */
  public static void helicsFederateInfoSetCoreTypeFromString(SWIGTYPE_p_void fi, String coretype) {
    helicsJNI.helicsFederateInfoSetCoreTypeFromString(SWIGTYPE_p_void.getCPtr(fi), coretype);
  }

  /**
   * Set the name or connection information for a broker.<br>
   * <br>
   * This is only used if the core is automatically created, the broker information will be transferred to the core for connection.<br>
   * @param fi The federate info object to alter.<br>
   * @param broker A string which defines the connection information for a broker either a name or an address.
   */
  public static void helicsFederateInfoSetBroker(SWIGTYPE_p_void fi, String broker) {
    helicsJNI.helicsFederateInfoSetBroker(SWIGTYPE_p_void.getCPtr(fi), broker);
  }

  /**
   * Set the key for a broker connection.<br>
   * <br>
   * This is only used if the core is automatically created, the broker information will be transferred to the core for connection.<br>
   * @param fi The federate info object to alter.<br>
   * @param brokerkey A string containing a key for the broker to connect.
   */
  public static void helicsFederateInfoSetBrokerKey(SWIGTYPE_p_void fi, String brokerkey) {
    helicsJNI.helicsFederateInfoSetBrokerKey(SWIGTYPE_p_void.getCPtr(fi), brokerkey);
  }

  /**
   * Set the port to use for the broker.<br>
   * <br>
   * This is only used if the core is automatically created, the broker information will be transferred to the core for connection.<br>
   * This will only be useful for network broker connections.<br>
   * @param fi The federate info object to alter.<br>
   * @param brokerPort The integer port number to use for connection with a broker.
   */
  public static void helicsFederateInfoSetBrokerPort(SWIGTYPE_p_void fi, int brokerPort) {
    helicsJNI.helicsFederateInfoSetBrokerPort(SWIGTYPE_p_void.getCPtr(fi), brokerPort);
  }

  /**
   * Set the local port to use.<br>
   * <br>
   * This is only used if the core is automatically created, the port information will be transferred to the core for connection.<br>
   * @param fi The federate info object to alter.<br>
   * @param localPort A string with the port information to use as the local server port can be a number or "auto" or "os_local".
   */
  public static void helicsFederateInfoSetLocalPort(SWIGTYPE_p_void fi, String localPort) {
    helicsJNI.helicsFederateInfoSetLocalPort(SWIGTYPE_p_void.getCPtr(fi), localPort);
  }

  /**
   * Get a property index for use in /ref helicsFederateInfoSetFlagOption, /ref helicsFederateInfoSetTimeProperty,<br>
   * or /ref helicsFederateInfoSetIntegerProperty<br>
   * @param val A string with the property name.<br>
   * @return An int with the property code or (-1) if not a valid property.
   */
  public static int helicsGetPropertyIndex(String val) {
    return helicsJNI.helicsGetPropertyIndex(val);
  }

  /**
   * Get a property index for use in /ref helicsFederateInfoSetFlagOption, /ref helicsFederateSetFlagOption,<br>
   * @param val A string with the option name.<br>
   * @return An int with the property code or (-1) if not a valid property.
   */
  public static int helicsGetFlagIndex(String val) {
    return helicsJNI.helicsGetFlagIndex(val);
  }

  /**
   * Get an option index for use in /ref helicsPublicationSetOption, /ref helicsInputSetOption, /ref helicsEndpointSetOption,<br>
   * /ref helicsFilterSetOption, and the corresponding get functions.<br>
   * <br>
   * @param val A string with the option name.<br>
   * <br>
   * @return An int with the option index or (-1) if not a valid property.
   */
  public static int helicsGetOptionIndex(String val) {
    return helicsJNI.helicsGetOptionIndex(val);
  }

  /**
   * Get an option value for use in /ref helicsPublicationSetOption, /ref helicsInputSetOption, /ref helicsEndpointSetOption,<br>
   * /ref helicsFilterSetOption.<br>
   * <br>
   * @param val A string representing the value.<br>
   * <br>
   * @return An int with the option value or (-1) if not a valid value.
   */
  public static int helicsGetOptionValue(String val) {
    return helicsJNI.helicsGetOptionValue(val);
  }

  /**
   * Set a flag in the info structure.<br>
   * <br>
   * Valid flags are available /ref helics_federate_flags.<br>
   * @param fi The federate info object to alter.<br>
   * @param flag A numerical index for a flag.<br>
   * @param value The desired value of the flag helics_true or helics_false.
   */
  public static void helicsFederateInfoSetFlagOption(SWIGTYPE_p_void fi, int flag, int value) {
    helicsJNI.helicsFederateInfoSetFlagOption(SWIGTYPE_p_void.getCPtr(fi), flag, value);
  }

  /**
   * Set the separator character in the info structure.<br>
   * <br>
   * The separator character is the separation character for local publications/endpoints in creating their global name.<br>
   * For example if the separator character is '/'  then a local endpoint would have a globally reachable name of fedName/localName.<br>
   * @param fi The federate info object to alter.<br>
   * @param separator The character to use as a separator.
   */
  public static void helicsFederateInfoSetSeparator(SWIGTYPE_p_void fi, char separator) {
    helicsJNI.helicsFederateInfoSetSeparator(SWIGTYPE_p_void.getCPtr(fi), separator);
  }

  /**
   * Set the output delay for a federate.<br>
   * <br>
   * @param fi The federate info object to alter.<br>
   * @param timeProperty An integer representation of the time based property to set see /ref helics_properties.<br>
   * @param propertyValue The value of the property to set the timeProperty to.
   */
  public static void helicsFederateInfoSetTimeProperty(SWIGTYPE_p_void fi, int timeProperty, double propertyValue) {
    helicsJNI.helicsFederateInfoSetTimeProperty(SWIGTYPE_p_void.getCPtr(fi), timeProperty, propertyValue);
  }

  /**
   * Set an integer property for a federate.<br>
   * <br>
   * Set known properties.<br>
   * <br>
   * @param fi The federateInfo object to alter.<br>
   * @param intProperty An int identifying the property.<br>
   * @param propertyValue The value to set the property to.
   */
  public static void helicsFederateInfoSetIntegerProperty(SWIGTYPE_p_void fi, int intProperty, int propertyValue) {
    helicsJNI.helicsFederateInfoSetIntegerProperty(SWIGTYPE_p_void.getCPtr(fi), intProperty, propertyValue);
  }

  /**
   * Load interfaces from a file.<br>
   * <br>
   * @param fed The federate to which to load interfaces.<br>
   * @param file The name of a file to load the interfaces from either JSON, or TOML.
   */
  public static void helicsFederateRegisterInterfaces(SWIGTYPE_p_void fed, String file) {
    helicsJNI.helicsFederateRegisterInterfaces(SWIGTYPE_p_void.getCPtr(fed), file);
  }

  /**
   * Generate a global error from a federate.<br>
   * <br>
   * A global error halts the co-simulation completely.<br>
   * <br>
   * @param fed The federate to create an error in.<br>
   * @param error_code The integer code for the error.<br>
   * @param error_string A string describing the error.
   */
  public static void helicsFederateGlobalError(SWIGTYPE_p_void fed, int error_code, String error_string) {
    helicsJNI.helicsFederateGlobalError(SWIGTYPE_p_void.getCPtr(fed), error_code, error_string);
  }

  /**
   * Generate a local error in a federate.<br>
   * <br>
   * This will propagate through the co-simulation but not necessarily halt the co-simulation, it has a similar effect to finalize<br>
   * but does allow some interaction with a core for a brief time.<br>
   * @param fed The federate to create an error in.<br>
   * @param error_code The integer code for the error.<br>
   * @param error_string A string describing the error.
   */
  public static void helicsFederateLocalError(SWIGTYPE_p_void fed, int error_code, String error_string) {
    helicsJNI.helicsFederateLocalError(SWIGTYPE_p_void.getCPtr(fed), error_code, error_string);
  }

  /**
   * Finalize the federate. This function halts all communication in the federate and disconnects it from the core.
   */
  public static void helicsFederateFinalize(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateFinalize(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Finalize the federate in an async call.
   */
  public static void helicsFederateFinalizeAsync(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateFinalizeAsync(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Complete the asynchronous finalize call.
   */
  public static void helicsFederateFinalizeComplete(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateFinalizeComplete(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Release the memory associated with a federate.
   */
  public static void helicsFederateFree(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateFree(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Call when done using the helics library.<br>
   * This function will ensure the threads are closed properly. If possible this should be the last call before exiting.
   */
  public static void helicsCloseLibrary() {
    helicsJNI.helicsCloseLibrary();
  }

  /**
   * Enter the initialization state of a federate.<br>
   * <br>
   * The initialization state allows initial values to be set and received if the iteration is requested on entry to the execution<br>
   * state. This is a blocking call and will block until the core allows it to proceed.<br>
   * <br>
   * @param fed The federate to operate on.
   */
  public static void helicsFederateEnterInitializingMode(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateEnterInitializingMode(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Non blocking alternative to <a href="#helicsFederateEnterInitializingMode">helicsFederateEnterInitializingMode</a>.<br>
   * <br>
   * The function helicsFederateEnterInitializationModeFinalize must be called to finish the operation.<br>
   * <br>
   * @param fed The federate to operate on.
   */
  public static void helicsFederateEnterInitializingModeAsync(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateEnterInitializingModeAsync(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Check if the current Asynchronous operation has completed.<br>
   * <br>
   * @param fed The federate to operate on.<br>
   * <br>
   * <br>
   * @return helics_false if not completed, helics_true if completed.
   */
  public static int helicsFederateIsAsyncOperationCompleted(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateIsAsyncOperationCompleted(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Finalize the entry to initialize mode that was initiated with /ref heliceEnterInitializingModeAsync.<br>
   * <br>
   * @param fed The federate desiring to complete the initialization step.
   */
  public static void helicsFederateEnterInitializingModeComplete(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateEnterInitializingModeComplete(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Request that the federate enter the Execution mode.<br>
   * <br>
   * This call is blocking until granted entry by the core object. On return from this call the federate will be at time 0.<br>
   *          For an asynchronous alternative call see /ref helicsFederateEnterExecutingModeAsync.<br>
   * <br>
   * @param fed A federate to change modes.
   */
  public static void helicsFederateEnterExecutingMode(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateEnterExecutingMode(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Request that the federate enter the Execution mode.<br>
   * <br>
   * This call is non-blocking and will return immediately. Call /ref helicsFederateEnterExecutingModeComplete to finish the call<br>
   * sequence.<br>
   * <br>
   * @param fed The federate object to complete the call.
   */
  public static void helicsFederateEnterExecutingModeAsync(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateEnterExecutingModeAsync(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Complete the call to /ref helicsFederateEnterExecutingModeAsync.<br>
   * <br>
   * @param fed The federate object to complete the call.
   */
  public static void helicsFederateEnterExecutingModeComplete(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateEnterExecutingModeComplete(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Request an iterative time.<br>
   * <br>
   * This call allows for finer grain control of the iterative process than /ref helicsFederateRequestTime. It takes a time and<br>
   *          iteration request, and returns a time and iteration status.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * @param iterate The requested iteration mode.<br>
   * <br>
   * <br>
   * @return An iteration structure with field containing the time and iteration status.
   */
  public static helics_iteration_result helicsFederateEnterExecutingModeIterative(SWIGTYPE_p_void fed, helics_iteration_request iterate) {
    return helics_iteration_result.swigToEnum(helicsJNI.helicsFederateEnterExecutingModeIterative(SWIGTYPE_p_void.getCPtr(fed), iterate.swigValue()));
  }

  /**
   * Request an iterative entry to the execution mode.<br>
   * <br>
   * This call allows for finer grain control of the iterative process than /ref helicsFederateRequestTime. It takes a time and<br>
   *          iteration request, and returns a time and iteration status<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * @param iterate The requested iteration mode.
   */
  public static void helicsFederateEnterExecutingModeIterativeAsync(SWIGTYPE_p_void fed, helics_iteration_request iterate) {
    helicsJNI.helicsFederateEnterExecutingModeIterativeAsync(SWIGTYPE_p_void.getCPtr(fed), iterate.swigValue());
  }

  /**
   * Complete the asynchronous iterative call into ExecutionMode.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * <br>
   * <br>
   * @return An iteration object containing the iteration time and iteration_status.
   */
  public static helics_iteration_result helicsFederateEnterExecutingModeIterativeComplete(SWIGTYPE_p_void fed) {
    return helics_iteration_result.swigToEnum(helicsJNI.helicsFederateEnterExecutingModeIterativeComplete(SWIGTYPE_p_void.getCPtr(fed)));
  }

  /**
   * Get the current state of a federate.<br>
   * <br>
   * @param fed The federate to query.<br>
   * <br>
   * <br>
   * @return State the resulting state if void return helics_ok.
   */
  public static helics_federate_state helicsFederateGetState(SWIGTYPE_p_void fed) {
    return helics_federate_state.swigToEnum(helicsJNI.helicsFederateGetState(SWIGTYPE_p_void.getCPtr(fed)));
  }

  /**
   * Get the core object associated with a federate.<br>
   * <br>
   * @param fed A federate object.<br>
   * <br>
   * <br>
   * @return A core object, nullptr if invalid.
   */
  public static SWIGTYPE_p_void helicsFederateGetCoreObject(SWIGTYPE_p_void fed) {
    long cPtr = helicsJNI.helicsFederateGetCoreObject(SWIGTYPE_p_void.getCPtr(fed));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Request the next time for federate execution.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * @param requestTime The next requested time.<br>
   * <br>
   * <br>
   * @return The time granted to the federate, will return helics_time_maxtime if the simulation has terminated or is invalid.
   */
  public static double helicsFederateRequestTime(SWIGTYPE_p_void fed, double requestTime) {
    return helicsJNI.helicsFederateRequestTime(SWIGTYPE_p_void.getCPtr(fed), requestTime);
  }

  /**
   * Request the next time for federate execution.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * @param timeDelta The requested amount of time to advance.<br>
   * <br>
   * <br>
   * @return The time granted to the federate, will return helics_time_maxtime if the simulation has terminated or is invalid
   */
  public static double helicsFederateRequestTimeAdvance(SWIGTYPE_p_void fed, double timeDelta) {
    return helicsJNI.helicsFederateRequestTimeAdvance(SWIGTYPE_p_void.getCPtr(fed), timeDelta);
  }

  /**
   * Request the next time step for federate execution.<br>
   * <br>
   * Feds should have setup the period or minDelta for this to work well but it will request the next time step which is the current<br>
   * time plus the minimum time step.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * <br>
   * <br>
   * @return The time granted to the federate, will return helics_time_maxtime if the simulation has terminated or is invalid
   */
  public static double helicsFederateRequestNextStep(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateRequestNextStep(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Request an iterative time.<br>
   * <br>
   * This call allows for finer grain control of the iterative process than /ref helicsFederateRequestTime. It takes a time and and<br>
   * iteration request, and returns a time and iteration status.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * @param requestTime The next desired time.<br>
   * @param iterate The requested iteration mode.<br>
   * <br>
   * <br>
   * <br>
   * @return The granted time, will return helics_time_maxtime if the simulation has terminated along with the appropriate iteration result.<br>
   * <br>
   * This function also returns the iteration specification of the result.
   */
  public static double helicsFederateRequestTimeIterative(SWIGTYPE_p_void fed, double requestTime, helics_iteration_request iterate, int[] outIteration) {
    return helicsJNI.helicsFederateRequestTimeIterative(SWIGTYPE_p_void.getCPtr(fed), requestTime, iterate.swigValue(), outIteration);
  }

  /**
   * Request the next time for federate execution in an asynchronous call.<br>
   * <br>
   * Call /ref helicsFederateRequestTimeComplete to finish the call.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * @param requestTime The next requested time.
   */
  public static void helicsFederateRequestTimeAsync(SWIGTYPE_p_void fed, double requestTime) {
    helicsJNI.helicsFederateRequestTimeAsync(SWIGTYPE_p_void.getCPtr(fed), requestTime);
  }

  /**
   * Complete an asynchronous requestTime call.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * <br>
   * <br>
   * @return The time granted to the federate, will return helics_time_maxtime if the simulation has terminated.
   */
  public static double helicsFederateRequestTimeComplete(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateRequestTimeComplete(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Request an iterative time through an asynchronous call.<br>
   * <br>
   * This call allows for finer grain control of the iterative process than /ref helicsFederateRequestTime. It takes a time and<br>
   * iteration request, and returns a time and iteration status. Call /ref helicsFederateRequestTimeIterativeComplete to finish the process.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * @param requestTime The next desired time.<br>
   * @param iterate The requested iteration mode.
   */
  public static void helicsFederateRequestTimeIterativeAsync(SWIGTYPE_p_void fed, double requestTime, helics_iteration_request iterate) {
    helicsJNI.helicsFederateRequestTimeIterativeAsync(SWIGTYPE_p_void.getCPtr(fed), requestTime, iterate.swigValue());
  }

  /**
   * Complete an iterative time request asynchronous call.<br>
   * <br>
   * @param fed The federate to make the request of.<br>
   * <br>
   * <br>
   * @return The granted time, will return helics_time_maxtime if the simulation has terminated.<br>
   * <br>
   * This function also returns the iteration specification of the result.
   */
  public static double helicsFederateRequestTimeIterativeComplete(SWIGTYPE_p_void fed, int[] outIterate) {
    return helicsJNI.helicsFederateRequestTimeIterativeComplete(SWIGTYPE_p_void.getCPtr(fed), outIterate);
  }

  /**
   * Get the name of the federate.<br>
   * <br>
   * @param fed The federate object to query.<br>
   * <br>
   * @return A pointer to a string with the name.
   */
  public static String helicsFederateGetName(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateGetName(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Set a time based property for a federate.<br>
   * <br>
   * @param fed The federate object to set the property for.<br>
   * @param timeProperty A integer code for a time property.<br>
   * @param time The requested value of the property.
   */
  public static void helicsFederateSetTimeProperty(SWIGTYPE_p_void fed, int timeProperty, double time) {
    helicsJNI.helicsFederateSetTimeProperty(SWIGTYPE_p_void.getCPtr(fed), timeProperty, time);
  }

  /**
   * Set a flag for the federate.<br>
   * <br>
   * @param fed The federate to alter a flag for.<br>
   * @param flag The flag to change.<br>
   * @param flagValue The new value of the flag. 0 for false, !=0 for true.
   */
  public static void helicsFederateSetFlagOption(SWIGTYPE_p_void fed, int flag, int flagValue) {
    helicsJNI.helicsFederateSetFlagOption(SWIGTYPE_p_void.getCPtr(fed), flag, flagValue);
  }

  /**
   * Set the separator character in a federate.<br>
   * <br>
   * The separator character is the separation character for local publications/endpoints in creating their global name.<br>
   *          For example if the separator character is '/' then a local endpoint would have a globally reachable name of fedName/localName.<br>
   * <br>
   * @param fed The federate info object to alter.<br>
   * @param separator The character to use as a separator.
   */
  public static void helicsFederateSetSeparator(SWIGTYPE_p_void fed, char separator) {
    helicsJNI.helicsFederateSetSeparator(SWIGTYPE_p_void.getCPtr(fed), separator);
  }

  /**
   * Set an integer based property of a federate.<br>
   * <br>
   * @param fed The federate to change the property for.<br>
   * @param intProperty The property to set.<br>
   * @param propertyVal The value of the property.
   */
  public static void helicsFederateSetIntegerProperty(SWIGTYPE_p_void fed, int intProperty, int propertyVal) {
    helicsJNI.helicsFederateSetIntegerProperty(SWIGTYPE_p_void.getCPtr(fed), intProperty, propertyVal);
  }

  /**
   * Get the current value of a time based property in a federate.<br>
   * <br>
   * @param fed The federate query.<br>
   * @param timeProperty The property to query.
   */
  public static double helicsFederateGetTimeProperty(SWIGTYPE_p_void fed, int timeProperty) {
    return helicsJNI.helicsFederateGetTimeProperty(SWIGTYPE_p_void.getCPtr(fed), timeProperty);
  }

  /**
   * Get a flag value for a federate.<br>
   * <br>
   * @param fed The federate to get the flag for.<br>
   * @param flag The flag to query.<br>
   * <br>
   * <br>
   * @return The value of the flag.
   */
  public static int helicsFederateGetFlagOption(SWIGTYPE_p_void fed, int flag) {
    return helicsJNI.helicsFederateGetFlagOption(SWIGTYPE_p_void.getCPtr(fed), flag);
  }

  /**
   * Get the current value of an integer property (such as a logging level).<br>
   * <br>
   * @param fed The federate to get the flag for.<br>
   * @param intProperty A code for the property to set /ref helics_handle_options.<br>
   * <br>
   * <br>
   * @return The value of the property.
   */
  public static int helicsFederateGetIntegerProperty(SWIGTYPE_p_void fed, int intProperty) {
    return helicsJNI.helicsFederateGetIntegerProperty(SWIGTYPE_p_void.getCPtr(fed), intProperty);
  }

  /**
   * Get the current time of the federate.<br>
   * <br>
   * @param fed The federate object to query.<br>
   * <br>
   * <br>
   * @return The current time of the federate.
   */
  public static double helicsFederateGetCurrentTime(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateGetCurrentTime(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Set a federation global value through a federate.<br>
   * <br>
   * This overwrites any previous value for this name.<br>
   * @param fed The federate to set the global through.<br>
   * @param valueName The name of the global to set.<br>
   * @param value The value of the global.
   */
  public static void helicsFederateSetGlobal(SWIGTYPE_p_void fed, String valueName, String value) {
    helicsJNI.helicsFederateSetGlobal(SWIGTYPE_p_void.getCPtr(fed), valueName, value);
  }

  /**
   * Add a time dependency for a federate. The federate will depend on the given named federate for time synchronization.<br>
   * <br>
   * @param fed The federate to add the dependency for.<br>
   * @param fedName The name of the federate to depend on.
   */
  public static void helicsFederateAddDependency(SWIGTYPE_p_void fed, String fedName) {
    helicsJNI.helicsFederateAddDependency(SWIGTYPE_p_void.getCPtr(fed), fedName);
  }

  /**
   * Set the logging file for a federate (actually on the core associated with a federate).<br>
   * <br>
   * @param fed The federate to set the log file for.<br>
   * @param logFile The name of the log file.
   */
  public static void helicsFederateSetLogFile(SWIGTYPE_p_void fed, String logFile) {
    helicsJNI.helicsFederateSetLogFile(SWIGTYPE_p_void.getCPtr(fed), logFile);
  }

  /**
   * Log an error message through a federate.<br>
   * <br>
   * @param fed The federate to log the error message through.<br>
   * @param logmessage The message to put in the log.
   */
  public static void helicsFederateLogErrorMessage(SWIGTYPE_p_void fed, String logmessage) {
    helicsJNI.helicsFederateLogErrorMessage(SWIGTYPE_p_void.getCPtr(fed), logmessage);
  }

  /**
   * Log a warning message through a federate.<br>
   * <br>
   * @param fed The federate to log the warning message through.<br>
   * @param logmessage The message to put in the log.
   */
  public static void helicsFederateLogWarningMessage(SWIGTYPE_p_void fed, String logmessage) {
    helicsJNI.helicsFederateLogWarningMessage(SWIGTYPE_p_void.getCPtr(fed), logmessage);
  }

  /**
   * Log an info message through a federate.<br>
   * <br>
   * @param fed The federate to log the info message through.<br>
   * @param logmessage The message to put in the log.
   */
  public static void helicsFederateLogInfoMessage(SWIGTYPE_p_void fed, String logmessage) {
    helicsJNI.helicsFederateLogInfoMessage(SWIGTYPE_p_void.getCPtr(fed), logmessage);
  }

  /**
   * Log a debug message through a federate.<br>
   * <br>
   * @param fed The federate to log the debug message through.<br>
   * @param logmessage The message to put in the log.
   */
  public static void helicsFederateLogDebugMessage(SWIGTYPE_p_void fed, String logmessage) {
    helicsJNI.helicsFederateLogDebugMessage(SWIGTYPE_p_void.getCPtr(fed), logmessage);
  }

  /**
   * Log a message through a federate.<br>
   * <br>
   * @param fed The federate to log the message through.<br>
   * @param loglevel The level of the message to log see /ref helics_log_levels.<br>
   * @param logmessage The message to put in the log.
   */
  public static void helicsFederateLogLevelMessage(SWIGTYPE_p_void fed, int loglevel, String logmessage) {
    helicsJNI.helicsFederateLogLevelMessage(SWIGTYPE_p_void.getCPtr(fed), loglevel, logmessage);
  }

  /**
   * Set a global value in a core.<br>
   * <br>
   * This overwrites any previous value for this name.<br>
   * <br>
   * @param core The core to set the global through.<br>
   * @param valueName The name of the global to set.<br>
   * @param value The value of the global.
   */
  public static void helicsCoreSetGlobal(SWIGTYPE_p_void core, String valueName, String value) {
    helicsJNI.helicsCoreSetGlobal(SWIGTYPE_p_void.getCPtr(core), valueName, value);
  }

  /**
   * Set a federation global value.<br>
   * <br>
   * This overwrites any previous value for this name.<br>
   * <br>
   * @param broker The broker to set the global through.<br>
   * @param valueName The name of the global to set.<br>
   * @param value The value of the global.
   */
  public static void helicsBrokerSetGlobal(SWIGTYPE_p_void broker, String valueName, String value) {
    helicsJNI.helicsBrokerSetGlobal(SWIGTYPE_p_void.getCPtr(broker), valueName, value);
  }

  /**
   * Set the log file on a core.<br>
   * <br>
   * @param core The core to set the log file for.<br>
   * @param logFileName The name of the file to log to.
   */
  public static void helicsCoreSetLogFile(SWIGTYPE_p_void core, String logFileName) {
    helicsJNI.helicsCoreSetLogFile(SWIGTYPE_p_void.getCPtr(core), logFileName);
  }

  /**
   * Set the log file on a broker.<br>
   * <br>
   * @param broker The broker to set the log file for.<br>
   * @param logFileName The name of the file to log to.
   */
  public static void helicsBrokerSetLogFile(SWIGTYPE_p_void broker, String logFileName) {
    helicsJNI.helicsBrokerSetLogFile(SWIGTYPE_p_void.getCPtr(broker), logFileName);
  }

  /**
   * Create a query object.<br>
   * <br>
   * A query object consists of a target and query string.<br>
   * <br>
   * @param target The name of the target to query.<br>
   * @param query The query to make of the target.
   */
  public static SWIGTYPE_p_void helicsCreateQuery(String target, String query) {
    long cPtr = helicsJNI.helicsCreateQuery(target, query);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Execute a query.<br>
   * <br>
   * The call will block until the query finishes which may require communication or other delays.<br>
   * <br>
   * @param query The query object to use in the query.<br>
   * @param fed A federate to send the query through.<br>
   * <br>
   * <br>
   * @return A pointer to a string.  The string will remain valid until the query is freed or executed again.
   */
  public static String helicsQueryExecute(SWIGTYPE_p_void query, SWIGTYPE_p_void fed) {
    return helicsJNI.helicsQueryExecute(SWIGTYPE_p_void.getCPtr(query), SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Execute a query directly on a core.<br>
   * <br>
   * The call will block until the query finishes which may require communication or other delays.<br>
   * <br>
   * @param query The query object to use in the query.<br>
   * @param core The core to send the query to.<br>
   * <br>
   * <br>
   * @return A pointer to a string.  The string will remain valid until the query is freed or executed again.
   */
  public static String helicsQueryCoreExecute(SWIGTYPE_p_void query, SWIGTYPE_p_void core) {
    return helicsJNI.helicsQueryCoreExecute(SWIGTYPE_p_void.getCPtr(query), SWIGTYPE_p_void.getCPtr(core));
  }

  /**
   * Execute a query directly on a broker.<br>
   * <br>
   * The call will block until the query finishes which may require communication or other delays.<br>
   * <br>
   * @param query The query object to use in the query.<br>
   * @param broker The broker to send the query to.<br>
   * <br>
   * <br>
   * @return A pointer to a string.  The string will remain valid until the query is freed or executed again.
   */
  public static String helicsQueryBrokerExecute(SWIGTYPE_p_void query, SWIGTYPE_p_void broker) {
    return helicsJNI.helicsQueryBrokerExecute(SWIGTYPE_p_void.getCPtr(query), SWIGTYPE_p_void.getCPtr(broker));
  }

  /**
   * Execute a query in a non-blocking call.<br>
   * <br>
   * @param query The query object to use in the query.<br>
   * @param fed A federate to send the query through.
   */
  public static void helicsQueryExecuteAsync(SWIGTYPE_p_void query, SWIGTYPE_p_void fed) {
    helicsJNI.helicsQueryExecuteAsync(SWIGTYPE_p_void.getCPtr(query), SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Complete the return from a query called with /ref helicsExecuteQueryAsync.<br>
   * <br>
   * The function will block until the query completes /ref isQueryComplete can be called to determine if a query has completed or<br>
   * not.<br>
   * <br>
   * @param query The query object to complete execution of.<br>
   * <br>
   * <br>
   * @return A pointer to a string. The string will remain valid until the query is freed or executed again.
   */
  public static String helicsQueryExecuteComplete(SWIGTYPE_p_void query) {
    return helicsJNI.helicsQueryExecuteComplete(SWIGTYPE_p_void.getCPtr(query));
  }

  /**
   * Check if an asynchronously executed query has completed.<br>
   * <br>
   * This function should usually be called after a QueryExecuteAsync function has been called.<br>
   * <br>
   * @param query The query object to check if completed.<br>
   * <br>
   * @return Will return helics_true if an asynchronous query has completed or a regular query call was made with a result,<br>
   *         and false if an asynchronous query has not completed or is invalid
   */
  public static int helicsQueryIsCompleted(SWIGTYPE_p_void query) {
    return helicsJNI.helicsQueryIsCompleted(SWIGTYPE_p_void.getCPtr(query));
  }

  /**
   * Update the target of a query.<br>
   * <br>
   * @param query The query object to change the target of.<br>
   * @param target the name of the target to query
   */
  public static void helicsQuerySetTarget(SWIGTYPE_p_void query, String target) {
    helicsJNI.helicsQuerySetTarget(SWIGTYPE_p_void.getCPtr(query), target);
  }

  /**
   * Update the queryString of a query.<br>
   * <br>
   * @param query The query object to change the target of.<br>
   * @param queryString the new queryString
   */
  public static void helicsQuerySetQueryString(SWIGTYPE_p_void query, String queryString) {
    helicsJNI.helicsQuerySetQueryString(SWIGTYPE_p_void.getCPtr(query), queryString);
  }

  /**
   * Free the memory associated with a query object.
   */
  public static void helicsQueryFree(SWIGTYPE_p_void query) {
    helicsJNI.helicsQueryFree(SWIGTYPE_p_void.getCPtr(query));
  }

  /**
   * Function to do some housekeeping work.<br>
   * <br>
   * This runs some cleanup routines and tries to close out any residual thread that haven't been shutdown yet.
   */
  public static void helicsCleanupLibrary() {
    helicsJNI.helicsCleanupLibrary();
  }

  /**
   * sub/pub registration<br>
   * <br>
   * Create a subscription.<br>
   * <br>
   * The subscription becomes part of the federate and is destroyed when the federate is freed so there are no separate free<br>
   * functions for subscriptions and publications.<br>
   * <br>
   * @param fed The federate object in which to create a subscription, must have been created with /ref helicsCreateValueFederate or<br>
   * /ref helicsCreateCombinationFederate.<br>
   * @param key The identifier matching a publication to get a subscription for.<br>
   * @param units A string listing the units of the subscription (may be NULL).<br>
   * <br>
   * <br>
   * @return An object containing the subscription.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterSubscription(SWIGTYPE_p_void fed, String key, String units) {
    long cPtr = helicsJNI.helicsFederateRegisterSubscription(SWIGTYPE_p_void.getCPtr(fed), key, units);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Register a publication with a known type.<br>
   * <br>
   * The publication becomes part of the federate and is destroyed when the federate is freed so there are no separate free<br>
   * functions for subscriptions and publications.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param key The identifier for the publication the global publication key will be prepended with the federate name.<br>
   * @param type A code identifying the type of the input see /ref helics_data_type for available options.<br>
   * @param units A string listing the units of the subscription (may be NULL).<br>
   * <br>
   * <br>
   * @return An object containing the publication.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterPublication(SWIGTYPE_p_void fed, String key, helics_data_type type, String units) {
    long cPtr = helicsJNI.helicsFederateRegisterPublication(SWIGTYPE_p_void.getCPtr(fed), key, type.swigValue(), units);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Register a publication with a defined type.<br>
   * <br>
   * The publication becomes part of the federate and is destroyed when the federate is freed so there are no separate free<br>
   * functions for subscriptions and publications.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param key The identifier for the publication.<br>
   * @param type A string labeling the type of the publication.<br>
   * @param units A string listing the units of the subscription (may be NULL).<br>
   * <br>
   * <br>
   * @return An object containing the publication.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterTypePublication(SWIGTYPE_p_void fed, String key, String type, String units) {
    long cPtr = helicsJNI.helicsFederateRegisterTypePublication(SWIGTYPE_p_void.getCPtr(fed), key, type, units);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Register a global named publication with an arbitrary type.<br>
   * <br>
   * The publication becomes part of the federate and is destroyed when the federate is freed so there are no separate free<br>
   * functions for subscriptions and publications.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param key The identifier for the publication.<br>
   * @param type A code identifying the type of the input see /ref helics_data_type for available options.<br>
   * @param units A string listing the units of the subscription (may be NULL).<br>
   * <br>
   * <br>
   * @return An object containing the publication.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterGlobalPublication(SWIGTYPE_p_void fed, String key, helics_data_type type, String units) {
    long cPtr = helicsJNI.helicsFederateRegisterGlobalPublication(SWIGTYPE_p_void.getCPtr(fed), key, type.swigValue(), units);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Register a global publication with a defined type.<br>
   * <br>
   * The publication becomes part of the federate and is destroyed when the federate is freed so there are no separate free<br>
   * functions for subscriptions and publications.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param key The identifier for the publication.<br>
   * @param type A string describing the expected type of the publication.<br>
   * @param units A string listing the units of the subscription (may be NULL).<br>
   * <br>
   * <br>
   * @return An object containing the publication.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterGlobalTypePublication(SWIGTYPE_p_void fed, String key, String type, String units) {
    long cPtr = helicsJNI.helicsFederateRegisterGlobalTypePublication(SWIGTYPE_p_void.getCPtr(fed), key, type, units);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Register a named input.<br>
   * <br>
   * The input becomes part of the federate and is destroyed when the federate is freed so there are no separate free<br>
   * functions for subscriptions, inputs, and publications.<br>
   * <br>
   * @param fed The federate object in which to create an input.<br>
   * @param key The identifier for the publication the global input key will be prepended with the federate name.<br>
   * @param type A code identifying the type of the input see /ref helics_data_type for available options.<br>
   * @param units A string listing the units of the input (may be NULL).<br>
   * <br>
   * <br>
   * @return An object containing the input.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterInput(SWIGTYPE_p_void fed, String key, helics_data_type type, String units) {
    long cPtr = helicsJNI.helicsFederateRegisterInput(SWIGTYPE_p_void.getCPtr(fed), key, type.swigValue(), units);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Register an input with a defined type.<br>
   * <br>
   * The input becomes part of the federate and is destroyed when the federate is freed so there are no separate free<br>
   * functions for subscriptions, inputs, and publications.<br>
   * <br>
   * @param fed The federate object in which to create an input.<br>
   * @param key The identifier for the input.<br>
   * @param type A string describing the expected type of the input.<br>
   * @param units A string listing the units of the input maybe NULL.<br>
   * <br>
   * <br>
   * @return An object containing the publication.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterTypeInput(SWIGTYPE_p_void fed, String key, String type, String units) {
    long cPtr = helicsJNI.helicsFederateRegisterTypeInput(SWIGTYPE_p_void.getCPtr(fed), key, type, units);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Register a global named input.<br>
   * <br>
   * The publication becomes part of the federate and is destroyed when the federate is freed so there are no separate free<br>
   * functions for subscriptions and publications.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param key The identifier for the publication.<br>
   * @param type A code identifying the type of the input see /ref helics_data_type for available options.<br>
   * @param units A string listing the units of the subscription maybe NULL.<br>
   * <br>
   * <br>
   * @return An object containing the publication.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterGlobalInput(SWIGTYPE_p_void fed, String key, helics_data_type type, String units) {
    long cPtr = helicsJNI.helicsFederateRegisterGlobalInput(SWIGTYPE_p_void.getCPtr(fed), key, type.swigValue(), units);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Register a global publication with an arbitrary type.<br>
   * <br>
   * The publication becomes part of the federate and is destroyed when the federate is freed so there are no separate free<br>
   * functions for subscriptions and publications.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param key The identifier for the publication.<br>
   * @param type A string defining the type of the input.<br>
   * @param units A string listing the units of the subscription maybe NULL.<br>
   * <br>
   * <br>
   * @return An object containing the publication.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterGlobalTypeInput(SWIGTYPE_p_void fed, String key, String type, String units) {
    long cPtr = helicsJNI.helicsFederateRegisterGlobalTypeInput(SWIGTYPE_p_void.getCPtr(fed), key, type, units);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Get a publication object from a key.<br>
   * <br>
   * @param fed The value federate object to use to get the publication.<br>
   * @param key The name of the publication.<br>
   * <br>
   * <br>
   * @return A helics_publication object, the object will not be valid and err will contain an error code if no publication with the<br>
   * specified key exists.
   */
  public static SWIGTYPE_p_void helicsFederateGetPublication(SWIGTYPE_p_void fed, String key) {
    long cPtr = helicsJNI.helicsFederateGetPublication(SWIGTYPE_p_void.getCPtr(fed), key);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Get a publication by its index, typically already created via registerInterfaces file or something of that nature.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param index The index of the publication to get.<br>
   * <br>
   * <br>
   * @return A helics_publication.
   */
  public static SWIGTYPE_p_void helicsFederateGetPublicationByIndex(SWIGTYPE_p_void fed, int index) {
    long cPtr = helicsJNI.helicsFederateGetPublicationByIndex(SWIGTYPE_p_void.getCPtr(fed), index);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Get an input object from a key.<br>
   * <br>
   * @param fed The value federate object to use to get the publication.<br>
   * @param key The name of the input.<br>
   * <br>
   * <br>
   * @return A helics_input object, the object will not be valid and err will contain an error code if no input with the specified<br>
   * key exists.
   */
  public static SWIGTYPE_p_void helicsFederateGetInput(SWIGTYPE_p_void fed, String key) {
    long cPtr = helicsJNI.helicsFederateGetInput(SWIGTYPE_p_void.getCPtr(fed), key);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Get an input by its index, typically already created via registerInterfaces file or something of that nature.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param index The index of the publication to get.<br>
   * <br>
   * <br>
   * @return A helics_input, which will be NULL if an invalid index.
   */
  public static SWIGTYPE_p_void helicsFederateGetInputByIndex(SWIGTYPE_p_void fed, int index) {
    long cPtr = helicsJNI.helicsFederateGetInputByIndex(SWIGTYPE_p_void.getCPtr(fed), index);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Get an input object from a subscription target.<br>
   * <br>
   * @param fed The value federate object to use to get the publication.<br>
   * @param key The name of the publication that a subscription is targeting.<br>
   * <br>
   * <br>
   * @return A helics_input object, the object will not be valid and err will contain an error code if no input with the specified<br>
   * key exists.
   */
  public static SWIGTYPE_p_void helicsFederateGetSubscription(SWIGTYPE_p_void fed, String key) {
    long cPtr = helicsJNI.helicsFederateGetSubscription(SWIGTYPE_p_void.getCPtr(fed), key);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Clear all the update flags from a federates inputs.<br>
   * <br>
   * @param fed The value federate object for which to clear update flags.
   */
  public static void helicsFederateClearUpdates(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateClearUpdates(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Register the publications via JSON publication string.<br>
   * <br>
   * @param fed The value federate object to use to register the publications.<br>
   * @param json The JSON publication string.<br>
   * <br>
   * <br>
   * This would be the same JSON that would be used to publish data.
   */
  public static void helicsFederateRegisterFromPublicationJSON(SWIGTYPE_p_void fed, String json) {
    helicsJNI.helicsFederateRegisterFromPublicationJSON(SWIGTYPE_p_void.getCPtr(fed), json);
  }

  /**
   * Publish data contained in a JSON file or string.<br>
   * <br>
   * @param fed The value federate object through which to publish the data.<br>
   * @param json The publication file name or literal JSON data string.
   */
  public static void helicsFederatePublishJSON(SWIGTYPE_p_void fed, String json) {
    helicsJNI.helicsFederatePublishJSON(SWIGTYPE_p_void.getCPtr(fed), json);
  }

  /**
   * Check if a publication is valid.<br>
   * <br>
   * @param pub The publication to check.<br>
   * <br>
   * @return helics_true if the publication is a valid publication.
   */
  public static int helicsPublicationIsValid(SWIGTYPE_p_void pub) {
    return helicsJNI.helicsPublicationIsValid(SWIGTYPE_p_void.getCPtr(pub));
  }

  /**
   * Publish raw data from a char * and length.<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param data A pointer to the raw data.<br>
   * @param inputDataLength The size in bytes of the data to publish.
   */
  public static void helicsPublicationPublishRaw(SWIGTYPE_p_void pub, SWIGTYPE_p_void data, int inputDataLength) {
    helicsJNI.helicsPublicationPublishRaw(SWIGTYPE_p_void.getCPtr(pub), SWIGTYPE_p_void.getCPtr(data), inputDataLength);
  }

  /**
   * Publish a string.<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param str The string to publish.
   */
  public static void helicsPublicationPublishString(SWIGTYPE_p_void pub, String str) {
    helicsJNI.helicsPublicationPublishString(SWIGTYPE_p_void.getCPtr(pub), str);
  }

  /**
   * Publish an integer value.<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param val The numerical value to publish.
   */
  public static void helicsPublicationPublishInteger(SWIGTYPE_p_void pub, long val) {
    helicsJNI.helicsPublicationPublishInteger(SWIGTYPE_p_void.getCPtr(pub), val);
  }

  /**
   * Publish a Boolean Value.<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param val The boolean value to publish.
   */
  public static void helicsPublicationPublishBoolean(SWIGTYPE_p_void pub, int val) {
    helicsJNI.helicsPublicationPublishBoolean(SWIGTYPE_p_void.getCPtr(pub), val);
  }

  /**
   * Publish a double floating point value.<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param val The numerical value to publish.
   */
  public static void helicsPublicationPublishDouble(SWIGTYPE_p_void pub, double val) {
    helicsJNI.helicsPublicationPublishDouble(SWIGTYPE_p_void.getCPtr(pub), val);
  }

  /**
   * Publish a time value.<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param val The numerical value to publish.
   */
  public static void helicsPublicationPublishTime(SWIGTYPE_p_void pub, double val) {
    helicsJNI.helicsPublicationPublishTime(SWIGTYPE_p_void.getCPtr(pub), val);
  }

  /**
   * Publish a single character.<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param val The numerical value to publish.
   */
  public static void helicsPublicationPublishChar(SWIGTYPE_p_void pub, char val) {
    helicsJNI.helicsPublicationPublishChar(SWIGTYPE_p_void.getCPtr(pub), val);
  }

  /**
   * Publish a complex value (or pair of values).<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param real The real part of a complex number to publish.<br>
   * @param imag The imaginary part of a complex number to publish.
   */
  public static void helicsPublicationPublishComplex(SWIGTYPE_p_void pub, double real, double imag) {
    helicsJNI.helicsPublicationPublishComplex(SWIGTYPE_p_void.getCPtr(pub), real, imag);
  }

  /**
   * Publish a vector of doubles.<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param vectorInput A pointer to an array of double data.
   */
  public static void helicsPublicationPublishVector(SWIGTYPE_p_void pub, double[] vectorInput, int vectorLength) {
    helicsJNI.helicsPublicationPublishVector(SWIGTYPE_p_void.getCPtr(pub), vectorInput, vectorLength);
  }

  /**
   * Publish a named point.<br>
   * <br>
   * @param pub The publication to publish for.<br>
   * @param str A string for the name to publish.<br>
   * @param val A double for the value to publish.
   */
  public static void helicsPublicationPublishNamedPoint(SWIGTYPE_p_void pub, String str, double val) {
    helicsJNI.helicsPublicationPublishNamedPoint(SWIGTYPE_p_void.getCPtr(pub), str, val);
  }

  /**
   * Add a named input to the list of targets a publication publishes to.<br>
   * <br>
   * @param pub The publication to add the target for.<br>
   * @param target The name of an input that the data should be sent to.
   */
  public static void helicsPublicationAddTarget(SWIGTYPE_p_void pub, String target) {
    helicsJNI.helicsPublicationAddTarget(SWIGTYPE_p_void.getCPtr(pub), target);
  }

  /**
   * Check if an input is valid.<br>
   * <br>
   * @param ipt The input to check.<br>
   * <br>
   * @return helics_true if the Input object represents a valid input.
   */
  public static int helicsInputIsValid(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputIsValid(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Add a publication to the list of data that an input subscribes to.<br>
   * <br>
   * @param ipt The named input to modify.<br>
   * @param target The name of a publication that an input should subscribe to.
   */
  public static void helicsInputAddTarget(SWIGTYPE_p_void ipt, String target) {
    helicsJNI.helicsInputAddTarget(SWIGTYPE_p_void.getCPtr(ipt), target);
  }

  /**
   * <br>
   * Get the size of the raw value for subscription.<br>
   * <br>
   * @return The size of the raw data/string in bytes.
   */
  public static int helicsInputGetRawValueSize(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetRawValueSize(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the raw data for the latest value of a subscription.<br>
   * <br>
   * @param ipt The input to get the data for.<br>
   * <br>
   * <br>
   * <br>
   * @return Raw string data.
   */
  public static void helicsInputGetRawValue(SWIGTYPE_p_void ipt, SWIGTYPE_p_void data, int maxDatalen, int[] actualSize) {
    helicsJNI.helicsInputGetRawValue(SWIGTYPE_p_void.getCPtr(ipt), SWIGTYPE_p_void.getCPtr(data), maxDatalen, actualSize);
  }

  /**
   * Get the size of a value for subscription assuming return as a string.<br>
   * <br>
   * @return The size of the string.
   */
  public static int helicsInputGetStringSize(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetStringSize(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get a string value from a subscription.<br>
   * <br>
   * @param ipt The input to get the data for.<br>
   * <br>
   * <br>
   * <br>
   * @return A string data
   */
  public static void helicsInputGetString(SWIGTYPE_p_void ipt, byte[] outputString, int[] actualLength) {
    helicsJNI.helicsInputGetString(SWIGTYPE_p_void.getCPtr(ipt), outputString, actualLength);
  }

  /**
   * Get an integer value from a subscription.<br>
   * <br>
   * @param ipt The input to get the data for.<br>
   * <br>
   * <br>
   * @return An int64_t value with the current value of the input.
   */
  public static long helicsInputGetInteger(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetInteger(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get a boolean value from a subscription.<br>
   * <br>
   * @param ipt The input to get the data for.<br>
   * <br>
   * <br>
   * @return A boolean value of current input value.
   */
  public static int helicsInputGetBoolean(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetBoolean(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get a double value from a subscription.<br>
   * <br>
   * @param ipt The input to get the data for.<br>
   * <br>
   * <br>
   * @return The double value of the input.
   */
  public static double helicsInputGetDouble(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetDouble(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get a time value from a subscription.<br>
   * <br>
   * @param ipt The input to get the data for.<br>
   * <br>
   * <br>
   * @return The resulting time value.
   */
  public static double helicsInputGetTime(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetTime(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get a single character value from an input.<br>
   * <br>
   * @param ipt The input to get the data for.<br>
   * <br>
   * <br>
   * @return The resulting character value.
   */
  public static char helicsInputGetChar(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetChar(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get a complex object from an input object.<br>
   * <br>
   * @param ipt The input to get the data for.<br>
   * <br>
   * <br>
   * @return A helics_complex structure with the value.
   */
  public static helics_complex helicsInputGetComplexObject(SWIGTYPE_p_void ipt) {
    return new helics_complex(helicsJNI.helicsInputGetComplexObject(SWIGTYPE_p_void.getCPtr(ipt)), true);
  }

  /**
   * Get a pair of double forming a complex number from a subscriptions.<br>
   * <br>
   * @param ipt The input to get the data for.<br>
   * <br>
   * <br>
   * <br>
   * @return a pair of floating point values that represent the real and imag values
   */
  public static void helicsInputGetComplex(SWIGTYPE_p_void ipt, double[] real, double[] imag) {
    helicsJNI.helicsInputGetComplex(SWIGTYPE_p_void.getCPtr(ipt), real, imag);
  }

  /**
   * Get the size of a value for subscription assuming return as an array of doubles.<br>
   * <br>
   * @return The number of doubles in a returned vector.
   */
  public static int helicsInputGetVectorSize(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetVectorSize(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get a vector from a subscription.<br>
   * <br>
   * @param ipt The input to get the result for.<br>
   * <br>
   * <br>
   * <br>
   * @return a list of floating point values
   */
  public static void helicsInputGetVector(SWIGTYPE_p_void ipt, SWIGTYPE_p_double data, int maxlen, int[] actualSize) {
    helicsJNI.helicsInputGetVector(SWIGTYPE_p_void.getCPtr(ipt), SWIGTYPE_p_double.getCPtr(data), maxlen, actualSize);
  }

  /**
   * Get a named point from a subscription.<br>
   * <br>
   * @param ipt The input to get the result for.<br>
   * <br>
   * <br>
   * <br>
   * @return a string and a double value for the named point
   */
  public static void helicsInputGetNamedPoint(SWIGTYPE_p_void ipt, byte[] outputString, int[] actualLength, double[] val) {
    helicsJNI.helicsInputGetNamedPoint(SWIGTYPE_p_void.getCPtr(ipt), outputString, actualLength, val);
  }

  /**
   * <br>
   * Set the default as a raw data array.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param data A pointer to the raw data to use for the default.
   */
  public static void helicsInputSetDefaultRaw(SWIGTYPE_p_void ipt, SWIGTYPE_p_void data, int inputDataLength) {
    helicsJNI.helicsInputSetDefaultRaw(SWIGTYPE_p_void.getCPtr(ipt), SWIGTYPE_p_void.getCPtr(data), inputDataLength);
  }

  /**
   * Set the default as a string.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param str A pointer to the default string.
   */
  public static void helicsInputSetDefaultString(SWIGTYPE_p_void ipt, String str) {
    helicsJNI.helicsInputSetDefaultString(SWIGTYPE_p_void.getCPtr(ipt), str);
  }

  /**
   * Set the default as an integer.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param val The default integer.
   */
  public static void helicsInputSetDefaultInteger(SWIGTYPE_p_void ipt, long val) {
    helicsJNI.helicsInputSetDefaultInteger(SWIGTYPE_p_void.getCPtr(ipt), val);
  }

  /**
   * Set the default as a boolean.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param val The default boolean value.
   */
  public static void helicsInputSetDefaultBoolean(SWIGTYPE_p_void ipt, int val) {
    helicsJNI.helicsInputSetDefaultBoolean(SWIGTYPE_p_void.getCPtr(ipt), val);
  }

  /**
   * Set the default as a time.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param val The default time value.
   */
  public static void helicsInputSetDefaultTime(SWIGTYPE_p_void ipt, double val) {
    helicsJNI.helicsInputSetDefaultTime(SWIGTYPE_p_void.getCPtr(ipt), val);
  }

  /**
   * Set the default as a char.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param val The default char value.
   */
  public static void helicsInputSetDefaultChar(SWIGTYPE_p_void ipt, char val) {
    helicsJNI.helicsInputSetDefaultChar(SWIGTYPE_p_void.getCPtr(ipt), val);
  }

  /**
   * Set the default as a double.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param val The default double value.
   */
  public static void helicsInputSetDefaultDouble(SWIGTYPE_p_void ipt, double val) {
    helicsJNI.helicsInputSetDefaultDouble(SWIGTYPE_p_void.getCPtr(ipt), val);
  }

  /**
   * Set the default as a complex number.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param real The default real value.<br>
   * @param imag The default imaginary value.
   */
  public static void helicsInputSetDefaultComplex(SWIGTYPE_p_void ipt, double real, double imag) {
    helicsJNI.helicsInputSetDefaultComplex(SWIGTYPE_p_void.getCPtr(ipt), real, imag);
  }

  /**
   * Set the default as a vector of doubles.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param vectorInput A pointer to an array of double data.<br>
   * @param vectorLength The number of points to publish.
   */
  public static void helicsInputSetDefaultVector(SWIGTYPE_p_void ipt, double[] vectorInput, int vectorLength) {
    helicsJNI.helicsInputSetDefaultVector(SWIGTYPE_p_void.getCPtr(ipt), vectorInput, vectorLength);
  }

  /**
   * Set the default as a NamedPoint.<br>
   * <br>
   * @param ipt The input to set the default for.<br>
   * @param str A pointer to a string representing the name.<br>
   * @param val A double value for the value of the named point.
   */
  public static void helicsInputSetDefaultNamedPoint(SWIGTYPE_p_void ipt, String str, double val) {
    helicsJNI.helicsInputSetDefaultNamedPoint(SWIGTYPE_p_void.getCPtr(ipt), str, val);
  }

  /**
   * <br>
   * Get the type of an input.<br>
   * <br>
   * @param ipt The input to query.<br>
   * <br>
   * @return A void enumeration, helics_ok if everything worked.
   */
  public static String helicsInputGetType(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetType(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the type the publisher to an input is sending.<br>
   * <br>
   * @param ipt The input to query.<br>
   * <br>
   * @return A const char * with the type name.
   */
  public static String helicsInputGetPublicationType(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetPublicationType(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the type of a publication.<br>
   * <br>
   * @param pub The publication to query.<br>
   * <br>
   * @return A void enumeration, helics_ok if everything worked.
   */
  public static String helicsPublicationGetType(SWIGTYPE_p_void pub) {
    return helicsJNI.helicsPublicationGetType(SWIGTYPE_p_void.getCPtr(pub));
  }

  /**
   * Get the key of an input.<br>
   * <br>
   * @param ipt The input to query.<br>
   * <br>
   * @return A void enumeration, helics_ok if everything worked.
   */
  public static String helicsInputGetKey(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetKey(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the key of a subscription.<br>
   * <br>
   * @return A const char with the subscription key.
   */
  public static String helicsSubscriptionGetKey(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsSubscriptionGetKey(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the key of a publication.<br>
   * <br>
   * This will be the global key used to identify the publication to the federation.<br>
   * <br>
   * @param pub The publication to query.<br>
   * <br>
   * @return A void enumeration, helics_ok if everything worked.
   */
  public static String helicsPublicationGetKey(SWIGTYPE_p_void pub) {
    return helicsJNI.helicsPublicationGetKey(SWIGTYPE_p_void.getCPtr(pub));
  }

  /**
   * Get the units of an input.<br>
   * <br>
   * @param ipt The input to query.<br>
   * <br>
   * @return A void enumeration, helics_ok if everything worked.
   */
  public static String helicsInputGetUnits(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetUnits(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the units of the publication that an input is linked to.<br>
   * <br>
   * @param ipt The input to query.<br>
   * <br>
   * @return A void enumeration, helics_ok if everything worked.
   */
  public static String helicsInputGetInjectionUnits(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetInjectionUnits(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the units of an input.<br>
   * <br>
   * The same as helicsInputGetUnits.<br>
   * <br>
   * @param ipt The input to query.<br>
   * <br>
   * @return A void enumeration, helics_ok if everything worked.
   */
  public static String helicsInputGetExtractionUnits(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputGetExtractionUnits(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the units of a publication.<br>
   * <br>
   * @param pub The publication to query.<br>
   * <br>
   * @return A void enumeration, helics_ok if everything worked.
   */
  public static String helicsPublicationGetUnits(SWIGTYPE_p_void pub) {
    return helicsJNI.helicsPublicationGetUnits(SWIGTYPE_p_void.getCPtr(pub));
  }

  /**
   * Get the data in the info field of an input.<br>
   * <br>
   * @param inp The input to query.<br>
   * <br>
   * @return A string with the info field string.
   */
  public static String helicsInputGetInfo(SWIGTYPE_p_void inp) {
    return helicsJNI.helicsInputGetInfo(SWIGTYPE_p_void.getCPtr(inp));
  }

  /**
   * Set the data in the info field for an input.<br>
   * <br>
   * @param inp The input to query.<br>
   * @param info The string to set.
   */
  public static void helicsInputSetInfo(SWIGTYPE_p_void inp, String info) {
    helicsJNI.helicsInputSetInfo(SWIGTYPE_p_void.getCPtr(inp), info);
  }

  /**
   * Get the data in the info field of an publication.<br>
   * <br>
   * @param pub The publication to query.<br>
   * <br>
   * @return A string with the info field string.
   */
  public static String helicsPublicationGetInfo(SWIGTYPE_p_void pub) {
    return helicsJNI.helicsPublicationGetInfo(SWIGTYPE_p_void.getCPtr(pub));
  }

  /**
   * Set the data in the info field for a publication.<br>
   * <br>
   * @param pub The publication to set the info field for.<br>
   * @param info The string to set.
   */
  public static void helicsPublicationSetInfo(SWIGTYPE_p_void pub, String info) {
    helicsJNI.helicsPublicationSetInfo(SWIGTYPE_p_void.getCPtr(pub), info);
  }

  /**
   * Get the current value of an input handle option<br>
   * <br>
   * @param inp The input to query.<br>
   * @param option Integer representation of the option in question see /ref helics_handle_options.<br>
   * <br>
   * @return An integer value with the current value of the given option.
   */
  public static int helicsInputGetOption(SWIGTYPE_p_void inp, int option) {
    return helicsJNI.helicsInputGetOption(SWIGTYPE_p_void.getCPtr(inp), option);
  }

  /**
   * Set an option on an input<br>
   * <br>
   * @param inp The input to query.<br>
   * @param option The option to set for the input /ref helics_handle_options.<br>
   * @param value The value to set the option to.
   */
  public static void helicsInputSetOption(SWIGTYPE_p_void inp, int option, int value) {
    helicsJNI.helicsInputSetOption(SWIGTYPE_p_void.getCPtr(inp), option, value);
  }

  /**
   * Get the value of an option for a publication<br>
   * <br>
   * @param pub The publication to query.<br>
   * @param option The value to query see /ref helics_handle_options.<br>
   * <br>
   * @return A string with the info field string.
   */
  public static int helicsPublicationGetOption(SWIGTYPE_p_void pub, int option) {
    return helicsJNI.helicsPublicationGetOption(SWIGTYPE_p_void.getCPtr(pub), option);
  }

  /**
   * Set the value of an option for a publication<br>
   * <br>
   * @param pub The publication to query.<br>
   * @param option Integer code for the option to set /ref helics_handle_options.<br>
   * @param val The value to set the option to.
   */
  public static void helicsPublicationSetOption(SWIGTYPE_p_void pub, int option, int val) {
    helicsJNI.helicsPublicationSetOption(SWIGTYPE_p_void.getCPtr(pub), option, val);
  }

  /**
   * Set the minimum change detection tolerance.<br>
   * <br>
   * @param pub The publication to modify.<br>
   * @param tolerance The tolerance level for publication, values changing less than this value will not be published.
   */
  public static void helicsPublicationSetMinimumChange(SWIGTYPE_p_void pub, double tolerance) {
    helicsJNI.helicsPublicationSetMinimumChange(SWIGTYPE_p_void.getCPtr(pub), tolerance);
  }

  /**
   * Set the minimum change detection tolerance.<br>
   * <br>
   * @param inp The input to modify.<br>
   * @param tolerance The tolerance level for registering an update, values changing less than this value will not show as being updated.
   */
  public static void helicsInputSetMinimumChange(SWIGTYPE_p_void inp, double tolerance) {
    helicsJNI.helicsInputSetMinimumChange(SWIGTYPE_p_void.getCPtr(inp), tolerance);
  }

  /**
   * <br>
   * Check if a particular subscription was updated.<br>
   * <br>
   * @return helics_true if it has been updated since the last value retrieval.
   */
  public static int helicsInputIsUpdated(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputIsUpdated(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the last time a subscription was updated.
   */
  public static double helicsInputLastUpdateTime(SWIGTYPE_p_void ipt) {
    return helicsJNI.helicsInputLastUpdateTime(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Clear the updated flag from an input.
   */
  public static void helicsInputClearUpdate(SWIGTYPE_p_void ipt) {
    helicsJNI.helicsInputClearUpdate(SWIGTYPE_p_void.getCPtr(ipt));
  }

  /**
   * Get the number of publications in a federate.<br>
   * <br>
   * @return (-1) if fed was not a valid federate otherwise returns the number of publications.
   */
  public static int helicsFederateGetPublicationCount(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateGetPublicationCount(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Get the number of subscriptions in a federate.<br>
   * <br>
   * @return (-1) if fed was not a valid federate otherwise returns the number of subscriptions.
   */
  public static int helicsFederateGetInputCount(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateGetInputCount(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Create an endpoint.<br>
   * <br>
   * The endpoint becomes part of the federate and is destroyed when the federate is freed<br>
   *          so there are no separate free functions for endpoints.<br>
   * <br>
   * @param fed The federate object in which to create an endpoint must have been created<br>
   *           with helicsCreateMessageFederate or helicsCreateCombinationFederate.<br>
   * @param name The identifier for the endpoint. This will be prepended with the federate name for the global identifier.<br>
   * @param type A string describing the expected type of the publication (may be NULL).<br>
   * <br>
   * <br>
   * @return An object containing the endpoint.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterEndpoint(SWIGTYPE_p_void fed, String name, String type) {
    long cPtr = helicsJNI.helicsFederateRegisterEndpoint(SWIGTYPE_p_void.getCPtr(fed), name, type);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create an endpoint.<br>
   * <br>
   * The endpoint becomes part of the federate and is destroyed when the federate is freed<br>
   *          so there are no separate free functions for endpoints.<br>
   * <br>
   * @param fed The federate object in which to create an endpoint must have been created<br>
   *               with helicsCreateMessageFederate or helicsCreateCombinationFederate.<br>
   * @param name The identifier for the endpoint, the given name is the global identifier.<br>
   * @param type A string describing the expected type of the publication (may be NULL).<br>
   * <br>
   * @return An object containing the endpoint.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterGlobalEndpoint(SWIGTYPE_p_void fed, String name, String type) {
    long cPtr = helicsJNI.helicsFederateRegisterGlobalEndpoint(SWIGTYPE_p_void.getCPtr(fed), name, type);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Get an endpoint object from a name.<br>
   * <br>
   * @param fed The message federate object to use to get the endpoint.<br>
   * @param name The name of the endpoint.<br>
   * <br>
   * <br>
   * @return A helics_endpoint object.
   */
  public static SWIGTYPE_p_void helicsFederateGetEndpoint(SWIGTYPE_p_void fed, String name) {
    long cPtr = helicsJNI.helicsFederateGetEndpoint(SWIGTYPE_p_void.getCPtr(fed), name);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Get an endpoint by its index, typically already created via registerInterfaces file or something of that nature.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param index The index of the publication to get.<br>
   * <br>
   * <br>
   * @return A helics_endpoint.
   */
  public static SWIGTYPE_p_void helicsFederateGetEndpointByIndex(SWIGTYPE_p_void fed, int index) {
    long cPtr = helicsJNI.helicsFederateGetEndpointByIndex(SWIGTYPE_p_void.getCPtr(fed), index);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Check if an endpoint is valid.<br>
   * <br>
   * @param endpoint The endpoint object to check.<br>
   * <br>
   * @return helics_true if the Endpoint object represents a valid endpoint.
   */
  public static int helicsEndpointIsValid(SWIGTYPE_p_void endpoint) {
    return helicsJNI.helicsEndpointIsValid(SWIGTYPE_p_void.getCPtr(endpoint));
  }

  /**
   * Set the default destination for an endpoint if no other endpoint is given.<br>
   * <br>
   * @param endpoint The endpoint to set the destination for.<br>
   * @param dest A string naming the desired default endpoint.
   */
  public static void helicsEndpointSetDefaultDestination(SWIGTYPE_p_void endpoint, String dest) {
    helicsJNI.helicsEndpointSetDefaultDestination(SWIGTYPE_p_void.getCPtr(endpoint), dest);
  }

  /**
   * Get the default destination for an endpoint.<br>
   * <br>
   * @param endpoint The endpoint to set the destination for.<br>
   * <br>
   * @return A string with the default destination.
   */
  public static String helicsEndpointGetDefaultDestination(SWIGTYPE_p_void endpoint) {
    return helicsJNI.helicsEndpointGetDefaultDestination(SWIGTYPE_p_void.getCPtr(endpoint));
  }

  /**
   * Send a message to the specified destination.<br>
   * <br>
   * @param endpoint The endpoint to send the data from.<br>
   * @param dest The target destination.<br>
   * <br>
   * <br>
   *             "" to use the default destination.<br>
   * <br>
   * @param data The data to send.
   */
  public static void helicsEndpointSendMessageRaw(SWIGTYPE_p_void endpoint, String dest, SWIGTYPE_p_void data, int inputDataLength) {
    helicsJNI.helicsEndpointSendMessageRaw(SWIGTYPE_p_void.getCPtr(endpoint), dest, SWIGTYPE_p_void.getCPtr(data), inputDataLength);
  }

  /**
   * Send a message at a specific time to the specified destination.<br>
   * <br>
   * @param endpoint The endpoint to send the data from.<br>
   * @param dest The target destination.<br>
   * <br>
   * <br>
   *             "" to use the default destination.<br>
   * <br>
   * @param data The data to send.<br>
   * <br>
   * @param time The time the message should be sent.
   */
  public static void helicsEndpointSendEventRaw(SWIGTYPE_p_void endpoint, String dest, SWIGTYPE_p_void data, int inputDataLength, double time) {
    helicsJNI.helicsEndpointSendEventRaw(SWIGTYPE_p_void.getCPtr(endpoint), dest, SWIGTYPE_p_void.getCPtr(data), inputDataLength, time);
  }

  /**
   * Send a message object from a specific endpoint.<br>
   * @deprecated Use helicsEndpointSendMessageObject instead.<br>
   * @param endpoint The endpoint to send the data from.<br>
   * @param message The actual message to send.
   */
  public static void helicsEndpointSendMessage(SWIGTYPE_p_void endpoint, helics_message message) {
    helicsJNI.helicsEndpointSendMessage(SWIGTYPE_p_void.getCPtr(endpoint), helics_message.getCPtr(message), message);
  }

  /**
   * Send a message object from a specific endpoint.<br>
   * <br>
   * @param endpoint The endpoint to send the data from.<br>
   * @param message The actual message to send which will be copied.
   */
  public static void helicsEndpointSendMessageObject(SWIGTYPE_p_void endpoint, SWIGTYPE_p_void message) {
    helicsJNI.helicsEndpointSendMessageObject(SWIGTYPE_p_void.getCPtr(endpoint), SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Send a message object from a specific endpoint, the message will not be copied and the message object will no longer be valid<br>
   * after the call.<br>
   * <br>
   * @param endpoint The endpoint to send the data from.<br>
   * @param message The actual message to send which will be copied.
   */
  public static void helicsEndpointSendMessageObjectZeroCopy(SWIGTYPE_p_void endpoint, SWIGTYPE_p_void message) {
    helicsJNI.helicsEndpointSendMessageObjectZeroCopy(SWIGTYPE_p_void.getCPtr(endpoint), SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Subscribe an endpoint to a publication.<br>
   * <br>
   * @param endpoint The endpoint to use.<br>
   * @param key The name of the publication.
   */
  public static void helicsEndpointSubscribe(SWIGTYPE_p_void endpoint, String key) {
    helicsJNI.helicsEndpointSubscribe(SWIGTYPE_p_void.getCPtr(endpoint), key);
  }

  /**
   * Check if the federate has any outstanding messages.<br>
   * <br>
   * @param fed The federate to check.<br>
   * <br>
   * @return helics_true if the federate has a message waiting, helics_false otherwise.
   */
  public static int helicsFederateHasMessage(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateHasMessage(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Check if a given endpoint has any unread messages.<br>
   * <br>
   * @param endpoint The endpoint to check.<br>
   * <br>
   * @return helics_true if the endpoint has a message, helics_false otherwise.
   */
  public static int helicsEndpointHasMessage(SWIGTYPE_p_void endpoint) {
    return helicsJNI.helicsEndpointHasMessage(SWIGTYPE_p_void.getCPtr(endpoint));
  }

  /**
   * Returns the number of pending receives for the specified destination endpoint.<br>
   * <br>
   * @param fed The federate to get the number of waiting messages from.
   */
  public static int helicsFederatePendingMessages(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederatePendingMessages(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Returns the number of pending receives for all endpoints of a particular federate.<br>
   * <br>
   * @param endpoint The endpoint to query.
   */
  public static int helicsEndpointPendingMessages(SWIGTYPE_p_void endpoint) {
    return helicsJNI.helicsEndpointPendingMessages(SWIGTYPE_p_void.getCPtr(endpoint));
  }

  /**
   * Receive a packet from a particular endpoint.<br>
   * <br>
   * @deprecated This function is deprecated and will be removed in Helics 3.0.<br>
   *             Use helicsEndpointGetMessageObject instead.<br>
   * <br>
   * endpoint The identifier for the endpoint.<br>
   * <br>
   * @return A message object.
   */
  public static helics_message helicsEndpointGetMessage(SWIGTYPE_p_void endpoint) {
    return new helics_message(helicsJNI.helicsEndpointGetMessage(SWIGTYPE_p_void.getCPtr(endpoint)), true);
  }

  /**
   * Receive a packet from a particular endpoint.<br>
   * <br>
   * endpoint The identifier for the endpoint.<br>
   * <br>
   * @return A message object.
   */
  public static SWIGTYPE_p_void helicsEndpointGetMessageObject(SWIGTYPE_p_void endpoint) {
    long cPtr = helicsJNI.helicsEndpointGetMessageObject(SWIGTYPE_p_void.getCPtr(endpoint));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a new empty message object.<br>
   * <br>
   * The message is empty and isValid will return false since there is no data associated with the message yet.<br>
   * <br>
   * @param endpoint The endpoint object to associate the message with.<br>
   * <br>
   * <br>
   * @return A new helics_message_object.
   */
  public static SWIGTYPE_p_void helicsEndpointCreateMessageObject(SWIGTYPE_p_void endpoint) {
    long cPtr = helicsJNI.helicsEndpointCreateMessageObject(SWIGTYPE_p_void.getCPtr(endpoint));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Receive a communication message for any endpoint in the federate.<br>
   * <br>
   * @deprecated This function is deprecated and will be removed in Helics 3.0.<br>
   *             Use helicsFederateGetMessageObject instead.<br>
   * <br>
   * The return order will be in order of endpoint creation.<br>
   *          So all messages that are available for the first endpoint, then all for the second, and so on.<br>
   *          Within a single endpoint, the messages are ordered by time, then source_id, then order of arrival.<br>
   * <br>
   * @return A unique_ptr to a Message object containing the message data.
   */
  public static helics_message helicsFederateGetMessage(SWIGTYPE_p_void fed) {
    return new helics_message(helicsJNI.helicsFederateGetMessage(SWIGTYPE_p_void.getCPtr(fed)), true);
  }

  /**
   * Receive a communication message for any endpoint in the federate.<br>
   * <br>
   * The return order will be in order of endpoint creation.<br>
   *          So all messages that are available for the first endpoint, then all for the second, and so on.<br>
   *          Within a single endpoint, the messages are ordered by time, then source_id, then order of arrival.<br>
   * <br>
   * @return A helics_message_object which references the data in the message.
   */
  public static SWIGTYPE_p_void helicsFederateGetMessageObject(SWIGTYPE_p_void fed) {
    long cPtr = helicsJNI.helicsFederateGetMessageObject(SWIGTYPE_p_void.getCPtr(fed));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a new empty message object.<br>
   * <br>
   * The message is empty and isValid will return false since there is no data associated with the message yet.<br>
   * <br>
   * @param fed the federate object to associate the message with<br>
   * <br>
   * <br>
   * @return A helics_message_object containing the message data.
   */
  public static SWIGTYPE_p_void helicsFederateCreateMessageObject(SWIGTYPE_p_void fed) {
    long cPtr = helicsJNI.helicsFederateCreateMessageObject(SWIGTYPE_p_void.getCPtr(fed));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Clear all stored messages from a federate.<br>
   * <br>
   * This clears messages retrieved through helicsFederateGetMessage or helicsFederateGetMessageObject<br>
   * <br>
   * @param fed The federate to clear the message for.
   */
  public static void helicsFederateClearMessages(SWIGTYPE_p_void fed) {
    helicsJNI.helicsFederateClearMessages(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Clear all message from an endpoint.<br>
   * <br>
   * @deprecated This function does nothing and will be removed.<br>
   *             Use helicsFederateClearMessages to free all messages,<br>
   *             or helicsMessageFree to clear an individual message.<br>
   * <br>
   * @param endpoint The endpoint object to operate on.
   */
  public static void helicsEndpointClearMessages(SWIGTYPE_p_void endpoint) {
    helicsJNI.helicsEndpointClearMessages(SWIGTYPE_p_void.getCPtr(endpoint));
  }

  /**
   * Get the type specified for an endpoint.<br>
   * <br>
   * @param endpoint The endpoint object in question.<br>
   * <br>
   * @return The defined type of the endpoint.
   */
  public static String helicsEndpointGetType(SWIGTYPE_p_void endpoint) {
    return helicsJNI.helicsEndpointGetType(SWIGTYPE_p_void.getCPtr(endpoint));
  }

  /**
   * Get the name of an endpoint.<br>
   * <br>
   * @param endpoint The endpoint object in question.<br>
   * <br>
   * @return The name of the endpoint.
   */
  public static String helicsEndpointGetName(SWIGTYPE_p_void endpoint) {
    return helicsJNI.helicsEndpointGetName(SWIGTYPE_p_void.getCPtr(endpoint));
  }

  /**
   * Get the number of endpoints in a federate.<br>
   * <br>
   * @param fed The message federate to query.<br>
   * <br>
   * @return (-1) if fed was not a valid federate, otherwise returns the number of endpoints.
   */
  public static int helicsFederateGetEndpointCount(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateGetEndpointCount(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Get the data in the info field of a filter.<br>
   * <br>
   * @param end The filter to query.<br>
   * <br>
   * @return A string with the info field string.
   */
  public static String helicsEndpointGetInfo(SWIGTYPE_p_void end) {
    return helicsJNI.helicsEndpointGetInfo(SWIGTYPE_p_void.getCPtr(end));
  }

  /**
   * Set the data in the info field for a filter.<br>
   * <br>
   * @param end The endpoint to query.<br>
   * @param info The string to set.
   */
  public static void helicsEndpointSetInfo(SWIGTYPE_p_void end, String info) {
    helicsJNI.helicsEndpointSetInfo(SWIGTYPE_p_void.getCPtr(end), info);
  }

  /**
   * Set a handle option on an endpoint.<br>
   * <br>
   * @param end The endpoint to modify.<br>
   * @param option Integer code for the option to set /ref helics_handle_options.<br>
   * @param value The value to set the option to.
   */
  public static void helicsEndpointSetOption(SWIGTYPE_p_void end, int option, int value) {
    helicsJNI.helicsEndpointSetOption(SWIGTYPE_p_void.getCPtr(end), option, value);
  }

  /**
   * Set a handle option on an endpoint.<br>
   * <br>
   * @param end The endpoint to modify.<br>
   * @param option Integer code for the option to set /ref helics_handle_options.<br>
   * @return the value of the option, for boolean options will be 0 or 1
   */
  public static int helicsEndpointGetOption(SWIGTYPE_p_void end, int option) {
    return helicsJNI.helicsEndpointGetOption(SWIGTYPE_p_void.getCPtr(end), option);
  }

  /**
   * Get the source endpoint of a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * <br>
   * @return A string with the source endpoint.
   */
  public static String helicsMessageGetSource(SWIGTYPE_p_void message) {
    return helicsJNI.helicsMessageGetSource(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Get the destination endpoint of a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * <br>
   * @return A string with the destination endpoint.
   */
  public static String helicsMessageGetDestination(SWIGTYPE_p_void message) {
    return helicsJNI.helicsMessageGetDestination(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Get the original source endpoint of a message, the source may have been modified by filters or other actions.<br>
   * <br>
   * @param message The message object in question.<br>
   * <br>
   * @return A string with the source of a message.
   */
  public static String helicsMessageGetOriginalSource(SWIGTYPE_p_void message) {
    return helicsJNI.helicsMessageGetOriginalSource(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Get the original destination endpoint of a message, the destination may have been modified by filters or other actions.<br>
   * <br>
   * @param message The message object in question.<br>
   * <br>
   * @return A string with the original destination of a message.
   */
  public static String helicsMessageGetOriginalDestination(SWIGTYPE_p_void message) {
    return helicsJNI.helicsMessageGetOriginalDestination(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Get the helics time associated with a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * <br>
   * @return The time associated with a message.
   */
  public static double helicsMessageGetTime(SWIGTYPE_p_void message) {
    return helicsJNI.helicsMessageGetTime(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Get the payload of a message as a string.<br>
   * <br>
   * @param message The message object in question.<br>
   * <br>
   * @return A string representing the payload of a message.
   */
  public static String helicsMessageGetString(SWIGTYPE_p_void message) {
    return helicsJNI.helicsMessageGetString(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Get the messageID of a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * <br>
   * @return The messageID.
   */
  public static int helicsMessageGetMessageID(SWIGTYPE_p_void message) {
    return helicsJNI.helicsMessageGetMessageID(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Check if a flag is set on a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param flag The flag to check should be between [0,15].<br>
   * <br>
   * @return The flags associated with a message.
   */
  public static int helicsMessageCheckFlag(SWIGTYPE_p_void message, int flag) {
    return helicsJNI.helicsMessageCheckFlag(SWIGTYPE_p_void.getCPtr(message), flag);
  }

  /**
   * Get the size of the data payload in bytes.<br>
   * <br>
   * @param message The message object in question.<br>
   * <br>
   * @return The size of the data payload.
   */
  public static int helicsMessageGetRawDataSize(SWIGTYPE_p_void message) {
    return helicsJNI.helicsMessageGetRawDataSize(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Get the raw data for a message object.<br>
   * <br>
   * @param message A message object to get the data for.<br>
   * <br>
   * <br>
   * <br>
   * @return Raw string data.
   */
  public static void helicsMessageGetRawData(SWIGTYPE_p_void message, SWIGTYPE_p_void data, int maxMessagelen, int[] actualSize) {
    helicsJNI.helicsMessageGetRawData(SWIGTYPE_p_void.getCPtr(message), SWIGTYPE_p_void.getCPtr(data), maxMessagelen, actualSize);
  }

  /**
   * A check if the message contains a valid payload.<br>
   * <br>
   * @param message The message object in question.<br>
   * <br>
   * @return helics_true if the message contains a payload.
   */
  public static int helicsMessageIsValid(SWIGTYPE_p_void message) {
    return helicsJNI.helicsMessageIsValid(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Set the source of a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param src A string containing the source.
   */
  public static void helicsMessageSetSource(SWIGTYPE_p_void message, String src) {
    helicsJNI.helicsMessageSetSource(SWIGTYPE_p_void.getCPtr(message), src);
  }

  /**
   * Set the destination of a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param dest A string containing the new destination.
   */
  public static void helicsMessageSetDestination(SWIGTYPE_p_void message, String dest) {
    helicsJNI.helicsMessageSetDestination(SWIGTYPE_p_void.getCPtr(message), dest);
  }

  /**
   * Set the original source of a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param src A string containing the new original source.
   */
  public static void helicsMessageSetOriginalSource(SWIGTYPE_p_void message, String src) {
    helicsJNI.helicsMessageSetOriginalSource(SWIGTYPE_p_void.getCPtr(message), src);
  }

  /**
   * Set the original destination of a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param dest A string containing the new original source.
   */
  public static void helicsMessageSetOriginalDestination(SWIGTYPE_p_void message, String dest) {
    helicsJNI.helicsMessageSetOriginalDestination(SWIGTYPE_p_void.getCPtr(message), dest);
  }

  /**
   * Set the delivery time for a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param time The time the message should be delivered.
   */
  public static void helicsMessageSetTime(SWIGTYPE_p_void message, double time) {
    helicsJNI.helicsMessageSetTime(SWIGTYPE_p_void.getCPtr(message), time);
  }

  /**
   * Reserve space in a buffer but don't actually resize.<br>
   * <br>
   * The message data buffer will be reserved but not resized.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param reserveSize The number of bytes to reserve in the message object.
   */
  public static void helicsMessageReserve(SWIGTYPE_p_void message, int reserveSize) {
    helicsJNI.helicsMessageReserve(SWIGTYPE_p_void.getCPtr(message), reserveSize);
  }

  /**
   * Set the message ID for the message.<br>
   * <br>
   * Normally this is not needed and the core of HELICS will adjust as needed.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param messageID A new message ID.
   */
  public static void helicsMessageSetMessageID(SWIGTYPE_p_void message, SWIGTYPE_p_int32_t messageID) {
    helicsJNI.helicsMessageSetMessageID(SWIGTYPE_p_void.getCPtr(message), SWIGTYPE_p_int32_t.getCPtr(messageID));
  }

  /**
   * Clear the flags of a message.<br>
   * <br>
   * @param message The message object in question
   */
  public static void helicsMessageClearFlags(SWIGTYPE_p_void message) {
    helicsJNI.helicsMessageClearFlags(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Set a flag on a message.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param flag An index of a flag to set on the message.<br>
   * @param flagValue The desired value of the flag.
   */
  public static void helicsMessageSetFlagOption(SWIGTYPE_p_void message, int flag, int flagValue) {
    helicsJNI.helicsMessageSetFlagOption(SWIGTYPE_p_void.getCPtr(message), flag, flagValue);
  }

  /**
   * Set the data payload of a message as a string.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param str A string containing the message data.
   */
  public static void helicsMessageSetString(SWIGTYPE_p_void message, String str) {
    helicsJNI.helicsMessageSetString(SWIGTYPE_p_void.getCPtr(message), str);
  }

  /**
   * Set the data payload of a message as raw data.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param data A string containing the message data.<br>
   * @param inputDataLength The length of the data to input.
   */
  public static void helicsMessageSetData(SWIGTYPE_p_void message, SWIGTYPE_p_void data, int inputDataLength) {
    helicsJNI.helicsMessageSetData(SWIGTYPE_p_void.getCPtr(message), SWIGTYPE_p_void.getCPtr(data), inputDataLength);
  }

  /**
   * Append data to the payload.<br>
   * <br>
   * @param message The message object in question.<br>
   * @param data A string containing the message data to append.<br>
   * @param inputDataLength The length of the data to input.
   */
  public static void helicsMessageAppendData(SWIGTYPE_p_void message, SWIGTYPE_p_void data, int inputDataLength) {
    helicsJNI.helicsMessageAppendData(SWIGTYPE_p_void.getCPtr(message), SWIGTYPE_p_void.getCPtr(data), inputDataLength);
  }

  /**
   * Copy a message object.<br>
   * <br>
   * @param source_message The message object to copy from.<br>
   * @param dest_message The message object to copy to.
   */
  public static void helicsMessageCopy(SWIGTYPE_p_void source_message, SWIGTYPE_p_void dest_message) {
    helicsJNI.helicsMessageCopy(SWIGTYPE_p_void.getCPtr(source_message), SWIGTYPE_p_void.getCPtr(dest_message));
  }

  /**
   * Clone a message object.<br>
   * <br>
   * @param message The message object to copy from.
   */
  public static SWIGTYPE_p_void helicsMessageClone(SWIGTYPE_p_void message) {
    long cPtr = helicsJNI.helicsMessageClone(SWIGTYPE_p_void.getCPtr(message));
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Free a message object from memory<br>
   * memory for message is managed so not using this function does not create memory leaks, this is an indication<br>
   * to the system that the memory for this message is done being used and can be reused for a new message.<br>
   * helicsFederateClearMessages() can also be used to clear up all stored messages at once
   */
  public static void helicsMessageFree(SWIGTYPE_p_void message) {
    helicsJNI.helicsMessageFree(SWIGTYPE_p_void.getCPtr(message));
  }

  /**
   * Create a source Filter on the specified federate.<br>
   * <br>
   * Filters can be created through a federate or a core, linking through a federate allows<br>
   *          a few extra features of name matching to function on the federate interface but otherwise equivalent behavior<br>
   * <br>
   * @param fed The federate to register through.<br>
   * @param type The type of filter to create /ref helics_filter_type.<br>
   * @param name The name of the filter (can be NULL).<br>
   * <br>
   * <br>
   * @return A helics_filter object.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterFilter(SWIGTYPE_p_void fed, helics_filter_type type, String name) {
    long cPtr = helicsJNI.helicsFederateRegisterFilter(SWIGTYPE_p_void.getCPtr(fed), type.swigValue(), name);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a global source filter through a federate.<br>
   * <br>
   * Filters can be created through a federate or a core, linking through a federate allows<br>
   *          a few extra features of name matching to function on the federate interface but otherwise equivalent behavior.<br>
   * <br>
   * @param fed The federate to register through.<br>
   * @param type The type of filter to create /ref helics_filter_type.<br>
   * @param name The name of the filter (can be NULL).<br>
   * <br>
   * <br>
   * @return A helics_filter object.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterGlobalFilter(SWIGTYPE_p_void fed, helics_filter_type type, String name) {
    long cPtr = helicsJNI.helicsFederateRegisterGlobalFilter(SWIGTYPE_p_void.getCPtr(fed), type.swigValue(), name);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a cloning Filter on the specified federate.<br>
   * <br>
   * Cloning filters copy a message and send it to multiple locations, source and destination can be added<br>
   *          through other functions.<br>
   * <br>
   * @param fed The federate to register through.<br>
   * @param name The name of the filter (can be NULL).<br>
   * <br>
   * <br>
   * @return A helics_filter object.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterCloningFilter(SWIGTYPE_p_void fed, String name) {
    long cPtr = helicsJNI.helicsFederateRegisterCloningFilter(SWIGTYPE_p_void.getCPtr(fed), name);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a global cloning Filter on the specified federate.<br>
   * <br>
   * Cloning filters copy a message and send it to multiple locations, source and destination can be added<br>
   *          through other functions.<br>
   * <br>
   * @param fed The federate to register through.<br>
   * @param name The name of the filter (can be NULL).<br>
   * <br>
   * <br>
   * @return A helics_filter object.
   */
  public static SWIGTYPE_p_void helicsFederateRegisterGlobalCloningFilter(SWIGTYPE_p_void fed, String name) {
    long cPtr = helicsJNI.helicsFederateRegisterGlobalCloningFilter(SWIGTYPE_p_void.getCPtr(fed), name);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a source Filter on the specified core.<br>
   * <br>
   * Filters can be created through a federate or a core, linking through a federate allows<br>
   *          a few extra features of name matching to function on the federate interface but otherwise equivalent behavior.<br>
   * <br>
   * @param core The core to register through.<br>
   * @param type The type of filter to create /ref helics_filter_type.<br>
   * @param name The name of the filter (can be NULL).<br>
   * <br>
   * <br>
   * @return A helics_filter object.
   */
  public static SWIGTYPE_p_void helicsCoreRegisterFilter(SWIGTYPE_p_void core, helics_filter_type type, String name) {
    long cPtr = helicsJNI.helicsCoreRegisterFilter(SWIGTYPE_p_void.getCPtr(core), type.swigValue(), name);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Create a cloning Filter on the specified core.<br>
   * <br>
   * Cloning filters copy a message and send it to multiple locations, source and destination can be added<br>
   *          through other functions.<br>
   * <br>
   * @param core The core to register through.<br>
   * @param name The name of the filter (can be NULL).<br>
   * <br>
   * <br>
   * @return A helics_filter object.
   */
  public static SWIGTYPE_p_void helicsCoreRegisterCloningFilter(SWIGTYPE_p_void core, String name) {
    long cPtr = helicsJNI.helicsCoreRegisterCloningFilter(SWIGTYPE_p_void.getCPtr(core), name);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Get the number of filters registered through a federate.<br>
   * <br>
   * @param fed The federate object to use to get the filter.<br>
   * <br>
   * @return A count of the number of filters registered through a federate.
   */
  public static int helicsFederateGetFilterCount(SWIGTYPE_p_void fed) {
    return helicsJNI.helicsFederateGetFilterCount(SWIGTYPE_p_void.getCPtr(fed));
  }

  /**
   * Get a filter by its name, typically already created via registerInterfaces file or something of that nature.<br>
   * <br>
   * @param fed The federate object to use to get the filter.<br>
   * @param name The name of the filter.<br>
   * <br>
   * <br>
   * @return A helics_filter object, the object will not be valid and err will contain an error code if no filter with the specified name<br>
   * exists.
   */
  public static SWIGTYPE_p_void helicsFederateGetFilter(SWIGTYPE_p_void fed, String name) {
    long cPtr = helicsJNI.helicsFederateGetFilter(SWIGTYPE_p_void.getCPtr(fed), name);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Get a filter by its index, typically already created via registerInterfaces file or something of that nature.<br>
   * <br>
   * @param fed The federate object in which to create a publication.<br>
   * @param index The index of the publication to get.<br>
   * <br>
   * <br>
   * @return A helics_filter, which will be NULL if an invalid index is given.
   */
  public static SWIGTYPE_p_void helicsFederateGetFilterByIndex(SWIGTYPE_p_void fed, int index) {
    long cPtr = helicsJNI.helicsFederateGetFilterByIndex(SWIGTYPE_p_void.getCPtr(fed), index);
    return (cPtr == 0) ? null : new SWIGTYPE_p_void(cPtr, false);
  }

  /**
   * Check if a filter is valid.<br>
   * <br>
   * @param filt The filter object to check.<br>
   * <br>
   * @return helics_true if the Filter object represents a valid filter.
   */
  public static int helicsFilterIsValid(SWIGTYPE_p_void filt) {
    return helicsJNI.helicsFilterIsValid(SWIGTYPE_p_void.getCPtr(filt));
  }

  /**
   * Get the name of the filter and store in the given string.<br>
   * <br>
   * @param filt The given filter.<br>
   * <br>
   * @return A string with the name of the filter.
   */
  public static String helicsFilterGetName(SWIGTYPE_p_void filt) {
    return helicsJNI.helicsFilterGetName(SWIGTYPE_p_void.getCPtr(filt));
  }

  /**
   * Set a property on a filter.<br>
   * <br>
   * @param filt The filter to modify.<br>
   * @param prop A string containing the property to set.<br>
   * @param val A numerical value for the property.
   */
  public static void helicsFilterSet(SWIGTYPE_p_void filt, String prop, double val) {
    helicsJNI.helicsFilterSet(SWIGTYPE_p_void.getCPtr(filt), prop, val);
  }

  /**
   * Set a string property on a filter.<br>
   * <br>
   * @param filt The filter to modify.<br>
   * @param prop A string containing the property to set.<br>
   * @param val A string containing the new value.
   */
  public static void helicsFilterSetString(SWIGTYPE_p_void filt, String prop, String val) {
    helicsJNI.helicsFilterSetString(SWIGTYPE_p_void.getCPtr(filt), prop, val);
  }

  /**
   * Add a destination target to a filter.<br>
   * <br>
   * All messages going to a destination are copied to the delivery address(es).<br>
   * @param filt The given filter to add a destination target to.<br>
   * @param dest The name of the endpoint to add as a destination target.
   */
  public static void helicsFilterAddDestinationTarget(SWIGTYPE_p_void filt, String dest) {
    helicsJNI.helicsFilterAddDestinationTarget(SWIGTYPE_p_void.getCPtr(filt), dest);
  }

  /**
   * Add a source target to a filter.<br>
   * <br>
   * All messages coming from a source are copied to the delivery address(es).<br>
   * <br>
   * @param filt The given filter.<br>
   * @param source The name of the endpoint to add as a source target.
   */
  public static void helicsFilterAddSourceTarget(SWIGTYPE_p_void filt, String source) {
    helicsJNI.helicsFilterAddSourceTarget(SWIGTYPE_p_void.getCPtr(filt), source);
  }

  /**
   * Add a delivery endpoint to a cloning filter.<br>
   * <br>
   * All cloned messages are sent to the delivery address(es).<br>
   * <br>
   * @param filt The given filter.<br>
   * @param deliveryEndpoint The name of the endpoint to deliver messages to.
   */
  public static void helicsFilterAddDeliveryEndpoint(SWIGTYPE_p_void filt, String deliveryEndpoint) {
    helicsJNI.helicsFilterAddDeliveryEndpoint(SWIGTYPE_p_void.getCPtr(filt), deliveryEndpoint);
  }

  /**
   * Remove a destination target from a filter.<br>
   * <br>
   * @param filt The given filter.<br>
   * @param target The named endpoint to remove as a target.
   */
  public static void helicsFilterRemoveTarget(SWIGTYPE_p_void filt, String target) {
    helicsJNI.helicsFilterRemoveTarget(SWIGTYPE_p_void.getCPtr(filt), target);
  }

  /**
   * Remove a delivery destination from a cloning filter.<br>
   * <br>
   * @param filt The given filter (must be a cloning filter).<br>
   * @param deliveryEndpoint A string with the delivery endpoint to remove.
   */
  public static void helicsFilterRemoveDeliveryEndpoint(SWIGTYPE_p_void filt, String deliveryEndpoint) {
    helicsJNI.helicsFilterRemoveDeliveryEndpoint(SWIGTYPE_p_void.getCPtr(filt), deliveryEndpoint);
  }

  /**
   * Get the data in the info field of a filter.<br>
   * <br>
   * @param filt The given filter.<br>
   * <br>
   * @return A string with the info field string.
   */
  public static String helicsFilterGetInfo(SWIGTYPE_p_void filt) {
    return helicsJNI.helicsFilterGetInfo(SWIGTYPE_p_void.getCPtr(filt));
  }

  /**
   * Set the data in the info field for a filter.<br>
   * <br>
   * @param filt The given filter.<br>
   * @param info The string to set.
   */
  public static void helicsFilterSetInfo(SWIGTYPE_p_void filt, String info) {
    helicsJNI.helicsFilterSetInfo(SWIGTYPE_p_void.getCPtr(filt), info);
  }

  /**
   * Set the data in the info field for a filter.<br>
   * <br>
   * @param filt The given filter.<br>
   * @param option The option to set /ref helics_handle_options.<br>
   * @param value The value of the option commonly 0 for false 1 for true.
   */
  public static void helicsFilterSetOption(SWIGTYPE_p_void filt, int option, int value) {
    helicsJNI.helicsFilterSetOption(SWIGTYPE_p_void.getCPtr(filt), option, value);
  }

  /**
   * Get a handle option for the filter.<br>
   * <br>
   * @param filt The given filter to query.<br>
   * @param option The option to query /ref helics_handle_options.
   */
  public static int helicsFilterGetOption(SWIGTYPE_p_void filt, int option) {
    return helicsJNI.helicsFilterGetOption(SWIGTYPE_p_void.getCPtr(filt), option);
  }

}
