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

package ABAC;
use base qw(Exporter);
use base qw(DynaLoader);
package ABACc;
bootstrap ABAC;
package ABAC;
@EXPORT = qw();

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

package ABAC;

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 ABAC;

*SSL_keyid = *ABACc::SSL_keyid;
*abac_chunk_free = *ABACc::abac_chunk_free;
*abac_context_new = *ABACc::abac_context_new;
*abac_context_dup = *ABACc::abac_context_dup;
*abac_context_free = *ABACc::abac_context_free;
*abac_context_load_id_file = *ABACc::abac_context_load_id_file;
*abac_context_load_id_chunk = *ABACc::abac_context_load_id_chunk;
*abac_context_load_id_id = *ABACc::abac_context_load_id_id;
*abac_context_load_attribute_file = *ABACc::abac_context_load_attribute_file;
*abac_context_load_attribute_chunk = *ABACc::abac_context_load_attribute_chunk;
*abac_context_load_directory = *ABACc::abac_context_load_directory;
*abac_context_query = *ABACc::abac_context_query;
*abac_context_credentials = *ABACc::abac_context_credentials;
*abac_context_principals = *ABACc::abac_context_principals;
*abac_context_id_credentials_free = *ABACc::abac_context_id_credentials_free;
*abac_context_credentials_free = *ABACc::abac_context_credentials_free;
*abac_context_set_nickname = *ABACc::abac_context_set_nickname;
*abac_context_expand_key = *ABACc::abac_context_expand_key;
*abac_context_expand_nickname = *ABACc::abac_context_expand_nickname;
*abac_context_get_keyid_map = *ABACc::abac_context_get_keyid_map;
*abac_credential_head = *ABACc::abac_credential_head;
*abac_credential_tail = *ABACc::abac_credential_tail;
*abac_credential_attribute_cert = *ABACc::abac_credential_attribute_cert;
*abac_credential_issuer_cert = *ABACc::abac_credential_issuer_cert;
*abac_credential_dup = *ABACc::abac_credential_dup;
*abac_credential_free = *ABACc::abac_credential_free;
*abac_id_cert_keyid = *ABACc::abac_id_cert_keyid;
*abac_id_cert_cn = *ABACc::abac_id_cert_cn;
*abac_role_principal_new = *ABACc::abac_role_principal_new;
*abac_role_role_new = *ABACc::abac_role_role_new;
*abac_role_linking_new = *ABACc::abac_role_linking_new;
*abac_role_free = *ABACc::abac_role_free;
*abac_role_from_string = *ABACc::abac_role_from_string;
*abac_role_dup = *ABACc::abac_role_dup;
*abac_role_is_principal = *ABACc::abac_role_is_principal;
*abac_role_is_role = *ABACc::abac_role_is_role;
*abac_role_is_linking = *ABACc::abac_role_is_linking;
*abac_role_is_intersection = *ABACc::abac_role_is_intersection;
*abac_role_string = *ABACc::abac_role_string;
*abac_role_short_string = *ABACc::abac_role_short_string;
*abac_role_linked_role = *ABACc::abac_role_linked_role;
*abac_role_linking_role = *ABACc::abac_role_linking_role;
*abac_role_role_name = *ABACc::abac_role_role_name;
*abac_role_principal = *ABACc::abac_role_principal;
*abac_role_attr_key = *ABACc::abac_role_attr_key;
*abac_id_from_file = *ABACc::abac_id_from_file;
*abac_id_from_chunk = *ABACc::abac_id_from_chunk;
*abac_id_privkey_from_file = *ABACc::abac_id_privkey_from_file;
*abac_id_privkey_from_chunk = *ABACc::abac_id_privkey_from_chunk;
*abac_id_generate = *ABACc::abac_id_generate;
*abac_id_generate_with_key = *ABACc::abac_id_generate_with_key;
*abac_id_keyid = *ABACc::abac_id_keyid;
*abac_id_cn = *ABACc::abac_id_cn;
*abac_id_issuer = *ABACc::abac_id_issuer;
*abac_id_subject = *ABACc::abac_id_subject;
*abac_id_still_valid = *ABACc::abac_id_still_valid;
*abac_id_has_keyid = *ABACc::abac_id_has_keyid;
*abac_id_has_privkey = *ABACc::abac_id_has_privkey;
*abac_id_validity = *ABACc::abac_id_validity;
*abac_id_cert_filename = *ABACc::abac_id_cert_filename;
*abac_id_write_cert = *ABACc::abac_id_write_cert;
*abac_id_privkey_filename = *ABACc::abac_id_privkey_filename;
*abac_id_write_privkey = *ABACc::abac_id_write_privkey;
*abac_id_cert_chunk = *ABACc::abac_id_cert_chunk;
*abac_id_privkey_chunk = *ABACc::abac_id_privkey_chunk;
*abac_id_dup = *ABACc::abac_id_dup;
*abac_id_free = *ABACc::abac_id_free;
*abac_attribute_create = *ABACc::abac_attribute_create;
*abac_attribute_set_head = *ABACc::abac_attribute_set_head;
*abac_attribute_get_head = *ABACc::abac_attribute_get_head;
*abac_attribute_principal = *ABACc::abac_attribute_principal;
*abac_attribute_role = *ABACc::abac_attribute_role;
*abac_attribute_linking_role = *ABACc::abac_attribute_linking_role;
*abac_attribute_bake = *ABACc::abac_attribute_bake;
*abac_attribute_bake_context = *ABACc::abac_attribute_bake_context;
*abac_attribute_baked = *ABACc::abac_attribute_baked;
*abac_attribute_write = *ABACc::abac_attribute_write;
*abac_attribute_write_file = *ABACc::abac_attribute_write_file;
*abac_attribute_get_ntails = *ABACc::abac_attribute_get_ntails;
*abac_attribute_get_tail_n = *ABACc::abac_attribute_get_tail_n;
*abac_attribute_cert_chunk = *ABACc::abac_attribute_cert_chunk;
*abac_attribute_free = *ABACc::abac_attribute_free;
*abac_attribute_certs_from_file = *ABACc::abac_attribute_certs_from_file;
*abac_attribute_certs_from_chunk = *ABACc::abac_attribute_certs_from_chunk;
*abac_attribute_role_string = *ABACc::abac_attribute_role_string;
*abac_attribute_issuer_id = *ABACc::abac_attribute_issuer_id;
*abac_attribute_get_output_format = *ABACc::abac_attribute_get_output_format;
*abac_attribute_set_output_format = *ABACc::abac_attribute_set_output_format;
*abac_attribute_validity = *ABACc::abac_attribute_validity;
*abac_attribute_get_keyid_map = *ABACc::abac_attribute_get_keyid_map;
*abac_attribute_get_principal = *ABACc::abac_attribute_get_principal;
*abac_attribute_still_valid = *ABACc::abac_attribute_still_valid;
*abac_keyid_mapping_new = *ABACc::abac_keyid_mapping_new;
*abac_keyid_mapping_free = *ABACc::abac_keyid_mapping_free;
*abac_keyid_map_new = *ABACc::abac_keyid_map_new;
*abac_keyid_map_dup = *ABACc::abac_keyid_map_dup;
*abac_keyid_map_clone = *ABACc::abac_keyid_map_clone;
*abac_keyid_map_free = *ABACc::abac_keyid_map_free;
*abac_keyid_map_key_to_nickname = *ABACc::abac_keyid_map_key_to_nickname;
*abac_keyid_map_nickname_to_key = *ABACc::abac_keyid_map_nickname_to_key;
*abac_keyid_map_remove_keyid = *ABACc::abac_keyid_map_remove_keyid;
*abac_keyid_map_add_nickname = *ABACc::abac_keyid_map_add_nickname;
*abac_keyid_map_merge = *ABACc::abac_keyid_map_merge;
*abac_keyid_map_expand_key = *ABACc::abac_keyid_map_expand_key;
*abac_keyid_map_expand_nickname = *ABACc::abac_keyid_map_expand_nickname;

############# Class : ABAC::CredentialVector ##############

package ABAC::CredentialVector;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( ABAC );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = ABACc::new_CredentialVector(@_);
    bless $self, $pkg if defined($self);
}

*size = *ABACc::CredentialVector_size;
*empty = *ABACc::CredentialVector_empty;
*clear = *ABACc::CredentialVector_clear;
*push = *ABACc::CredentialVector_push;
*get = *ABACc::CredentialVector_get;
*set = *ABACc::CredentialVector_set;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        ABACc::delete_CredentialVector($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 : ABAC::abac_chunk_t ##############

package ABAC::abac_chunk_t;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( ABAC );
%OWNER = ();
%ITERATORS = ();
*swig_ptr_get = *ABACc::abac_chunk_t_ptr_get;
*swig_ptr_set = *ABACc::abac_chunk_t_ptr_set;
*swig_len_get = *ABACc::abac_chunk_t_len_get;
*swig_len_set = *ABACc::abac_chunk_t_len_set;
sub new {
    my $pkg = shift;
    my $self = ABACc::new_abac_chunk_t(@_);
    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}) {
        ABACc::delete_abac_chunk_t($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 : ABAC::Context ##############

package ABAC::Context;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( ABAC );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = ABACc::new_Context(@_);
    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}) {
        ABACc::delete_Context($self);
        delete $OWNER{$self};
    }
}

*load_id_file = *ABACc::Context_load_id_file;
*load_id_chunk = *ABACc::Context_load_id_chunk;
*load_id_id = *ABACc::Context_load_id_id;
*load_attribute_file = *ABACc::Context_load_attribute_file;
*load_attribute_chunk = *ABACc::Context_load_attribute_chunk;
*query = *ABACc::Context_query;
*credentials = *ABACc::Context_credentials;
*load_directory = *ABACc::Context_load_directory;
*set_nickname = *ABACc::Context_set_nickname;
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 : ABAC::Role ##############

package ABAC::Role;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( ABAC );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = ABACc::new_Role(@_);
    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}) {
        ABACc::delete_Role($self);
        delete $OWNER{$self};
    }
}

*is_principal = *ABACc::Role_is_principal;
*is_role = *ABACc::Role_is_role;
*is_linking = *ABACc::Role_is_linking;
*string = *ABACc::Role_string;
*short_string = *ABACc::Role_short_string;
*linked_role = *ABACc::Role_linked_role;
*role_name = *ABACc::Role_role_name;
*principal = *ABACc::Role_principal;
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 : ABAC::Credential ##############

package ABAC::Credential;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( ABAC );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = ABACc::new_Credential(@_);
    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}) {
        ABACc::delete_Credential($self);
        delete $OWNER{$self};
    }
}

*head = *ABACc::Credential_head;
*tail = *ABACc::Credential_tail;
*attribute_cert = *ABACc::Credential_attribute_cert;
*issuer_cert = *ABACc::Credential_issuer_cert;
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 : ABAC::ID ##############

package ABAC::ID;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( ABAC );
%OWNER = ();
%ITERATORS = ();
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        ABACc::delete_ID($self);
        delete $OWNER{$self};
    }
}

sub new_ID_chunk {
    my $pkg = shift;
    my $self = ABACc::new_ID_chunk(@_);
    bless $self, $pkg if defined($self);
}

sub new {
    my $pkg = shift;
    my $self = ABACc::new_ID(@_);
    bless $self, $pkg if defined($self);
}

*load_privkey = *ABACc::ID_load_privkey;
*load_privkey_chunk = *ABACc::ID_load_privkey_chunk;
*has_privkey = *ABACc::ID_has_privkey;
*keyid = *ABACc::ID_keyid;
*cn = *ABACc::ID_cn;
*cert_filename = *ABACc::ID_cert_filename;
*write_cert = *ABACc::ID_write_cert;
*write_cert_file = *ABACc::ID_write_cert_file;
*write_cert_name = *ABACc::ID_write_cert_name;
*privkey_filename = *ABACc::ID_privkey_filename;
*write_privkey = *ABACc::ID_write_privkey;
*write_privkey_file = *ABACc::ID_write_privkey_file;
*write_privkey_name = *ABACc::ID_write_privkey_name;
*cert_chunk = *ABACc::ID_cert_chunk;
*privkey_chunk = *ABACc::ID_privkey_chunk;
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 : ABAC::Attribute ##############

package ABAC::Attribute;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( ABAC );
%OWNER = ();
%ITERATORS = ();
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        ABACc::delete_Attribute($self);
        delete $OWNER{$self};
    }
}

sub new {
    my $pkg = shift;
    my $self = ABACc::new_Attribute(@_);
    bless $self, $pkg if defined($self);
}

*principal = *ABACc::Attribute_principal;
*role = *ABACc::Attribute_role;
*linking_role = *ABACc::Attribute_linking_role;
*bake = *ABACc::Attribute_bake;
*baked = *ABACc::Attribute_baked;
*set_output_format = *ABACc::Attribute_set_output_format;
*get_output_format = *ABACc::Attribute_get_output_format;
*write = *ABACc::Attribute_write;
*write_file = *ABACc::Attribute_write_file;
*write_name = *ABACc::Attribute_write_name;
*cert_chunk = *ABACc::Attribute_cert_chunk;
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 ABAC;

*ABAC_RC_SUCCESS = *ABACc::ABAC_RC_SUCCESS;
*ABAC_RC_FAILURE = *ABACc::ABAC_RC_FAILURE;
*ABAC_CERT_SUCCESS = *ABACc::ABAC_CERT_SUCCESS;
*ABAC_CERT_INVALID = *ABACc::ABAC_CERT_INVALID;
*ABAC_CERT_BAD_SIG = *ABACc::ABAC_CERT_BAD_SIG;
*ABAC_CERT_MISSING_ISSUER = *ABACc::ABAC_CERT_MISSING_ISSUER;
*ABAC_CERT_BAD_PRINCIPAL = *ABACc::ABAC_CERT_BAD_PRINCIPAL;
*ABAC_CERT_INVALID_ISSUER = *ABACc::ABAC_CERT_INVALID_ISSUER;
*ABAC_CERT_SIGNER_NOKEY = *ABACc::ABAC_CERT_SIGNER_NOKEY;
*ABAC_SUCCESS = *ABACc::ABAC_SUCCESS;
*ABAC_FAILURE = *ABACc::ABAC_FAILURE;
*ABAC_GENERATE_INVALID_CN = *ABACc::ABAC_GENERATE_INVALID_CN;
*ABAC_GENERATE_INVALID_VALIDITY = *ABACc::ABAC_GENERATE_INVALID_VALIDITY;
*ABAC_ATTRIBUTE_ISSUER_NOKEY = *ABACc::ABAC_ATTRIBUTE_ISSUER_NOKEY;
*ABAC_ATTRIBUTE_INVALID_ROLE = *ABACc::ABAC_ATTRIBUTE_INVALID_ROLE;
*ABAC_ATTRIBUTE_INVALID_VALIDITY = *ABACc::ABAC_ATTRIBUTE_INVALID_VALIDITY;
*ABAC_ATTRIBUTE_INVALID_ISSUER = *ABACc::ABAC_ATTRIBUTE_INVALID_ISSUER;
1;
