################################################################################
##
##  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
##               Copyright (C) 2015, cPanel Inc.
##  Version 2.x, Copyright (C) 2001, Paul Marquess.
##  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
##
##  This program is free software; you can redistribute it and/or
##  modify it under the same terms as Perl itself.
##
################################################################################

=provides

__UNDEFINED__

=implementation

__UNDEFINED__ HvNAME_get(hv)    HvNAME(hv)
__UNDEFINED__ HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0)
__UNDEFINED__ HvNAMELEN(hv)     HvNAMELEN_get(hv)
__UNDEFINED__ HvENAME(hv)       HvNAME(hv)
__UNDEFINED__ HvENAMELEN(hv)    (HvENAME(hv) ? strlen(HvENAME(hv)) : 0)

# if { VERSION < 5.10.0 }
__UNDEFINED__ HvNAMEUTF8(hv)    0
__UNDEFINED__ HvENAMEUTF8(hv)   0
#else
__UNDEFINED__ HvNAMEUTF8(hv)    (HvNAME_HEK(hv) ? HEK_UTF8(HvNAME_HEK(hv)) : 0)
__UNDEFINED__ HvENAMEUTF8(hv)   HvNAMEUTF8(hv)
#endif

=xsubs

char*
HvNAME_get(hv)
        HV *hv

int
HvNAMELEN_get(hv)
        HV *hv

int
HvNAMELEN(hv)
        HV *hv

int
HvNAMEUTF8(hv)
        HV *hv

char *
HvENAME(hv)
        HV *hv

int
HvENAMELEN(hv)
        HV *hv

int
HvENAMEUTF8(hv)
        HV *hv

=tests plan => 11

ok(Devel::PPPort::HvNAME_get(\%Devel::PPPort::), 'Devel::PPPort');
ok(!defined Devel::PPPort::HvNAME_get({}));

ok(Devel::PPPort::HvNAMELEN_get(\%Devel::PPPort::), length('Devel::PPPort'));
ok(Devel::PPPort::HvNAMELEN_get({}), 0);

ok(Devel::PPPort::HvNAMELEN({}), 0);
ok(Devel::PPPort::HvENAME({}), undef);
ok(Devel::PPPort::HvENAMELEN({}), 0);
ok(Devel::PPPort::HvENAMEUTF8({}), 0);

ok(Devel::PPPort::HvNAMEUTF8(\%Devel::PPPort::), 0);

if ($] > 5.015006) {
   use utf8;
   ok(Devel::PPPort::HvNAMEUTF8(\%αaαb::), 1);
   ok(Devel::PPPort::HvENAMEUTF8(\%αaαb::), 1);
} else {
  ok(1, 1, "skip HvNAMEUTF8 with $]");
  ok(1, 1, "skip HvENAMEUTF8 with $]");
}
