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

package libdnf5::repo;
use base qw(Exporter);
use base qw(DynaLoader);
require libdnf5::common;
require libdnf5::exception;
require libdnf5::conf;
require libdnf5::logger;
package libdnf5::repoc;
bootstrap libdnf5::repo;
package libdnf5::repo;
@EXPORT = qw();

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

package libdnf5::repo;

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 libdnf5::repo;

*__eq__ = *libdnf5::repoc::__eq__;

############# Class : libdnf5::repo::ConfigRepo ##############

package libdnf5::repo::ConfigRepo;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::conf::Config libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        libdnf5::repoc::delete_ConfigRepo($self);
        delete $OWNER{$self};
    }
}

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

*get_main_config = *libdnf5::repoc::ConfigRepo_get_main_config;
*get_id = *libdnf5::repoc::ConfigRepo_get_id;
*get_name_option = *libdnf5::repoc::ConfigRepo_get_name_option;
*get_enabled_option = *libdnf5::repoc::ConfigRepo_get_enabled_option;
*get_basecachedir_option = *libdnf5::repoc::ConfigRepo_get_basecachedir_option;
*get_baseurl_option = *libdnf5::repoc::ConfigRepo_get_baseurl_option;
*get_mirrorlist_option = *libdnf5::repoc::ConfigRepo_get_mirrorlist_option;
*get_metalink_option = *libdnf5::repoc::ConfigRepo_get_metalink_option;
*get_type_option = *libdnf5::repoc::ConfigRepo_get_type_option;
*get_mediaid_option = *libdnf5::repoc::ConfigRepo_get_mediaid_option;
*get_gpgkey_option = *libdnf5::repoc::ConfigRepo_get_gpgkey_option;
*get_excludepkgs_option = *libdnf5::repoc::ConfigRepo_get_excludepkgs_option;
*get_includepkgs_option = *libdnf5::repoc::ConfigRepo_get_includepkgs_option;
*get_fastestmirror_option = *libdnf5::repoc::ConfigRepo_get_fastestmirror_option;
*get_proxy_option = *libdnf5::repoc::ConfigRepo_get_proxy_option;
*get_proxy_username_option = *libdnf5::repoc::ConfigRepo_get_proxy_username_option;
*get_proxy_password_option = *libdnf5::repoc::ConfigRepo_get_proxy_password_option;
*get_proxy_auth_method_option = *libdnf5::repoc::ConfigRepo_get_proxy_auth_method_option;
*get_username_option = *libdnf5::repoc::ConfigRepo_get_username_option;
*get_password_option = *libdnf5::repoc::ConfigRepo_get_password_option;
*get_protected_packages_option = *libdnf5::repoc::ConfigRepo_get_protected_packages_option;
*get_gpgcheck_option = *libdnf5::repoc::ConfigRepo_get_gpgcheck_option;
*get_pkg_gpgcheck_option = *libdnf5::repoc::ConfigRepo_get_pkg_gpgcheck_option;
*get_repo_gpgcheck_option = *libdnf5::repoc::ConfigRepo_get_repo_gpgcheck_option;
*get_enablegroups_option = *libdnf5::repoc::ConfigRepo_get_enablegroups_option;
*get_retries_option = *libdnf5::repoc::ConfigRepo_get_retries_option;
*get_bandwidth_option = *libdnf5::repoc::ConfigRepo_get_bandwidth_option;
*get_minrate_option = *libdnf5::repoc::ConfigRepo_get_minrate_option;
*get_ip_resolve_option = *libdnf5::repoc::ConfigRepo_get_ip_resolve_option;
*get_throttle_option = *libdnf5::repoc::ConfigRepo_get_throttle_option;
*get_timeout_option = *libdnf5::repoc::ConfigRepo_get_timeout_option;
*get_max_parallel_downloads_option = *libdnf5::repoc::ConfigRepo_get_max_parallel_downloads_option;
*get_max_downloads_per_mirror_option = *libdnf5::repoc::ConfigRepo_get_max_downloads_per_mirror_option;
*get_metadata_expire_option = *libdnf5::repoc::ConfigRepo_get_metadata_expire_option;
*get_cost_option = *libdnf5::repoc::ConfigRepo_get_cost_option;
*get_priority_option = *libdnf5::repoc::ConfigRepo_get_priority_option;
*get_module_hotfixes_option = *libdnf5::repoc::ConfigRepo_get_module_hotfixes_option;
*get_sslcacert_option = *libdnf5::repoc::ConfigRepo_get_sslcacert_option;
*get_sslverify_option = *libdnf5::repoc::ConfigRepo_get_sslverify_option;
*get_sslclientcert_option = *libdnf5::repoc::ConfigRepo_get_sslclientcert_option;
*get_sslclientkey_option = *libdnf5::repoc::ConfigRepo_get_sslclientkey_option;
*get_proxy_sslcacert_option = *libdnf5::repoc::ConfigRepo_get_proxy_sslcacert_option;
*get_proxy_sslverify_option = *libdnf5::repoc::ConfigRepo_get_proxy_sslverify_option;
*get_proxy_sslclientcert_option = *libdnf5::repoc::ConfigRepo_get_proxy_sslclientcert_option;
*get_proxy_sslclientkey_option = *libdnf5::repoc::ConfigRepo_get_proxy_sslclientkey_option;
*get_deltarpm_option = *libdnf5::repoc::ConfigRepo_get_deltarpm_option;
*get_deltarpm_percentage_option = *libdnf5::repoc::ConfigRepo_get_deltarpm_percentage_option;
*get_skip_if_unavailable_option = *libdnf5::repoc::ConfigRepo_get_skip_if_unavailable_option;
*get_build_cache_option = *libdnf5::repoc::ConfigRepo_get_build_cache_option;
*get_enabled_metadata_option = *libdnf5::repoc::ConfigRepo_get_enabled_metadata_option;
*get_user_agent_option = *libdnf5::repoc::ConfigRepo_get_user_agent_option;
*get_countme_option = *libdnf5::repoc::ConfigRepo_get_countme_option;
*get_failovermethod_option = *libdnf5::repoc::ConfigRepo_get_failovermethod_option;
*get_unique_id = *libdnf5::repoc::ConfigRepo_get_unique_id;
*get_cachedir = *libdnf5::repoc::ConfigRepo_get_cachedir;
*get_persistdir = *libdnf5::repoc::ConfigRepo_get_persistdir;
*load_from_parser = *libdnf5::repoc::ConfigRepo_load_from_parser;
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 : libdnf5::repo::DownloadCallbacks ##############

package libdnf5::repo::DownloadCallbacks;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
*FastestMirrorStage_INIT = *libdnf5::repoc::DownloadCallbacks_FastestMirrorStage_INIT;
*FastestMirrorStage_CACHELOADING = *libdnf5::repoc::DownloadCallbacks_FastestMirrorStage_CACHELOADING;
*FastestMirrorStage_CACHELOADINGSTATUS = *libdnf5::repoc::DownloadCallbacks_FastestMirrorStage_CACHELOADINGSTATUS;
*FastestMirrorStage_DETECTION = *libdnf5::repoc::DownloadCallbacks_FastestMirrorStage_DETECTION;
*FastestMirrorStage_FINISHING = *libdnf5::repoc::DownloadCallbacks_FastestMirrorStage_FINISHING;
*FastestMirrorStage_STATUS = *libdnf5::repoc::DownloadCallbacks_FastestMirrorStage_STATUS;
*TransferStatus_SUCCESSFUL = *libdnf5::repoc::DownloadCallbacks_TransferStatus_SUCCESSFUL;
*TransferStatus_ALREADYEXISTS = *libdnf5::repoc::DownloadCallbacks_TransferStatus_ALREADYEXISTS;
*TransferStatus_ERROR = *libdnf5::repoc::DownloadCallbacks_TransferStatus_ERROR;
*OK = *libdnf5::repoc::DownloadCallbacks_OK;
*ABORT = *libdnf5::repoc::DownloadCallbacks_ABORT;
*ERROR = *libdnf5::repoc::DownloadCallbacks_ERROR;
sub new {
    my $pkg = $_[0];
    my $self = libdnf5::repoc::new_DownloadCallbacks(@_);
    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}) {
        libdnf5::repoc::delete_DownloadCallbacks($self);
        delete $OWNER{$self};
    }
}

*add_new_download = *libdnf5::repoc::DownloadCallbacks_add_new_download;
*progress = *libdnf5::repoc::DownloadCallbacks_progress;
*end = *libdnf5::repoc::DownloadCallbacks_end;
*mirror_failure = *libdnf5::repoc::DownloadCallbacks_mirror_failure;
*fastest_mirror = *libdnf5::repoc::DownloadCallbacks_fastest_mirror;
sub DISOWN {
    my $self = shift;
    libdnf5::repoc::disown_DownloadCallbacks($self);
    my $ptr = tied(%$self);
    delete $OWNER{$ptr};
}

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

sub FETCH {
    my ($self,$field) = @_;
    my $member_func = "swig_${field}_get";
    if (not $self->can($member_func)) {
        my $h = libdnf5::repoc::swig_get_attr_DownloadCallbacks($self);
        return $h->{$field} if $h;
    }
    return $self->$member_func;
}

sub STORE {
    my ($self,$field,$newval) = @_;
    my $member_func = "swig_${field}_set";
    if (not $self->can($member_func)) {
        my $h = libdnf5::repoc::swig_get_attr_DownloadCallbacks($self);
        return $h->{$field} = $newval if $h;
    }
    return $self->$member_func($newval);
}

############# Class : libdnf5::repo::DownloadCallbacksUniquePtr ##############

package libdnf5::repo::DownloadCallbacksUniquePtr;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = libdnf5::repoc::new_DownloadCallbacksUniquePtr(@_);
    bless $self, $pkg if defined($self);
}

*__deref__ = *libdnf5::repoc::DownloadCallbacksUniquePtr___deref__;
*release = *libdnf5::repoc::DownloadCallbacksUniquePtr_release;
*reset = *libdnf5::repoc::DownloadCallbacksUniquePtr_reset;
*swap = *libdnf5::repoc::DownloadCallbacksUniquePtr_swap;
*get = *libdnf5::repoc::DownloadCallbacksUniquePtr_get;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        libdnf5::repoc::delete_DownloadCallbacksUniquePtr($self);
        delete $OWNER{$self};
    }
}

*add_new_download = *libdnf5::repoc::DownloadCallbacksUniquePtr_add_new_download;
*progress = *libdnf5::repoc::DownloadCallbacksUniquePtr_progress;
*end = *libdnf5::repoc::DownloadCallbacksUniquePtr_end;
*mirror_failure = *libdnf5::repoc::DownloadCallbacksUniquePtr_mirror_failure;
*fastest_mirror = *libdnf5::repoc::DownloadCallbacksUniquePtr_fastest_mirror;
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 : libdnf5::repo::FileDownloader ##############

package libdnf5::repo::FileDownloader;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = libdnf5::repoc::new_FileDownloader(@_);
    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}) {
        libdnf5::repoc::delete_FileDownloader($self);
        delete $OWNER{$self};
    }
}

*download = *libdnf5::repoc::FileDownloader_download;
*set_fail_fast = *libdnf5::repoc::FileDownloader_set_fail_fast;
*set_resume = *libdnf5::repoc::FileDownloader_set_resume;
*add = *libdnf5::repoc::FileDownloader_add;
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 : libdnf5::repo::PackageDownloader ##############

package libdnf5::repo::PackageDownloader;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = libdnf5::repoc::new_PackageDownloader(@_);
    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}) {
        libdnf5::repoc::delete_PackageDownloader($self);
        delete $OWNER{$self};
    }
}

*download = *libdnf5::repoc::PackageDownloader_download;
*get_failed_packages = *libdnf5::repoc::PackageDownloader_get_failed_packages;
*set_fail_fast = *libdnf5::repoc::PackageDownloader_set_fail_fast;
*set_resume = *libdnf5::repoc::PackageDownloader_set_resume;
*force_keep_packages = *libdnf5::repoc::PackageDownloader_force_keep_packages;
*add = *libdnf5::repoc::PackageDownloader_add;
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 : libdnf5::repo::RepoCacheRemoveStatistics ##############

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

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

*get_files_removed = *libdnf5::repoc::RepoCacheRemoveStatistics_get_files_removed;
*get_dirs_removed = *libdnf5::repoc::RepoCacheRemoveStatistics_get_dirs_removed;
*get_bytes_removed = *libdnf5::repoc::RepoCacheRemoveStatistics_get_bytes_removed;
*get_errors = *libdnf5::repoc::RepoCacheRemoveStatistics_get_errors;
*__iadd__ = *libdnf5::repoc::RepoCacheRemoveStatistics___iadd__;
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 : libdnf5::repo::RepoCache ##############

package libdnf5::repo::RepoCache;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
*ATTRIBUTE_EXPIRED = *libdnf5::repoc::RepoCache_ATTRIBUTE_EXPIRED;
*ATTRIBUTE_EXPIRED = *libdnf5::repoc::RepoCache_ATTRIBUTE_EXPIRED;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        libdnf5::repoc::delete_RepoCache($self);
        delete $OWNER{$self};
    }
}

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

*remove_metadata = *libdnf5::repoc::RepoCache_remove_metadata;
*remove_packages = *libdnf5::repoc::RepoCache_remove_packages;
*remove_solv_files = *libdnf5::repoc::RepoCache_remove_solv_files;
*remove_all = *libdnf5::repoc::RepoCache_remove_all;
*write_attribute = *libdnf5::repoc::RepoCache_write_attribute;
*read_attribute = *libdnf5::repoc::RepoCache_read_attribute;
*is_attribute = *libdnf5::repoc::RepoCache_is_attribute;
*remove_attribute = *libdnf5::repoc::RepoCache_remove_attribute;
*get_repoid = *libdnf5::repoc::RepoCache_get_repoid;
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 : libdnf5::repo::Repo ##############

package libdnf5::repo::Repo;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
*Type_AVAILABLE = *libdnf5::repoc::Repo_Type_AVAILABLE;
*Type_SYSTEM = *libdnf5::repoc::Repo_Type_SYSTEM;
*Type_COMMANDLINE = *libdnf5::repoc::Repo_Type_COMMANDLINE;
*SyncStrategy_LAZY = *libdnf5::repoc::Repo_SyncStrategy_LAZY;
*SyncStrategy_ONLY_CACHE = *libdnf5::repoc::Repo_SyncStrategy_ONLY_CACHE;
*SyncStrategy_TRY_CACHE = *libdnf5::repoc::Repo_SyncStrategy_TRY_CACHE;
*verify_id = *libdnf5::repoc::Repo_verify_id;
sub new {
    my $pkg = shift;
    my $self = libdnf5::repoc::new_Repo(@_);
    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}) {
        libdnf5::repoc::delete_Repo($self);
        delete $OWNER{$self};
    }
}

*get_type = *libdnf5::repoc::Repo_get_type;
*set_callbacks = *libdnf5::repoc::Repo_set_callbacks;
*get_callbacks = *libdnf5::repoc::Repo_get_callbacks;
*verify = *libdnf5::repoc::Repo_verify;
*get_config = *libdnf5::repoc::Repo_get_config;
*get_id = *libdnf5::repoc::Repo_get_id;
*enable = *libdnf5::repoc::Repo_enable;
*disable = *libdnf5::repoc::Repo_disable;
*is_enabled = *libdnf5::repoc::Repo_is_enabled;
*is_local = *libdnf5::repoc::Repo_is_local;
*read_metadata_cache = *libdnf5::repoc::Repo_read_metadata_cache;
*is_in_sync = *libdnf5::repoc::Repo_is_in_sync;
*get_use_includes = *libdnf5::repoc::Repo_get_use_includes;
*set_use_includes = *libdnf5::repoc::Repo_set_use_includes;
*get_cost = *libdnf5::repoc::Repo_get_cost;
*set_cost = *libdnf5::repoc::Repo_set_cost;
*get_priority = *libdnf5::repoc::Repo_get_priority;
*set_priority = *libdnf5::repoc::Repo_set_priority;
*get_revision = *libdnf5::repoc::Repo_get_revision;
*get_age = *libdnf5::repoc::Repo_get_age;
*get_metadata_path = *libdnf5::repoc::Repo_get_metadata_path;
*expire = *libdnf5::repoc::Repo_expire;
*is_expired = *libdnf5::repoc::Repo_is_expired;
*get_expires_in = *libdnf5::repoc::Repo_get_expires_in;
*set_max_mirror_tries = *libdnf5::repoc::Repo_set_max_mirror_tries;
*get_timestamp = *libdnf5::repoc::Repo_get_timestamp;
*get_max_timestamp = *libdnf5::repoc::Repo_get_max_timestamp;
*set_preserve_remote_time = *libdnf5::repoc::Repo_set_preserve_remote_time;
*get_preserve_remote_time = *libdnf5::repoc::Repo_get_preserve_remote_time;
*get_content_tags = *libdnf5::repoc::Repo_get_content_tags;
*get_distro_tags = *libdnf5::repoc::Repo_get_distro_tags;
*get_metadata_locations = *libdnf5::repoc::Repo_get_metadata_locations;
*get_cachedir = *libdnf5::repoc::Repo_get_cachedir;
*get_persistdir = *libdnf5::repoc::Repo_get_persistdir;
*get_name = *libdnf5::repoc::Repo_get_name;
*set_repo_file_path = *libdnf5::repoc::Repo_set_repo_file_path;
*get_repo_file_path = *libdnf5::repoc::Repo_get_repo_file_path;
*set_sync_strategy = *libdnf5::repoc::Repo_set_sync_strategy;
*get_sync_strategy = *libdnf5::repoc::Repo_get_sync_strategy;
*set_http_headers = *libdnf5::repoc::Repo_set_http_headers;
*get_http_headers = *libdnf5::repoc::Repo_get_http_headers;
*get_mirrors = *libdnf5::repoc::Repo_get_mirrors;
*get_weak_ptr = *libdnf5::repoc::Repo_get_weak_ptr;
*get_base = *libdnf5::repoc::Repo_get_base;
*type_to_string = *libdnf5::repoc::Repo_type_to_string;
*download_metadata = *libdnf5::repoc::Repo_download_metadata;
*get_appstream_metadata = *libdnf5::repoc::Repo_get_appstream_metadata;
*set_user_data = *libdnf5::repoc::Repo_set_user_data;
*get_user_data = *libdnf5::repoc::Repo_get_user_data;
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 : libdnf5::repo::RepoWeakPtr ##############

package libdnf5::repo::RepoWeakPtr;
use overload
    "!=" => sub { $_[0]->__ne__($_[1])},
    ">=" => sub { $_[0]->__ge__($_[1])},
    "==" => sub { $_[0]->__eq__($_[1])},
    "<=" => sub { $_[0]->__le__($_[1])},
    ">" => sub { $_[0]->__gt__($_[1])},
    "<" => sub { $_[0]->__lt__($_[1])},
    "=" => sub { my $class = ref($_[0]); $class->new($_[0]) },
    "fallback" => 1;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = libdnf5::repoc::new_RepoWeakPtr(@_);
    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}) {
        libdnf5::repoc::delete_RepoWeakPtr($self);
        delete $OWNER{$self};
    }
}

*__deref__ = *libdnf5::repoc::RepoWeakPtr___deref__;
*get = *libdnf5::repoc::RepoWeakPtr_get;
*is_valid = *libdnf5::repoc::RepoWeakPtr_is_valid;
*has_same_guard = *libdnf5::repoc::RepoWeakPtr_has_same_guard;
*__ref__ = *libdnf5::repoc::RepoWeakPtr___ref__;
*__eq__ = *libdnf5::repoc::RepoWeakPtr___eq__;
*__ne__ = *libdnf5::repoc::RepoWeakPtr___ne__;
*__lt__ = *libdnf5::repoc::RepoWeakPtr___lt__;
*__gt__ = *libdnf5::repoc::RepoWeakPtr___gt__;
*__le__ = *libdnf5::repoc::RepoWeakPtr___le__;
*__ge__ = *libdnf5::repoc::RepoWeakPtr___ge__;
*verify_id = *libdnf5::repoc::RepoWeakPtr_verify_id;
*get_type = *libdnf5::repoc::RepoWeakPtr_get_type;
*set_callbacks = *libdnf5::repoc::RepoWeakPtr_set_callbacks;
*get_callbacks = *libdnf5::repoc::RepoWeakPtr_get_callbacks;
*verify = *libdnf5::repoc::RepoWeakPtr_verify;
*get_config = *libdnf5::repoc::RepoWeakPtr_get_config;
*get_id = *libdnf5::repoc::RepoWeakPtr_get_id;
*enable = *libdnf5::repoc::RepoWeakPtr_enable;
*disable = *libdnf5::repoc::RepoWeakPtr_disable;
*is_enabled = *libdnf5::repoc::RepoWeakPtr_is_enabled;
*is_local = *libdnf5::repoc::RepoWeakPtr_is_local;
*read_metadata_cache = *libdnf5::repoc::RepoWeakPtr_read_metadata_cache;
*is_in_sync = *libdnf5::repoc::RepoWeakPtr_is_in_sync;
*get_use_includes = *libdnf5::repoc::RepoWeakPtr_get_use_includes;
*set_use_includes = *libdnf5::repoc::RepoWeakPtr_set_use_includes;
*get_cost = *libdnf5::repoc::RepoWeakPtr_get_cost;
*set_cost = *libdnf5::repoc::RepoWeakPtr_set_cost;
*get_priority = *libdnf5::repoc::RepoWeakPtr_get_priority;
*set_priority = *libdnf5::repoc::RepoWeakPtr_set_priority;
*get_revision = *libdnf5::repoc::RepoWeakPtr_get_revision;
*get_age = *libdnf5::repoc::RepoWeakPtr_get_age;
*get_metadata_path = *libdnf5::repoc::RepoWeakPtr_get_metadata_path;
*expire = *libdnf5::repoc::RepoWeakPtr_expire;
*is_expired = *libdnf5::repoc::RepoWeakPtr_is_expired;
*get_expires_in = *libdnf5::repoc::RepoWeakPtr_get_expires_in;
*set_max_mirror_tries = *libdnf5::repoc::RepoWeakPtr_set_max_mirror_tries;
*get_timestamp = *libdnf5::repoc::RepoWeakPtr_get_timestamp;
*get_max_timestamp = *libdnf5::repoc::RepoWeakPtr_get_max_timestamp;
*set_preserve_remote_time = *libdnf5::repoc::RepoWeakPtr_set_preserve_remote_time;
*get_preserve_remote_time = *libdnf5::repoc::RepoWeakPtr_get_preserve_remote_time;
*get_content_tags = *libdnf5::repoc::RepoWeakPtr_get_content_tags;
*get_distro_tags = *libdnf5::repoc::RepoWeakPtr_get_distro_tags;
*get_metadata_locations = *libdnf5::repoc::RepoWeakPtr_get_metadata_locations;
*get_cachedir = *libdnf5::repoc::RepoWeakPtr_get_cachedir;
*get_persistdir = *libdnf5::repoc::RepoWeakPtr_get_persistdir;
*get_name = *libdnf5::repoc::RepoWeakPtr_get_name;
*set_repo_file_path = *libdnf5::repoc::RepoWeakPtr_set_repo_file_path;
*get_repo_file_path = *libdnf5::repoc::RepoWeakPtr_get_repo_file_path;
*set_sync_strategy = *libdnf5::repoc::RepoWeakPtr_set_sync_strategy;
*get_sync_strategy = *libdnf5::repoc::RepoWeakPtr_get_sync_strategy;
*set_http_headers = *libdnf5::repoc::RepoWeakPtr_set_http_headers;
*get_http_headers = *libdnf5::repoc::RepoWeakPtr_get_http_headers;
*get_mirrors = *libdnf5::repoc::RepoWeakPtr_get_mirrors;
*get_weak_ptr = *libdnf5::repoc::RepoWeakPtr_get_weak_ptr;
*get_base = *libdnf5::repoc::RepoWeakPtr_get_base;
*type_to_string = *libdnf5::repoc::RepoWeakPtr_type_to_string;
*download_metadata = *libdnf5::repoc::RepoWeakPtr_download_metadata;
*get_appstream_metadata = *libdnf5::repoc::RepoWeakPtr_get_appstream_metadata;
*set_user_data = *libdnf5::repoc::RepoWeakPtr_set_user_data;
*get_user_data = *libdnf5::repoc::RepoWeakPtr_get_user_data;
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 : libdnf5::repo::SetConstIteratorRepoWeakPtr ##############

package libdnf5::repo::SetConstIteratorRepoWeakPtr;
use overload
    "!=" => sub { $_[0]->__ne__($_[1])},
    "==" => sub { $_[0]->__eq__($_[1])},
    "=" => sub { my $class = ref($_[0]); $class->new($_[0]) },
    "fallback" => 1;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
*value = *libdnf5::repoc::SetConstIteratorRepoWeakPtr_value;
*next = *libdnf5::repoc::SetConstIteratorRepoWeakPtr_next;
*prev = *libdnf5::repoc::SetConstIteratorRepoWeakPtr_prev;
*__eq__ = *libdnf5::repoc::SetConstIteratorRepoWeakPtr___eq__;
*__ne__ = *libdnf5::repoc::SetConstIteratorRepoWeakPtr___ne__;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        libdnf5::repoc::delete_SetConstIteratorRepoWeakPtr($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 : libdnf5::repo::SetRepoWeakPtr ##############

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

*empty = *libdnf5::repoc::SetRepoWeakPtr_empty;
*size = *libdnf5::repoc::SetRepoWeakPtr_size;
*clear = *libdnf5::repoc::SetRepoWeakPtr_clear;
*add = *libdnf5::repoc::SetRepoWeakPtr_add;
*remove = *libdnf5::repoc::SetRepoWeakPtr_remove;
*find = *libdnf5::repoc::SetRepoWeakPtr_find;
*contains = *libdnf5::repoc::SetRepoWeakPtr_contains;
*__isub__ = *libdnf5::repoc::SetRepoWeakPtr___isub__;
*update = *libdnf5::repoc::SetRepoWeakPtr_update;
*intersection = *libdnf5::repoc::SetRepoWeakPtr_intersection;
*difference = *libdnf5::repoc::SetRepoWeakPtr_difference;
*symmetric_difference = *libdnf5::repoc::SetRepoWeakPtr_symmetric_difference;
*is_subset = *libdnf5::repoc::SetRepoWeakPtr_is_subset;
*is_superset = *libdnf5::repoc::SetRepoWeakPtr_is_superset;
*swap = *libdnf5::repoc::SetRepoWeakPtr_swap;
*get_data = *libdnf5::repoc::SetRepoWeakPtr_get_data;
*begin = *libdnf5::repoc::SetRepoWeakPtr_begin;
*end = *libdnf5::repoc::SetRepoWeakPtr_end;
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 : libdnf5::repo::SackQueryRepoWeakPtr ##############

package libdnf5::repo::SackQueryRepoWeakPtr;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo::SetRepoWeakPtr libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = libdnf5::repoc::new_SackQueryRepoWeakPtr(@_);
    bless $self, $pkg if defined($self);
}

*filter = *libdnf5::repoc::SackQueryRepoWeakPtr_filter;
*get = *libdnf5::repoc::SackQueryRepoWeakPtr_get;
*list = *libdnf5::repoc::SackQueryRepoWeakPtr_list;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        libdnf5::repoc::delete_SackQueryRepoWeakPtr($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 : libdnf5::repo::RepoCallbacks ##############

package libdnf5::repo::RepoCallbacks;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = $_[0];
    my $self = libdnf5::repoc::new_RepoCallbacks(@_);
    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}) {
        libdnf5::repoc::delete_RepoCallbacks($self);
        delete $OWNER{$self};
    }
}

*repokey_import = *libdnf5::repoc::RepoCallbacks_repokey_import;
*repokey_imported = *libdnf5::repoc::RepoCallbacks_repokey_imported;
sub DISOWN {
    my $self = shift;
    libdnf5::repoc::disown_RepoCallbacks($self);
    my $ptr = tied(%$self);
    delete $OWNER{$ptr};
}

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

sub FETCH {
    my ($self,$field) = @_;
    my $member_func = "swig_${field}_get";
    if (not $self->can($member_func)) {
        my $h = libdnf5::repoc::swig_get_attr_RepoCallbacks($self);
        return $h->{$field} if $h;
    }
    return $self->$member_func;
}

sub STORE {
    my ($self,$field,$newval) = @_;
    my $member_func = "swig_${field}_set";
    if (not $self->can($member_func)) {
        my $h = libdnf5::repoc::swig_get_attr_RepoCallbacks($self);
        return $h->{$field} = $newval if $h;
    }
    return $self->$member_func($newval);
}

############# Class : libdnf5::repo::RepoCallbacks2_1 ##############

package libdnf5::repo::RepoCallbacks2_1;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo::RepoCallbacks libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = libdnf5::repoc::new_RepoCallbacks2_1(@_);
    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}) {
        libdnf5::repoc::delete_RepoCallbacks2_1($self);
        delete $OWNER{$self};
    }
}

*repokey_remove = *libdnf5::repoc::RepoCallbacks2_1_repokey_remove;
*repokey_removed = *libdnf5::repoc::RepoCallbacks2_1_repokey_removed;
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 : libdnf5::repo::RepoCallbacksUniquePtr ##############

package libdnf5::repo::RepoCallbacksUniquePtr;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = libdnf5::repoc::new_RepoCallbacksUniquePtr(@_);
    bless $self, $pkg if defined($self);
}

*__deref__ = *libdnf5::repoc::RepoCallbacksUniquePtr___deref__;
*release = *libdnf5::repoc::RepoCallbacksUniquePtr_release;
*reset = *libdnf5::repoc::RepoCallbacksUniquePtr_reset;
*swap = *libdnf5::repoc::RepoCallbacksUniquePtr_swap;
*get = *libdnf5::repoc::RepoCallbacksUniquePtr_get;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        libdnf5::repoc::delete_RepoCallbacksUniquePtr($self);
        delete $OWNER{$self};
    }
}

*repokey_import = *libdnf5::repoc::RepoCallbacksUniquePtr_repokey_import;
*repokey_imported = *libdnf5::repoc::RepoCallbacksUniquePtr_repokey_imported;
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 : libdnf5::repo::RepoQuery ##############

package libdnf5::repo::RepoQuery;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo::SackQueryRepoWeakPtr libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        libdnf5::repoc::delete_RepoQuery($self);
        delete $OWNER{$self};
    }
}

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

*get_base = *libdnf5::repoc::RepoQuery_get_base;
*filter_enabled = *libdnf5::repoc::RepoQuery_filter_enabled;
*filter_expired = *libdnf5::repoc::RepoQuery_filter_expired;
*filter_id = *libdnf5::repoc::RepoQuery_filter_id;
*filter_local = *libdnf5::repoc::RepoQuery_filter_local;
*filter_name = *libdnf5::repoc::RepoQuery_filter_name;
*filter_type = *libdnf5::repoc::RepoQuery_filter_type;
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 : libdnf5::repo::SackRepoRepoQuery ##############

package libdnf5::repo::SackRepoRepoQuery;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
*size = *libdnf5::repoc::SackRepoRepoQuery_size;
*get_excludes = *libdnf5::repoc::SackRepoRepoQuery_get_excludes;
*add_excludes = *libdnf5::repoc::SackRepoRepoQuery_add_excludes;
*remove_excludes = *libdnf5::repoc::SackRepoRepoQuery_remove_excludes;
*set_excludes = *libdnf5::repoc::SackRepoRepoQuery_set_excludes;
*get_includes = *libdnf5::repoc::SackRepoRepoQuery_get_includes;
*add_includes = *libdnf5::repoc::SackRepoRepoQuery_add_includes;
*remove_includes = *libdnf5::repoc::SackRepoRepoQuery_remove_includes;
*set_includes = *libdnf5::repoc::SackRepoRepoQuery_set_includes;
*get_use_includes = *libdnf5::repoc::SackRepoRepoQuery_get_use_includes;
*set_use_includes = *libdnf5::repoc::SackRepoRepoQuery_set_use_includes;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        libdnf5::repoc::delete_SackRepoRepoQuery($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 : libdnf5::repo::RepoSack ##############

package libdnf5::repo::RepoSack;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo::SackRepoRepoQuery libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
*create_repo = *libdnf5::repoc::RepoSack_create_repo;
*create_repos_from_file = *libdnf5::repoc::RepoSack_create_repos_from_file;
*create_repos_from_config_file = *libdnf5::repoc::RepoSack_create_repos_from_config_file;
*create_repos_from_dir = *libdnf5::repoc::RepoSack_create_repos_from_dir;
*create_repos_from_reposdir = *libdnf5::repoc::RepoSack_create_repos_from_reposdir;
*create_repos_from_paths = *libdnf5::repoc::RepoSack_create_repos_from_paths;
*create_repos_from_system_configuration = *libdnf5::repoc::RepoSack_create_repos_from_system_configuration;
*create_repo_from_libsolv_testcase = *libdnf5::repoc::RepoSack_create_repo_from_libsolv_testcase;
*get_system_repo = *libdnf5::repoc::RepoSack_get_system_repo;
*add_cmdline_packages = *libdnf5::repoc::RepoSack_add_cmdline_packages;
*has_system_repo = *libdnf5::repoc::RepoSack_has_system_repo;
*has_cmdline_repo = *libdnf5::repoc::RepoSack_has_cmdline_repo;
*dump_debugdata = *libdnf5::repoc::RepoSack_dump_debugdata;
*dump_comps_debugdata = *libdnf5::repoc::RepoSack_dump_comps_debugdata;
*update_and_load_enabled_repos = *libdnf5::repoc::RepoSack_update_and_load_enabled_repos;
*load_repos = *libdnf5::repoc::RepoSack_load_repos;
*get_weak_ptr = *libdnf5::repoc::RepoSack_get_weak_ptr;
*get_base = *libdnf5::repoc::RepoSack_get_base;
*enable_source_repos = *libdnf5::repoc::RepoSack_enable_source_repos;
*enable_debug_repos = *libdnf5::repoc::RepoSack_enable_debug_repos;
sub DESTROY {
    return unless $_[0]->isa('HASH');
    my $self = tied(%{$_[0]});
    return unless defined $self;
    delete $ITERATORS{$self};
    if (exists $OWNER{$self}) {
        libdnf5::repoc::delete_RepoSack($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 : libdnf5::repo::RepoSackWeakPtr ##############

package libdnf5::repo::RepoSackWeakPtr;
use overload
    "!=" => sub { $_[0]->__ne__($_[1])},
    ">=" => sub { $_[0]->__ge__($_[1])},
    "==" => sub { $_[0]->__eq__($_[1])},
    "<=" => sub { $_[0]->__le__($_[1])},
    ">" => sub { $_[0]->__gt__($_[1])},
    "<" => sub { $_[0]->__lt__($_[1])},
    "=" => sub { my $class = ref($_[0]); $class->new($_[0]) },
    "fallback" => 1;
use vars qw(@ISA %OWNER %ITERATORS %BLESSEDMEMBERS);
@ISA = qw( libdnf5::repo );
%OWNER = ();
%ITERATORS = ();
sub new {
    my $pkg = shift;
    my $self = libdnf5::repoc::new_RepoSackWeakPtr(@_);
    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}) {
        libdnf5::repoc::delete_RepoSackWeakPtr($self);
        delete $OWNER{$self};
    }
}

*__deref__ = *libdnf5::repoc::RepoSackWeakPtr___deref__;
*get = *libdnf5::repoc::RepoSackWeakPtr_get;
*is_valid = *libdnf5::repoc::RepoSackWeakPtr_is_valid;
*has_same_guard = *libdnf5::repoc::RepoSackWeakPtr_has_same_guard;
*__ref__ = *libdnf5::repoc::RepoSackWeakPtr___ref__;
*__eq__ = *libdnf5::repoc::RepoSackWeakPtr___eq__;
*__ne__ = *libdnf5::repoc::RepoSackWeakPtr___ne__;
*__lt__ = *libdnf5::repoc::RepoSackWeakPtr___lt__;
*__gt__ = *libdnf5::repoc::RepoSackWeakPtr___gt__;
*__le__ = *libdnf5::repoc::RepoSackWeakPtr___le__;
*__ge__ = *libdnf5::repoc::RepoSackWeakPtr___ge__;
*create_repo = *libdnf5::repoc::RepoSackWeakPtr_create_repo;
*create_repos_from_file = *libdnf5::repoc::RepoSackWeakPtr_create_repos_from_file;
*create_repos_from_config_file = *libdnf5::repoc::RepoSackWeakPtr_create_repos_from_config_file;
*create_repos_from_dir = *libdnf5::repoc::RepoSackWeakPtr_create_repos_from_dir;
*create_repos_from_reposdir = *libdnf5::repoc::RepoSackWeakPtr_create_repos_from_reposdir;
*create_repos_from_paths = *libdnf5::repoc::RepoSackWeakPtr_create_repos_from_paths;
*create_repos_from_system_configuration = *libdnf5::repoc::RepoSackWeakPtr_create_repos_from_system_configuration;
*create_repo_from_libsolv_testcase = *libdnf5::repoc::RepoSackWeakPtr_create_repo_from_libsolv_testcase;
*get_system_repo = *libdnf5::repoc::RepoSackWeakPtr_get_system_repo;
*add_cmdline_packages = *libdnf5::repoc::RepoSackWeakPtr_add_cmdline_packages;
*has_system_repo = *libdnf5::repoc::RepoSackWeakPtr_has_system_repo;
*has_cmdline_repo = *libdnf5::repoc::RepoSackWeakPtr_has_cmdline_repo;
*dump_debugdata = *libdnf5::repoc::RepoSackWeakPtr_dump_debugdata;
*dump_comps_debugdata = *libdnf5::repoc::RepoSackWeakPtr_dump_comps_debugdata;
*update_and_load_enabled_repos = *libdnf5::repoc::RepoSackWeakPtr_update_and_load_enabled_repos;
*load_repos = *libdnf5::repoc::RepoSackWeakPtr_load_repos;
*get_weak_ptr = *libdnf5::repoc::RepoSackWeakPtr_get_weak_ptr;
*get_base = *libdnf5::repoc::RepoSackWeakPtr_get_base;
*enable_source_repos = *libdnf5::repoc::RepoSackWeakPtr_enable_source_repos;
*enable_debug_repos = *libdnf5::repoc::RepoSackWeakPtr_enable_debug_repos;
*size = *libdnf5::repoc::RepoSackWeakPtr_size;
*get_excludes = *libdnf5::repoc::RepoSackWeakPtr_get_excludes;
*add_excludes = *libdnf5::repoc::RepoSackWeakPtr_add_excludes;
*remove_excludes = *libdnf5::repoc::RepoSackWeakPtr_remove_excludes;
*set_excludes = *libdnf5::repoc::RepoSackWeakPtr_set_excludes;
*get_includes = *libdnf5::repoc::RepoSackWeakPtr_get_includes;
*add_includes = *libdnf5::repoc::RepoSackWeakPtr_add_includes;
*remove_includes = *libdnf5::repoc::RepoSackWeakPtr_remove_includes;
*set_includes = *libdnf5::repoc::RepoSackWeakPtr_set_includes;
*get_use_includes = *libdnf5::repoc::RepoSackWeakPtr_get_use_includes;
*set_use_includes = *libdnf5::repoc::RepoSackWeakPtr_set_use_includes;
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 : libdnf5::repo::RepoConfigOverride ##############

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

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

*get_override_file_path = *libdnf5::repoc::RepoConfigOverride_get_override_file_path;
*save = *libdnf5::repoc::RepoConfigOverride_save;
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 libdnf5::repo;

1;
