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

package marisa;
use base qw(Exporter);
use base qw(DynaLoader);
package marisac;
bootstrap marisa;
package marisa;
@EXPORT = qw();

# ---------- BASE METHODS -------------

package marisa;

sub TIEHASH {
    my ($classname,$obj) = @_;
    return bless $obj, $classname;
}

sub CLEAR { }

sub FIRSTKEY { }

sub NEXTKEY { }

sub FETCH {
    my ($self,$field) = @_;
    my $member_func = "swig_${field}_get";
    $self->$member_func();
}

sub STORE {
    my ($self,$field,$newval) = @_;
    my $member_func = "swig_${field}_set";
    $self->$member_func($newval);
}

sub this {
    my $ptr = shift;
    return tied(%$ptr);
}


# ------- FUNCTION WRAPPERS --------

package marisa;


############# Class : marisa::Key ##############

package marisa::Key;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( marisa );
%OWNER = ();
%ITERATORS = ();
*str = *marisac::Key_str;
*id = *marisac::Key_id;
*weight = *marisac::Key_weight;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        marisac::delete_Key($self);
        delete $OWNER{$self};
    }
}

sub DISOWN {
    my $self = shift;
    my $ptr = tied(%$self);
    delete $OWNER{$ptr};
}

sub ACQUIRE {
    my $self = shift;
    my $ptr = tied(%$self);
    $OWNER{$ptr} = 1;
}


############# Class : marisa::Query ##############

package marisa::Query;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( marisa );
%OWNER = ();
%ITERATORS = ();
*str = *marisac::Query_str;
*id = *marisac::Query_id;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        marisac::delete_Query($self);
        delete $OWNER{$self};
    }
}

sub DISOWN {
    my $self = shift;
    my $ptr = tied(%$self);
    delete $OWNER{$ptr};
}

sub ACQUIRE {
    my $self = shift;
    my $ptr = tied(%$self);
    $OWNER{$ptr} = 1;
}


############# Class : marisa::Keyset ##############

package marisa::Keyset;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( marisa );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = marisac::new_Keyset(@_);
    bless $self, $pkg if defined($self);
}

sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        marisac::delete_Keyset($self);
        delete $OWNER{$self};
    }
}

*push_back = *marisac::Keyset_push_back;
*key = *marisac::Keyset_key;
*key_str = *marisac::Keyset_key_str;
*key_id = *marisac::Keyset_key_id;
*num_keys = *marisac::Keyset_num_keys;
*empty = *marisac::Keyset_empty;
*size = *marisac::Keyset_size;
*total_length = *marisac::Keyset_total_length;
*reset = *marisac::Keyset_reset;
*clear = *marisac::Keyset_clear;
sub DISOWN {
    my $self = shift;
    my $ptr = tied(%$self);
    delete $OWNER{$ptr};
}

sub ACQUIRE {
    my $self = shift;
    my $ptr = tied(%$self);
    $OWNER{$ptr} = 1;
}


############# Class : marisa::Agent ##############

package marisa::Agent;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( marisa );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = marisac::new_Agent(@_);
    bless $self, $pkg if defined($self);
}

sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        marisac::delete_Agent($self);
        delete $OWNER{$self};
    }
}

*set_query = *marisac::Agent_set_query;
*key = *marisac::Agent_key;
*query = *marisac::Agent_query;
*key_str = *marisac::Agent_key_str;
*key_id = *marisac::Agent_key_id;
*query_str = *marisac::Agent_query_str;
*query_id = *marisac::Agent_query_id;
sub DISOWN {
    my $self = shift;
    my $ptr = tied(%$self);
    delete $OWNER{$ptr};
}

sub ACQUIRE {
    my $self = shift;
    my $ptr = tied(%$self);
    $OWNER{$ptr} = 1;
}


############# Class : marisa::Trie ##############

package marisa::Trie;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( marisa );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = marisac::new_Trie(@_);
    bless $self, $pkg if defined($self);
}

sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        marisac::delete_Trie($self);
        delete $OWNER{$self};
    }
}

*build = *marisac::Trie_build;
*mmap = *marisac::Trie_mmap;
*load = *marisac::Trie_load;
*save = *marisac::Trie_save;
*common_prefix_search = *marisac::Trie_common_prefix_search;
*predictive_search = *marisac::Trie_predictive_search;
*lookup = *marisac::Trie_lookup;
*reverse_lookup = *marisac::Trie_reverse_lookup;
*num_tries = *marisac::Trie_num_tries;
*num_keys = *marisac::Trie_num_keys;
*num_nodes = *marisac::Trie_num_nodes;
*tail_mode = *marisac::Trie_tail_mode;
*node_order = *marisac::Trie_node_order;
*empty = *marisac::Trie_empty;
*size = *marisac::Trie_size;
*total_size = *marisac::Trie_total_size;
*io_size = *marisac::Trie_io_size;
*clear = *marisac::Trie_clear;
sub DISOWN {
    my $self = shift;
    my $ptr = tied(%$self);
    delete $OWNER{$ptr};
}

sub ACQUIRE {
    my $self = shift;
    my $ptr = tied(%$self);
    $OWNER{$ptr} = 1;
}


# ------- VARIABLE STUBS --------

package marisa;

*OK = *marisac::OK;
*STATE_ERROR = *marisac::STATE_ERROR;
*NULL_ERROR = *marisac::NULL_ERROR;
*BOUND_ERROR = *marisac::BOUND_ERROR;
*RANGE_ERROR = *marisac::RANGE_ERROR;
*CODE_ERROR = *marisac::CODE_ERROR;
*RESET_ERROR = *marisac::RESET_ERROR;
*SIZE_ERROR = *marisac::SIZE_ERROR;
*MEMORY_ERROR = *marisac::MEMORY_ERROR;
*IO_ERROR = *marisac::IO_ERROR;
*FORMAT_ERROR = *marisac::FORMAT_ERROR;
*MIN_NUM_TRIES = *marisac::MIN_NUM_TRIES;
*MAX_NUM_TRIES = *marisac::MAX_NUM_TRIES;
*DEFAULT_NUM_TRIES = *marisac::DEFAULT_NUM_TRIES;
*HUGE_CACHE = *marisac::HUGE_CACHE;
*LARGE_CACHE = *marisac::LARGE_CACHE;
*NORMAL_CACHE = *marisac::NORMAL_CACHE;
*SMALL_CACHE = *marisac::SMALL_CACHE;
*TINY_CACHE = *marisac::TINY_CACHE;
*DEFAULT_CACHE = *marisac::DEFAULT_CACHE;
*TEXT_TAIL = *marisac::TEXT_TAIL;
*BINARY_TAIL = *marisac::BINARY_TAIL;
*DEFAULT_TAIL = *marisac::DEFAULT_TAIL;
*LABEL_ORDER = *marisac::LABEL_ORDER;
*WEIGHT_ORDER = *marisac::WEIGHT_ORDER;
*DEFAULT_ORDER = *marisac::DEFAULT_ORDER;
*INVALID_KEY_ID = *marisac::INVALID_KEY_ID;
1;
