3 * Copyright (c) 1991-2001, Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "I sit beside the fire and think of all that I have seen." --Bilbo
27 PL_he_root = HeNEXT(he);
36 HeNEXT(p) = (HE*)PL_he_root;
47 New(54, ptr, 1008/sizeof(XPV), XPV);
48 ptr->xpv_pv = (char*)PL_he_arenaroot;
49 PL_he_arenaroot = ptr;
52 heend = &he[1008 / sizeof(HE) - 1];
55 HeNEXT(he) = (HE*)(he + 1);
63 #define new_HE() (HE*)safemalloc(sizeof(HE))
64 #define del_HE(p) safefree((char*)p)
68 #define new_HE() new_he()
69 #define del_HE(p) del_he(p)
74 S_save_hek(pTHX_ const char *str, I32 len, U32 hash)
85 New(54, k, HEK_BASESIZE + len + 1, char);
87 Copy(str, HEK_KEY(hek), len, char);
90 HEK_UTF8(hek) = (char)is_utf8;
95 Perl_unshare_hek(pTHX_ HEK *hek)
97 unsharepvn(HEK_KEY(hek),HEK_UTF8(hek)?-HEK_LEN(hek):HEK_LEN(hek),
101 #if defined(USE_ITHREADS)
103 Perl_he_dup(pTHX_ HE *e, bool shared)
109 /* look for it in the table first */
110 ret = (HE*)ptr_table_fetch(PL_ptr_table, e);
114 /* create anew and remember what it is */
116 ptr_table_store(PL_ptr_table, e, ret);
118 HeNEXT(ret) = he_dup(HeNEXT(e),shared);
119 if (HeKLEN(e) == HEf_SVKEY)
120 HeKEY_sv(ret) = SvREFCNT_inc(sv_dup(HeKEY_sv(e)));
122 HeKEY_hek(ret) = share_hek(HeKEY(e), HeKLEN_UTF8(e), HeHASH(e));
124 HeKEY_hek(ret) = save_hek(HeKEY(e), HeKLEN_UTF8(e), HeHASH(e));
125 HeVAL(ret) = SvREFCNT_inc(sv_dup(HeVAL(e)));
128 #endif /* USE_ITHREADS */
130 /* (klen == HEf_SVKEY) is special for MAGICAL hv entries, meaning key slot
136 Returns the SV which corresponds to the specified key in the hash. The
137 C<klen> is the length of the key. If C<lval> is set then the fetch will be
138 part of a store. Check that the return value is non-null before
139 dereferencing it to a C<SV*>.
141 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
142 information on how to use this function on tied hashes.
148 Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen, I32 lval)
154 bool is_utf8 = FALSE;
155 const char *keysave = key;
165 if (SvRMAGICAL(hv)) {
166 if (mg_find((SV*)hv,'P')) {
168 mg_copy((SV*)hv, sv, key, klen);
170 return &PL_hv_fetch_sv;
172 #ifdef ENV_IS_CASELESS
173 else if (mg_find((SV*)hv,'E')) {
175 for (i = 0; i < klen; ++i)
176 if (isLOWER(key[i])) {
177 char *nkey = strupr(SvPVX(sv_2mortal(newSVpvn(key,klen))));
178 SV **ret = hv_fetch(hv, nkey, klen, 0);
180 ret = hv_store(hv, key, klen, NEWSV(61,0), 0);
187 xhv = (XPVHV*)SvANY(hv);
188 if (!xhv->xhv_array) {
190 #ifdef DYNAMIC_ENV_FETCH /* if it's an %ENV lookup, we may get it on the fly */
191 || (HvNAME(hv) && strEQ(HvNAME(hv),ENV_HV_NAME))
194 Newz(503, xhv->xhv_array,
195 PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
200 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT)) {
201 STRLEN tmplen = klen;
202 /* Just casting the &klen to (STRLEN) won't work well
203 * if STRLEN and I32 are of different widths. --jhi */
204 key = (char*)bytes_from_utf8((U8*)key, &tmplen, &is_utf8);
208 PERL_HASH(hash, key, klen);
210 entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
211 for (; entry; entry = HeNEXT(entry)) {
212 if (HeHASH(entry) != hash) /* strings can't be equal */
214 if (HeKLEN(entry) != klen)
216 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
218 if (HeKUTF8(entry) != (char)is_utf8)
222 return &HeVAL(entry);
224 #ifdef DYNAMIC_ENV_FETCH /* %ENV lookup? If so, try to fetch the value now */
225 if (HvNAME(hv) && strEQ(HvNAME(hv),ENV_HV_NAME)) {
227 char *env = PerlEnv_ENVgetenv_len(key,&len);
229 sv = newSVpvn(env,len);
233 return hv_store(hv,key,klen,sv,hash);
237 if (lval) { /* gonna assign to this, so it better be there */
239 if (key != keysave) { /* must be is_utf8 == 0 */
240 SV **ret = hv_store(hv,key,klen,sv,hash);
245 return hv_store(hv,key,is_utf8?-klen:klen,sv,hash);
252 /* returns a HE * structure with the all fields set */
253 /* note that hent_val will be a mortal sv for MAGICAL hashes */
255 =for apidoc hv_fetch_ent
257 Returns the hash entry which corresponds to the specified key in the hash.
258 C<hash> must be a valid precomputed hash number for the given C<key>, or 0
259 if you want the function to compute it. IF C<lval> is set then the fetch
260 will be part of a store. Make sure the return value is non-null before
261 accessing it. The return value when C<tb> is a tied hash is a pointer to a
262 static location, so be sure to make a copy of the structure if you need to
265 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
266 information on how to use this function on tied hashes.
272 Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, register U32 hash)
285 if (SvRMAGICAL(hv)) {
286 if (mg_find((SV*)hv,'P')) {
288 keysv = sv_2mortal(newSVsv(keysv));
289 mg_copy((SV*)hv, sv, (char*)keysv, HEf_SVKEY);
290 if (!HeKEY_hek(&PL_hv_fetch_ent_mh)) {
292 New(54, k, HEK_BASESIZE + sizeof(SV*), char);
293 HeKEY_hek(&PL_hv_fetch_ent_mh) = (HEK*)k;
295 HeSVKEY_set(&PL_hv_fetch_ent_mh, keysv);
296 HeVAL(&PL_hv_fetch_ent_mh) = sv;
297 return &PL_hv_fetch_ent_mh;
299 #ifdef ENV_IS_CASELESS
300 else if (mg_find((SV*)hv,'E')) {
302 key = SvPV(keysv, klen);
303 for (i = 0; i < klen; ++i)
304 if (isLOWER(key[i])) {
305 SV *nkeysv = sv_2mortal(newSVpvn(key,klen));
306 (void)strupr(SvPVX(nkeysv));
307 entry = hv_fetch_ent(hv, nkeysv, 0, 0);
309 entry = hv_store_ent(hv, keysv, NEWSV(61,0), hash);
316 xhv = (XPVHV*)SvANY(hv);
317 if (!xhv->xhv_array) {
319 #ifdef DYNAMIC_ENV_FETCH /* if it's an %ENV lookup, we may get it on the fly */
320 || (HvNAME(hv) && strEQ(HvNAME(hv),ENV_HV_NAME))
323 Newz(503, xhv->xhv_array,
324 PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
329 keysave = key = SvPV(keysv, klen);
330 is_utf8 = (SvUTF8(keysv)!=0);
332 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT))
333 key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
336 PERL_HASH(hash, key, klen);
338 entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
339 for (; entry; entry = HeNEXT(entry)) {
340 if (HeHASH(entry) != hash) /* strings can't be equal */
342 if (HeKLEN(entry) != klen)
344 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
346 if (HeKUTF8(entry) != (char)is_utf8)
352 #ifdef DYNAMIC_ENV_FETCH /* %ENV lookup? If so, try to fetch the value now */
353 if (HvNAME(hv) && strEQ(HvNAME(hv),ENV_HV_NAME)) {
355 char *env = PerlEnv_ENVgetenv_len(key,&len);
357 sv = newSVpvn(env,len);
359 return hv_store_ent(hv,keysv,sv,hash);
365 if (lval) { /* gonna assign to this, so it better be there */
367 return hv_store_ent(hv,keysv,sv,hash);
373 S_hv_magic_check(pTHX_ HV *hv, bool *needs_copy, bool *needs_store)
375 MAGIC *mg = SvMAGIC(hv);
379 if (isUPPER(mg->mg_type)) {
381 switch (mg->mg_type) {
384 *needs_store = FALSE;
387 mg = mg->mg_moremagic;
394 Stores an SV in a hash. The hash key is specified as C<key> and C<klen> is
395 the length of the key. The C<hash> parameter is the precomputed hash
396 value; if it is zero then Perl will compute it. The return value will be
397 NULL if the operation failed or if the value did not need to be actually
398 stored within the hash (as in the case of tied hashes). Otherwise it can
399 be dereferenced to get the original C<SV*>. Note that the caller is
400 responsible for suitably incrementing the reference count of C<val> before
401 the call, and decrementing it if the function returned NULL.
403 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
404 information on how to use this function on tied hashes.
410 Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen, SV *val, register U32 hash)
415 register HE **oentry;
416 bool is_utf8 = FALSE;
417 const char *keysave = key;
427 xhv = (XPVHV*)SvANY(hv);
431 hv_magic_check (hv, &needs_copy, &needs_store);
433 mg_copy((SV*)hv, val, key, klen);
434 if (!xhv->xhv_array && !needs_store)
436 #ifdef ENV_IS_CASELESS
437 else if (mg_find((SV*)hv,'E')) {
438 key = savepvn(key,klen);
445 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT)) {
446 STRLEN tmplen = klen;
447 /* See the note in hv_fetch(). --jhi */
448 key = (char*)bytes_from_utf8((U8*)key, &tmplen, &is_utf8);
453 PERL_HASH(hash, key, klen);
456 Newz(505, xhv->xhv_array,
457 PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
459 oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
462 for (entry = *oentry; entry; i=0, entry = HeNEXT(entry)) {
463 if (HeHASH(entry) != hash) /* strings can't be equal */
465 if (HeKLEN(entry) != klen)
467 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
469 if (HeKUTF8(entry) != (char)is_utf8)
471 SvREFCNT_dec(HeVAL(entry));
475 return &HeVAL(entry);
480 HeKEY_hek(entry) = share_hek(key, is_utf8?-klen:klen, hash);
481 else /* gotta do the real thing */
482 HeKEY_hek(entry) = save_hek(key, is_utf8?-klen:klen, hash);
486 HeNEXT(entry) = *oentry;
490 if (i) { /* initial entry? */
492 if (xhv->xhv_keys > xhv->xhv_max)
496 return &HeVAL(entry);
500 =for apidoc hv_store_ent
502 Stores C<val> in a hash. The hash key is specified as C<key>. The C<hash>
503 parameter is the precomputed hash value; if it is zero then Perl will
504 compute it. The return value is the new hash entry so created. It will be
505 NULL if the operation failed or if the value did not need to be actually
506 stored within the hash (as in the case of tied hashes). Otherwise the
507 contents of the return value can be accessed using the C<He???> macros
508 described here. Note that the caller is responsible for suitably
509 incrementing the reference count of C<val> before the call, and
510 decrementing it if the function returned NULL.
512 See L<perlguts/"Understanding the Magic of Tied Hashes and Arrays"> for more
513 information on how to use this function on tied hashes.
519 Perl_hv_store_ent(pTHX_ HV *hv, SV *keysv, SV *val, register U32 hash)
526 register HE **oentry;
533 xhv = (XPVHV*)SvANY(hv);
537 hv_magic_check (hv, &needs_copy, &needs_store);
539 bool save_taint = PL_tainted;
541 PL_tainted = SvTAINTED(keysv);
542 keysv = sv_2mortal(newSVsv(keysv));
543 mg_copy((SV*)hv, val, (char*)keysv, HEf_SVKEY);
544 TAINT_IF(save_taint);
545 if (!xhv->xhv_array && !needs_store)
547 #ifdef ENV_IS_CASELESS
548 else if (mg_find((SV*)hv,'E')) {
549 key = SvPV(keysv, klen);
550 keysv = sv_2mortal(newSVpvn(key,klen));
551 (void)strupr(SvPVX(keysv));
558 keysave = key = SvPV(keysv, klen);
559 is_utf8 = (SvUTF8(keysv) != 0);
561 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT))
562 key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
565 PERL_HASH(hash, key, klen);
568 Newz(505, xhv->xhv_array,
569 PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
571 oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
574 for (entry = *oentry; entry; i=0, entry = HeNEXT(entry)) {
575 if (HeHASH(entry) != hash) /* strings can't be equal */
577 if (HeKLEN(entry) != klen)
579 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
581 if (HeKUTF8(entry) != (char)is_utf8)
583 SvREFCNT_dec(HeVAL(entry));
592 HeKEY_hek(entry) = share_hek(key, is_utf8?-klen:klen, hash);
593 else /* gotta do the real thing */
594 HeKEY_hek(entry) = save_hek(key, is_utf8?-klen:klen, hash);
598 HeNEXT(entry) = *oentry;
602 if (i) { /* initial entry? */
604 if (xhv->xhv_keys > xhv->xhv_max)
612 =for apidoc hv_delete
614 Deletes a key/value pair in the hash. The value SV is removed from the
615 hash and returned to the caller. The C<klen> is the length of the key.
616 The C<flags> value will normally be zero; if set to G_DISCARD then NULL
623 Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen, I32 flags)
629 register HE **oentry;
632 bool is_utf8 = FALSE;
633 const char *keysave = key;
641 if (SvRMAGICAL(hv)) {
644 hv_magic_check (hv, &needs_copy, &needs_store);
646 if (needs_copy && (svp = hv_fetch(hv, key, klen, TRUE))) {
650 if (mg_find(sv, 'p')) {
651 sv_unmagic(sv, 'p'); /* No longer an element */
654 return Nullsv; /* element cannot be deleted */
656 #ifdef ENV_IS_CASELESS
657 else if (mg_find((SV*)hv,'E')) {
658 sv = sv_2mortal(newSVpvn(key,klen));
659 key = strupr(SvPVX(sv));
664 xhv = (XPVHV*)SvANY(hv);
668 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT)) {
669 STRLEN tmplen = klen;
670 /* See the note in hv_fetch(). --jhi */
671 key = (char*)bytes_from_utf8((U8*)key, &tmplen, &is_utf8);
675 PERL_HASH(hash, key, klen);
677 oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
680 for (; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
681 if (HeHASH(entry) != hash) /* strings can't be equal */
683 if (HeKLEN(entry) != klen)
685 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
687 if (HeKUTF8(entry) != (char)is_utf8)
691 *oentry = HeNEXT(entry);
694 if (flags & G_DISCARD)
697 sv = sv_2mortal(HeVAL(entry));
698 HeVAL(entry) = &PL_sv_undef;
700 if (entry == xhv->xhv_eiter)
703 hv_free_ent(hv, entry);
713 =for apidoc hv_delete_ent
715 Deletes a key/value pair in the hash. The value SV is removed from the
716 hash and returned to the caller. The C<flags> value will normally be zero;
717 if set to G_DISCARD then NULL will be returned. C<hash> can be a valid
718 precomputed hash value, or 0 to ask for it to be computed.
724 Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash)
731 register HE **oentry;
738 if (SvRMAGICAL(hv)) {
741 hv_magic_check (hv, &needs_copy, &needs_store);
743 if (needs_copy && (entry = hv_fetch_ent(hv, keysv, TRUE, hash))) {
747 if (mg_find(sv, 'p')) {
748 sv_unmagic(sv, 'p'); /* No longer an element */
751 return Nullsv; /* element cannot be deleted */
753 #ifdef ENV_IS_CASELESS
754 else if (mg_find((SV*)hv,'E')) {
755 key = SvPV(keysv, klen);
756 keysv = sv_2mortal(newSVpvn(key,klen));
757 (void)strupr(SvPVX(keysv));
763 xhv = (XPVHV*)SvANY(hv);
767 keysave = key = SvPV(keysv, klen);
768 is_utf8 = (SvUTF8(keysv) != 0);
770 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT))
771 key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
774 PERL_HASH(hash, key, klen);
776 oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
779 for (; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
780 if (HeHASH(entry) != hash) /* strings can't be equal */
782 if (HeKLEN(entry) != klen)
784 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
786 if (HeKUTF8(entry) != (char)is_utf8)
790 *oentry = HeNEXT(entry);
793 if (flags & G_DISCARD)
796 sv = sv_2mortal(HeVAL(entry));
797 HeVAL(entry) = &PL_sv_undef;
799 if (entry == xhv->xhv_eiter)
802 hv_free_ent(hv, entry);
812 =for apidoc hv_exists
814 Returns a boolean indicating whether the specified hash key exists. The
815 C<klen> is the length of the key.
821 Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen)
827 bool is_utf8 = FALSE;
828 const char *keysave = key;
838 if (SvRMAGICAL(hv)) {
839 if (mg_find((SV*)hv,'P')) {
841 mg_copy((SV*)hv, sv, key, klen);
842 magic_existspack(sv, mg_find(sv, 'p'));
845 #ifdef ENV_IS_CASELESS
846 else if (mg_find((SV*)hv,'E')) {
847 sv = sv_2mortal(newSVpvn(key,klen));
848 key = strupr(SvPVX(sv));
853 xhv = (XPVHV*)SvANY(hv);
854 #ifndef DYNAMIC_ENV_FETCH
859 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT)) {
860 STRLEN tmplen = klen;
861 /* See the note in hv_fetch(). --jhi */
862 key = (char*)bytes_from_utf8((U8*)key, &tmplen, &is_utf8);
866 PERL_HASH(hash, key, klen);
868 #ifdef DYNAMIC_ENV_FETCH
869 if (!xhv->xhv_array) entry = Null(HE*);
872 entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
873 for (; entry; entry = HeNEXT(entry)) {
874 if (HeHASH(entry) != hash) /* strings can't be equal */
876 if (HeKLEN(entry) != klen)
878 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
880 if (HeKUTF8(entry) != (char)is_utf8)
886 #ifdef DYNAMIC_ENV_FETCH /* is it out there? */
887 if (HvNAME(hv) && strEQ(HvNAME(hv), ENV_HV_NAME)) {
889 char *env = PerlEnv_ENVgetenv_len(key,&len);
891 sv = newSVpvn(env,len);
893 (void)hv_store(hv,key,klen,sv,hash);
905 =for apidoc hv_exists_ent
907 Returns a boolean indicating whether the specified hash key exists. C<hash>
908 can be a valid precomputed hash value, or 0 to ask for it to be
915 Perl_hv_exists_ent(pTHX_ HV *hv, SV *keysv, U32 hash)
928 if (SvRMAGICAL(hv)) {
929 if (mg_find((SV*)hv,'P')) {
930 SV* svret = sv_newmortal();
932 keysv = sv_2mortal(newSVsv(keysv));
933 mg_copy((SV*)hv, sv, (char*)keysv, HEf_SVKEY);
934 magic_existspack(svret, mg_find(sv, 'p'));
935 return SvTRUE(svret);
937 #ifdef ENV_IS_CASELESS
938 else if (mg_find((SV*)hv,'E')) {
939 key = SvPV(keysv, klen);
940 keysv = sv_2mortal(newSVpvn(key,klen));
941 (void)strupr(SvPVX(keysv));
947 xhv = (XPVHV*)SvANY(hv);
948 #ifndef DYNAMIC_ENV_FETCH
953 keysave = key = SvPV(keysv, klen);
954 is_utf8 = (SvUTF8(keysv) != 0);
955 if (is_utf8 && !(PL_hints & HINT_UTF8_DISTINCT))
956 key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8);
958 PERL_HASH(hash, key, klen);
960 #ifdef DYNAMIC_ENV_FETCH
961 if (!xhv->xhv_array) entry = Null(HE*);
964 entry = ((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
965 for (; entry; entry = HeNEXT(entry)) {
966 if (HeHASH(entry) != hash) /* strings can't be equal */
968 if (HeKLEN(entry) != klen)
970 if (HeKEY(entry) != key && memNE(HeKEY(entry),key,klen)) /* is this it? */
972 if (HeKUTF8(entry) != (char)is_utf8)
978 #ifdef DYNAMIC_ENV_FETCH /* is it out there? */
979 if (HvNAME(hv) && strEQ(HvNAME(hv), ENV_HV_NAME)) {
981 char *env = PerlEnv_ENVgetenv_len(key,&len);
983 sv = newSVpvn(env,len);
985 (void)hv_store_ent(hv,keysv,sv,hash);
996 S_hsplit(pTHX_ HV *hv)
998 register XPVHV* xhv = (XPVHV*)SvANY(hv);
999 I32 oldsize = (I32) xhv->xhv_max + 1; /* sic(k) */
1000 register I32 newsize = oldsize * 2;
1002 register char *a = xhv->xhv_array;
1006 register HE **oentry;
1009 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1010 Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1016 #define MALLOC_OVERHEAD 16
1017 New(2, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1022 Copy(xhv->xhv_array, a, oldsize * sizeof(HE*), char);
1023 if (oldsize >= 64) {
1024 offer_nice_chunk(xhv->xhv_array, PERL_HV_ARRAY_ALLOC_BYTES(oldsize));
1027 Safefree(xhv->xhv_array);
1031 Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
1032 xhv->xhv_max = --newsize;
1036 for (i=0; i<oldsize; i++,aep++) {
1037 if (!*aep) /* non-existent */
1040 for (oentry = aep, entry = *aep; entry; entry = *oentry) {
1041 if ((HeHASH(entry) & newsize) != i) {
1042 *oentry = HeNEXT(entry);
1043 HeNEXT(entry) = *bep;
1050 oentry = &HeNEXT(entry);
1052 if (!*aep) /* everything moved */
1058 Perl_hv_ksplit(pTHX_ HV *hv, IV newmax)
1060 register XPVHV* xhv = (XPVHV*)SvANY(hv);
1061 I32 oldsize = (I32) xhv->xhv_max + 1; /* sic(k) */
1062 register I32 newsize;
1068 register HE **oentry;
1070 newsize = (I32) newmax; /* possible truncation here */
1071 if (newsize != newmax || newmax <= oldsize)
1073 while ((newsize & (1 + ~newsize)) != newsize) {
1074 newsize &= ~(newsize & (1 + ~newsize)); /* get proper power of 2 */
1076 if (newsize < newmax)
1078 if (newsize < newmax)
1079 return; /* overflow detection */
1084 #if defined(STRANGE_MALLOC) || defined(MYMALLOC)
1085 Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1091 New(2, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1096 Copy(xhv->xhv_array, a, oldsize * sizeof(HE*), char);
1097 if (oldsize >= 64) {
1098 offer_nice_chunk(xhv->xhv_array, PERL_HV_ARRAY_ALLOC_BYTES(oldsize));
1101 Safefree(xhv->xhv_array);
1104 Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/
1107 Newz(0, a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char);
1109 xhv->xhv_max = --newsize;
1111 if (!xhv->xhv_fill) /* skip rest if no entries */
1115 for (i=0; i<oldsize; i++,aep++) {
1116 if (!*aep) /* non-existent */
1118 for (oentry = aep, entry = *aep; entry; entry = *oentry) {
1119 if ((j = (HeHASH(entry) & newsize)) != i) {
1121 *oentry = HeNEXT(entry);
1122 if (!(HeNEXT(entry) = aep[j]))
1128 oentry = &HeNEXT(entry);
1130 if (!*aep) /* everything moved */
1138 Creates a new HV. The reference count is set to 1.
1147 register XPVHV* xhv;
1149 hv = (HV*)NEWSV(502,0);
1150 sv_upgrade((SV *)hv, SVt_PVHV);
1151 xhv = (XPVHV*)SvANY(hv);
1154 #ifndef NODEFAULT_SHAREKEYS
1155 HvSHAREKEYS_on(hv); /* key-sharing on by default */
1157 xhv->xhv_max = 7; /* start with 8 buckets */
1159 xhv->xhv_pmroot = 0;
1160 (void)hv_iterinit(hv); /* so each() will start off right */
1165 Perl_newHVhv(pTHX_ HV *ohv)
1168 STRLEN hv_max = ohv ? HvMAX(ohv) : 0;
1169 STRLEN hv_fill = ohv ? HvFILL(ohv) : 0;
1172 while (hv_max && hv_max + 1 >= hv_fill * 2)
1173 hv_max = hv_max / 2; /* Is always 2^n-1 */
1179 if (! SvTIED_mg((SV*)ohv, 'P')) {
1186 I32 hv_riter = HvRITER(ohv); /* current root of iterator */
1187 HE *hv_eiter = HvEITER(ohv); /* current entry of iterator */
1191 while ((entry = hv_iternext(ohv))) {
1192 hv_store(hv, HeKEY(entry), HeKLEN_UTF8(entry),
1193 newSVsv(HeVAL(entry)), HeHASH(entry));
1195 HvRITER(ohv) = hv_riter;
1196 HvEITER(ohv) = hv_eiter;
1203 Perl_hv_free_ent(pTHX_ HV *hv, register HE *entry)
1210 if (val && isGV(val) && GvCVu(val) && HvNAME(hv))
1211 PL_sub_generation++; /* may be deletion of method from stash */
1213 if (HeKLEN(entry) == HEf_SVKEY) {
1214 SvREFCNT_dec(HeKEY_sv(entry));
1215 Safefree(HeKEY_hek(entry));
1217 else if (HvSHAREKEYS(hv))
1218 unshare_hek(HeKEY_hek(entry));
1220 Safefree(HeKEY_hek(entry));
1225 Perl_hv_delayfree_ent(pTHX_ HV *hv, register HE *entry)
1229 if (isGV(HeVAL(entry)) && GvCVu(HeVAL(entry)) && HvNAME(hv))
1230 PL_sub_generation++; /* may be deletion of method from stash */
1231 sv_2mortal(HeVAL(entry)); /* free between statements */
1232 if (HeKLEN(entry) == HEf_SVKEY) {
1233 sv_2mortal(HeKEY_sv(entry));
1234 Safefree(HeKEY_hek(entry));
1236 else if (HvSHAREKEYS(hv))
1237 unshare_hek(HeKEY_hek(entry));
1239 Safefree(HeKEY_hek(entry));
1244 =for apidoc hv_clear
1246 Clears a hash, making it empty.
1252 Perl_hv_clear(pTHX_ HV *hv)
1254 register XPVHV* xhv;
1257 xhv = (XPVHV*)SvANY(hv);
1262 (void)memzero(xhv->xhv_array, (xhv->xhv_max + 1) * sizeof(HE*));
1269 S_hfreeentries(pTHX_ HV *hv)
1271 register HE **array;
1273 register HE *oentry = Null(HE*);
1284 array = HvARRAY(hv);
1289 entry = HeNEXT(entry);
1290 hv_free_ent(hv, oentry);
1295 entry = array[riter];
1298 (void)hv_iterinit(hv);
1302 =for apidoc hv_undef
1310 Perl_hv_undef(pTHX_ HV *hv)
1312 register XPVHV* xhv;
1315 xhv = (XPVHV*)SvANY(hv);
1317 Safefree(xhv->xhv_array);
1319 Safefree(HvNAME(hv));
1323 xhv->xhv_max = 7; /* it's a normal hash */
1332 =for apidoc hv_iterinit
1334 Prepares a starting point to traverse a hash table. Returns the number of
1335 keys in the hash (i.e. the same as C<HvKEYS(tb)>). The return value is
1336 currently only meaningful for hashes without tie magic.
1338 NOTE: Before version 5.004_65, C<hv_iterinit> used to return the number of
1339 hash buckets that happen to be in use. If you still need that esoteric
1340 value, you can get it through the macro C<HvFILL(tb)>.
1346 Perl_hv_iterinit(pTHX_ HV *hv)
1348 register XPVHV* xhv;
1352 Perl_croak(aTHX_ "Bad hash");
1353 xhv = (XPVHV*)SvANY(hv);
1354 entry = xhv->xhv_eiter;
1355 if (entry && HvLAZYDEL(hv)) { /* was deleted earlier? */
1357 hv_free_ent(hv, entry);
1359 xhv->xhv_riter = -1;
1360 xhv->xhv_eiter = Null(HE*);
1361 return xhv->xhv_keys; /* used to be xhv->xhv_fill before 5.004_65 */
1365 =for apidoc hv_iternext
1367 Returns entries from a hash iterator. See C<hv_iterinit>.
1373 Perl_hv_iternext(pTHX_ HV *hv)
1375 register XPVHV* xhv;
1381 Perl_croak(aTHX_ "Bad hash");
1382 xhv = (XPVHV*)SvANY(hv);
1383 oldentry = entry = xhv->xhv_eiter;
1385 if ((mg = SvTIED_mg((SV*)hv, 'P'))) {
1386 SV *key = sv_newmortal();
1388 sv_setsv(key, HeSVKEY_force(entry));
1389 SvREFCNT_dec(HeSVKEY(entry)); /* get rid of previous key */
1395 xhv->xhv_eiter = entry = new_HE(); /* one HE per MAGICAL hash */
1397 Newz(54, k, HEK_BASESIZE + sizeof(SV*), char);
1399 HeKEY_hek(entry) = hek;
1400 HeKLEN(entry) = HEf_SVKEY;
1402 magic_nextpack((SV*) hv,mg,key);
1404 /* force key to stay around until next time */
1405 HeSVKEY_set(entry, SvREFCNT_inc(key));
1406 return entry; /* beware, hent_val is not set */
1409 SvREFCNT_dec(HeVAL(entry));
1410 Safefree(HeKEY_hek(entry));
1412 xhv->xhv_eiter = Null(HE*);
1415 #ifdef DYNAMIC_ENV_FETCH /* set up %ENV for iteration */
1416 if (!entry && HvNAME(hv) && strEQ(HvNAME(hv), ENV_HV_NAME))
1420 if (!xhv->xhv_array)
1421 Newz(506, xhv->xhv_array,
1422 PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max + 1), char);
1424 entry = HeNEXT(entry);
1427 if (xhv->xhv_riter > xhv->xhv_max) {
1428 xhv->xhv_riter = -1;
1431 entry = ((HE**)xhv->xhv_array)[xhv->xhv_riter];
1434 if (oldentry && HvLAZYDEL(hv)) { /* was deleted earlier? */
1436 hv_free_ent(hv, oldentry);
1439 xhv->xhv_eiter = entry;
1444 =for apidoc hv_iterkey
1446 Returns the key from the current position of the hash iterator. See
1453 Perl_hv_iterkey(pTHX_ register HE *entry, I32 *retlen)
1455 if (HeKLEN(entry) == HEf_SVKEY) {
1457 char *p = SvPV(HeKEY_sv(entry), len);
1462 *retlen = HeKLEN(entry);
1463 return HeKEY(entry);
1467 /* unlike hv_iterval(), this always returns a mortal copy of the key */
1469 =for apidoc hv_iterkeysv
1471 Returns the key as an C<SV*> from the current position of the hash
1472 iterator. The return value will always be a mortal copy of the key. Also
1479 Perl_hv_iterkeysv(pTHX_ register HE *entry)
1481 if (HeKLEN(entry) == HEf_SVKEY)
1482 return sv_mortalcopy(HeKEY_sv(entry));
1484 return sv_2mortal(newSVpvn_share((HeKLEN(entry) ? HeKEY(entry) : ""),
1485 HeKLEN_UTF8(entry), HeHASH(entry)));
1489 =for apidoc hv_iterval
1491 Returns the value from the current position of the hash iterator. See
1498 Perl_hv_iterval(pTHX_ HV *hv, register HE *entry)
1500 if (SvRMAGICAL(hv)) {
1501 if (mg_find((SV*)hv,'P')) {
1502 SV* sv = sv_newmortal();
1503 if (HeKLEN(entry) == HEf_SVKEY)
1504 mg_copy((SV*)hv, sv, (char*)HeKEY_sv(entry), HEf_SVKEY);
1505 else mg_copy((SV*)hv, sv, HeKEY(entry), HeKLEN(entry));
1509 return HeVAL(entry);
1513 =for apidoc hv_iternextsv
1515 Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
1522 Perl_hv_iternextsv(pTHX_ HV *hv, char **key, I32 *retlen)
1525 if ( (he = hv_iternext(hv)) == NULL)
1527 *key = hv_iterkey(he, retlen);
1528 return hv_iterval(hv, he);
1532 =for apidoc hv_magic
1534 Adds magic to a hash. See C<sv_magic>.
1540 Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how)
1542 sv_magic((SV*)hv, (SV*)gv, how, Nullch, 0);
1546 Perl_sharepvn(pTHX_ const char *sv, I32 len, U32 hash)
1548 return HEK_KEY(share_hek(sv, len, hash));
1551 /* possibly free a shared string if no one has access to it
1552 * len and hash must both be valid for str.
1555 Perl_unsharepvn(pTHX_ const char *str, I32 len, U32 hash)
1557 register XPVHV* xhv;
1559 register HE **oentry;
1562 bool is_utf8 = FALSE;
1563 const char *save = str;
1568 if (!(PL_hints & HINT_UTF8_DISTINCT)) {
1569 STRLEN tmplen = len;
1570 /* See the note in hv_fetch(). --jhi */
1571 str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
1576 /* what follows is the moral equivalent of:
1577 if ((Svp = hv_fetch(PL_strtab, tmpsv, FALSE, hash))) {
1578 if (--*Svp == Nullsv)
1579 hv_delete(PL_strtab, str, len, G_DISCARD, hash);
1581 xhv = (XPVHV*)SvANY(PL_strtab);
1582 /* assert(xhv_array != 0) */
1584 oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
1585 for (entry = *oentry; entry; i=0, oentry = &HeNEXT(entry), entry = *oentry) {
1586 if (HeHASH(entry) != hash) /* strings can't be equal */
1588 if (HeKLEN(entry) != len)
1590 if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */
1592 if (HeKUTF8(entry) != (char)is_utf8)
1595 if (--HeVAL(entry) == Nullsv) {
1596 *oentry = HeNEXT(entry);
1599 Safefree(HeKEY_hek(entry));
1605 UNLOCK_STRTAB_MUTEX;
1608 if (!found && ckWARN_d(WARN_INTERNAL))
1609 Perl_warner(aTHX_ WARN_INTERNAL, "Attempt to free non-existent shared string '%s'",str);
1612 /* get a (constant) string ptr from the global string table
1613 * string will get added if it is not already there.
1614 * len and hash must both be valid for str.
1617 Perl_share_hek(pTHX_ const char *str, I32 len, register U32 hash)
1619 register XPVHV* xhv;
1621 register HE **oentry;
1624 bool is_utf8 = FALSE;
1625 const char *save = str;
1630 if (!(PL_hints & HINT_UTF8_DISTINCT)) {
1631 STRLEN tmplen = len;
1632 /* See the note in hv_fetch(). --jhi */
1633 str = (char*)bytes_from_utf8((U8*)str, &tmplen, &is_utf8);
1638 /* what follows is the moral equivalent of:
1640 if (!(Svp = hv_fetch(PL_strtab, str, len, FALSE)))
1641 hv_store(PL_strtab, str, len, Nullsv, hash);
1643 xhv = (XPVHV*)SvANY(PL_strtab);
1644 /* assert(xhv_array != 0) */
1646 oentry = &((HE**)xhv->xhv_array)[hash & (I32) xhv->xhv_max];
1647 for (entry = *oentry; entry; i=0, entry = HeNEXT(entry)) {
1648 if (HeHASH(entry) != hash) /* strings can't be equal */
1650 if (HeKLEN(entry) != len)
1652 if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */
1654 if (HeKUTF8(entry) != (char)is_utf8)
1661 HeKEY_hek(entry) = save_hek(str, is_utf8?-len:len, hash);
1662 HeVAL(entry) = Nullsv;
1663 HeNEXT(entry) = *oentry;
1666 if (i) { /* initial entry? */
1668 if (xhv->xhv_keys > xhv->xhv_max)
1673 ++HeVAL(entry); /* use value slot as REFCNT */
1674 UNLOCK_STRTAB_MUTEX;
1677 return HeKEY_hek(entry);