/* automatically generated by rust-bindgen */
use libc::{self, FILE};

pub const CRFSUITE_VERSION: &'static [u8; 7usize] = b"0.12.2\0";
pub const CRFSUITE_COPYRIGHT: &'static [u8; 39usize] = b"Copyright (c) 2007-2013 Naoaki Okazaki\0";

/// Type of a float value.
pub type floatval_t = f64;

pub const CRFSUITE_SUCCESS: _bindgen_ty_1 = 0;
pub const CRFSUITEERR_UNKNOWN: _bindgen_ty_1 = -2147483648;
pub const CRFSUITEERR_OUTOFMEMORY: _bindgen_ty_1 = -2147483647;
pub const CRFSUITEERR_NOTSUPPORTED: _bindgen_ty_1 = -2147483646;
pub const CRFSUITEERR_INCOMPATIBLE: _bindgen_ty_1 = -2147483645;
pub const CRFSUITEERR_INTERNAL_LOGIC: _bindgen_ty_1 = -2147483644;
pub const CRFSUITEERR_OVERFLOW: _bindgen_ty_1 = -2147483643;
pub const CRFSUITEERR_NOTIMPLEMENTED: _bindgen_ty_1 = -2147483642;
pub type _bindgen_ty_1 = libc::c_int;

/// CRFSuite model interface.
pub type crfsuite_model_t = tag_crfsuite_model;
/// CRFSuite trainer interface.
pub type crfsuite_trainer_t = tag_crfsuite_trainer;
/// CRFSuite tagger interface.
pub type crfsuite_tagger_t = tag_crfsuite_tagger;
/// CRFSuite dictionary interface.
pub type crfsuite_dictionary_t = tag_crfsuite_dictionary;
/// CRFSuite parameter interface.
pub type crfsuite_params_t = tag_crfsuite_params;
/// An attribute.
/// An attribute consists of an attribute id with its value.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct crfsuite_attribute_t {
    /// < Attribute id.
    pub aid: libc::c_int,
    /// < Value of the attribute.
    pub value: floatval_t,
}
/// An item.
/// An item consists of an array of attributes.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct crfsuite_item_t {
    /// Number of contents associated with the item.
    pub num_contents: libc::c_int,
    /// Maximum number of contents (internal use).
    pub cap_contents: libc::c_int,
    /// Array of the attributes.
    pub contents: *mut crfsuite_attribute_t,
}
/// An instance (sequence of items and labels).
/// An instance consists of a sequence of items and labels.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct crfsuite_instance_t {
    /// Number of items/labels in the sequence.
    pub num_items: libc::c_int,
    /// Maximum number of items/labels (internal use).
    pub cap_items: libc::c_int,
    /// Array of the item sequence.
    pub items: *mut crfsuite_item_t,
    /// Array of the label sequence.
    pub labels: *mut libc::c_int,
    /// Instance weight.
    pub weight: floatval_t,
    /// Group ID of the instance.
    pub group: libc::c_int,
}
/// A data set.
/// A data set consists of an array of instances and dictionary objects
/// for attributes and labels.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct crfsuite_data_t {
    /// Number of instances.
    pub num_instances: libc::c_int,
    /// Maximum number of instances (internal use).
    pub cap_instances: libc::c_int,
    /// Array of instances.
    pub instances: *mut crfsuite_instance_t,
    /// Dictionary object for attributes.
    pub attrs: *mut crfsuite_dictionary_t,
    /// Dictionary object for labels.
    pub labels: *mut crfsuite_dictionary_t,
}
/// Label-wise performance values.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct crfsuite_label_evaluation_t {
    /// Number of correct predictions.
    pub num_correct: libc::c_int,
    /// Number of occurrences of the label in the gold-standard data.
    pub num_observation: libc::c_int,
    /// Number of predictions.
    pub num_model: libc::c_int,
    /// Precision.
    pub precision: floatval_t,
    /// Recall.
    pub recall: floatval_t,
    /// F1 score.
    pub fmeasure: floatval_t,
}
/// An overall performance values.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct crfsuite_evaluation_t {
    /// Number of labels.
    pub num_labels: libc::c_int,
    /// Array of label-wise evaluations.
    pub tbl: *mut crfsuite_label_evaluation_t,
    /// Number of correctly predicted items.
    pub item_total_correct: libc::c_int,
    /// Total number of items.
    pub item_total_num: libc::c_int,
    /// Total number of occurrences of labels in the gold-standard data.
    pub item_total_observation: libc::c_int,
    /// Total number of predictions.
    pub item_total_model: libc::c_int,
    /// Item-level accuracy.
    pub item_accuracy: floatval_t,
    /// Number of correctly predicted instances.
    pub inst_total_correct: libc::c_int,
    /// Total number of instances.
    pub inst_total_num: libc::c_int,
    /// Instance-level accuracy.
    pub inst_accuracy: floatval_t,
    /// Macro-averaged precision.
    pub macro_precision: floatval_t,
    /// Macro-averaged recall.
    pub macro_recall: floatval_t,
    /// Macro-averaged F1 score.
    pub macro_fmeasure: floatval_t,
}
/// Type of callback function for logging.
///
/// * `user`        Pointer to the user-defined data.
/// * `format`      Format string (compatible with prinf()).
/// * `args`        Optional arguments for the format string.
///
/// Returns int         \c 0 to continue; non-zero to cancel the training.
pub type crfsuite_logging_callback = ::std::option::Option<
    unsafe extern "C" fn(
        user: *mut libc::c_void,
        format: *const libc::c_char,
        args: *mut __va_list_tag,
    ) -> libc::c_int,
>;

#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct tag_crfsuite_model {
    /// Pointer to the internal data (internal use only).
    pub internal: *mut libc::c_void,
    /// Reference counter (internal use only).
    pub nref: libc::c_int,
    /// Increment the reference counter.
    ///
    /// `model`       The pointer to this model instance.
    ///
    /// Returns the reference count after this increment.
    pub addref:
        ::std::option::Option<unsafe extern "C" fn(model: *mut crfsuite_model_t) -> libc::c_int>,
    /// Decrement the reference counter.
    ///
    /// `model`       The pointer to this model instance.
    ///
    /// Returns the reference count after this operation.
    pub release:
        ::std::option::Option<unsafe extern "C" fn(model: *mut crfsuite_model_t) -> libc::c_int>,
    /// Obtain the pointer to crfsuite_tagger_t interface.
    ///
    /// * `model`       The pointer to this model instance.
    /// * `ptr_tagger`  The pointer that receives a `crfsuite_tagger_t` pointer.
    ///
    /// Returns the status code.
    pub get_tagger: ::std::option::Option<
        unsafe extern "C" fn(model: *mut crfsuite_model_t, ptr_tagger: *mut *mut crfsuite_tagger_t)
            -> libc::c_int,
    >,
    /// Obtain the pointer to crfsuite_dictionary_t interface for labels.
    ///
    /// * `model`       The pointer to this model instance.
    /// * `ptr_labels`  The pointer that receives a crfsuite_dictionary_t pointer.
    ///
    /// Returns the status code.
    pub get_labels: ::std::option::Option<
        unsafe extern "C" fn(
            model: *mut crfsuite_model_t,
            ptr_labels: *mut *mut crfsuite_dictionary_t,
        ) -> libc::c_int,
    >,
    /// Obtain the pointer to crfsuite_dictionary_t interface for attributes.
    ///
    /// * `model`       The pointer to this model instance.
    /// * `ptr_attrs`   The pointer that receives a crfsuite_dictionary_t pointer.
    ///
    /// Returns the status code.
    pub get_attrs: ::std::option::Option<
        unsafe extern "C" fn(
            model: *mut crfsuite_model_t,
            ptr_attrs: *mut *mut crfsuite_dictionary_t,
        ) -> libc::c_int,
    >,
    /// Print the model in human-readable format.
    ///
    /// * `model`       The pointer to this model instance.
    /// * `fpo`         The FILE* pointer.
    ///
    /// Returns the status code.
    pub dump: ::std::option::Option<
        unsafe extern "C" fn(model: *mut crfsuite_model_t, fpo: *mut FILE) -> libc::c_int,
    >,
}
/// CRFSuite trainer interface.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct tag_crfsuite_trainer {
    /// Pointer to the internal data (internal use only).
    pub internal: *mut libc::c_void,
    /// Reference counter (internal use only).
    pub nref: libc::c_int,
    /// Increment the reference counter.
    ///
    /// `trainer`     The pointer to this trainer instance.
    ///
    /// Returns the reference count after this increment.
    pub addref: ::std::option::Option<
        unsafe extern "C" fn(trainer: *mut crfsuite_trainer_t) -> libc::c_int,
    >,
    /// Decrement the reference counter.
    ///
    /// `trainer`     The pointer to this trainer instance.
    ///
    /// Returns the reference count after this operation.
    pub release: ::std::option::Option<
        unsafe extern "C" fn(trainer: *mut crfsuite_trainer_t) -> libc::c_int,
    >,
    /// Obtain the pointer to crfsuite_params_t interface.
    ///
    /// `trainer`     The pointer to this trainer instance.
    ///
    /// Returns crfsuite_params_t*  The pointer to crfsuite_params_t.
    pub params: ::std::option::Option<
        unsafe extern "C" fn(trainer: *mut crfsuite_trainer_t) -> *mut crfsuite_params_t,
    >,
    /// Set the callback function and user-defined data.
    ///
    /// * `trainer`     The pointer to this trainer instance.
    /// * `user`        The pointer to the user-defined data.
    /// * `cbm`         The pointer to the callback function.
    pub set_message_callback: ::std::option::Option<
        unsafe extern "C" fn(
            trainer: *mut crfsuite_trainer_t,
            user: *mut libc::c_void,
            cbm: crfsuite_logging_callback,
        ),
    >,
    /// Start a training process.
    ///
    /// * `trainer`     The pointer to this trainer instance.
    /// * `data`       The poiinter to the data set.
    /// * `filename`    The filename to which the trainer stores the model.
    /// If an empty string is specified, this function
    /// does not sture the model to a file.
    /// * `holdout`     The holdout group.
    ///
    /// Returns the status code.
    pub train: ::std::option::Option<
        unsafe extern "C" fn(
            trainer: *mut crfsuite_trainer_t,
            data: *const crfsuite_data_t,
            filename: *const libc::c_char,
            holdout: libc::c_int,
        ) -> libc::c_int,
    >,
}
/// CRFSuite tagger interface.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct tag_crfsuite_tagger {
    /// Pointer to the internal data (internal use only).
    pub internal: *mut libc::c_void,
    /// Reference counter (internal use only).
    pub nref: libc::c_int,
    /// Increment the reference counter.
    ///
    /// `tagger`      The pointer to this tagger instance.
    ///
    /// Returns the reference count after this increment.
    pub addref:
        ::std::option::Option<unsafe extern "C" fn(tagger: *mut crfsuite_tagger_t) -> libc::c_int>,
    /// Decrement the reference counter.
    ///
    /// `tagger`      The pointer to this tagger instance.
    ///
    /// Returns the reference count after this operation.
    pub release:
        ::std::option::Option<unsafe extern "C" fn(tagger: *mut crfsuite_tagger_t) -> libc::c_int>,
    /// Set an instance to the tagger.
    ///
    /// * `tagger`      The pointer to this tagger instance.
    /// * `inst`        The item sequence to be tagged.
    ///
    /// Returns the status code.
    pub set: ::std::option::Option<
        unsafe extern "C" fn(tagger: *mut crfsuite_tagger_t, inst: *mut crfsuite_instance_t)
            -> libc::c_int,
    >,
    /// Obtain the number of items in the current instance.
    ///
    /// `tagger`      The pointer to this tagger instance.
    ///
    /// Returns the number of items of the instance set by
    /// set() function.
    ///
    /// Returns the status code.
    pub length:
        ::std::option::Option<unsafe extern "C" fn(tagger: *mut crfsuite_tagger_t) -> libc::c_int>,
    /// Find the Viterbi label sequence.
    ///
    /// * `tagger`      The pointer to this tagger instance.
    /// * `labels`      The label array that receives the Viterbi label
    /// * `sequence` The number of elements in the array must
    //  be no smaller than the number of item.
    /// * `ptr_score`   The pointer to a float variable that receives the
    /// score of the Viterbi label sequence.
    ///
    /// Returns the status code.
    pub viterbi: ::std::option::Option<
        unsafe extern "C" fn(
            tagger: *mut crfsuite_tagger_t,
            labels: *mut libc::c_int,
            ptr_score: *mut floatval_t,
        ) -> libc::c_int,
    >,
    /// Compute the score of a label sequence.
    ///
    /// * `tagger`      The pointer to this tagger instance.
    /// * `path`        The label sequence.
    /// * `ptr_score`   The pointer to a float variable that receives the
    /// score of the label sequence.
    ///
    /// Returns the status code.
    pub score: ::std::option::Option<
        unsafe extern "C" fn(
            tagger: *mut crfsuite_tagger_t,
            path: *mut libc::c_int,
            ptr_score: *mut floatval_t,
        ) -> libc::c_int,
    >,
    /// Compute the log of the partition factor (normalization constant).
    ///
    /// * `tagger`      The pointer to this tagger instance.
    /// * `ptr_score`   The pointer to a float variable that receives the
    /// logarithm of the partition factor.
    ///
    /// Returns the status code.
    pub lognorm: ::std::option::Option<
        unsafe extern "C" fn(tagger: *mut crfsuite_tagger_t, ptr_norm: *mut floatval_t)
            -> libc::c_int,
    >,
    /// Compute the marginal probability of a label at a position.
    ///
    /// This function computes P(y_t = l | x), the probability when
    /// y_t is the label (l).
    ///
    /// * `tagger`      The pointer to this tagger instance.
    /// * `l`           The label.
    /// * `t`           The position.
    /// * `ptr_prob`    The pointer to a float variable that receives the
    /// marginal probability.
    ///
    /// Returns the status code.
    pub marginal_point: ::std::option::Option<
        unsafe extern "C" fn(
            tagger: *mut crfsuite_tagger_t,
            l: libc::c_int,
            t: libc::c_int,
            ptr_prob: *mut floatval_t,
        ) -> libc::c_int,
    >,
    /// Compute the marginal probability of a partial label sequence.
    ///
    /// * `tagger`      The pointer to this tagger instance.
    /// * `path`        The partial label sequence.
    /// * `begin`       The start position of the partial label sequence.
    /// * `end`         The last+1 position of the partial label sequence.
    /// * `ptr_prob`    The pointer to a float variable that receives the
    /// marginal probability.
    ///
    /// Returns the status code.
    pub marginal_path: ::std::option::Option<
        unsafe extern "C" fn(
            tagger: *mut crfsuite_tagger_t,
            path: *const libc::c_int,
            begin: libc::c_int,
            end: libc::c_int,
            ptr_prob: *mut floatval_t,
        ) -> libc::c_int,
    >,
}
/// CRFSuite dictionary interface.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct tag_crfsuite_dictionary {
    /// Pointer to the internal data (internal use only).
    pub internal: *mut libc::c_void,
    /// Reference counter (internal use only).
    pub nref: libc::c_int,
    /// Increment the reference counter.
    ///
    /// `dic`         The pointer to this dictionary instance.
    ///
    /// Returns the reference count after this increment.
    pub addref:
        ::std::option::Option<unsafe extern "C" fn(dic: *mut crfsuite_dictionary_t) -> libc::c_int>,
    /// Decrement the reference counter.
    ///
    /// `dic`         The pointer to this dictionary instance.
    ///
    /// Returns the reference count after this operation.
    pub release:
        ::std::option::Option<unsafe extern "C" fn(dic: *mut crfsuite_dictionary_t) -> libc::c_int>,
    /// Assign and obtain the integer ID for the string.
    ///
    /// * `dic`         The pointer to this dictionary instance.
    /// * `str`         The string.
    ///
    /// Returns the ID associated with the string if any,
    /// the new ID otherwise.
    pub get: ::std::option::Option<
        unsafe extern "C" fn(dic: *mut crfsuite_dictionary_t, str: *const libc::c_char)
            -> libc::c_int,
    >,
    /// Obtain the integer ID for the string.
    ///
    /// * `dic`         The pointer to this dictionary instance.
    /// * `str`         The string.
    ///
    /// Returns the ID associated with the string if any,
    /// \c -1 otherwise.
    pub to_id: ::std::option::Option<
        unsafe extern "C" fn(dic: *mut crfsuite_dictionary_t, str: *const libc::c_char)
            -> libc::c_int,
    >,
    /// Obtain the string for the ID.
    ///
    /// * `dic`         The pointer to this dictionary instance.
    /// * `id`          the string ID.
    /// * `pstr`        \c *pstr points to the string associated with
    /// the ID if any, \c NULL otherwise.
    ///
    /// Returns int         \c 0 if the string ID is associated with a string,
    /// \c 1 otherwise.
    pub to_string: ::std::option::Option<
        unsafe extern "C" fn(
            dic: *mut crfsuite_dictionary_t,
            id: libc::c_int,
            pstr: *mut *const libc::c_char,
        ) -> libc::c_int,
    >,
    /// Obtain the number of strings in the dictionary.
    ///
    /// `dic`         The pointer to this dictionary instance.
    ///
    /// Returns the number of strings stored in the dictionary.
    pub num:
        ::std::option::Option<unsafe extern "C" fn(dic: *mut crfsuite_dictionary_t) -> libc::c_int>,
    /// Free the memory block allocated by to_string() function.
    ///
    /// * `dic`         The pointer to this dictionary instance.
    /// * `str`         The pointer to the string whose memory block is
    /// freed.
    pub free: ::std::option::Option<
        unsafe extern "C" fn(dic: *mut crfsuite_dictionary_t, str: *const libc::c_char),
    >,
}
/// CRFSuite parameter interface.
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct tag_crfsuite_params {
    /// Pointer to the instance data (internal use only).
    pub internal: *mut libc::c_void,
    /// Reference counter (internal use only).
    pub nref: libc::c_int,
    /// Increment the reference counter.
    ///
    /// `params`      The pointer to this parameter instance.
    ///
    /// Returns the reference count after this increment.
    pub addref:
        ::std::option::Option<unsafe extern "C" fn(params: *mut crfsuite_params_t) -> libc::c_int>,
    /// Decrement the reference counter.
    ///
    /// `params`      The pointer to this parameter instance.
    ///
    /// Returns the reference count after this operation.
    pub release:
        ::std::option::Option<unsafe extern "C" fn(params: *mut crfsuite_params_t) -> libc::c_int>,
    /// Obtain the number of available parameters.
    ///
    /// `params`      The pointer to this parameter instance.
    ///
    /// Returns the number of parameters maintained by this object.
    pub num:
        ::std::option::Option<unsafe extern "C" fn(params: *mut crfsuite_params_t) -> libc::c_int>,
    /// Obtain the name of a parameter.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `i`           The parameter index.
    /// * `ptr_name`    *ptr_name points to the parameter name.
    ///
    /// Returns int         \c 0 always.
    pub name: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            i: libc::c_int,
            ptr_name: *mut *mut libc::c_char,
        ) -> libc::c_int,
    >,
    /// Set a parameter value.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `name`        The parameter name.
    /// * `value`       The parameter value in string format.
    ///
    /// Returns int         \c 0 if the parameter is found, \c -1 otherwise.
    pub set: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            name: *const libc::c_char,
            value: *const libc::c_char,
        ) -> libc::c_int,
    >,
    /// Get a parameter value.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `name`        The parameter name.
    /// * `ptr_value`   *ptr_value presents the parameter value in string
    /// format.
    ///
    /// Returns int         \c 0 if the parameter is found, \c -1 otherwise.
    pub get: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            name: *const libc::c_char,
            ptr_value: *mut *mut libc::c_char,
        ) -> libc::c_int,
    >,
    /// Set an integer value of a parameter.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `name`        The parameter name.
    /// * `value`       The parameter value.
    ///
    /// Returns int         \c 0 if the parameter value is set successfully,
    /// \c -1 otherwise (unknown parameter or incompatible
    /// type).
    pub set_int: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            name: *const libc::c_char,
            value: libc::c_int,
        ) -> libc::c_int,
    >,
    /// Set a float value of a parameter.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `name`        The parameter name.
    /// * `value`       The parameter value.
    ///
    /// Returns int         \c 0 if the parameter value is set successfully,
    /// \c -1 otherwise (unknown parameter or incompatible
    /// type).
    pub set_float: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            name: *const libc::c_char,
            value: floatval_t,
        ) -> libc::c_int,
    >,
    /// Set a string value of a parameter.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `name`        The parameter name.
    /// * `value`       The parameter value.
    ///
    /// Returns int         \c 0 if the parameter value is set successfully,
    /// \c -1 otherwise (unknown parameter or incompatible
    /// type).
    pub set_string: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            name: *const libc::c_char,
            value: *const libc::c_char,
        ) -> libc::c_int,
    >,
    /// Get an integer value of a parameter.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `name`        The parameter name.
    /// * `ptr_value`   The pointer to a variable that receives the
    /// integer value.
    ///
    /// Returns int         \c 0 if the parameter value is obtained
    /// successfully, \c -1 otherwise (unknown parameter
    /// or incompatible type).
    pub get_int: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            name: *const libc::c_char,
            ptr_value: *mut libc::c_int,
        ) -> libc::c_int,
    >,
    /// Get a float value of a parameter.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `name`        The parameter name.
    /// * `ptr_value`   The pointer to a variable that receives the
    /// float value.
    ///
    /// Returns int         \c 0 if the parameter value is obtained
    /// successfully, \c -1 otherwise (unknown parameter
    /// or incompatible type).
    pub get_float: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            name: *const libc::c_char,
            ptr_value: *mut floatval_t,
        ) -> libc::c_int,
    >,
    /// Get a string value of a parameter.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `name`        The parameter name.
    /// * `ptr_value`   *ptr_value presents the parameter value.
    ///
    /// Returns int         \c 0 if the parameter value is obtained
    /// successfully, \c -1 otherwise (unknown parameter
    /// or incompatible type).
    pub get_string: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            name: *const libc::c_char,
            ptr_value: *mut *mut libc::c_char,
        ) -> libc::c_int,
    >,
    /// Get the help message of a parameter.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `name`        The parameter name.
    /// * `ptr_type`    The pointer to \c char* to which this function
    /// store the type of the parameter.
    /// * `ptr_help`    The pointer to \c char* to which this function
    /// store the help message of the parameter.
    ///
    /// Returns int         \c 0 if the parameter is found, \c -1 otherwise.
    pub help: ::std::option::Option<
        unsafe extern "C" fn(
            params: *mut crfsuite_params_t,
            name: *const libc::c_char,
            ptr_type: *mut *mut libc::c_char,
            ptr_help: *mut *mut libc::c_char,
        ) -> libc::c_int,
    >,
    /// Free the memory block of a string allocated by this object.
    ///
    /// * `params`      The pointer to this parameter instance.
    /// * `str`         The pointer to the string.
    pub free: ::std::option::Option<
        unsafe extern "C" fn(params: *mut crfsuite_params_t, str: *const libc::c_char),
    >,
}
extern "C" {

    /// Create an instance of an object by an interface identifier.
    ///
    /// * `iid`         The interface identifier.
    /// * `ptr`         The pointer to \c void* that points to the
    /// instance of the object if successful,
    /// *ptr points to \c NULL otherwise.
    ///
    /// Returns int         \c 1 if this function creates an object successfully,
    /// \c 0 otherwise. Note that this is inconsistent with the
    /// other CRFsuite API calls.

    pub fn crfsuite_create_instance(
        iid: *const libc::c_char,
        ptr: *mut *mut libc::c_void,
    ) -> libc::c_int;
}
extern "C" {

    /// Create an instance of a model object from a model file.
    ///
    /// * `filename`    The filename of the model.
    /// * `ptr`         The pointer to \c void* that points to the
    /// instance of the model object if successful,
    /// *ptr points to \c NULL otherwise.
    ///
    /// Returns int         \c 0 if this function creates an object successfully,
    /// \c 1 otherwise.

    pub fn crfsuite_create_instance_from_file(
        filename: *const libc::c_char,
        ptr: *mut *mut libc::c_void,
    ) -> libc::c_int;
}
extern "C" {

    /// Create an instance of a model object from a model in memory.
    ///
    /// * `data`        A pointer to the model data.
    /// Must be 16-byte aligned.
    /// * `size`        A size (in bytes) of the model data.
    /// * `ptr`         The pointer to \c void* that points to the
    /// instance of the model object if successful,
    /// *ptr points to \c NULL otherwise.
    ///
    /// Returns int         \c 0 if this function creates an object successfully,
    /// \c 1 otherwise

    pub fn crfsuite_create_instance_from_memory(
        data: *const libc::c_void,
        size: usize,
        ptr: *mut *mut libc::c_void,
    ) -> libc::c_int;
}
extern "C" {

    /// Create instances of tagging object from a model file.
    ///
    /// * `filename`    The filename of the model.
    /// * `ptr_tagger`  The pointer to \c void* that points to the
    /// instance of the tagger object if successful,
    /// *ptr points to \c NULL otherwise.
    /// * `ptr_attrs`   The pointer to \c void* that points to the
    /// instance of the dictionary object for attributes
    /// if successful, *ptr points to \c NULL otherwise.
    /// * `ptr_labels`  The pointer to \c void* that points to the
    /// instance of the dictionary object for labels
    /// if successful, *ptr points to \c NULL otherwise.
    ///
    /// Returns int         \c 0 if this function creates an object successfully,
    /// \c 1 otherwise.

    pub fn crfsuite_create_tagger(
        filename: *const libc::c_char,
        ptr_tagger: *mut *mut crfsuite_tagger_t,
        ptr_attrs: *mut *mut crfsuite_dictionary_t,
        ptr_labels: *mut *mut crfsuite_dictionary_t,
    ) -> libc::c_int;
}
extern "C" {

    /// Initialize an attribute structure.
    ///
    /// `attr`        The pointer to crfsuite_attribute_t.

    pub fn crfsuite_attribute_init(attr: *mut crfsuite_attribute_t);
}
extern "C" {

    /// Set an attribute and its value.
    ///
    /// * `attr`        The pointer to crfsuite_attribute_t.
    /// * `aid`         The attribute identifier.
    /// * `value`       The attribute value.

    pub fn crfsuite_attribute_set(
        attr: *mut crfsuite_attribute_t,
        aid: libc::c_int,
        value: floatval_t,
    );
}
extern "C" {

    /// Copy the content of an attribute structure.
    ///
    /// * `dst`         The pointer to the destination.
    /// * `src`         The pointer to the source.

    pub fn crfsuite_attribute_copy(
        dst: *mut crfsuite_attribute_t,
        src: *const crfsuite_attribute_t,
    );
}
extern "C" {

    /// Swap the contents of two attribute structures.
    ///
    /// * `x`           The pointer to an attribute structure.
    /// * `y`           The pointer to another attribute structure.

    pub fn crfsuite_attribute_swap(x: *mut crfsuite_attribute_t, y: *mut crfsuite_attribute_t);
}
extern "C" {

    /// Initialize an item structure.
    ///
    /// `item`        The pointer to crfsuite_item_t.

    pub fn crfsuite_item_init(item: *mut crfsuite_item_t);
}
extern "C" {

    /// Initialize an item structure with the number of attributes.
    ///
    /// * `item`        The pointer to crfsuite_item_t.
    /// * `num_attributes`  The number of attributes.

    pub fn crfsuite_item_init_n(item: *mut crfsuite_item_t, num_attributes: libc::c_int);
}
extern "C" {

    /// Uninitialize an item structure.
    ///
    /// `item`        The pointer to crfsuite_item_t.

    pub fn crfsuite_item_finish(item: *mut crfsuite_item_t);
}
extern "C" {

    /// Copy the content of an item structure.
    ///
    /// * `dst`         The pointer to the destination.
    /// * `src`         The pointer to the source.

    pub fn crfsuite_item_copy(dst: *mut crfsuite_item_t, src: *const crfsuite_item_t);
}
extern "C" {

    /// Swap the contents of two item structures.
    ///
    /// * `x`           The pointer to an item structure.
    /// * `y`           The pointer to another item structure.

    pub fn crfsuite_item_swap(x: *mut crfsuite_item_t, y: *mut crfsuite_item_t);
}
extern "C" {

    /// Append an attribute to the item structure.
    ///
    /// * `item`        The pointer to crfsuite_item_t.
    /// * `attr`        The attribute to be added to the item.
    ///
    /// Returns int         \c 0 if successful, \c -1 otherwise.

    pub fn crfsuite_item_append_attribute(
        item: *mut crfsuite_item_t,
        attr: *const crfsuite_attribute_t,
    ) -> libc::c_int;
}
extern "C" {

    /// Check whether the item has no attribute.
    ///
    /// `item`        The pointer to crfsuite_item_t.
    ///
    /// Returns int         \c 1 if the item has no attribute, \c 0 otherwise.

    pub fn crfsuite_item_empty(item: *mut crfsuite_item_t) -> libc::c_int;
}
extern "C" {

    /// Initialize an instance structure.
    ///
    /// `seq`         The pointer to crfsuite_instance_t.

    pub fn crfsuite_instance_init(seq: *mut crfsuite_instance_t);
}
extern "C" {

    /// Initialize an instance structure with the number of items.
    ///
    /// * `seq`         The pointer to crfsuite_instance_t.
    /// * `num_items`   The number of items.

    pub fn crfsuite_instance_init_n(seq: *mut crfsuite_instance_t, num_items: libc::c_int);
}
extern "C" {

    /// Uninitialize an instance structure.
    ///
    /// `seq`         The pointer to crfsuite_instance_t.

    pub fn crfsuite_instance_finish(seq: *mut crfsuite_instance_t);
}
extern "C" {

    /// Copy the content of an instance structure.
    ///
    /// * `dst`         The pointer to the destination.
    /// * `src`         The pointer to the source.

    pub fn crfsuite_instance_copy(dst: *mut crfsuite_instance_t, src: *const crfsuite_instance_t);
}
extern "C" {

    /// Swap the contents of two instance structures.
    ///
    /// * `x`           The pointer to an instance structure.
    /// * `y`           The pointer to another instance structure.

    pub fn crfsuite_instance_swap(x: *mut crfsuite_instance_t, y: *mut crfsuite_instance_t);
}
extern "C" {

    /// Append a pair of item and label to the instance structure.
    ///
    /// * `seq`         The pointer to crfsuite_instance_t.
    /// * `item`        The item to be added to the instance.
    /// * `label`       The label to be added to the instance.
    ///
    /// Returns int         \c 0 if successful, \c -1 otherwise.

    pub fn crfsuite_instance_append(
        seq: *mut crfsuite_instance_t,
        item: *const crfsuite_item_t,
        label: libc::c_int,
    ) -> libc::c_int;
}
extern "C" {

    /// Check whether the instance has no item.
    ///
    /// `seq`         The pointer to crfsuite_instance_t.
    ///
    /// Returns int         \c 1 if the instance has no attribute, \c 0 otherwise.

    pub fn crfsuite_instance_empty(seq: *mut crfsuite_instance_t) -> libc::c_int;
}
extern "C" {

    /// Initialize a dataset structure.
    ///
    /// `data`        The pointer to crfsuite_data_t.

    pub fn crfsuite_data_init(data: *mut crfsuite_data_t);
}
extern "C" {

    /// Initialize a dataset structure with the number of instances.
    ///
    /// * `data`        The pointer to crfsuite_data_t.
    /// * `n`           The number of instances.

    pub fn crfsuite_data_init_n(data: *mut crfsuite_data_t, n: libc::c_int);
}
extern "C" {

    /// Uninitialize a dataset structure.
    ///
    /// `data`        The pointer to crfsuite_data_t.

    pub fn crfsuite_data_finish(data: *mut crfsuite_data_t);
}
extern "C" {

    /// Copy the content of a dataset structure.
    ///
    /// * `dst`         The pointer to the destination.
    /// * `src`         The pointer to the source.

    pub fn crfsuite_data_copy(dst: *mut crfsuite_data_t, src: *const crfsuite_data_t);
}
extern "C" {

    /// Swap the contents of two dataset structures.
    ///
    /// * `x`           The pointer to a dataset structure.
    /// * `y`           The pointer to another dataset structure.

    pub fn crfsuite_data_swap(x: *mut crfsuite_data_t, y: *mut crfsuite_data_t);
}
extern "C" {

    /// Append an instance to the dataset structure.
    ///
    /// * `data`        The pointer to crfsuite_data_t.
    /// * `inst`        The instance to be added to the dataset.
    ///
    /// Returns int         \c 0 if successful, \c -1 otherwise.

    pub fn crfsuite_data_append(
        data: *mut crfsuite_data_t,
        inst: *const crfsuite_instance_t,
    ) -> libc::c_int;
}
extern "C" {

    /// Obtain the maximum length of the instances in the dataset.
    ///
    /// `data`        The pointer to crfsuite_data_t.
    ///
    /// Returns the maximum number of items of the instances in the
    /// dataset.

    pub fn crfsuite_data_maxlength(data: *mut crfsuite_data_t) -> libc::c_int;
}
extern "C" {

    /// Obtain the total number of items in the dataset.
    ///
    /// `data`        The pointer to crfsuite_data_t.
    ///
    /// Returns the total number of items in the dataset.

    pub fn crfsuite_data_totalitems(data: *mut crfsuite_data_t) -> libc::c_int;
}
extern "C" {

    /// Initialize an evaluation structure.
    ///
    /// * `eval`        The pointer to crfsuite_evaluation_t.
    /// * `n`           The number of labels in the dataset.

    pub fn crfsuite_evaluation_init(eval: *mut crfsuite_evaluation_t, n: libc::c_int);
}
extern "C" {

    /// Uninitialize an evaluation structure.
    ///
    /// `eval`        The pointer to crfsuite_evaluation_t.

    pub fn crfsuite_evaluation_finish(eval: *mut crfsuite_evaluation_t);
}
extern "C" {

    /// Reset an evaluation structure.
    ///
    /// `eval`        The pointer to crfsuite_evaluation_t.

    pub fn crfsuite_evaluation_clear(eval: *mut crfsuite_evaluation_t);
}
extern "C" {

    /// Accmulate the correctness of the predicted label sequence.
    ///
    /// * `eval`        The pointer to crfsuite_evaluation_t.
    /// * `reference`   The reference label sequence.
    /// * `prediction`  The predicted label sequence.
    /// * `T`           The length of the label sequence.
    ///
    /// Returns int         \c 0 if succeeded, \c 1 otherwise.

    pub fn crfsuite_evaluation_accmulate(
        eval: *mut crfsuite_evaluation_t,
        reference: *const libc::c_int,
        prediction: *const libc::c_int,
        T: libc::c_int,
    ) -> libc::c_int;
}
extern "C" {

    /// Finalize the evaluation result.
    ///
    /// `eval`        The pointer to crfsuite_evaluation_t.

    pub fn crfsuite_evaluation_finalize(eval: *mut crfsuite_evaluation_t);
}
extern "C" {

    /// Print the evaluation result.
    ///
    /// * `eval`        The pointer to crfsuite_evaluation_t.
    /// * `labels`      The pointer to the label dictionary.
    /// * `cbm`         The callback function to receive the evaluation result.
    /// * `user`        The pointer to the user data that is forwarded to the
    /// callback function.

    pub fn crfsuite_evaluation_output(
        eval: *mut crfsuite_evaluation_t,
        labels: *mut crfsuite_dictionary_t,
        cbm: crfsuite_logging_callback,
        user: *mut libc::c_void,
    );
}
extern "C" {

    /// Increments the value of the integer variable as an atomic operation.
    ///
    /// `count`       The pointer to the integer variable.
    ///
    /// Returns the value after this increment.

    pub fn crfsuite_interlocked_increment(count: *mut libc::c_int) -> libc::c_int;
}
extern "C" {

    /// Decrements the value of the integer variable as an atomic operation.
    ///
    /// `count`       The pointer to the integer variable.
    ///
    /// Returns the value after this decrement.

    pub fn crfsuite_interlocked_decrement(count: *mut libc::c_int) -> libc::c_int;
}

#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct __va_list_tag {
    pub gp_offset: libc::c_uint,
    pub fp_offset: libc::c_uint,
    pub overflow_arg_area: *mut libc::c_void,
    pub reg_save_area: *mut libc::c_void,
}
