Files
boc/rust-service/target/debug/deps/libhashbrown-64a52bde15bbe152.rmeta
T

3299 lines
880 KiB
Plaintext
Raw Normal View History

rust
#rustc 1.96.0 (ac68faa20 2026-05-25)ÁíàÄTËŸ ÜJîÄ)'ß\¥!-3d1337db07d0b3aeÁ¤²XctÔ'ÐÓ©z¨ɽÓ-a4945860e1c53b00Á¤°ð ¾ä-±($²ï=©Ã-7e98a21bfd32b0edÁÀ§
$†
¦»nightlyÁœ¦innerÁ,ˆ»Òœîã»allocator-api2ÁÔÐlikelyÁ4Ö»Òœ©û»Òtest_mapÁDæ  rayonÁ,¦»ïŒ–@»@|üŒû÷ï,)»ïŒ÷rkyvÁ$M»¹„6÷serdeÁ,q»ÒŒYøDefaultHashBuilderÁ”œ»ahashÁŒÿø make_hashÁLƒF»Òœ²EøÒD™…
$Ž…
 rustc_entryÁ\ç»rustc-internal-apiÁôÂÉ test_setÁD¯Õ$¤Õéï»ïŒèëï»ïŒÄíï»ïŒ¦
EquivalentÁT»
equivalentÁ´éµðµ¼ØimpÁîðµgenericÁ<Ù
ðµ9ìôœýìõ´’üü-µ üÎuì¼”ðà ¼µílittleÁÄÞ µ $„

üŠXÃ
¿
¥ù
ðµÎìôìõµ ŽŒŠìðà íª}µ {ywsprí¤macrosÁcfg_ifÁ¦@ã 
  
¤ã AllocatorÁ#allocateÁ#
deallocateÁ&ˆ
&
)>do_allocÁ+bitmaskÁ11111118invertÁ8remove_lowest_bitÁ8 any_bit_setÁ8lowest_set_bitÁ8trailing_zerosÁ8nonzero_trailing_zerosÁ8
leading_zerosÁ1@@IntoIterÁ@ê1DflipÁ1FFó  invalid_mutÁM¥ offset_fromÁO¥Qcapacity_overflowÁQ alloc_errÁSizedTypePropertiesÁT
IS_ZERO_SIZEDÁT
NEEDS_DROPÁW¥EMPTYÁDELETEDÁis_fullÁ
is_specialÁspecial_is_emptyÁh1Á MIN_HASH_LENÁh2ÁProbeSeqÁaposÁastrideÁd move_nextÁcapacity_to_bucketsÁbucket_mask_to_capacityÁhæ i¥hcalculate_layout_forÁ
InsertSlotÁlÖBucketÁn¥nµ q¥s¥sƒv¥vfrom_base_indexÁv
to_base_indexÁvas_ptrÁvnext_nÁvãvreadÁvwriteÁvÉ'aÁvas_mutÁøvcopy_from_nonoverlappingÁRawTableÁ¥tableÁ¤Ú
RawTableInnerÁŠ bucket_maskÁŠctrlÁŠ growth_leftÁŠitemsÁ¥æ try_with_capacityÁ
with_capacityÁ¥ TABLE_LAYOUTÁnew_inÁnew_uninitializedÁtry_with_capacity_inÁwith_capacity_inÁ¨data_endÁ
data_startÁallocation_infoÁ bucket_indexÁbucketÁ
erase_no_dropÁeraseÁ erase_entryÁ¤impl FnMut(&T) -> boolÁremoveÁ remove_entryÁ§¢
clear_no_dropÁclearÁª  shrink_toÁ¬impl Fn(&T) -> u64ÁreserveÁ®¢ try_reserveÁ°¢reserve_rehashÁ²¢² resizeÁµ¢µ insertÁ¸¢try_insert_no_growÁ insert_entryÁ»¢insert_no_growÁreplace_bucket_withÁ¾find_or_find_insert_slotÁÀ¢À¢À insert_in_slotÁfindÁŢŠgetÁÈ¢get_mutÁÊ¢ get_many_mutÁÌŸÌ Ìimpl FnMut(usize, &T) -> boolÁÌ Ì get_many_unchecked_mutÁÒŸÒ ÒàÒ get_many_mut_pointersÁ×Ÿ× ×à× × × capacityÁis_emptyÁbucketsÁis_bucket_fullÁù iter_hashÁdrainÁdrain_iter_fromÁinto_iter_fromÁinto_allocationÁ é¥é
ì¥ì ïNEWÁïæ  ò½óòfallible_with_capacityÁõõ òòøòfix_insert_slotÁòfind_insert_slot_in_groupÁòfind_or_find_insert_slot_innerÁòprepare_insert_slotÁòfind_insert_slotÁò
find_innerÁòprepare_rehash_in_placeÁòù¥ò
drop_elementsÁƒ¥òdrop_inner_tableÁ¥ò߈¥ò
bucket_ptrÁò¥ò probe_seqÁòprepare_insert_no_growÁòrecord_item_insert_atÁòis_in_same_groupÁ ò set_ctrl_h2Áòreplace_ctrl_h2Áòset_ctrlÁòò°ò¿ònum_ctrl_bytesÁòis_empty_singletonÁòprepare_resizeÁšøššš òreserve_rehash_innerÁŸòfull_buckets_indicesÁò resize_innerÁ¢òrehash_in_placeÁ¤ ò free_bucketsÁ¦ò´òallocation_info_or_zeroÁòêò
¬¥¬¬ƒ¬° 
RawTableCloneÁ²clone_from_specÁ´¥´·¥··clone_from_implÁº ·clone_from_with_hasherÁ¼¢¼ ¿¥¿¿>Ã¥ÃÃãÇ¥ÇÇDZ Çê RawIterRangeÁÍ¥Í
current_groupÁÍdataÁÍ next_ctrlÁÍþÓ¥Óæ Ó next_implÁÖDO_CHECK_PTR_RANGEÁÓ fold_implÁØØÛ¥Ý¥ß¥ßƒâ¥ââó å â size_hintÁè¥RawIterÁê¥êùê¸î¥îreflect_removeÁîreflect_insertÁîreflect_toggle_fullÁîŸ ô¥ôƒ÷¥÷÷ó ú ÷¤)÷foldÁýý¥¥FullBucketsIndicesÁ½'group_first_indexÁ¸‹(ó ¤) ! RawIntoIterÁ¥ù
allocationÁÚ"¥ù#¥$ž¥ž%¡¥¡¡ã&¥¥¥¥¥ó ¥¤)'«¥«(®¥®RawDrainÁ±ø±¥±±ù±Õ±
orig_tableÁ±Ú)¹¥¹¹ù*½¥½+À¥À,Ã¥ÃÃã-Ç¥ÇÇÇó Ǥ).Í¥Í/ХРRawIterHashÁÓ¥ÓãÓ_markerÁRawIterHashInnerÁ×××h2_hashÁ×!×groupÁ×ê
0Þ¥Þæ à1âæ 2ä¥ääó 3èèó  RawExtractIfÁëøë¥ëëùëÕ4ñ¥ññó ôexternal_trait_implsÁØøøøøøøøøøø ø
ø ø ø
øøøøøøøøøøìøœ§¤ hash_builderÁÕø˜œ˜§˜¤˜˜ƒ˜ø make_hasherÁŸ¢Ÿ§Ÿ¤ŸŸ øequivalent_keyÁ¥¢¥œ¥§¥¥ øû«¢«œ«« øš°¢°¤°ø´œ´§´¤´ with_hasherÁ´with_capacity_and_hasherÁøºœº§º¤ºº¨ºwith_hasher_inÁºwith_capacity_and_hasher_inÁºhasherÁºˆºkeysÁº¼º
values_mutÁºùºúºº ºîºretainÁ̺
extract_ifÁκÿº into_keysÁº into_valuesÁøÓœÓ§Ó¤ÓÓ¼ÓÓÓ
shrink_to_fitÁÓÓentryÁÓ entry_refÁÝøÝ'bÁÝ¢Óá¢Ó
get_key_valueÁã¢Ó get_innerÁå¢Óget_key_value_mutÁç¢Ó contains_keyÁé¢Ó¨ë¢Ó
get_inner_mutÁí¢Ó¿ï¢ïŸï ï ï ô Óö¢öŸö ö ö û Óget_many_key_value_mutÁý¢ýŸý ý ý  Ó get_many_key_value_unchecked_mutÁ¢Ÿ    Óget_many_mut_innerÁ¢Ÿ   Óget_many_unchecked_mut_innerÁ¢Ÿ   Óbuild_hashes_innerÁ¢Ÿ   Ó¬Óinsert_unique_uncheckedÁÓ
try_insertÁÓÀ ¢Ó΢¢ø¤œ¤§¤¤¤¤
raw_entry_mutÁ¤ raw_entryÁ¤ raw_tableÁ¤
raw_table_mutÁø­œ­§­¤­­² ³ øµœµ§µ¤µøºœº§º¤ºº×øÀœÀ§À¤ÀÀ>ø ÆœÆ¢Æ§Æ¤ÆÆ°ÆÖøIterÁÎøÎœÎ§ÎãÎÚø
Ԝԧԃø ؜اØ×øIterMutÁÜøÜœÜ§ÜãÜÚø âœâ§ø
åœå§åùø± éœé§ééãøîœî§îîùøIntoKeysÁóœó§óóãøøœø§øøøó ý ø¤)øÿ* øœ§øœ§øœ§× ø
IntoValuesÁœ§ãø˜œ˜§˜˜˜ó  ˜¤)˜ÿ*    ø¤œ¤§¤¤ø©œ©§©ø­œ­§­­×± øKeysÁ³ø³œ³§³ãø¸œ¸§¸ƒø¼œ¼§¼×øValuesÁÀøÀœÀ§ÀãøÅœÅ§ÅƒøÉœÉ§É×øDrainÁÍøÍœÍ§ÍÍãøÓœÓ§ÓÓùø ExtractIfÁØøØœØ§ØØØ±Øãøàœà§ààààó æ à¤)øéœé§éø ValuesMutÁíøíœí§íãøRawEntryBuilderMutÁòøòœò§ò¤òòØø RawEntryMutÁùøùœù§ù¤ùùOccupiedÁÿ
ÿˆùVacantÁ
ˆøRawOccupiedEntryMutÁøœ§¤elemÁÕ®4øŽœŽ§Ž¤Žøœ§¤øRawVacantEntryMutÁ˜ø˜œ˜§˜¤˜˜Õ˜®4øRawEntryBuilderÁ ø œ § ¤  Øø §ø§œ§§§¤§§from_keyÁ­¢§from_key_hashed_nocheckÁ¯¢ø!±ø±œ±§±¤±± from_hashÁ··™:±searchÁºº™:º ø"¾ø¾œ¾§¾¤¾¾êPÄ¢¾‚QÆ¢¾÷QÈÈ ¾ÖQËø#ÍøÍœÍ§Í¤ÍÍ¬Í or_insertÁÍor_insert_withÁÕÍ
and_modifyÁ×Íand_replace_entry_withÁÙø$ÛøÛœÛ§Û¤ÛÛkeyÁÛkey_mutÁÛinto_keyÁÛÛinto_mutÁÛ¨Û»:Ûñ:Ûinto_key_valueÁÛ¬Û
insert_keyÁÛÀÛÎÛreplace_entry_withÁîî ð ø%òøòœò§ò¤òò¬òinsert_hashed_nocheckÁòinsert_with_hasherÁúú òÜø&þœþ§þ¤þþ×ø'œ§¤×ø(ŠœŠ§Š¤ŠŠ×ø)œ§¤×ø*œ§¤×øEntryÁœøœœœ§œ¤œœÄM¢
¢ˆœáM¥
¥ˆø+¨œ¨§¨¤¨¨×ø
OccupiedEntryÁ®ø®œ®§®¤®®§®ÝT®¿N®Õø,¸œ¸§¸¤¸ø-½œ½§½¤½ø.œ§¤ÂÂ×ø VacantEntryÁÈøÈœÈ§È¤ÈȧÈÝTÈÕø/ќѧѤÑÑ×øEntryRefÁ×ø×™:לעקפ××ÄMß
߈×áMâ
âˆø0åœå¢å§å¤åå×øKeyOrRefÁìøìœì¢ìBorrowedÁð
ðˆìOwnedÁó
óˆø1öøöœö¢ö
into_ownedÁø2ûøûœû¢ûÉøOccupiedEntryRefÁø™:œ¢§¤§ÝT¿NÕø3Œ øŒ ™:Œ œŒ ¢Œ §Œ ¤Œ ø4ø™:œ¢§¤ø5œ œœ ¢œ §œ ¤œ œ ×øVacantEntryRefÁ£ ø£ ™:£ œ£ ¢£ §£ ¤£ £ §£ ÝT£ Õø6® œ® ¢® §® ¤® ® ×ø
OccupiedErrorÁµ øµ œµ §µ ¤µ µ ó9µ »ø7½ œ½ §½ ¤½ ½ ×ø8à øà œà §à ¤à à ×ø9Ê øÊ œÊ §Ê ¤Ê Ê Ê ± Ê êø:Ó øÓ œÓ §Ó ¤Ó Ó Ó ± Ó êø;Ü œÜ §Ü ¤Ü Ü Ü ± Ü êø<ä øä œä §ä ä ó ä ¤)ä ÿ*ë ë ë ø=ï œï §ï ø>ó œó §ø?ö øö œö §ö ö ó ö ¤)ö ÿ*ý ý ý ø@
œ
§
øA
œ
§øBˆ
œˆ
§ˆ
×øCŒ
œŒ
§Œ
Œ
Œ
ó Œ
¤)Œ
ÿ*

øD
œ
§

øE
œ
§
øFŸ
œŸ
§Ÿ
Ÿ
×øG¤
ø¤
œ¤
§¤
¤
ó ¤
¤)¤
ÿ*«
«
«
øH¯
œ¯
§¯
øI³
œ³
§øJ
ø
œ
§

ó 
¤)
ÿ*½
½
½
øKÁ
œÁ
§Á
øLÅ
ρ
§øMÈ
øÈ
œÈ
§È
È
ó È
¤)È
ÿ*Ï
Ï
Ï
øNÓ
œÓ
§Ó
øO×
œ×
§øPÚ
œÚ
§Ú
×Ý
øQß
øß
ϧ
§ß
ß
ß
ó ß
¤)ß
ÿ*ç
ç
øRê
ϐ
§ê
ê
øSï
ϕ
§ï
øTó
ϗ
§ó
ó
×øUø
øø
Ͽ
§ø
¤ø
ø
¬ø
ÁSø
ÒS ø
or_insert_with_keyÁ ø
ÝTø
ðS ø
ŠT øV ø œ § ¤  
or_defaultÁøW ø œ § ¤  ÝT Î  ¨ U ¬ À 
replace_entryÁ  replace_keyÁ ÷UŸ Ÿ øX¢ ø¢ œ¢ §¢ ¤¢ ¢ ÝT¢ ÷T¢ ¬¢ ÜøY¬ ø¬ ™:¬ œ¬ ¢¬ §¬ ¤¬ ¬ ¬¬ ÁS¬ ÒS ¬ ÿn¸ ¬ ÝT¬ ðS» ¬ ŠT½ øZ¿ ø¿ ™:¿ œ¿ ¢¿ §¿ ¤¿ ¿ öoø[È øÈ ™:È œÈ ¢È §È ¤È È ÝTÈ ÎÈ È ¨È UÈ ¬È ÀÈ ípÈ ‚qÈ ÷UÙ Ù ø\Ü øÜ ™:Ü œÜ ¢Ü §Ü ¤Ü Ü ÝTÜ ÷TÜ ¬Ü Üø]è œè §è ¤è è ùí ¥í ø^ð œð §ð ¤ð ð extendÁõ ¥õ ø_ø øø œø §ø ¤ø ø §vþ ¥þ ø` ø œ § ¤  §v ¥ øassert_covarianceÁŠ map_keyÁ 'newÁŠ map_valÁ îwŠ iter_keyÁ ø îwŠ iter_valÁ ø îwŠ 
into_iter_keyÁ îw Š 
into_iter_valÁ˜ îw˜ Š keys_keyÁ ø îwŠ keys_valÁž øž îwŠ 
values_keyÁ¡ ø¡ îwŠ 
values_valÁ¤ ø¤ îwŠ î§ îw
scopeguardÁ© © © © © © © 
ScopeGuardÁ° ¥° ° dropfnÁ° »© £µ ¥µ © ¸ ¥¸ ¸ 
into_innerÁ© ¼ ¥¼ ¼ å¼ ´© Á ¥Á Á © Å ¥Å Å ãsetÁÉ É É É É É É É É É  É 
É  É  É 
É É É É É É É É É É É É É ä ¥ä ¤ä ä ØÉ é ¥é ¤é é ƒé É ï ¥ï ¤ï ï ˆï ùï ï  ï îï Å8ø ø ï Û8û ï ÿÉ þ ¥þ ¤þ È6þ Û6É ƒ
¥ƒ
¤ƒ
ƒ
¨ƒ
¨7ƒ
¾7ƒ
á7É 
¥
¤

¼
Ó
Ö9


differenceÁ
ø
symmetric_differenceÁ
ø
 intersectionÁ
ø
C
ø
containsÁ
¢

¢

get_or_insertÁ
get_or_insert_ownedÁ 
¢ 

get_or_insert_withÁ£
¢£
£

ó9
 is_disjointÁ¨

 is_subsetÁª

 is_supersetÁ
¬
þ>
replaceÁ
ˡ
¢
takeÁ²
¢É ´
¥´
¤´
´
š@´
«@É º
¥º
¤º
º
¾
É À
¥À
¤À
É Ä
¥Ä
¤Ä
Ä
×É  É
¥É
¤É
É
փ 
Î
¥Î
¤Î
Î
ùÒ
šÉ  Ô
¥Ô
¤Ô
Ô
§vØ
šØ
É  Û
øÛ
¥Û
¤Û
Û
§và
šÉ 
â
¥â
¤â
â
>É ç
¥ç
¤ç
ç
°ç
±É í
¥í
¤í
í
°í
¯É ó
¥ó
¤ó
°ó
µÉ ø
¥ø
¤ø
°ø
ÚÉ ²Bý
øý
œý
ùÉ ± œùÉ ŒJøœùÉ æJŠøŠœŠŠŠ±ŠãÉ  IntersectionÁø¥¤ù¹
É 
DifferenceÁ˜ø˜¥˜¤˜˜ù˜¹
É SymmetricDifferenceÁŸøŸ¥Ÿ¤ŸŸùÉ ô¥ø¥¥¥¤¥¥ùÉ «ø«¥«¤«««± «êÉ ³¥³¤³³³± ³êÉ ºœºƒÉ ½ø½œ½½ó ½¤)½ÿ*ÃÃÉ ÆøÆœÆÉ ÊœÉ ÌœÌ×É ÏœÏÏÏó Ϥ)Ïÿ*ÕÕÕ É ÙœÙÙÉ ÝœÝÉ àœàà×ã É åœåååó å¤)åÿ*ëëë É ïœïïÉ óœóÉ  öœöö×ù É !ûœûûûûó   û¤)É "œÉ #ˆ¥ˆ¤ˆˆƒÉ $ø¥¤ó ¤)ÿ* É %¥¤×É &ž¥ž¤žÉ '¢¥¢¤¢¢ƒÉ (§ø§¥§¤§§§ó §¤)§ÿ*¯¯¯ É )³¥³¤³É *·¥·¤··×É +¼¥¼¤¼¼ƒÉ ,ÁøÁ¥Á¤ÁÁÁó Á¤)Áÿ*ÉÉÉ -̥̤ÌÉ .ХФÐÐ×É /Õ¥Õ¤ÕÕƒÉ 0Ú¥Ú¤ÚÉ 1Þ¥Þ¤ÞÞ×É 2ãøã¥ã¤ãããó ã¤)ãÿ*ëëÉ …Yîøî¥î¤îîÄMó
óˆîáMö
öˆÉ 3ù¥ù¤ùù×É ‘Zþøþ¥þ¤þþãÉ 4¥¤×É å[ø¥¤ãÉ 5¥¤×É 6ø¥¤¬ÁSÉ 7œ¥œ¤œœœÀœü‚É 8£ø£¥£¤£££
into_valueÁ£¬£ÜÉ Æw¬³|­îw¬ù¯ø¯îw¬ê²îw²¬¦€µøµîwµ¬À€¹ø¹îw¹¬ä€½ø½îw½¬CÁøÁîwÁ¬îÅîwÅÕÈÈÈÈÈÈÈÈÈÈ È
È È È
ÈÈÈ HashTableÁÙ¥ÙÙ@ÈÝ¥Ýæ ÝòÈá¥áá¯áòá¨áüç¢áfind_mutÁé¢á
find_entryÁë¢áó9í¢í¢á
insert_uniqueÁð¢áÿáÖ9ó¢áõ¢á¼÷¢áÓù¢áˆáá áùáúáÅ8impl FnMut(&mut T) -> boolÁáîáÛ8ƒá¿Ÿ à áŠŸŠ ŠàŠ È¥± êÈø¥± êÈœøœ¥œœœ± œêÈ£¥££>ȧ¥§§ƒÈ«¥««×È…Y¯ø¯¥¯¯ÄM³
³ˆ¯áM
ˆÈ¹¥¹¹×È ½ø½¥½½¬½ÁS½ÒSÃimpl FnOnce() -> TÁ½ðSÅimpl FnOnce(&mut T)ÁÈZÇøÇ¥ÇǧÇßÇÕÈ
Î¥ÎÈ Ñ¥ÑÈ Ô¥ÔÔ×È
ØøØ¥ØØÀØØ¨ØUØ
into_tableÁÈå[áøá¥áá§á insert_slotÁáÕÈè¥èè×Èìøì¥ìì¬ìü¤È AbsentEntryÁòøò¥òòÕÈ÷¥÷÷×Èûøû¥ûûü¤È²Bø¥ãÚÈø¥ó ¤)ÿ* ȥȥȠCø¥ãÚÈø¥ó ¤)ÿ*ŸŸŸ È£¥£È¦¥È± ¨¥¨¨ãȬ¥¬¬¬ó ¬¤)¬ÿ*²²Èµ¥µµÈ¹¥¹ÈŒJ¼ø¼¥¼¼ãÈÁ¥ÁÁùÈÅ¥ÅÅÅó Ť)ÈË¥ËËÈÏ¥ÏÈÒ¥ÒÒ×ÈæJÖøÖ¥ÖÖÖ±ÖãÈ Ý¥ÝÝÝÝó â ݤ)È!å¥ååhash_mapÁéhash_setÁë
hash_tableÁíåòœòûõ¢õœõûà ùùùùùù BitMaskWordÁùNonZeroBitMaskWordÁùBITMASK_STRIDEÁù BITMASK_MASKÁùBITMASK_ITER_MASKÁùWIDTHÁ static_emptyÁ  AlignedBytesÁˆ_alignÁ ˆbytesÁ 
ALIGNED_BYTESÁ ¬ load_alignedÁ
store_alignedÁ
match_byteÁ match_emptyÁmatch_empty_or_deletedÁ
match_fullÁ,convert_special_to_empty_and_full_to_deletedÁùGroupÁ˜
˜ˆùùùƒGlobalÁŸ
£ƒ1BitMaskÁ¥
¥ˆ111ªƒ1 BitMaskIterÁ¬
¬ˆ111 ±ƒ FallibilityÁ³FallibleÁ´
³
InfallibleÁ
567ºƒ TableLayoutÁ¼¼
ctrl_alignÁ89:Áƒ´¹%TryReserveErrorÁÄCapacityOverflowÁÅ
Ä
AllocErrorÁÇlayoutÁɃÌÎÖÐ×$
%
'
(
+
E
H
e
u
y
z
{
|
}
~


ƒ
ƒ
œ

ž
Ÿ
 
 
¡
¢
¢
£
¤
¤
¦
§
§
©
ª
¬
¬
®
®
°
°
²
²
µ
µ
¸
¸
º
»
»
½
¾
À
À
À
Ä
Å
Å
È
È
Ê
Ê
Ì
Ì
Ò
Ò
×
×
Þ
ß
à
á
â
ã
ä
å
æ
ó
õ
ø
ú
û
û
û
ü
ü
ý
þ
ÿ
ÿ


ƒ


ˆ
Š


Ž








˜

š
š
Ÿ
Ÿ
Ÿ
Ÿ
¡
¢
¢
¢
¢
¤
¤
¤
¦
¦
¨
©
ª
«
¯
°
°
³
³
º
º
¼
¼
¼
Æ
Ö
á
å
ç
ð
ð
ñ
ñ
ò
ò
ó
ö
ú
ü
Š

Ž
š
¤
©
ª
¹
¼
½
À
Ã
Æ
Ç
Ë
Ì
Í
Ð
à
ã
ç
ê
ñ
ô
ô

ž
ž
Ÿ
Ÿ
¥
¥
«
«
°
°
¿
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Ì
Ì
Î
Î
Î
Ð
Ø
Ù
Ú
Û
Ü
á
á
ã
ã
å
å
ç
ç
é
é
ë
ë
í
í
ï
ï
ö
ö
ý
ý









ž
Ÿ
 
 
¢
¢
©
ª
«
¬
²
²
¿
¿
¿
Æ
Í
Í
Ô
×
Ø
Û
Û
Û
â
å
è
ò
ý
ÿ
ˆ




Ÿ
¨
±
±
±
¸
»
¼
¿
¿
¿
Å
È
É
Ì
Ì
Ì
Ó
×
Ø
Ø
à
à
à
æ
è
é
é
é
Ž

­
¯
Ä
Æ
È
Ë
×
×
Ù
á
â
ä
æ
ç
è
ê
ë
î
ú
þ
ƒ
ƒ
ƒ




Š











¨
­
­
­
¸
½
Â
Ç
Ç
Ç
Ñ
Ö
Ö
Ö
å
å
ë
ë
ë
ÿ
œ
œ
¢
¢
¢
®
®
´
´
´
½
Â
Â
Â
É
É
É
é
ê
ï
ò
ó
û
ü



ˆ





š
£
£
£
©
ª
¯
²
³
»
¼
Á
Ä
Å
Í
Î
Ó
Ö
×
Ú
Ý
Ý
Ý
å
æ
ê
î
ï
ó
÷
÷
÷





˜


Ÿ
¨
¸
º
»
½
Ð
Ò
Ó
Õ
Ù
ä
õ
þ

°
µ
¸
¼
À
Á
Ä
Å
È
í
î
î
ó
ô
õ
ö
÷
ø
ø
û
û
ý

Š








Ÿ
 
 
£
£
£
§
¨
¨
ª
ª
¬
¬
­
®
¯
°
°
²
²
¸
¹
¾
¾
È
È
È
Ø
à
ç
ç
ì
í
í
ò
ó
ó
÷
ø
ø
ü
Š
º
¼
Á
Â
É
Ê
Ì
Î
Î
Î
Ó
Ô
Ü
ã
ã
ã
å
é
ê
ï
ò
ó
ö
ù
ù
ù
û
û

ƒ


ˆ
Œ






ž
¢
¦
­
®
³
·
»
»
»
¼
À
Ç
È
Ì
Ð
Ô
Ô
Ô
Õ
Ù
Ú
Þ
â
â
â
é
ê
ù
ý
ý
ý

ˆ
ˆ
ˆ





œ
 
¨
æ
ç
ç
é
é
ë
ë
í
í
í
ð
ð
ò
ó
ó
õ
õ
÷
÷
ù
ù
û
ü
ý
þ
ÿ



ƒ
ƒ


Š
Š
ª
®
®
®
¹
¼
¼
¼
Å
Î
Ñ
Ô
×
×
×
Ý
Þ
è
ë
ë
ë
÷
ú
ú
ú

Š




ž
£
¥
¦
°
±
¸
Á
Ä
Å
É
Ê
Ë
Î
Ï
Ò
Õ
Õ
Õ
Ö
Ý
Ý
â
ä
å
å
ô
ô
ø
ø
   ž
¤
«
²
»
Â
Ã
Ã
Ê
Í
Í
Ï
Ñ
Ñ
Ñ
£8©8®8ø#T²òŠ ˜˜ê±šˆù
Éw؈Û”ÓØ”ÓŠ ŸŸ š² TGÅ §ÛäÓØäÓ#äÓ³äÓŠ ¥¥¦À²§ˆ œËôò%ȰóÛ½ÔØ½ÔÇL½ÔŠ ¬¬­ï²®ˆ ÏZžî6 ÉYÛ—ÕØ—ÕùM—ÕŠ ³´µµ³·ʳº
’µ*‹ªÛñÕØñÕT¥Š ¼¼ô³½¾´Âî]¬vEÖ3ÛÒÖØÒÖÌìnnÌpµ zw0üCÅÖØª×ÌìµÕˆ¤Ú‰³sÚ§´–ÖÅÖ ëרëײë׳ë׌"ë×ÇLë×ÌìÍÍ¡'Ͻ'ÐÒ'ÑÞ'Òþ¬©ºIfi]ÅÖ ‚ÙØ‚ÙùM‚ÙòP‚ÙØêêÀ)ìùí¸>:3!ÖLÅÖùM‡ÚÃM‡ÚòP‡ÚùM²+½'Ô+ˆ¸`«;=.tòŸÃMëÚòPëÚÌì¬,ù×,ÚŒ1§õVûÙ‚ÅÖ²Ø ×ÛŒ"×ÛùM×ÛÃM×ÛòP×ÛÌì±±¤.µùÕ·Ü.¸Úëž¼/ž„¸8¥ áÜŒ"áÜùMáÜÃMáÜòPáÜùMÓÓ©0ÕãÖÌ0ÄÍ3¸ÛµCÅÖùM××Ú0ØÙÚ‚1Û–!Ü™1Ýê
¡²t4ÆrNØ®4ÕϹ$ºœ§¤µß¬ß¬ß¬ß¿c¬ß³¬ßÙ¢®4ÕϹ$ºœ§¤ 8¢ØÎβBÒãøÓÚøܦ‹n=ð~“8íà§¿c˜áÌìÜÜ CàãøáÚøÙ 0¦8íàÛáùMóóÖD÷ãøᜠBÁvŽðäßêߺÝÃMÂâòPÂâ¿cÂâùMÉFãøÌ ~@µ;¶äßêߺÝÃM¤ãòP¤ã¿c¤ãس³¾H·ãø0‘ÍÔáô/8íàÛá¿c†äØÀÀ¤IÄãøýŒ´Õ~3ÌË8íàÛá¿cÓäùMØØæJÞ±øßãø‘®.xˆ—<8íàÛáòPØØæJÞ±øßãø‘®.xˆ—<8íàÛáçåäÓÌìüM¿NøŒÕø®4øzšÅ鑤ìÍ8íàÛá¤íå Ñæ¿còò¿LøØøêOÂ~–­r8íàÛá¤çíå¿cùÿÄMˆƒáMˆ^ÂÝðÉ\38íàÛá¤çíå¿cÑæ¿c˜˜¥OžÕøŸ®4ø›æŽ)W;8íàÛá¤çíå¿c  öO¦Øø¥ ’ÊÃ"j8íàÛá¤çíå¿cœ¢£ÄM¤ˆ¥¦áM§ˆofrU%H98íàÛá¤çíåÌì®®‘Z´§øµÝTø¿Nø·Õøv”„š\`Ùs8íàÛá¤çíå þê¿cþê¿cÈÈå[ΧøÏÝTøÐÕøÐX,§nóq8íàÛá¤çíå¿c×ßàÄMáˆâãáMäˆa,Ã]Œ]88œ¢§¤àìðñ´^òˆøóôÑ^õˆø”e%@NbJøíàŠáŠáÌì¿_ˆ §øÝTøŠ ¿NøÕø é‚HNK8ø™:¶í¼íÂíÈíÎí Ãî¿c¿_ˆ §øÝTøŠ ¿NøÕø é‚HNK888¶í¼íÂíÈíÎí¿c£ £ Þa« §ø¬ ÝTø­ Õø¨1A¥üÆ{88¶í¼íÂíÈíÎí¿cµ µ ùb» ó9¼ »+EtQ8íàÛá¤çíåÄcµ µ ùb» ó9¼ »+EtQøíàÛá¤çíåÇL ø®4ÕϹ$ºíàÛá¤çíåÇL øÐòÇL¬ßùMÎβBÒãøÓÚøܦ‹n=ð~“øíàÛáÃM˜áòP˜áùMÜÜ CàãøáÚøÙ 0¦øíàÛáÃMôáòPôá¿côáùMéé± íãøÕ’-Ãè!áäßêߺÝÃM’õòP’õ¿c’õùM³³¾H·ãø0‘ÍÔáô/øíàÛáÃM†äòP†äùMÀÀ¤IÄãøýŒ´Õ~3ÌËøíàÛáÃMÓäòPÓäùMííŽLñãø‰éç>{9EÍøíàÛáÃMííŽLñãø‰éç>{9EÍ8íàÛáòPé÷¿cé÷ùMÍÍŒJÒãøÎþç>øiÉ’øíàÛáößÃMÍÍŒJÒãøÎþç>øiÉ’8íàÛáößòPˆù¿cˆùÃL¬ßäßêßÐL¬ßèùÐLÐò øíà øÛáÐLÐò øíàÛáé!° ° Þz³ €{© ´ »© MTRa@ÊêÅÖö!ÄúŒ"ÄúØä ä è Ø n‡@Ö‹5ÏÅÖ¤ºÝµß¥û¥û¥û¿c¥ûé¥û®4ÕϹ$ºÅÖÖûºÝÃL¥ûÅÖÐL¥ûÅÖÐLä ä è Ø n‡@Ö‹5Ï´Ýðßöß ø´Ý³¥û–ú 8ä ä è Ø n‡@Ö‹5Ï¥¤çíå 8ÙýöøÔý•þ¶û 8ä ä è Ø n‡@Ö‹5φþ¤çäÓ 8¼þï·þ
Â÷8íàößòP“‚ØéˆùÉ ¹
É ž8´ÝðßößùMéˆùÉ ¹
É žø´Ýðßöß¿cò‚òPò‚ؘ˜­‰ùÉ ž¹
É ÷#cK·nÁò8´ÝðßößùM˜˜­‰ùÉ ž¹
É ÷#cK·nÁòø´ÝðßößòP¯„¿c¯„ØŸŸï‰¤ùÉ Ê–„sÐ\ó8´ÝðßößùMŸŸï‰¤ùÉ Ê–„sÐ\óø´ÝðßößòPì…¿cì…Ø¥¥ôªùÉ t
ï/p/'8´ÝðßößòP‘‡¿c‘‡ùM¥¥ôªùÉ t
ï/p/'ø´Ýðßöß¿cîóôÄMõˆö÷áMøˆ­ñe*bJý8´Ýðßöß¿cþþ‘ZƒãÉ þ1ÇÒ©¾Ä8´Ýðßöß¿cå[ŽãÉ ÀUÄÉ"_G8´ÝðßößÇLÙÙ›œÜ@š57;‘TèÅÖ²ØÇL øÙÙ›œÜ@š57;‘Tè´ÝºÝÇL øâг ŠØ Š¿c Š¿c¯³´ÄMµˆ·áM¸ˆÆAÒ—Êw~8´ÝºÝÌìÇÇ‘Z˧ÈÌßÈÍÕÈ3
¶À¨ldO8´ÝºÝ ¯Œ¿c¯Œ¿cááå[å§Èæ¶¥ÈçÕÈè[,hxoç8´ÝºÝ¿còòœ¦öÕÈ ³*ÄYY’Y8´ÝºÝùM²BƒãÈÚÈ2E[Ñ…Üø´ÝÃM²BƒãÈÚÈ2E[Ñ…Ü8´ÝòPˆùM CãȘÚÈ1±‹Ð/’lÖø´ÝÃM CãȘÚÈ1±‹Ð/’lÖ8´ÝòP¨ùM¨¨± «ãÈ­"Ï;©ƒÅÖ²ØÃMýòPýùM¼¼ŒJÀãÈs‰àü|º?M8´ÝºÝÃMБòPБ¿cБùMÖÖæJÛ±ÈÜãÈÁ©vV.èv8´ÝÖ‚ößòP³’ò¢íàØÄÅÆÓ´Çð´È‚µ‰±Y¿V‚²1Ðì¡“µß¡“¡“¡“¿c¡“˜¡Ÿ¨¥¯¬¸³¿¼œ˜¢Ÿ©¥°¬¹³À¼˜£Ÿª¥±¬º³Á¼sßÍôê˜Ôθ³ÅÀé ä ºý
ˆ¢˜¼ŸÕ¥§ÙÉÄ&Ÿ)Ÿ¿Àâ
ä £Ù@¥ÇÊ 
Ó 
Ü «
³ä Ù
œ
F¬âÍ÷ê¥Ç±äÓè×øó˜àØä Îö ÜŒ
é¤
³
ÀÈ
íß
ͽý
ÏåûЧ˜ÁŸã¥¬¨Å¼ÝÖWqÛͽ±âÜŽ¸®Œ € ÎÇìÝÍžÀ±½®€ ÑǴáñа èÍê®Ð±ó©éØó Î
Ü
é³
³Å
À×
íï
ÍÊý
ÝóŠž³˜ÌŸÚ¥¦¹¨Ï¼åÖê«Í±ó¤ï Î
Ü
é¯
³Á
ÀÓ
íê
ÍÆý
Ù¨Ë¼­º
ä ÌĵÀ
ä ÎĺØÎó­¼³ÉÀþòùŠ˜ ¨œÂ®ÑÈåל € ® £ ½ µ ˆ
ÜŸ
éÚ
íó
ÍÄ
ä Ìý
àö·˜ÐŸÞ¥ùîþ«Ù¹¯ÔÇèá÷òÒ¼ÐÄÆûìà µ è Î
ä ð ø  Ô
ä Û
ä ¼ ° Á ° É
ä ç

í

ó

ø

õËÄŠ Ó Û*Ø*#˜³ÇL
"ùM;TØÌì
 D²8Œ"òPÃMĵߌ¿c(Ù¢˜àÄcÃLÐLé!#ö!é–úöø¶ûïòÐì¨ ©üû0%€€€€€€€€0x8080_8080_8080_8080Á´´
 ¤´
À”Ó%ü”7%¤í  ˆˆÙ¯í¯ù€°ù.“ŠÞäPZy

ü—ð ñ£ܽµ¤½¥£££Ï6¥£*2¥£ƒ££/¥£s?¥£
&18< Group::WIDTHÁ
Œ&18< Group::WIDTHÁ¬  ”Ӭà Yü‰ Z ˆ â ü奣”Óžñ£DŒY
Ž&18< Group::WIDTHÁ´–
¤–
À-Ü– °üú8U$~*ÌÐ
 ¼Ð
иª&ü·3V#ÿ 0b1111_1111Á 0b1000_0000Áüá!/¼á!
‡!
À*¬û!
Ϟ!
À*ev "¼—"
 ¬—"ä¬17¬¼"
 œ¼"­ Ò"üÂ!_,Ö!ë;4Ç?”Ð?
 „Ð?
Ë‚ÅÖ'l…@4…@
#$Œ@
È‚14Œ@ ‘@ü¬@ì¯@t¯@4¯@
#,¶@
É‚1<¶@ ¼@WdÀ@s Ë@4ß@tß@
 ,æ@À°0<æ@ ì@ÛWd“A
 ¬Aüì?Ì ¼ ·A ½A¾AiüŸ?ŸüÃ?û ÒÖ$´?èØèØ éØ²‚êØŸ²‚ªë¥CHÈ4  ñ²
ÎË˾³Ì¾³\‚µ}²,4 þ  Ÿ\¼þ  ÅÖüßýs ÅÖäÓ”ùýðŠŠñŒ¥Ž¸”’g"måT> Ñþ ØþüºýžµÕˆ¤Ú‰³sÚ§´–ÖÅÖäÓ$ÐýäÓ; PhantomDataÁFu\»ŸÅÖ[¥+ðе¼Ýƒ

¬Ýƒ
iÅÖ'ü»ƒ:ÒÖ\σ(,Ї \ë‡  ÅÖü–‡k Åֲؔ°‡ðе €ˆ ‡ˆ˜ü憡ë×$‡‡²Ø,ú†²Ø¯è¶£¤Cðе¤Æ›

”Æ›
ñ#ü´›'ðе$¿›(ü¦ŸOüÆŸ,üÆŸ!
¬ÆŸ
œÆŸ
)-I^  ñŸü¯ŸD
 ´¯Ÿ
žœ- òŸüÈž Š     ¦  Í  Ó  Ô ñü§ž­е$¹ž§ ïíe¼îËè¿*ä» ñ£†¾µ¤wtrueÁfalseÁd˜† |¹†
l¹†
èù/ü…†N äßêßðßäÓ Ò† Ù†üÉ…¸®4ÕϹ$ºäßêßðßäÓ$ö…ðßdâ…ðßµÕˆ¤Ú‰³sÚ§´–ÖèùäÓT®4fÞdúŸ ¼› ,¬  
$„› 
˜èùöß:L ± üçŸV äßêßðßöß ¼  àüžŸ¥À¬ß$ØŸðßdºŸöß,ËŸðßµÕˆ¤Ú‰³sÚ§´–ÖèùößAößA®4z¤|»äÈz4Ýz
"¤Èz
¸ÅÖÖû;L ãzü°z? ä ÅÖÖûäÓ îzõzüúy{
ä ä è Ø n‡@Ö‹5ÏÅÖÖûäÓ$¡zÖû4“z®4ÕϹ$ºÅÖÖûäÓ9Öû:á7aÇüë”&4ƒ• ,‹• 2
9¼ë”
ÀÅÖÖûºÝUFm  üÓ”I ä ÅÖÖûºÝ ›•¢•üˆ
¥û$Ä”Öû4¬”ºÝ,·”‘üûÖûùºÝíá70¤2q

ÅÖ,üŽ2 ÙÅÖäÓ ¿Æßüé]ÙÙ›œÜ@š57;‘TèÅÖäÓ$ÿ´Q¼¼%,Í%
"„¼%
˜ÅÖ²Ø8I Ò%ü¤%: ÙÅÖ²Ø Ý%ä%üô$pä Š$•%²Ø,ˆ%ë׺²Øº¤M¼— ˜%”Ó1ç‘ç‘è‘ uint8x8_tÁ鑈 õݖ亭szÌÖ ¥¦%½Ô18?ìþ ¬­%—Õ1½Ô9@Dƒû ùíàÛá¤çíå+8ùÿÄMˆƒáMˆ^ÂÝðÉ\3íàÛá¤çíåšüM¿NøŒÕø®4øzšÅ鑤ìÍíàÛá¤çíåöý4¢þ ùíàÛá¤çíå+ƒ8”ÐD˜˜¥OžÕøŸ®4ø›æŽ)W;íàÛá¤çíåDî¬ œíàÛá¤çíå+£8œ¢£ÄM¤ˆ¥¦áM§ˆofrU%H9íàÛá¤çíåš®®‘Z´§øµÝTø¿Nø·Õøv”„š\`ÙsíàÛá¤çíå
4㯠œíàÛá¤çíå+¦8ÈÓDÈÈå[ΧøÏÝTøÐÕøÐX,§nóqíàÛá¤çíå §DÇÜ ×¶í¼íÂíÈíÎí1à>×ßàÄMáˆâãáMäˆa,Ã]Œ]¶í¼íÂíÈíÎí¦¿_ˆ §øÝTøŠ ¿NøÕø é‚HNK8¶í¼íÂíÈíÎí4Õß ×¶í¼íÂíÈíÎí1ã>œ×J£ £ Þa« §ø¬ ÝTø­ Õø¨1A¥üÆ{¶í¼íÂíÈíÎí¬³D°ã ìíàŠá#ñ0ìðñ´^òˆøóôÑ^õˆø”e%@NbJíàŠá Šá¢,Åã ìíàŠá#ô0úÚ<íàDKDŒ€ î´Ýðßöß'ô4îóôÄMõˆö÷áMøˆ­ñe*bJý´Ýðßößþþ‘ZƒãÉ þ1ÇÒ©¾Ä´ÝðßößÒÙ4ù‚ î´Ýðßöß'÷4‡Ý@å[ŽãÉ ÀUÄÉ"_G´ÝðßößDè® ¯´ÝºÝ#´0¯³´ÄMµˆ·áM¸ˆÆAÒ—Êw~´ÝºÝŠÇÇ‘Z˧ÈÌßÈÍÕÈ3
¶À¨ldO´ÝºÝÞå4þ´ ¯´ÝºÝ#·0ÿß<ááå[å§Èæ¶¥ÈçÕÈè[,hxoç´ÝºÝ˜÷ø© É ÈéëíòÄí¤
<ïä ð›œÙñüˆ+üLI This crate is a Rust port of Google's high-performance [SwissTable] hashÁüMOL map, adapted to make it a drop-in replacement for Rust's standard `HashMap`ÁÄ and `HashSet` types.ÁúüºJG The original C++ version of [SwissTable] can be found [here], and thisÁü…?< [CppCon talk] gives an overview of how the algorithm works.ÁÅúüÉ=: [SwissTable]: https://abseil.io/blog/20180927-swisstablesÁü‡c` [here]: https://github.com/abseil/abseil-cpp/blob/master/absl/container/internal/raw_hash_set.hÁüë>; [CppCon talk]: https://www.youtube.com/watch?v=ncHmEUmJZf4Á÷ø© É ÈéëíòÄíø¤ùøï÷ä ð›œöÙñKNQ”Ê
H œ64C J   ç,   ¼8Œ+   ¥8â  ¤,   ¡, 8û$˜& œ8û$$ ¢
£ § , © ª ³, «8itÁ¬& ®8÷
´8
Ã8 Ê æ, Ô Õ ß, Ö8it2Á×& Ú8÷
à*é ì 8é ü þ û  Œ8__itemsÁ< ¡ ¢% ¤, ² ³ Ñ µ Î · Â, ¸ ¹ ¿, º8û$ À
Á Ä Ì, Å Æ Ê, Ç8·êÈ
Ë$ Ï
Ò à ð â ã å î, æ ç ì, è8 ëé
í$ ñ%  ¼ Ï8Æ+ É Ê à8âË Î ß, Ï Ð Ü, Ñ8i_metÁ& ×8û$ Ý
Þ â ó, ä å ð, æ8i_itÁ& ë8÷
ñ, ý þ È88+   «8â  ª, š  §, œ8e_metÁ,& ¢8û$ ¨
© ­ ¾, ¯ ° », ±8e_itÁ& 8÷
¼
É*Ñ Ô 8é ä æ   ô8ì  Š% Œ š  œ ¨,  ž ¥, Ÿ8“ï, $ ¦
§ ª ´, « ¬ ², ­8ëï
³$ ·, Å Æ ç È ä Ê Ö, Ë Ì Ó, Í8‚ñ$ Ô
Õ Ø â, Ù Ú à, Û8Úñ
á$ å
è ö þ ø ù û ü$ ÿ%  Ò ï Ó8ì Ü ë, Ý Þ é, ß8
à& ã8û$ è
ê% í*ñ ô õ% ö ü È  ý8ì  ,  ˆ , 8
Š& 8û$ 
%   ¹  ¨, œ  ¥, ž8¸ Ÿ&  8û$ ¦
§ ª ·, « ¬ µ, ­8·ê®& °8÷
$ º, ¼ ½ Æ, ¾8restÁ$¿& Ã8¯Ä
Ç*Ê Í ƒ
8é4™
 Ÿ
 ¡
 Û
 £
8__applyÁ
8â¬
 ¯
 Ð
8£°
 ³
 Ï
, ´
 µ
 ¹
,
8¸ ·
$ ¸

º
8
¼
 ¿
 Î
8ºÀ
 Ã
 Í
, Ä
 Å
 Ê
, Æ
8
Ç
$ Ë

Ì
$ Ñ
, Ó
 Ô
 Ø
, Õ
8·êÖ

Ù
8é  Ð  Ò  ý  Ô 8ì  Ý  ï , Þ  ß  å , à 8
á $ ä 
æ , è  é  í , ê 8¸ ë $ ì 
î % ñ , ó  ô  ú , õ 8³ù 
û %
 Í
 ì

 Î
8•ú
, ×
8¸ Ø
& Ù
8û
$ Þ
, à
 á
 ê
, â
8·êã
& å
8÷

ë
*î
 ñ
 , û
 ü
 + ý
 þ
 , ÿ
8¸ , ƒ8·ê
% ޼Á»Òœª¬©ü   Ù  Ü ç, Ý Þ å, ß8¯à& â8¯ã
æ*é ì , ö ÷ û, ø8¯ù
ü üå PM Experimental and unsafe `RawTable` API. This module is only available if theÁì¶  `raw` feature is enabled.Á»@|Ó ¼Í Ü Ä
 +ö.ø L¹ #ö/´TÙHlöÌ4‚KnöµD¼ôö¡'dÇ“
ÍöÀ)<¥í
êö²+”Ȫ ö¬,\õË ö¤.DóÚ ±ö©0\Ÿñ Óö…2dÉ ëöš²4)Ÿö0š² ö0
1MOTYZ[\]^_`afgln„вÍê±Ó×ëù³¼handle_alloc_errorÁ” œ
 4.èØ £,O µ 
ÞzTV° ¼´|nÄ
FusedIteratorÁlòPöµöµíÇë MaybeUninitÁ\ÛÑÛ§hintÁ$‹ µ Ä
 +.ø #/š² Ÿ0š² 0ï² ¬Iï²­Iê±,‹ ˜J¢
 ÞKûD™ ÞL¥ ùœÞáÒÕŒ;È˼¿´g²̃šÌ¢m´ÐV”ìI$„9<,/L‡ , Ä
D +ø L'#š²42Ÿš² \IK<>.0L®»Òœú
»ŠÔüù
1üõ
6üì
A#+Ÿ ¤ ˜   èØ!§<„"œÂNP?A02”ù$Ôà##Î츪üà°#¥¥$%$%%$ü…>DˆÒ Ò¸ªñ²Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ǽ# #
$¸ª$’‚µüÌ>Ó Ó¸ªǽñ²# á#
%¸ªµ 肵üÉ äÓ'($%'(ü†=D‰Ô ÔäÓñ²”Ž& &
'$“‚µ4™ü§=Õ ÕäÓǽñ²& ¼&
(µ µ¼§äÓ*´*¤ÛäÓ))
*üšZÖ Öñ²”Ž,, ÆÍìç’ ±#ç’
+ç’¤,¿‚µ,. íð]`  ¬­¥¦¾®\ ÿ13Ñ®”# 14•¯Œ7 ƒ15¯dJ 16ë®tX 17T acRTCE35#%d¥ ½Ô9:;<=>?ü¦ " .\þ 4´ ½Ô½Ô88
9$» üØ
" .\È
ŒÛ
1½Ô½Ô88
:
üý ' \ ½Ô88
;$— ü™
3 t§
½ÔÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ88
<
üÍ+ tÛ ½Ô88
= ü”? ´— 1ô ô õ ¨÷ ˆÐ  mjçítoé88
>nonzeroÁ<® ü´* l ½Ô88
? ì£ ½ÔABCÈLÉLÊLC @@ @@—ÕüŽ! L ½Ô—Õ@@
C$› „² —ÕEü‘ : »@|û ¼õ× ×—ÕD « D
EÖ,¶ ìÉ" —ÕGHúMûMHLí" $ò" FFü“## $# Ø Ø—Õ‡—F ›# F
H$ # Ôà Ì „€ « ¼¶
Ÿ ¼þ
“ üÄ( ÅÖ¥NNÍìÅÖ Ó
MÅÖaddrÁ$Öü¦? ÅÖ­ž¥PPÛ ¼
OÅÖtoÁ¿÷ „žñÕRSü”-Œ—ñÕ¡“QQ
Rüã5ñÕñ²¡“QQ
S‚µüÓ œÙTTÍ츪TÆ Æ UVUVÌúl€TT´·TTüî!¥XXÛ óÅÖ
Œ<“äˆ<
[$“ü˜T›
\ü¤%„§
]ÌŠ  
^§$ ÌÂ!dÈ!´Õ#Ø#
`§$Û#|ý*D„+aab¤c®® ÿ‚È® ÿ‚ÈbcT“+“+aal£+4£+aalµ+̤eü×++LÚ+Ù Ṳ̀d ä+d
e$é+\ï+ü–13œ™1‡—
fcapÁ­1ü÷97¼ú9
g\:„ú>ÒÖikÌŸ?¨?ÒÖh¥jjhÛ ¬?×·  üÒAH¤ÕAÒÖÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙñ²hh
k$êA°<ðA¬ÎHüŒHA> A reference to an empty bucket into which an can be inserted.Áùll´mÖ0AY¸­?G0AY¸­?GmdêH,êHll¤÷JüûH85 A reference to a hash table bucket containing a `T`.Á´Iúü¸IPM This is usually just a pointer to the element itself. However if the elementÁü‰JLI is a ZST, then we instead track the index of the element in the table soÁüÖJ  that `erase` works properly.Áx¥ooÛ ‰Kª×zw0üCp|‰M‰Mnn§ ïíe¼îËè¿*ÅÖü‹N!¥rrÛ —Nª×
ܱN¥ttÛ ¶Nª×uÙu¼áN,äNÚ Úª×ª×s êNs
uÅÖ$ëNŒ£O¥wwÛ ¨Oª×xyz{|}~ƒ ü¶cA|Àcò­ª×vv
xÅÖbaseÁ$ÐcÖ,âcü™€9l£€Û Ûª×ò­v ±€v
yÅÖ$²€÷¯$¸€ôä üŽ;8 Acquires the underlying raw pointer `*mut T` to `data`.ÁÎú # NoteÁåúüíRO If `T` is not [`Copy`], do not use `*mut T` methods that can cause calling theÁüÄSP destructor of `T` (for example the [`<*mut T>::drop_in_place`] method), becauseÁüœ‘TQ for properly dropping the data we also need to clear `data` control bytes. If weÁüõ‘PM drop data, but do not clear `data control byte` it leads to double drop whenÁüÊ’# [`RawTable`] goes out of scope.Áò’úüú’SP If you modify an already initialized `value`, so [`Hash`] and [`Eq`] on the newÁüÒ“XU `T` value and its borrowed form *must* match those for the old `T` value, as the mapÁü¯”TQ will not re-evaluate where the new value should go, meaning the value may becomeÁüˆ•:7 "lost" if their location does not reflect their state.ÁÇ•úüÏ•&# [`RawTable`]: crate::raw::RawTableÁüú•kh [`<*mut T>::drop_in_place`]: https://doc.rust-lang.org/core/primitive.pointer.html#method.drop_in_placeÁüê–A> [`Hash`]: https://doc.rust-lang.org/core/hash/trait.Hash.htmlÁü°—<9 [`Eq`]: https://doc.rust-lang.org/core/cmp/trait.Eq.htmlÁñ—útù— # ExamplesÁŒ˜ú<”˜ ```Áì ˜ # #[cfg(feature = "raw")]ÁŒÂ˜ # fn test() {Áüؘ(% use core::hash::{BuildHasher, Hash};Áü…™+( use hashbrown::raw::{Bucket, RawTable};Áµ™úü½™IF type NewHashBuilder = core::hash::BuildHasherDefault<ahash::AHasher>;Á‹šúü“šVS fn make_hash<K: Hash + ?Sized, S: BuildHasher>(hash_builder: &S, key: &K) -> u64 {Áüîš use core::hash::Hasher;Áü’›41 let mut state = hash_builder.build_hasher();ÁìË› key.hash(&mut state);Á´í› state.finish()Á,ˆœ’œúüšœ1. let hash_builder = NewHashBuilder::default();ÁüМ$! let mut table = RawTable::new();ÁùœúÜ let value = ("a", 100);Áü¡2/ let hash = make_hash(&hash_builder, &value.0);ÁØúüàNK table.insert(hash, value.clone(), |val| make_hash(&hash_builder, &val.0));Á³žúü»žZW let bucket: Bucket<(&str, i32)> = table.find(hash, |(k1, _)| k1 == &value.0).unwrap();ÁšŸúü¢Ÿ:7 assert_eq!(unsafe { &*bucket.as_ptr() }, &("a", 100));Á<០# }ÁŒíŸ # fn main() {Áüƒ ! # #[cfg(feature = "raw")]Á„© 
# test()Á<¾ ÞÃ<Ê ƒ»4ë Ü ܪ׽v ò v
zÅÖ$ó üÀ´.4Ê´Ý Ýª×ª×v Ñ´v
{ÅÖ$Ò´ž
4Ø´ü™½ $®½Þ Þª×v ³½v
|ÅÖ$´½üÉÃ%$ÞÃß ßª×ÅÖv ãÃv
}ÅÖ$äÃü™Ê),®Êà àª×ÅÖv ´Êv
~ÅÖ$µÊ¹»ÊüÑÖ(üòÊ85 Returns a shared immutable reference to the `value`.Á¯Ëúd·Ë # SafetyÁÈËúüÐË0- See [`NonNull::as_ref`] for safety concerns.Á…ÌúüÌ]Z [`NonNull::as_ref`]: https://doc.rust-lang.org/core/ptr/struct.NonNull.html#method.as_refÁïÌút÷ÌÞºŠÍú<’̓»ìžÍ”»ŒÀÍ»»üÖÍ(×»üƒÎ+м³Îúü»ÎIͼ‰Ïúü‘ÏV®½üìϾüÐ4¹¾ìÉÐ÷¾´ëО¿,†Ñ¾¿Ñúü˜Ñ1Û¿üÎÑ$—À÷ÑúüÿÑJG let value: (&str, String) = ("A pony", "is a small horse".to_owned());ÁüÎÒ2øÀ…ÓúüÓNÂÁàÓúüèÓ[X let bucket: Bucket<(&str, String)> = table.find(hash, |(k, _)| k == &value.0).unwrap();ÁÈÔú|ÐÔ assert_eq!(ÁüäÔ# unsafe { bucket.as_ref() },ÁüŒÕ2/ &("A pony", "is a small horse".to_owned())Á4ÃÕ );Á<ÎÕÞÃŒÚÕïÃüðÕ!‹Ä„–Ö¶Ä<«ÖÞÃ<·Öƒ»4ßÖá áª× øÅÖvø êÖv
ÅÖø$ëÖæÖü¦è,üŸ×63 Returns a unique mutable reference to the `value`.ÁÚ×údâמÉó×úüû×0- See [`NonNull::as_mut`] for safety concerns.Á°ØúT¸ØÔ±ÇØúüÏØOL [`Hash`] and [`Eq`] on the new `T` value and its borrowed form *must* matchÁü£ÙNK those for the old `T` value, as the map will not re-evaluate where the newÁüöÙJG value should go, meaning the value may become "lost" if their locationÁüÅÚ! does not reflect their state.ÁëÚúüóÚ]Z [`NonNull::as_mut`]: https://doc.rust-lang.org/core/ptr/struct.NonNull.html#method.as_mutÁüÕÛA¿¹ü›Ü<‹ºÜÜútäÜÞº÷Üú<ÿ܃»ì‹Ý”»Œ­Ý»»üÃÝ(×»üðÝ+м Þúü¨ÞIͼöÞúüþÞV®½üÙß¾üýß4¹¾ì¶à÷¾´Øàž¿,ó྿ýàúü…á1Û¿ü»á$—ÀäáúüìáJšÍü»â2øÀòâúüúâNÂÁÍãúüÕã[§Îµäúd½ä unsafe {ÁtÎä bucketÁ¬áä .as_mut()Átûä .1ÁüŽå96 .push_str(" less than 147 cm at the withers")Á4Ìå };Á|×å™Ïüëå#³ÏT“æ &(Á¬¢æ "A pony",Áü¼æIF "is a small horse less than 147 cm at the withers".to_owned()ÁLŠç4˜çÐ<£çÞÃŒ¯çïÃüÅç!‹Ä„ëç¶Ä<€èÞÃ<Œèƒ»4´èâ âª× øÅÖvø ¿èv
ÅÖø$Àè»èüþò;üüè@= Copies `size_of<T>` bytes from `other` to `self`. The sourceÁüÁé&# and destination may *not* overlap.ÁìéúdôéžÉ…êúüê96 See [`ptr::copy_nonoverlapping`] for safety concerns.ÁËêúüÓêUR Like [`read`], `copy_nonoverlapping` creates a bitwise copy of `T`, regardless ofÁü­ëLI whether `T` is [`Copy`]. If `T` is not [`Copy`], using *both* the valuesÁüþëOL in the region beginning at `*self` and the region beginning at `*other` canÁäÒì [violate memory safety].ÁóìúTûìÔ±Šíúü’íOÌÓüæíN¦Ôü¹îJÿÔüˆï!ÔÕ®ïúü¶ï`] [`ptr::copy_nonoverlapping`]: https://doc.rust-lang.org/core/ptr/fn.copy_nonoverlapping.htmlÁü›ð=: [`read`]: https://doc.rust-lang.org/core/ptr/fn.read.htmlÁüÝðkh [violate memory safety]: https://doc.rust-lang.org/std/ptr/fn.read.html#ownership-of-t
,¬óü±ô-üˆô(% A raw hash table with an unsafe API.ÁY2¥Û ÅôÍì²Ø¬Èô#²ØLËôë׉³sÚ§´–ÖˆÆHJC ÈôäÓ¤åô,åôеDÿô,ÿô²Ø´¼õ4¼õ趤íölôöе”’g"måT>ŒŽ”ý÷\ý÷ŠŠŒüø$üøŠŠǽ”äù\äùŠŠd¿ú,¿úŠŠÜÐú¥Û ÕúÔºýüòúA> Creates a new empty hash table without allocating any memory.Á¸ûúüÀûHE In effect this returns a table with exactly 1 bucket. However we canÁüüIF leave the data pointer dangling since that bucket is never written toÁüÛüLI due to our load factor forcing us to always have at least 1 free bucket.ÁÇý¢ÊüJüÞþGD Attempts to allocate a new hash table with at least enough capacityÁüªÿDA for inserting the given number of elements without reallocating.Á»@|ùÿ¼óÿŒ–€Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¡“
ÅÖˆD¨€ü¦‚-üœJG Allocates a new hash table with at least enough capacity for insertingÁüë63 the given number of elements without reallocating.Ál­
ÅÖˆD»‚üƒ$¥Û •ƒ¼é ˜ƒÎéL›ƒë×˜šœžŸ ¡¢£¤¦§©ª¬®°²µ¸º»½¾ÀÄÅÈÊÌÒ×Þßàáâãäåæç訪¬®ü»ƒdÁƒÒÖüæ†%üûƒKH Creates a new empty hash table without allocating any memory, using theÁ¤Ë„ given allocator.Áä„úüì„HÆìü¹…I™íü‡†Líí4󆲨ë×ýˤU_ü½‰ŒÇ‰²ØñÕÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ëס“
Åֲؤ,≰<ô‰ fallibilityÁ\ŒŠüáŽWü•YV Attempts to allocate a new hash table using the given allocator, with at least enoughÁüóMJ capacity for inserting the given number of elements without reallocating.Á»@|ËŽ¼ÅŽ¤èŽ²ØÓø
šÅֲ؈Dýޤüƒ“:üÞ‘[X Allocates a new hash table using the given allocator, with at least enough capacity forÁü¾’@= inserting the given number of elements without reallocating.Á„Š“²Øë×
Åֲ؈D›“¤,¬“ì¶•üï”41 Returns a reference to the underlying allocator.ÁL½•å åë× å²Ø Ç•
œÅÖ²Ø$È•ü“™$üõ•OL Returns pointer to one past last `data` element in the table as viewed fromÁüÉ–&# the start point of the allocation.Áô–úüü–TQ The caller must ensure that the `RawTable` outlives the returned [`NonNull<T>`],ÁüÕ—<9 otherwise using it may result in [`undefined behavior`].Á–˜úüž˜b_ [`undefined behavior`]: https://doc.rust-lang.org/reference/behavior-considered-undefined.htmlÁD𙿠æë×ò­ £™
ÅÖ²Ø$¤™üô£-ü€£+( Returns pointer to start of data table.Á»@|È£»ÒœÙ£üÇ£&ü¾£1T‚¤ç çë×ò­ ¤
žÅÖ²Ø$ޤüɨ6ü…¥?< Return the information about memory allocated by the table.ÁÉ¥úüÑ¥MJ `RawTable` allocates single memory block to store both data and metadata.Áü£¦VS This function returns allocation size and alignment and the beginning of the area.Áüþ¦XU These are the arguments which will be passed to `dealloc` when the table is dropped.ÁÛ§úüã§74 This
additionalÁTöøá74‰ù|~ü”€ŠüíþIF Tries to ensure that at least `additional` items can be inserted intoÁü»ÿ# the table without reallocation.Á\›€ú úë×ð¤Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
¡“¢±± °€¥”æ€û"ð¤ ûÅÖlë€ûð¤í«˜"õ€
°ÅÖ²Øð¤$µ€ó§TÀá74Þ€suü ‡²tª‡ü üë×ð¤ñÕÚª¢³³ ‡¥”ø‡ý"ð¤ ýÅÖlý‡ýð¤Ù­˜"‡ˆ
²ÅÖ²Øð¤$LJó§TÕ‡á74ð‡Úø\”ˆ}t²ç¡´€¢´ž¢´´²´ÅÖ²Øð¤ е ð¤üÖ™¨4à™þ þë×ð¤ñÕÚª¢ 𙥔¤šÿ"ð¤ ÿÅÖl©šÿð¤Ó°˜"³š
µÅÖ²Øð¤$õ™ˆDƒšá74œšÚø\Àš|~tÝžµç¡·€¢·ž¢··µ·ÅÖ²Øð¤°¯ɯü¶¡VüåŸEB Inserts a new element into the table, and returns its raw bucket.Á¯ úü· IF This does not check if the given element already exists in the table.Á4½¡ ë×ÅÖð¤ª×¢¹¹ Ä¡¥”ì¡"ð¤ ÅÖlñ¡ð¤ã´˜"û¡
¸ÅÖ²Øð¤$É¡§$Ï¡»,Ú¡á74ä¡{}üë®Qüó«YV Attempts to insert a new element without growing the table and return its raw bucket.ÁѬúüÙ¬[X Returns an `Err` containing the given element if inserting it would require growing theÁT¹­ table.ÁÈ­úüЭIŸ²»@|¤®¼ž®”ò® ë×ÅÖÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ª×ÅÖ …¯
ºÅÖ²Ø$Н§$¯»,›¯üà³Yü„²PM Inserts a new element into the table, and returns a mutable reference to it.ÁÙ²úüá²IŸ²d糃 ƒë×ÅÖ𤠃ÅÖ¢¼¼ ô³¥”œ´"ð¤ ÅÖl¡´ð¤Á»˜"«´
»ÅÖ²Øð¤$ù³§$ÿ³»,Š´á74”´{}üè·Iü„µDA Inserts a new element into the table, without growing the table.Á͵úüÕµFC There must be enough space in the table to insert the new element.Á ¶úü¨¶IŸ²»@|±·»æô·ü°·1ü§·<tö· ë×ÅÖª× …¸
½ÅÖ²Ø$Џ§$¸»,›¸ü•¾}ü±»JG Temporary removes a bucket, applying the given function to the removedÁü€¼JG element and optionally put back the returned value in the same bucket.Áϼúü×¼:7 Returns `true` if the bucket still contains an elementÁ–½úüž½A> This does not check if the given bucket is actually occupied.Áœ£¾ ëת×Ö‚¿¿ º¾ÍìÖ‚ ·¾–"Ö‚ÅÖ´û¾Ö‚ù˜"ìLˆ¿
¾ÅÖ²ØÖ‚$¿¾ß4ž± ؾ_aüùŹüºÃFC Searches for an element in the table. If the element is not found,Áü…ÄGD returns `Err` with the position of a slot where an element with theÁüÑÄ  same hash could be inserted.ÁöÄúüþÄJG This function may resize the table if additional space is required forÁÌÍÅ inserting an element.ÁÄ€Æ ë×›™¢Ö¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ª×ª¢Á¢ÂÂÁ ¢ÆÇ™´ÐÆÍì䯔øÆˆ“"›™ ˆÅÖŒÕÆˆ›™žÈ˜"$âÆ"äÆ ÅÖlýÆ
:¥ÀÁÀÁÛ ž‚
¼é ¡‚
ÎéL¤‚
³²Ø<°‚
ë×´Â79;=¤è‚
<ë‚
ë׿¿
ÂÅÖ²Øü†Š
-»Òœï‰
¬î‰
üå‰
¥ÄÅÄÅÛ ‹Š
¼é ŽŠ
ÎéL‘Š
ëׯ"Æ&(*,”ëŠ
$îŠ
ß ßë×à óŠ
Ã
ÆÅÖ²Ø$øŠ
üŠ
5¥ÈÉÈÉÛ
¼é
ÎéL•
ë×ÊËÌÈLÉLÊLÌ468:

ÇÇÅÖ

ÇÇ×Ûü²‘
'Lµ‘
ë××ÛÇÇ
ÌÅÖ²Ø$¿‘
üµ“
!»¢¥ÎÎÛ Ô“
‚Ù¬©ºIfi]ÏÐÑÒ%'ÔÔ”
lÔ”
ÍÍ—Õ|ª•
$ª•
Íͪפ
L
ÍÍ tõ–
õ–
Í͢˼ˆ—
¥ÔÔÛ
‚ÙÕÖØü½ 
CÇ 
¢Ëª×‚ÙÓÓ
ÕÅÖ$Ë 
Ò'$Ü 
í 
üÕ¶
SLß¶
à à‚Ù¬ÏÓœ(×× ‰·
Óœ(ôé¶

ÖÅÖœ($Ž·
”ï¶
ü¹Ç
{LÃÇ
‚Ù‚û¡ÎÓÙÚÙÚÓÍì‚û ÍÇ
Íì¡Î ÐÇ
“"‚û¡Îª×Ä›È
‚û‹Ï˜"¡Î ²È

ØÅÖ‚û¡Î$×Ç
¹ áÇ
acc畂
± ûÇ
{}üíÝ
'¥ÜÜÛ ùÝ
‚Ù  ü˜Þ
'¥ÞÞÛ ¤Þ
‚Ù  üÄÞ
!¥ààÛ ÉÞ
‚ÙáÙá¼ß
, ß
á á‚Ù‚Ùß ¦ß
ß
áÅÖ$§ß
üïà
$¥ããÛ ôà
‚ÙäåçúMûMÿMçå&(Lšá
$Ÿá
ââª×üçá
'$êá
â â‚Ù¬Ïâ ïá
â
åÅÖ$ôá
$óâ
üžã
-L¡ã
ã ã‚Ù‡—â «ã
â
çÅÖ$¬ã
üÐæ
)¥ééÛ Õæ
‚Ù  ¬ší
üþæ
KH Iterator which returns a raw pointer to every full bucket in the table.ÁÊç
úüÎç
MJ For maximum flexibility this iterator is not bound by a lifetime, but youÁüœè
-* must observe several rules when using it:ÁüÊè
YV - You must not free the hash table while iterating (including via growing/shrinking).Áü¤é
IF - It is fine to erase a bucket that has been yielded by the iterator.Áüîé
NK - Erasing a bucket that has not yet been yielded by the iterator may stillÁü½ê
VS result in the iterator yielding that bucket (unless `reflect_remove` is called).Áü”ë
JG - It is unspecified whether an element inserted after the iterator wasÁüßë
SP created will be yielded by that iterator (unless `reflect_insert` is called).Áü³ì
JG - The order in which the iterator yields bucket is unspecified and mayÁÜþì
 change in the future.Á׫¥ëëÛ ­í
‡Ú>:3!ÖLìí!#ü¶í
$Áí
êê‚ÙdÜí
,Üí
êê”íí
¥ïïÛ òí
‡ÚðñòóüÄñ
6ü†î
MJ Refresh the iterator so that it reflects a removal from the given bucket.ÁØî
úüàî
EB For the iterator to remain valid, this method must be called onceÁüªï
:7 for each removed bucket before `next` is called again.Áéï
úüñï
_\ This method should be called _before_ the removal is made. It is not necessary to call thisÁüÕð
NK method if you are removing an item that this iterator yielded in the past.Á»@|®ñ
¼¨ñ
tÒñ
äå ä‡Ú åª×î áñ
î
ðÅÖ$æñ
­ ìñ
ü¤ö
6ü´ò
PM Refresh the iterator so that it reflects an insertion into the given bucket.Á‰ó
úü‘ó
EïÝüÛó
2/ for each insert before `next` is called again.Á’ô
úüšô
OL This method does not guarantee that an insertion of a bucket with a greaterÁüîô
FC index than the last one yielded will be reflected in the iterator.Á¹õ
úüÁõ
B? This method should be called _after_ the given insert is made.Á»@|Žö
¼ˆö
t²ö
æç æ‡Ú çª×î Áö
î
ñÅÖ$Æö
­ Ìö
ü‹ø
H»@|õ÷
¼ï÷
œ•ø
èé è‡Ú éª×î ©ø
î
òÅÖ$®ø
­ ´ø
 is_insertÁLÃø
üð™ "lú™ ê ê‡Úî ˆš î
óÅÖ$š ä › ¥õõÛ ¥› ‡ÚöÙö¼ô› ,÷› ë ë‡Ú‡Úô ý› ô
öÅÖ$þ› üôœ ¥øøÛ ùœ ‡ÚùúüýúMûMÿMóNýüú13  ÷÷ª×üç ' ì ì‡Ú¬Ï÷ ï ÷
úÅÖ ,×  üÑ¡ -LÔ¡ í í‡Ú¬Ô÷ Þ¡ ÷
üÅÖ$ß¡ üÁ¢ l$Ä¢ ‡ÚÖ‚±í÷þÿþÿ÷Íì±í É¢ Ü ̢ Íì‡Ú,£ “"Ö‚±í‡ÚúMÌ“£ Ö‚¤î˜"±í «£ 
ýÅÖ±íÖ‚$Ï¢ initÁ$Õ¢ ± Þ¢ ˆŠŒŽüù£ (¥Û þ£ ‡Ú  ü¥¤ $¥ƒƒÛ ª¤ ‡Ú  ü¶ª $¬µëÚ`«;=.tòŸˆÔØ« lØ« —ÕÄî¬ Œî¬ Œü­ $ü­ ǽd¼® ,¼® ¼Í® ëÚŠü†³ /L³ î îëÚ‡— š³ 
Š$Ÿ³ üÊà $ëÚŒŽúMûMÿMŽLõà $úà üöÅ #$ùÅ ï ïëÚ‡— þÅ 
$ƒÆ üñÉ -LôÉ ð ðëÚ¬Ô þÉ 
Ž$ÿÉ üÑÊ -ëÚü‚Ë )ëÚüêË 0ü°Ë 96 Iterator which consumes a table and returns elements.Á¸¥Û Ì ¼é¬„Ì ÎéL‡Ì ×ÛŒ1§õVûÙ‚¤8:< „Ì äÓ„¡Ì $¡Ì ‡Úü·Ì ,T·Ì Þ€´éÌ 4éÌ è¶ü„Í '¥˜˜Û ‰Í ¼é ŒÍ ÎéLÍ ×Ûš "$üãÍ $êÍ ñ ñ×Û‡Ú ïÍ 
šÅÖ²Ø$ðÍ ü©Î W¥œœÛ µÎ ¼é ¸Î ÎéL»Î ž‚$îÎ °‚$ûÎ ×Û-/13ü…Ï W¥Ÿ Ÿ Û ‘Ï ¼é ”Ï ÎéL—Ï ©ƒ$ÊÏ ºƒ$×Ï ×Û-/13üÈÓ 0»Òœ±Ó ¬°Ó ü§Ó ¥¢£¢£Û ÍÓ ¼é ÐÓ ÎéLÓÓ ×Û¤"¤&(*,”°Ô $³Ô ò ò×Û¡ ¸Ô ¡
¤ÅÖ²Ø$½Ô üÝÖ 4¥¦§¦§Û âÖ ¼é åÖ ÎéLèÖ ×Û¨©ªúMûMÿMª©8:<>L˜× $× ¥¥ÅÖüÝ× $à× ó ó×Ûì¥ å× ¥
©ÅÖ²Ø$ê× üÊØ -LÍØ ô ô×Û¬Ô¥ ר ¥
ªÅÖ²Ø$ØØ ü¡Ù =¥¬­­¬Û ¦Ù ¼é ©Ù ÎéL¬Ù ×Û!üâÙ 9¥¯°°¯Û çÙ ¼é êÙ ÎéLíÙ ×Û!üèÚ 1ü Ú GD Iterator which consumes elements without freeing the table storage.Áø²¥³´²´³Íì´Ý €Û ÍìºÝ¬ƒÛ #ºÝL†Û ´ÝøüÞ 'ºÝø±±¤.µùÕ·Ü.¸Úëž¼/ž„¸ø´ÝºÝëž¼/ž„¸µ·¸ÆüÚ ÇÉ ƒÛ äÓ„ Û $ Û ±±êêÀ)ìùí¸>:3’!ÖL´Ý¤ëÜ ,ëÜ ±±еü…Ý "T…Ý ±±§ ïíe¼îËè¿*еs4Þ ±±öµFu\»Ÿ øµÕˆ¤Ú‰³sÚ§´–ִݺÝü¼Þ (8õ¥º»»ºõñ ÁÞ ƒ‚ ÄÞ •‚LÇÞ áܼ "$üœß $£ß ö öáÜþƒ¹ ¨ß ¹
¼8´ÝºÝ$©ß üâß X8÷¥¾¿
ëë…2ïùðÕ=ÆâçLl4ø´ÝºÝ=ÆâçLl4ïðЉ ˆŠŒŽ¤ë‰ $ï‰ ëëþƒ£,‰Š ëë øç…ü«Š ,8¥òóóòñ °Š ƒ‚ ³Š •‚L¶Š ëë…2ïùðÕ=ÆâçLl48´ÝºÝô[]_aü c$  ý¢ç劎ñõõ ¥‹ ñÍìçå ¢‹ “"çå ´Ý¬Ü‹ çå㤘"$í‹ 
ô8´ÝºÝçå$ª‹ ± ´‹ mo,Ä™¤·Ÿ¥«°ÎÜéó³ÀÍØíòù˜ œ®È×ì€ £ µ Š ø L#øúö/Ì4!nøûöš²Ÿøüö0š² øüö0¤.D1±øýö…2d;ëøþö¬,\IøÿöÀ)<VêøöµD_øöåTxòøƒ¼´|„ÄøY4¨ ø× `øp,Æ¿cøˆpÂcøˆ\\ßÅeøŠŽšeøŽ eø¦†òPøŒöµøöµøí»ëøŽIndexÁ,ÏÙ¢øTþ³¡¤}kn,p\_MP¤šCL´5º(+ üþÌ÷ÚÌ–ÊLµ¥„đܩüâ'$ Dummy default hasher for `HashMap`.Á»ŠŒ”œ“ôŠ”²¥Y&Ê®—õ¥Y&Ê®—õü´5GüÉB? A hash map implemented with quadratic probing and SIMD lookup.ÁŒúüHE The default hashing algorithm is currently [`AHash`], though this isÁüÙLI subject to change at any point in the future. This hash function is veryÁü¦OL fast for all types of keys, but this algorithm will typically *not* protectÁüö$! against attacks such as HashDoS.ÁúüŸLI The hashing algorithm can be replaced on a per-`HashMap` basis using theÁüìPM [`default`], [`with_hasher`], and [`with_capacity_and_hasher`] methods. ManyÁü½QN alternative algorithms are available on crates.io, such as the [`fnv`] crate.Á úü“ SP It is required that the keys implement the [`Eq`] and [`Hash`] traits, althoughÁüç NK this can frequently be achieved by using `#[derive(PartialEq, Eq, Hash)]`.Áü¶
GD If you implement these yourself, it is important that the followingÁœþ
 property holds:Á ú\  ```textÁü¢ $! k1 == k2 -> hash(k1) == hash(k2)Á ƒ»Ï úüÓ FC In other words, if two keys are equal, their hashes must be equal.Áš úüž MJ It is a logic error for a key to be modified in such a way that the key'sÁüì PM hash, as determined by the [`Hash`] trait, or its equality, as determined byÁü½
KH the [`Eq`] trait, changes while it is in the map. This is normally onlyÁü‰NK possible through [`Cell`], [`RefCell`], global state, I/O, or unsafe code.ÁØúüÜOL It is also a logic error for the [`Hash`] implementation of a key to panic.Áü¬NK This is generally only possible if the trait is implemented manually. If aÁüûPM panic does occur then the contents of the `HashMap` may become corrupted andÁüÌ-* some items may be dropped from the table.ÁúúÞºú<‘ƒ»Ü™ use hashbrown::HashMap;Áµúü¹DA // Type inference lets us omit an explicit type signature (whichÁüþ;8 // would be `HashMap<String, String>` in this example).Áüº*' let mut book_reviews = HashMap::new();ÁåúÌé // Review some books.Áă book_reviews.insert(Áüœ52 "Adventures of Huckleberry Finn".to_string(),ÁüÒ(% "My favorite book.".to_string(),ÁÐĂռü›*' "Grimms' Fairy Tales".to_string(),ÁüÆ# "Masterpiece.".to_string(),ÁÐÄñÕ¼üŠ*' "Pride and Prejudice".to_string(),Áüµ&# "Very enjoyable.".to_string(),ÁÐÄãÕ¼üü85 "The Adventures of Sherlock Holmes".to_string(),Áüµ)& "Eye lyked it alot.".to_string(),ÁÐæúüê  // Check for a specific one.Áü‹FC // When collections store owned values (String), they can still beÁüÒ'$ // queried using references (&str).Áüú63 if !book_reviews.contains_key("Les Misérables") {Áü±HE println!("We've got {} reviews, but Les Misérables ain't one.",Áüú%" book_reviews.len());Á, ¾¿¦úüªIF // oops, this review has a lot of spelling mistakes, let's delete it.Áüô=: book_reviews.remove("The Adventures of Sherlock Holmes");Á²úü¶41 // Look up the values associated with some keys.ÁüëMJ let to_find = ["Pride and Prejudice", "Alice's Adventure in Wonderland"];Áܹ for &book in &to_find {ÁüÕ&# match book_reviews.get(book) {Áüü=: Some(review) => println!("{}: {}", book, review),Áüº74 None => println!("{} is unreviewed.", book)Á¾¿úü†HE // Look up the value for a key (will panic if the key is not found).ÁüÏIF println!("Review for Jane: {}", book_reviews["Pride and Prejudice"]);Áúü // Iterate over everything.Áü½)& for (book, review) in &book_reviews {Áüç-* println!("{}: \"{}\"", book, review);Á,•¾¿<›ƒ»£úü§KH `HashMap` also implements an [`Entry API`](#method.entry), which allowsÁüóPM for more complex methods of getting, setting, updating and removing keys andÁŒÄ  their values:ÁÖ úƒ»Üâ °ºþ úü‚!DA // type inference lets us omit an explicit type signature (whichÁüÇ!52 // would be `HashMap<&str, u8>` in this example).Áüý!*' let mut player_stats = HashMap::new();Á¨"úü¬"! fn random_stat_buff() -> u8 {ÁüÎ"KH // could actually return some random value here - let's just returnÁüš## // some fixed value for nowÁT¾# 42Á,É#¾¿Ï#úüÓ#41 // insert a key only if it doesn't already existÁüˆ$0- player_stats.entry("health").or_insert(100);Á¹$úü½$IF // insert a key using a function that provides a new value only if itÁä‡% // doesn't already existÁü¤%C@ player_stats.entry("def
*v = "b";Áü²ì@= assert_eq!(map.get_key_value_mut(&1), Some((&1, &mut "b")));Áü÷ì0- assert_eq!(map.get_key_value_mut(&2), None);Á<¬íƒ»ŒÍí¯° ¯¬ß °ÿ±Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ¯äß ¯êßÓ¢èè êíÓ˜³ ßíª³$©î»³l°î
çäßêßðßößÿ±$ïí õíACüÓõ_ü›ðEB Returns `true` if the map contains a value for the specified key.Áåðúüíð?ù³ü±ñCôŒùñµòúü—ò;©Öü×ò@îÖœóút¤óÞº·óú<¿óƒ»ÜËó°ºëóúüóó!榼™ô¶¶üµô+( assert_eq!(map.contains_key(&1), true);Áüåô,) assert_eq!(map.contains_key(&2), false);Á<–õƒ»dÚõ±² ±¬ß ²ÿ±Ó¢êê òõÓ˜³ çõª³$ö»³l¤ö
éäßêßðßößÿ±$óõ ùõACüàühüèöFC Returns a mutable reference to the value corresponding to the key.Á³÷úü»÷?ù³üÿ÷CôŒÇøµÝøúüåø;©Öü¥ù@îÖêùútòùÞº…úú<úƒ»Ü™ú°º¹úúüÁú!榼çú¶¶üƒû&# if let Some(x) = map.get_mut(&1) {ÁŒ®û *x = "b";Á,Äû¾¿ìÎû assert_eq!(map[&1], "b");Áðûúüøû&# assert_eq!(map.get_mut(&2), None);Á<£üƒ»<çü³´ ³¬ß ´ÿ±Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ³êßÓ¢ìì úüÓ˜³ ïüª³$³ý»³lºý
ëäßêßðßößÿ±$ÿü …ýACüžÿol¡ÿøµ µ¬ß ÿ±Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ µèùÓ¢îî ºÿÓ˜³ ¯ÿª³$øÿ»³lÿÿ
íäßêßðßößÿ±$¿ÿ ÅÿACüÁŒüçHE Attempts to get mutable references to `N` values in the map at once.Á´‚úü¼‚]Z Returns an array of length `N` with the results of each query. For soundness, at most oneÁüžƒZW mutable reference will be returned to any value. `None` will be returned if any of theÁüýƒ# keys are duplicates or missing.Á¥„út­„ÞºÀ„ú<È„ƒ»ÜÔ„°ºô„úüü„'$ let mut libraries = HashMap::new();Áü¨…;8 libraries.insert("Bodleian Library".to_string(), 1602);Áüè…41 libraries.insert("Athenæum".to_string(), 1807);Áü¡†JG libraries.insert("Herzogin-Anna-Amalia-Bibliothek".to_string(), 1691);Áüð†>; libraries.insert("Library of Congress".to_string(), 1800);Á³‡úü»‡&# let got = libraries.get_many_mut([Á¤æ‡ "Athenæum",Áôÿ‡ "Library of Congress",Á<¢ˆ ]);Á|®ˆ™Ïdˆ got,ÁtÓˆ Some([Á´æˆ &mut 1807,Á´ &mut 1800,Á\œ‰ ]),Á4¬‰Ð·‰úü¿‰" // Missing keys result in NoneÁüæ‰&—ܤ‘ŠÇÜüªŠ" "New York Public Library",Á<ÑŠÝÔÝŠ assert_eq!(got, None);ÁüŠúü„‹$! // Duplicate keys result in NoneÁü­&—ܤ؋Çܤñ‹ÇÜ<ŠŒÝÔ–ŒÏß<µŒƒ»dÈŒ·¸ ·¬ß ¸ÿ±ŸÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ·êߟӢðŸññð ðŒÓ˜³ ÕŒŸtàŒª³»³
ïäßêßðßößÿ±Ÿ$õŒksÁûŒXZV æŒïç¡ô€¢ôž¢ôôïô äßêßðßößÿ±Ÿ èùŸ êߟD‰Žïç¡õ€¢õž¢õõïõ äßêßðßößÿ±
,ˆÅt‘Ʋ硳€¢³ž¢³³²³äßêßðßöß§€ êß ¬ß½Æ²ç¡´€¢´ž¢´´²´äßêßðßöߪ
§
üÙÆtœ§·¤¸¹¸¹· ßç ÞÆðç áÆè 䯒è çÆÓ…’Çä…$—ÇêߤÇîî\¯Ç£èLÃǬßY[]_acegüÓÇbœ»§¼¤½¾¾¼»½ßç ØÇðç ÛÇè ÞÇ’è áÇ¿cäß,È¿cêß,È£èL«È¬ß¿Àc¿Z\^`bdfhü¼È8¿ÈÒÓÔ Ò¬ß Ó c cˆ¢cµ
 `£cbufÁ `àB¤GS
ÔÖ¿Ù¿Ú¿«Û¿ˆÜ¿Ý¿Þ¿ˆ‚†f|Â
ŸÈŸÈ ÈErrorÁ O˜éBLº ÃȺ
¿äßêßðßöß$Äȱ ÊÈü´ÉbœÁ§Â¤ÃÄÃÁÄÂßç ¹Éðç ¼Éè ¿É’è Âɳðß<òɳöß<‚Ê£èLŒÊ¬ßÅ´ÅZ\^`bdfh¤«ÏüÊb_ Creates an empty `HashMap<K, V, S, A>`, with the `Default` value for the hasher and allocator.Á„ËútŒËÞºŸËú<§Ëƒ»ܳ˰ºüÓË0- use std::collections::hash_map::RandomState;ÁˆÌúüÌLI // You can specify all types of HashMap, including hasher and allocator.ÁüáÌ52 // Created map is empty and don't allocate memoryÁü›Í74 let map: HashMap<u32, String> = Default::default();Áü×Í"óˆüþÍDA let map: HashMap<u32, String, RandomState> = HashMap::default();ÁüÇÎ"óˆ<î΃»<®Ï¬ßÀÀ
ÅäßêßðßößüИ8՜ǢȧɤÊËÉÇÕËÊÈ Äó •ÐÎìŠá ˜ÐÍìóà £ÐÍìùà ¦ÐÍìÿà ©ÐíàÛКeíà$àКeŠá$íÐòŠáíàlôÐÅeùà\ŠÑ#ÿàLžÑµàÌÍۢܢÍÎÐÉËÄÆ¿Áº¼\¯Ñ4´ÑÆÆóàô›ÕüÅÑGD Returns a reference to the value corresponding to the supplied key.Á‘Òúd™Òò‡ªÒúü²Ò63 Panics if the key is not present in the `HashMap`.ÁíÒútõÒÞºˆÓú<Óƒ»ÜœÓ°º¼ÓúüÄÓA> let map: HashMap<_, _> = [("a", "One"), ("b", "Two")].into();ÁŠÔúü’Ô! assert_eq!(map[&"a"], "One");Áü¸Ô! assert_eq!(map[&"b"], "Two");Á<ÞÔƒ»,žÕÖ× Öµà ׊á ÖóàÆ ¤ÕÆ
Í8íàŠáóàùàÿà$¥ÕÝT«Õ̧áüªÚC@ An iterator over the entries of a `HashMap` in arbitrary order.ÁüîÚ2•»¡Ûúü¥ÛKH This `struct` is created by the [`iter`] method on [`HashMap`]. See itsÁÜñÛ documentation for more.ÁÜúü‘Ü-* [`iter`]: struct.HashMap.html#method.iterÁü¿Ü$¶þ äÜútèÜÞº÷Üú<û܃»܃ݰºŸÝúü£ÝC@ let map: HashMap<_, _> = [(1, "a"), (2, "b"), (3, "c")].into();ÁçÝúôëÝ let mut iter = map.iter();ÁüŠÞ>; let mut vec = vec![iter.next(), iter.next(), iter.next()];ÁÉÞúüÍÞDܾü’ß@«¿ÄÓßúªüìßLI assert_eq!(vec, [Some((&1, &"a")), Some((&2, &"b")), Some((&3, &"c"))]);Á¹àúܽà // It is fused iteratorÁüÙà" assert_eq!(iter.next(), None);Áüüà"ݪ
<Ÿáƒ»$²áøÏœÐ§ÑÑÏÐÄó »áÕó ¾áíàøüãá#Ûáø½óܦ‹n=ð~“ÒÓ·áOQSU´Çá,ÇáøÎÎêêÀ)ìùí¸>:3!ÖL³ú¦4ãáøÎÎöµFu\»Ÿ‹úüÂâ#8؜էÖÕØÖÄó ÇâÕó Êâ˜á×Ù×!#¼ã, ãÙ Ù˜á˜áÔ ¦ãÔ
×8íàÛá$§ãü¡ä68ڜ٧ÚÚÚÙÄó ¦äÕó °ä¿cíà,©ä¿cÛá,³ä˜áÛÀcÛ?ACEüÞä8áäÛÜÝ Û˜á Ü c cˆ¢cµ
 `£cØ“
 `àB¤GS
Ýÿ”
Ø åäØ
Û8íàÛá$æä± ìääÓìüØåJG A mutable iterator over the entries of a `HashMap` in arbitrary order.Áü£æ6¢ÃÚæúüÞæOL This `struct` is created by the [`iter_mut`] method on [`HashMap`]. See itsÁܮ焦
ÊçúüÎç52 [`iter_mut`]: struct.HashMap.html#method.iter_mutÁü„è$¶þ ©èút­èÞº¼èú<À胻ÜÈè°ºäèúüèèSP let mut map: HashMap<_, _> = [(1, "One".to_owned()), (2, "Two".into())].into();Á¼éúüÀé" let mut iter = map.iter_mut();Áüãé96 iter.next().map(|(_, v)| v.push_str(" Mississippi"));Áüê9̶
×êúÜÛê·ª
ü÷ê"ݪ
üšë"ݪ
½ëúüÁëDA assert_eq!(map.get(&1).unwrap(), &"One Mississippi".to_owned());Áü†ìDA assert_eq!(map.get(&2).unwrap(), &"Two Mississippi".to_owned());Á<Ë샻<ÞìøÝœÞ§ßÞÝßÄó êìÕó íìì¬
üÀí'ý¬

¢ôÙ 0¦àáæìACEG´öì,öìøÜÜá­
g4ÀíøÜÜöµFu\»Ÿú øÛáü¤ï88Þœã§äãäÞÄó °ïÕó ¹ïÌìíà$³ïÌìÛá$¼ïôá68:<äáï8ßœæ§çæçßÄó æïÕó éïôáèüøð+$†ñà àôáÎβBÒãøÓÚøܦ‹n=ð~“àíàÛáå ‹ñå
è8íàÛá$ŒñüÏú0üòJG An owning iterator over the entries of a `HashMap` in arbitrary order.ÁüÛò*' The iterator element type is `(K, V)`.Á†óúüŠóGD This `struct` is created by the [`into_iter`] method on [`HashMap`]ÁüÒóMJ (provided by the [`IntoIterator`] trait). See its documentation for more.Áü ô52 The map cannot be used after calling that method.ÁÖôúüÚô74 [`into_iter`]: struct.HashMap.html#method.into_iterÁü’õ$¶þ ü·õQN [`IntoIterator`]: https://doc.rust-lang.org/core/iter/trait.IntoIterator.htmlÁ‰öútöÞºœöú< öƒ»ܨö°ºÄöúüÈöCϧ
Œ÷úü÷# let mut iter = map.into_iter();Áü´÷>Ò¨
ó÷úü÷÷HE // The `IntoIter` iterator produces items in arbitrary order, so theÁüÀø@«¿ÄùúªüšùFC assert_eq!(vec, [Some((1, "a")), Some((2, "b")), Some((3, "c"))]);ÁáùúÜåù·ª
üú"ݪ
ü¤ú"ݪ
<Çúƒ»DÚúœê§ëììêëßç ãúðç æúƒ‚¬éú•‚Lìú’õÕ’-Ãè!áí:<>@B éúäÓì†û,†ûøéé¬,ù×,ÚŒ1§õVûÙ‚èùºÝü¨û*œï§ðñðñïßç ­ûðç °ûƒ‚ ³û•‚L¶û’õò')+-/1üÍü+$Ûüá á’õÎβBÒãøÓÚøܦ‹n=ð~“áäßêßî àüî
òäßêߺÝ$áüü‰…0üäýGD An owning iterator over the keys of a `HashMap` in arbitrary order.Áü¬þ%êùÒþúüÖþHE This `struct` is created by the [`into_keys`] method on [`HashMap`].ÁüŸÿ# See its documentation for more.ÁüÃÿ5ŽÁ
ùÿúüýÿ74 [`into_keys`]: struct.HashMap.html#method.into_keysÁüµ€$¶þ Ú€útÞ€Þºí€ú<ñ€ƒ»Üù€°ºúü™Cϧ
Ýúüá# let mut keys = map.into_keys();Áü…‚>; let mut vec = vec![keys.next(), keys.next(), keys.next()];ÁÄ‚úüÈ‚G€üüƒ?±ªÄЃúªüéƒ1. assert_eq!(vec, [Some(1), Some(2), Some(3)]);Á›„úÜŸ„·ª
ü»„" assert_eq!(keys.next(), None);ÁüÞ„"îÐ
<ƒ»D”…œô§õöõôößç ðç  …ƒ‚¬£…•‚L¦…ÂâᜠBÁvŽð÷:<>@B £…äÓÄÀ…,À…øóó’õüÝ…7œù§úûùúûßç â…ðç å…ƒ‚ è…•‚Lë…ÂâüýÿúMûMÿMóNÿýLNPRTVL›†$ †øøäßü½†$À†â âÂâÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙäßø ņø
ýäßêߺÝ$ʆDý†ýç¡þ€¢þž¢þþýþäßêߺÝèùäßü¡‡-L¤‡ã ãÂâ¬Ôø ®‡ø
ÿäßêߺÝ$¯‡üˆˆp$‹ˆÂâ²ã÷Ø
øøÍì÷Ø
ˆßã “ˆÍìÂâ,̈“"²ã÷Ø
ÂâúMÌÞˆ²ãêÙ
˜"÷Ø
öˆ
äßêߺÝ÷Ø
²ã$–ˆìí$œˆ± ©ˆl硃€¢ƒž¢ƒƒƒäßêߺÝ÷Ø
²ã÷Ø
èù÷Ø
 ²ãü¿‰@œ§ßç ĉðç ljƒ‚ ʉ•‚L͉ÂâˆÄMˆ/13579´”Š—Šä äÂâ ›Š
ˆäßêߺÝ$œŠüÏŠ<œŠ§ŒŒŠßç ÔŠðç ׊ƒ‚ ÚŠ•‚LÝŠÂâ$&(*,.üGœŽ§Žßç •‹ðç Ÿ‹ƒ‚ ©‹‚“
,˜‹““
,¢‹•‚L¬‹ÂâÀcACEGIKüÞ‹8á‹åæç åÂâ æ c cˆ¢cµ
 `£cØ“
 `àB¤GS
çÿ”
 å‹
äßêߺÝ$拱 ì‹Dی础¢ž¢äßêߺݣ
§€ üÊ”2ü‡IF An owning iterator over the values of a `HashMap` in arbitrary order.ÁüÑ%ÿ÷úüûJG This `struct` is created by the [`into_values`] method on [`HashMap`].ÁüÆŽUR See its documentation for more. The map cannot be used after calling that method.Áœúü ;8 [`into_values`]: struct.HashMap.html#method.into_valuesÁüÜ$¶þ út…Þºúƒ»Ü °º¼úüÀCϧ
„‘úüˆ‘'$ let mut values = map.into_values();Áü°‘DA let mut vec = vec![values.next(), values.next(), values.next()];Áõ‘úüù‘G˜üÁ’Eêć“úªü “74 assert_eq!(vec, [Some("a"), Some("b"), Some("c")]);ÁØ“úÜÜ“·ª
üø“$! assert_eq!(values.next(), None);Áü$óç
<”ƒ»TÕ”œ§ßç à”ðç 㔃‚¬æ”•‚L锤ãÌ ~@µ;¶:<>@B æ”äÓă•,ƒ•ø’õü •9œ§ššßç ¥•ðç ¨•ƒ‚ «••‚L®•¤ãœŸ úMûMÿMóN ŸLNPRTVLà•$啘˜êßü‚–$…–è è¤ãñž ˜ Š–˜
äßêߺÝ$D–硞€¢žž¢žžžäßêßºÝØ×
êßüæ–-Lé–é é¤ã¬Ô˜ ó–˜
ŸäßêߺÝ$ô–üÍ—p$З¤ã÷Ø
²ã÷Ø
˜¡¢¡¢˜²Ù
Õ—ßã Ø—Íì¤ã,‘˜“"²ã÷Ø
¤ãúMÌ£˜²ãŸð
˜"÷Ø
»˜
 äßêߺÝ÷Ø
²ã$Û—ìí$á—± î—l☠硣€¢£ž¢££ £äßêߺÝ÷Ø
²ãÐÛ
âÛ
ü„™Bœ¥§¦§§¥¦ßç ‰™ðç Œ™ƒ‚ •‚L’™¤ã¨ÄM¨/13579´Û™Þ™ê ê¤ã¤ ♤
¨äßêߺÝ$ã™ü–š>œª§«¬«¬ªßç ›šðç žšƒ‚ ¡š•‚L¤š¤ã$&(*,.üÙšBœ®§¯°°®¯ßç Þšðç ᚃ‚ ëš““
,äš•‚Lã±Àc±8:<>@Bü¢›8¥›ëìí ë¤ã ì c cˆ¢cµ
 `£cØ“
 `àB¤GS
íÿ”
­ ©›­
±äßêߺÝ$ª›± °›DŸœ±ç¡²€¢²ž¢²²±²äßêߺݣ
ª
Ì¢£üËœ@= An iterator over the keys of a `HashMap` in arbitrary order.ÁüŒ)á¥úüºKH This `struct` is created by the [`keys`] method on [`HashMap`]. See itsÁ܆ž„¦
¢žúü¦ž-* [`keys`]: struct.HashMap.html#method.keysÁüÔž$¶þ ùžútýžÞºŒŸú<Ÿƒ»ܘŸ°º´Ÿúü¸ŸCϧ
üŸúô€  let mut keys = map.keys();ÁüŸ >•Ï
Þ úüâ Cã©ü¦¡?±ªÄæ¡úªüÿ¡41 assert_eq!(vec, [Some(&1), Some(&2), Some(&3)]);Á´¢úܸ¢·ª
üÔ¢"îÐ
ü÷¢"îÐ
<š£ƒ»$­£ø´œµ§´µÄó ¶£Õó ¹£ì¬
Ô(ý¬
Û(ôõ0‘ÍÔáô/·²£=?AC¬Â£,£ø³³½óü“¤#8§ººî¹Äó ˜¤Õó ›¤†ä»Ù»!#¼î¤,ñ¤ï ï†ä†ä¸ ÷¤¸
»8íàÛá$ø¤üÑ¥/8𜽧¾ð½¾Äó Ö¥Õó à¥б
,Ù¥†ä¿Àc¿&(*,ü‡¦8Цñòó ñ†ä ò c cˆ¢cµ
 `£cØ“
 `àB¤GS
óÿ”
¼ ަ¼
¿8íàÛá$¦± •¦Üú­ü§B? An iterator over the values of a `HashMap` in arbitrary order.Áüħ)â­î§úüò§MJ This `struct` is created by the [`values`] method on [`HashMap`]. See itsÁÜÀ¨„¦
ܨúüà¨1. [`values`]: struct.HashMap.html#method.valuesÁü’©$¶þ ·©út»©ÞºÊ©ú<Ωƒ»ÜÖ©°ºò©úüö©Cϧ
ºªúü¾ª" let mut values = map.values();ÁüáªDŽæ
¦«úüª«Gö°üò«AȱÄ´¬úªüͬ:7 assert_eq!(vec, [Some(&"a"), Some(&"b"), Some(&"c")]);Áˆ­úÜŒ­·ª
ü¨­$óç
üÍ­$óç
<ò­ƒ»4…®øÁœÂ§ÃÁÃÂÄó ®Õó “®ì¬
K.ý¬
R.ÍöýŒ´Õ~3ÌËÄŒ®=?AC¬œ®,œ®øÀÀ½óüí®%8ôœÆ§ÇôÇÆÄó ò®Õó õ®ÓäÈÙÈ!#¼Ê¯,ͯõ õÓäÓäÅ Ó¯Å
È8íàÛá$Ô¯ü¯°18öœÊ§ËÊËöÄó ´°Õó ·°›±
,º°ÓäÌÀcÌ&(*,üç°8ê°÷øù ÷Óä ø c cˆ¢cµ
 `£cØ“
 `àB¤GS
ùÿ”
É î°É
Ì8íàÛá$ï°± õ°ü…¹1üá±DA A draining iterator over the entries of a `HashMap` in arbitraryÁü¦²1. order. The iterator element type is `(K, V)`.ÁزúüܲLI This `struct` is created by the [`drain`] method on [`HashMap`]. See itsÁÜ©³„¦
ųúüɳ/, [`drain`]: struct.HashMap.html#method.drainÁüù³$¶þ ž´út¢´Þº±´ú<µ´ƒ»ܽ´°ºÙ´úüÝ´GD let mut map: HashMap<_, _> = [(1, "a"), (2, "b"), (3, "c")].into();Á¥µúü©µ%" let mut drain_iter = map.drain();ÁüϵPM let mut vec = vec![drain_iter.next(), drain_iter.next(), drain_iter.next()];Á ¶úü¤¶EB // The `Drain` iterator produces items in arbitrary order, so theÁüê¶@«¿Ä«·úªüÄ·F¯Å
‹¸úܸ·ª
ü«¸(% assert_eq!(drain_iter.next(), None);ÁüÔ¸(Ž” <ý¸ƒ»,¹øÎœÏ§ÐÑÑÏÐÎÄó š¹Õó ¹’è¬ ¹£èL£¹ì¬
Jý¬
!Jößø0JÁøÎþç>øiÉ’Ò–¹`bdfh  ¹äÓô½¹,½¹øÍͱ±¤.µùÕ·Ü.¸Úëž¼/ž„¸ø³úößüà¹+8úœÔ§ÕÖÕúÖÔÄó å¹Õó è¹’è ë¹£èLù×')+-/1ü†»+$”»û ûˆùÎβBÒãøÓÚøܦ‹n=ð~“ûíàÛáÓ ™»Ó
×8íàÛáöß$š»üåÄ8ü¼UR A draining iterator over entries of a `HashMap` which don't satisfy the predicateÁüó¼NK `f(&k, &mut v)` in arbitrary order. The iterator element type is `(K, V)`.Á½úüƽQN This `struct` is created by the [`extract_if`] method on [`HashMap`]. See itsÁܘ¾„¦
´¾úü¸¾96 [`extract_if`]: struct.HashMap.html#method.extract_ifÁüò¾$¶þ —¿út›¿Þºª¿ú<®¿ƒ»ܶ¿°ºÒ¿úüÖ¿LI let mut map: HashMap<i32, &str> = [(1, "a"), (2, "b"), (3, "c")].into();Á£Àúü§À<9 let mut extract_if = map.extract_if(|k, _v| k % 2 != 0);ÁüäÀ=: let mut vec = vec![extract_if.next(), extract_if.next()];Á¢Áúü¦ÁIF // The `ExtractIf` iterator produces items in arbitrary order, so theÁüðÁ@«¿ıÂúªüÊÂ52 assert_eq!(vec, [Some((1, "a")),Some((3, "c"))]);Á€Ãú܄÷ª
ü Ã(% assert_eq!(extract_if.next(), None);ÁüÉÃ(¹¡ ¬òà drop(extract_if);ÁˆÄúìŒÄ assert_eq!(map.len(), 1);Á<ªÄƒ».ü²Ä2"Iterators are lazy unless consumedÁLðÄøÙœÚ§ÛÜÝÛÜÚÝÙÄó þÄÕó ÅÁ¤ „ÅÍìí嬇Å#íåLŠÅüý“"çå üíà ýÛáÌ«Åüýç寥 ˜"$ÀÅì¬
Bý¬
˜Bíåø§BØØæJÞ±øßãø‘®.xˆ—<øíàÛáçåíå‘®.xˆ—<ÞßúÄ"%(+.( ‡ÅäÓ$ÌÅ ÌÅøØØçåüÖÅ",ÖÅøØØëë…2ïùðÕ=ÆâçLl4ø³úíåüýÅq8œá§âãäâäãáþÿçå þíà ÿÛá˜"$ׯÕó …ÆÁ¤ ˆÆø¤ ‹Æþÿ“"ç妩 ÌÂÆÄó ‚ÆŠ¥ L䯠ååæèúMûMÿMèæ/1vxz|~LõÆ$úÆàà³úü¿Ç($ÂÇ  åÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ åúMà ÇÇà
æ8íàÛáçåíå$ÌÇÌ‚Èæç¡ç€¢çž¢ççæçíàÛáçåíå ³ú çåüÅÈ-LÈÈ  å¬Ôà ÒÈà
è8íàÛáçåíå$ÓÈü©ÉY8œê§ëìëìêƒçå ƒíà Ûá˜"$þÉÕó ±ÉÁ¤ ´Éƒ“"çå ¯ ÌéÉÄó ®Éúå  GIKMô€Ñü‡ÊIF A mutable iterator over the values of a `HashMap` in arbitrary order.ÁüÑÊ-é´ÿÊúüƒËQN This `struct` is created by the [`values_mut`] method on [`HashMap`]. See itsÁÜÕË„¦
ñËúüõË96 [`values_mut`]: struct.HashMap.html#method.values_mutÁü¯Ì$¶þ ÔÌútØÌÞºçÌú<ë̃»Üó̰ºÍúü“ÍS´µ
çÍúüëÍ&# let mut values = map.values_mut();Áü’Î63 values.next().map(|v| v.push_str(" Mississippi"));ÁüÉÎ6”³ €Ïú܄Ϸª
ü Ï$óç
üÅÏ$óç
êÏúüîÏDå·
ü³ÐD´¸
<øÐƒ»L‹Ñøîœï§ðîïðÄó ™ÑÕó œÑì¬
Å=ý¬
Ì=¦÷‰éç>{9EÍñ•Ñ=?ACÄ¥Ñ,¥Ñøíí¢ôüÏàAüÂÑTQ A builder for computing where in a [`HashMap`] a key-value pair would be stored.Á—Òúü›Ò?< See the [`HashMap::raw_entry_mut`] docs for usage examples.ÁÛÒúüßÒHE [`HashMap::raw_entry_mut`]: struct.HashMap.html#method.raw_entry_mutÁ¨Óút¬ÓÞº»Óú<¿Óƒ»üÇÓ^[ use hashbrown::hash_map::{RawEntryBuilderMut, RawEntryMut::Vacant, RawEntryMut::Occupied};ÁܦÔ°ºüÂÔ(×»ëÔúüïÔ!æ¦ü‘ÕGD map.extend([(1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16)]);ÁìÙÕ assert_eq!(map.len(), 6);Á÷ÕúüûÕYÌÚ üÕÖ¾üõÖ4¹¾ìª×÷¾´Èמ¿,ß×¾¿å×úüé×C@ let builder: RawEntryBuilderMut<_, _, _> = map.raw_entry_mut();Á­Øúœ±Ø // Existing keyÁüÅØ  match builder.from_key(&6) {ÁüæØ$! Vacant(_) => unreachable!(),Áü‹Ù63 Occupied(view) => assert_eq!(view.get(), &16),Á,ÂÙ¾¿ÈÙú´ÌÙ for key in 0..12 {ÁüãÙ41 let hash = compute_hash(map.hasher(), &key);Áü˜Ú+( let value = map.get(&key).cloned();ÁüÄÚ:7 let key_value = value.as_ref().map(|v| (&key, v));ÁÿÚúüƒÛ85 println!("Key: {} and value: {:?}", key, value);Á¼ÛúüÀÛ2/ match map.raw_entry_mut().from_key(&key) {ÁüóÛNK Occupied(mut o) => assert_eq!(Some(o.get_key_value()), key_value),ÁüÂÜ1. Vacant(_) => assert_eq!(value, None),ÁLôܤÈüþÜGD match map.raw_entry_mut().from_key_hashed_nocheck(hash, &key) {ÁüÆÝNÁ ü•Þ1æÁ LÇÞ¤ÈüÑÞB? match map.raw_entry_mut().from_hash(hash, |q| *q == key) {Áü”ßNÁ üãß1æÁ L•à¤È,Ÿà¾¿¥àúì©àÒº <Çàƒ»”Úàøóœô§õ¤ö÷öô÷óõÄó ñàÕó ôàÍì¤ç ÷àø¤ ¬úàŠ¥ Lýàì¬
ü—á ý¬

¤çø‚¦ òò¿LøØøêOÂ~–­røíàÛá¤çíåêOÂ~–­røíฺ¼µ·¹ úàäÓº—áøòò óüÈ÷8ü¼áPM A view into a single entry in a map, which may either be vacant or occupied.Áâúü‘â/, This is a lower-level version of [`Entry`].ÁÁâúüÅâSP This `enum` is constructed through the [`raw_entry_mut`] method on [`HashMap`],Áü™ãC@ then calling one of the methods of that [`RawEntryBuilderMut`].ÁÝãúüáã$¶þ ô†ä [`Entry`]: enum.Entry.htmlÁü¥ä?< [`raw_entry_mut`]: struct.HashMap.html#method.raw_entry_mutÁüåä:7 [`RawEntryBuilderMut`]: struct.RawEntryBuilderMut.htmlÁ åút¤åÞº³åú<·åƒ»ü¿å(×»üèåIF use hashbrown::hash_map::{HashMap, RawEntryMut, RawOccupiedEntryMut};Á²æúü¶æ!æ¦üØæ/, map.extend([('a', 1), ('b', 2), ('c', 3)]);Áìˆçô§¦çúüªçYÌÚ ü„è¾ü¤è4¹¾ìÙè÷¾´÷èž¿,Žé¾¿”éúä˜é // Existing key (insert)ÁüµéGD let raw: RawEntryMut<_, _, _> = map.raw_entry_mut().from_key(&'a');ÁüýéC@ let _raw_o: RawOccupiedEntryMut<_, _, _> = raw.insert('a', 10);ÁìÁêô§ßêúüãê // Nonexistent key (insert)Áüƒë74 map.raw_entry_mut().from_key(&'d').insert('d', 40);Áì»ëàÙëúüÝë // Existing key (or_insert)Áüýë0- let hash = compute_hash(map.hasher(), &'b');Á„®ì
let kv = mapÁÄ¿ì .raw_entry_mut()ÁüØì,) .from_key_hashed_nocheck(hash, &'b')Áä…í .or_insert('b', 20);Áü¢í'$ assert_eq!(kv, (&mut 'b', &mut 2));Á|Êí *kv.1 = 20;ÁìÚíàøíúüüí" // Nonexistent key (or_insert)ÁüŸî0- let hash = compute_hash(map.hasher(), &'e');Á„Ðî¹Ò ÄáîÓÒ üúî,) .from_key_hashed_nocheck(hash, &'e')Áä§ï .or_insert('e', 50);ÁüÄï(% assert_eq!(kv, (&mut 'e', &mut 50));Áìíï assert_eq!(map.len(), 5);Á‹ðúüð$! // Existing key (or_insert_with)Áü´ð0- let hash = compute_hash(map.hasher(), &'c');Á„åð¹Ò ÄöðÓÒ üñ'$ .from_hash(hash, |q| q == &'c')Áü·ñ&# .or_insert_with(|| ('c', 30));ÁüÞñ'$ assert_eq!(kv, (&mut 'c', &mut 3));Á|†ò *kv.1 = 30;Áì–òÌÖ ´òúü¸ò'$ // Nonexistent key (or_insert_with)Áüàò0- let hash = compute_hash(map.hasher(), &'f');Á„‘ó¹Ò Ä¢óÓÒ ü»ó'$ .from_hash(hash, |q| q == &'f')Áüãó&# .or_insert_with(|| ('f', 60));ÁüŠô(% assert_eq!(kv, (&mut 'f', &mut 60));Áì³ôÒº ÑôúüÕô'$ println!("Our HashMap: {:?}", map);ÁýôúüõFC let mut vec: Vec<_> = map.iter().map(|(&k, &v)| (k, v)).collect();ÁüÈõDܾüö@«¿ÄÎöúªüçöXU assert_eq!(vec, [('a', 10), ('b', 20), ('c', 30), ('d', 40), ('e', 50), ('f', 60)]);Á<À÷ƒ»\Ñ÷øúœû§ü¤ýþúþýûüÄó á÷Õó ä÷ÃÆ ç÷ø¤ ¬ê÷Š¥ Lí÷ì¬
üÓŽ"ý¬

‚¦ ÷Æ œûŽùÿÄMˆƒáMˆ^ÂÝðÉ\3øíàÛá¤çíå^ÂÝðÉ\3ÿƒüM¿NøŒÕø®4øzšÅ鑤ìÍøíàÛá¤çíåÕà ƒ˜˜¥OžÕøŸ®4ø›æŽ)W;øíàÛá¤çíåÕà Ý÷˜ž¡¤ ê÷äÓ´‡ø An occupied entry.Á¢øútªøÞº½øú<Åøƒ»üÑø41 use hashbrown::{hash_map::RawEntryMut, HashMap};ÁüŠùA> let mut map: HashMap<_, _> = [("a", 100), ("b", 200)].into();ÁÐùúüØù.·Ü ü‹ú1ðÜ üÁú'$ RawEntryMut::Occupied(_) => { }Á,íú¾¿<÷úƒ»ùù
øíàÛá¤çíåÖá Õà ùùÑæ üŒû#ùùÖá œ¶û A vacant entry.ÁÎûútÖûÞºéûú<ñûƒ»üýû4Åã ü¶ü5ŽŒðüúüøü-* match map.raw_entry_mut().from_key("a") {Áüªý3Ôå üâý%" RawEntryMut::Vacant(_) => { }Á,Œþ¾¿<–þƒ»ùù
ƒøíàÛá¤çíåÃâ Õà ùùëé ü©þ!ùùÃâ üðBüÐþ1. A view into an occupied entry in a `HashMap`.Áü‚ÿ+( It is part of the [`RawEntryMut`] enum.Á®ÿúü²ÿ*' [`RawEntryMut`]: enum.RawEntryMut.htmlÁÝÿútáÿÞºðÿú<ôÿƒ»üüÿ(×»ü¥€IÄÌ ï€úüó€!æ¦ü•2òÿ ÈúüÌYÌÚ ü¦‚¾üÆ‚4¹¾ìû‚÷¾´™ƒž¿,°ƒ¾¿¶ƒúüºƒc` let _raw_o: RawOccupiedEntryMut<_, _, _> = map.raw_entry_mut().from_key(&"a").insert("a", 100);Áìž„ô§¼„úüÀ„'…Ü üè„.·Ü ü—…1ðÜ üÉ…,¬Ý üö…)ãÝ ü †#—Þ üĆ"ÅÞ ¼ç†ñÞ üÿ†0“ß L°‡¤È,º‡¾¿À‡úüć ÷ß ìå‡ô§ƒˆúÔ‡ˆ¼à ü¢ˆ0áà üÓˆCœá ü—‰1ðÜ üɉ(ùá üò‰74 assert_eq!(view.remove_entry(), ("c", 30));ÁLªŠ¤È,´Š¾¿üºŠ5‹ã ìðŠÊã Ž‹úü’‹0- let hash = compute_hash(map.hasher(), &"b");ÁüË>; match map.raw_entry_mut().from_hash(hash, |q| *q == "b") {Áü‚Œ1ðÜ ü´Œ(ùá üÝŒ74 assert_eq!(view.remove_entry(), ("b", 20));ÁL•¤È¾¿ü¥$! assert_eq!(map.get(&"b"), None);Áìʦ¢ ƒ»œûøœ§ˆ¤ŠˆŠÄó “ŽÕó –ŽÃÆ ™Žø¤ ¬œŽŠ¥ LŸŽì¬
Û
ý¬
â
‚¦ é
÷Æ Ú
Öá zšÅ鑤ìÍŒŽjlnprtv œŽäÓ¤¹Ž$¹ŽønnÌpµ zw0üC³úš ,ÓŽø øµÕˆ¤Ú‰³sÚ§´–Ö³úíåî dûŽø ø¤çü“Š8œ§¤ Äó ŸÕó ¢ÃÆ ¥ø¤ ¨Û¼
í¼
Ìì¤ç$ÿÌìí劥 L“Ñæcegikmoqü¢Š8œ§¤ Äó ®Õó ±ÃÆ ´ø¤ · íà Ûá$ ¤ç$Ž‘ íå$›‘Š¥ L¢‘Ñæqsuwy{}üž@ü²‘.+ A view into a vacant entry in a `HashMap`.Áüá‘+«ê úü‘’*îê ¼’útÀ’޺ϒú<Ó’ƒ»üÛ’(×»ü„“GD use hashbrown::hash_map::{HashMap, RawEntryMut, RawVacantEntryMut};ÁÌ“úüГ.+ let mut map = HashMap::<&str, i32>::new();Áÿ“úüƒ”YÌÚ üÝ”¾üý”4¹¾첕÷¾´Ð•ž¿,畾¿í•úüñ•VS let raw_v: RawVacantEntryMut<_, _, _> = match map.raw_entry_mut().from_key(&"a") {ÁüÈ–*' RawEntryMut::Vacant(view) => view,Áüó–3Ôå 4§—ÆÛÔ®— raw_v.insert("a", 10);ÁüÉ—/, assert!(map[&"a"] == 10 && map.len() == 1);Áù—úüý—*ÿã ü¨˜0Çñ üÙ˜C@ match map.raw_entry_mut().from_key_hashed_nocheck(hash, &"b") {Áü3Ôå üÑ™&’æ üø™1. let (k, value) = view.insert("b", 2);Áüªš/, assert_eq!((*k, *value), ("b", 2));ÁÄÚš *value = 20;ÁLóš¤È,ýš¾¿üƒ›/, assert!(map[&"b"] == 20 && map.len() == 2);Á³›úü·›0áà üè›>; match map.raw_entry_mut().from_hash(hash, |q| *q == "c") {Áü§œ3Ôå üÛœ&’æ ü‚B? assert_eq!(view.insert("c", 30), (&mut "c", &mut 30));Á¤È¾¿üÕ/, assert!(map[&"c"] == 30 && map.len() == 3);Á<…žƒ»Œ˜žøœš§¤œœšÄó ®žÕó ±žÃÆ ´žø¤ ¬·žŠ¥ Lºžì¬
üÔž"ý¬

‚¦ ÷Æ œüžÃâ ›æŽ)W;žŸªžkmoqsuw ·žäÓx,Ôžø˜˜í÷ }düžø˜˜×ø ü”¨>ü”ŸT“¶ éŸúüíŸ;8 See the [`HashMap::raw_entry`] docs for usage examples.Á© úü­ @= [`HashMap::raw_entry`]: struct.HashMap.html#method.raw_entryÁî útò Þº¡ú<…¡ƒ»ü¡85 use hashbrown::hash_map::{HashMap, RawEntryBuilder};ÁüÆ¡(×»ï¡úüó¡!æ¦ü•¢,) map.extend([(1, 10), (2, 20), (3, 30)]);Á¢úüÆ¢YÌÚ ü £¾üÀ£4¹¾ìõ£÷¾´“¤ž¿,ª¤¾¿°¤úœ´¤ for k in 0..6 {ÁüȤ2/ let hash = compute_hash(map.hasher(), &k);Áüû¤%¤ò ü¡¥-Ôò Ï¥úüÓ¥2™ó ü†¦@= let builder: RawEntryBuilder<_, _, _> = map.raw_entry();ÁüǦ-* assert_eq!(builder.from_key(&k), kv);Áüõ¦E£ô ü»§Jóô ,†¨¾¿<Œ¨ƒ»|Ÿ¨ø¡œ¢§£¤¤¥¢¤¥£¡Äó ³¨Õó ¶¨ÃÆ ¹¨ø¤ ¬¼¨Š¥ L¿¨ì¬
äÙ¨ý¬
 ÷Æ ‚¦   öO¦Øø¥ ’ÊÃ"jøíàÛá¤çíå¥ ’ÊÃ"j¦¯¨¥§©«­¯± ¼¨äÓ²Ù¨ø  Êòüú¨Bø¨œ©§ª¤«¬¨ª«©¬Äó ƒ©Õó †©ÃÆ ‰©ø¤ Œ©Š¥ L©‰Ç ­¯ÿ¨:<>@BDFHü¸­üé/, Creates a `RawEntryMut` from the given key.Á÷©útÿ©Þº’ªú<šªƒ»ü¦ª4¤Ù ߪúüçª52 let mut map: HashMap<&str, u32> = HashMap::new();Á”¡« let key = "a";Áü¸«NK let entry: RawEntryMut<&str, u32, _> = map.raw_entry_mut().from_key(&key);ÁÜ‹¬ entry.insert(key, 100);Áü«¬ assert_eq!(map[&"a"], 100);Á<Ϭƒ»D¿­ˆ‰Ç ˆ¢Õà §¢®® Ü­§Îìó˜ È­Åe¤ç\”®šeó˜ $¬®òó˜ íàl³®
­øíàÛá¤çíåó˜ $Ó­ Ù­lnü¢¶ü¯<9 Creates a `RawEntryMut` from the given key and its hash.Áƒ°út‹°Þºž°ú<¦°ƒ»ü²°(×»üß°4¤Ù ˜±úü ±YÌÚ üþ±¾ü¢²4¹¾ìÛ²÷¾´ý²ž¿,˜³¾¿¢³úüª³5¹• ”ä³ø• üû³0Ðä ü°´c` let entry: RawEntryMut<&str, u32, _> = map.raw_entry_mut().from_key_hashed_nocheck(hash, &key);Áܘµí– ü¸µ“— <ܵƒ»¼©¶‰Ç  ó˜ Õà §¢°° à¶§¢™ Á¶Ö™ l˜·
¯øíàÛá¤çíåó˜ $̶§$Ò¶ ݶGIüâ·Bø²œ³§´¤µµ³´²Äó ë·Õó î·ÃÆ ñ·ø¤ ô·Š¥ L÷·‰Ç ·ºç·:<>@BDFHü³¿ƒü«¸FC Creates a `RawEntryMut` from the given hash and matching function.Áö¸útþ¸Þº‘¹ú<™¹ƒ»ü¥¹(×»üÒ¹4¤Ù ‹ºúü“ºYÌÚ üñº¾ü•»4¹¾ìλ÷¾´ð»ž¿,‹¼¾¿•¼úü¼5¹• ”×¼ø• üî¼0Ðä ü£½^[ let entry: RawEntryMut<&str, u32, _> = map.raw_entry_mut().from_hash(hash, |k| k == &key);Á܆¾í– ü¦¾“— <ʾƒ»Lº¿‰Ç Õà ±¸¸±Í쇥 Ä¿¹“"‡¥  ¹íडÀ¹‡¥ Ò¥ ˜"$±À
·øíàÛá¤çí凥 $Ç¿§$Í¿is_matchÁDØ¿šÀüÁ4 Áø‰Ç ‡¥ Õà ±»»±°¥ §Á¼“"‡¥  ¼íई¼‡¥ ȧ ˜"$˜Â
ºøíàÛá¤çí凥 $ªÁ§$°Á´¥ D¿ÁÂD̺硽€¢½ž¢½½º½ íàÛá¤çí凥 òô ‡¥ üóÅ?ø¿œÀ§Á¤ÂÃÀÂÃÁ¿Äó üÅÕó ÿÅÃÆ ‚Æø¤ …ÆŠ¥ LˆÆ™’ ÄÆÈËøÅ@BDFHJLNüÉÉü¹Æ%" Access an immutable entry by key.ÁãÆútëÆÞºþÆú<†Çƒ»Ü’ǰº²ÇúüºÇB? let map: HashMap<&str, u32> = [("a", 100), ("b", 200)].into();ÁÈø• ü˜ÈC@ assert_eq!(map.raw_entry().from_key(&key), Some((&"a", &100)));Á<àȃ»DÐÉŠ™’ Šó˜ Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ‹ú¾¢ÅÅ íɾ¢™ ÙÉ´™ \ ÊÅ™ $¸ÊÖ™ l¿Ê
ÄøíàÛá¤çíåó˜ $äÉ êÉPRüîÑüÎË41 Access an immutable entry by a key and its hash.Á‡ÌútÌÞº¢Ìú<ªÌƒ»ü¶Ì(×»Üã̰ºƒÍúü‹ÍYÌÚ üé;üÎ4¹¾ìÆÎ÷¾´èΞ¿,ƒÏ¾¿Ïúü•ÏB¤« ”ÜÏø• üóÏ0Ðä
$šâ´™ \«â
ÓøíàÛá¤çíå$ÆáÝTÌá»,Ôáü•éƒü­äRO Ensures a value is in the entry by inserting the default if empty, and returnsÁü„å96 mutable references to the key and value in the entry.ÁÂåútÊåÞºÝåú<å僻Üñå°º‘æúü™æ5¹• ÓæúüÛæHE map.raw_entry_mut().from_key("poneyland").or_insert("poneyland", 3);Áü¨ç$! assert_eq!(map["poneyland"], 3);ÁÑçúüÙçQN *map.raw_entry_mut().from_key("poneyland").or_insert("poneyland", 10).1 *= 2;Áü¯è$! assert_eq!(map["poneyland"], 6);Á<Øèƒ»LœéÕà íàÛá øíà„¼
ÍÍþž
$ûé´™ \Œê
ÔøíàÛá¤çíå$¦é default_keyÁ\¬é default_valÁ\¼éü¦ðüßë]Z Ensures a value is in the entry by inserting the result of the default function if empty,ÁüÁìEB and returns mutable references to the key and value in the entry.Á‹íút“íÞº¦íú<®íƒ»ܺí°ºÚíúüâí85 let mut map: HashMap<&str, String> = HashMap::new();ÁŸîúü§îA> map.raw_entry_mut().from_key("poneyland").or_insert_with(|| {Áüíî)& ("poneyland", "hoho".to_string())Á<›ï });Á§ïúü¯ï52 assert_eq!(map["poneyland"], "hoho".to_string());Á<ét­ðÕà ‡¥ ÌÆ ÍÖÖͰ¥ ¼ð–"‡¥ ”€ñ‡¥ ˜"³ú4Œñþž
$Ÿñ´™ \°ñ
ÕøíàÛá¤çí凥 $¿ð><ÅðqsüüøUü¶óDA Provides in-place mutable access to an occupied entry before anyÁüÿó# potential inserts into the map.Á§ôút¯ôÞºÂôú<Êôƒ»ÜÖô°ºöôúüþô5¹• ¸õú¼Àõ map.raw_entry_mut()ÁìÜõ .from_key("poneyland")Áüþõ'$ .and_modify(|_k, v| { *v += 1 })Áüªö# .or_insert("poneyland", 42);ÁüÒö%" assert_eq!(map["poneyland"], 42);Áüöú¼„÷ÞÎ ì ÷ÿÎ üÂ÷'§Ï üî÷" .or_insert("poneyland", 0);Áü•ø%" assert_eq!(map["poneyland"], 43);Á<¿øƒ»TƒùÕà ‡¥ Õà ÍØØÍ°¥ ŽùŽ–"‡¥  Žíà Ûá´ºùއ¥ ¹Ó ˜"!
×øíàÛá¤çí凥 $‘ù± —ùü¬‰eü²üFC Provides shared access to the key and owned access to the value ofÁüýüEB an occupied entry and allows to replace or remove it based on theÁüÇý! value of the returned option.ÁíýútõýÞºˆþú<þƒ»Üœþ°ºü¼þ)& use hashbrown::hash_map::RawEntryMut;Áêþúüòþ5¹• ¬ÿúœ´ÿ let entry = mapÁÄÌÿÓÒ ôéÿ .from_key("poneyland")ÁüŒ€30 .and_replace_entry_with(|_k, _v| panic!());ÁÄ€úŒÌ€ match entry {Áüâ€%" RawEntryMut::Vacant(_) => {},ÁüŒ-* RawEntryMut::Occupied(_) => panic!(),Á¾¿ÈúüÐ  map.insert("poneyland", 42);ÁõúœýµÖ Ä•‚ÓÒ ô²‚àÖ üÕ‚(% .and_replace_entry_with(|k, v| {Áü‚ƒ(% assert_eq!(k, &"poneyland");Áô¯ƒ assert_eq!(v, 42);Á¼Òƒ Some(v + 1)Á\îƒ });ÁþƒúŒ†„Ó× üœ„%" RawEntryMut::Occupied(e) => {ÁüÆ„.+ assert_eq!(e.key(), &"poneyland");Áüù„%" assert_eq!(e.get(), &43);ÁT£…‹˜ü²…+( RawEntryMut::Vacant(_) => panic!(),Á,â…¾¿ì…úüô…%œÑ ž†úœ¦†µÖ ľ†ÓÒ ôÛ†àÖ üþ†/, .and_replace_entry_with(|_k, _v| None);Á²‡úŒº‡Ó× üЇ%ï× üú‡-ŸØ ,¬ˆ¾¿¶ˆúü¾ˆ,) assert!(!map.contains_key("poneyland"));Á<»´³‰Õà ‡¥ Õà ÍÚÚͰ¥ ʉ–"‡¥  íàÛáÔö‰‡¥ žá ˜"Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÛáL‡Š
ÙøíàÛá¤çí凥 $͉± Ó‰ÀÂüµ‹CøÜœÝ§Þ¤ßàÝßàÞÜÄó ¾‹Õó Á‹ÃÆ Ä‹ø¤ Ç‹Š¥ LÊ‹Öá áâãäåæçèéêëìí^`bdfhjl¼àüÿ‹-* Gets a reference to the key in the entry.Á±Œút¹ŒÞºÌŒú<ÔŒƒ»üàŒ4¤Ù úü¡FC let mut map: HashMap<&str, u32> = [("a", 100), ("b", 200)].into();Áìúüô.·Ü ü§Ž+ÚÜ ü׎=: RawEntryMut::Occupied(o) => assert_eq!(o.key(), &"a")Á,™¾¿ƒ»ç Öá íàÛ ëÛ
áøíàÛá¤çíåüÊ—#ü®52 Gets a mutable reference to the key in the entry.ÁèúÞºƒ‘ú<‹‘ƒ»ü—‘4¤Ù ¤Ð‘ use std::rc::Rc;Áé‘úüñ‘ let key_one = Rc::new("a");Áü•’ let key_two = Rc::new("a");Á¹’úüÁ’96 let mut map: HashMap<Rc<&str>, u32> = HashMap::new();Áüÿ’$! map.insert(key_one.clone(), 10);Á¨“úü°“" assert_eq!(map[&key_one], 10);ÁüדPM assert!(Rc::strong_count(&key_one) == 2 && Rc::strong_count(&key_two) == 1);Á¬”úü´”2/ match map.raw_entry_mut().from_key(&key_one) {Á
ÛÛ
åøíàÛá¤çíå$öªüÚ¯#üë74 Gets a mutable reference to the value in the entry.Áÿ«út‡¬Þºš¬ú<¢¬ƒ»ü®¬4¤Ù ç¬úüï¬Fßä º­úü­.·Ü üõ­+ÚÜ ü¥®<9 RawEntryMut::Occupied(mut o) => *o.get_mut() += 900,Á,殾¿ð®úüø® ùû <¯ƒ»<ᯠÖá  ÛáÛ é¯Û
æøíàÛá¤çíå$î¯ü¶´'ü¸°74 Gets a reference to the key and value in the entry.Áô°útü°Þº±ú<—±ƒ»ü£±4¤Ù ܱúüä±Fßä ¯²úü·².·Ü üê²+ÚÜ üš³PM RawEntryMut::Occupied(o) => assert_eq!(o.get_key_value(), (&"a", &100)),Á,ï³¾¿<ù³ƒ»l½´ Öá  íà ÛáÛ Ë´Û
çøíàÛá¤çíå$Ì´üå½7üÒµ?< Gets a mutable reference to the key and value in the entry.Á–¶útž¶Þº±¶ú<¹¶ƒ»üŶ4¤Ù ¤þ¶Ãè —·úüŸ·ïè ü÷™é ç·úüï·9Ðé ü­¸$”ê Ö¸úüÞ¸"Ðê ü…¹Pýê Ú¹úüâ¹2åë ü™º+ÚÜ üɺ)±ì ü÷ºC@ let (inside_key, inside_value) = o.get_key_value_mut();Áü¿»*' *inside_key = key_two.clone();Áüî»  *inside_value = 100;ÁL“¼¤È,¡¼¾¿ü«¼# assert_eq!(map[&key_two], 100);ÁüÓ¼Päí <¨½ƒ»Œì½ Öá  íà ÛáÛ þ½Û
èøíàÛá¤çíå$ƒ¾üñÈ5ü¦¿YV Converts the OccupiedEntry into a mutable reference to the key and value in the entryÁü„À,Ÿð µÀút½ÀÞºÐÀú<ØÀƒ»üäÀ4¤Ù ¤ÁÃè ¶Áúü¾Áïè üâÁ™é †ÂúüŽÂ9Ðé üÌÂ$”ê õÂúüýÂ"Ðê ü¤ÃPýê ùÃúüÄ"·ò ü¨Ä let inside_value: &mut u32;ÁüÌÄ2åë üƒÅ+ÚÜ ü³Å%" RawEntryMut::Occupied(o) => {ÁüÝÅ+( let tuple = o.into_key_value();ÁüÆ! inside_key = tuple.0;Áü³Æ# inside_value = tuple.1;ÁLÛÆ¤È,鯾¿üóÆ"æó ÄšÇ *inside_value = 100;Áü·Ç#׈
üßÇPäí <´Èƒ»tøÈÖá ÌÆ ÛÛ
éøíàÛá¤çíå$‡ÉüßÎ'ü°ÊC@ Sets the value of the entry, and returns the entry's old value.ÁøÊút€ËÞº“Ëú<›Ëƒ»ü§Ë4¤Ù àËúüèËFßä ³Ìúü»Ì.·Ü üîÌ+ÚÜ üžÍHE RawEntryMut::Occupied(mut o) => assert_eq!(o.insert(1000), 100),Á,ë;¿õÍúüýÍ ùû <¢Îƒ»4æÎ Öá ÛáÛáÛ íÎÛ
êøíàÛá¤çíå$òλ,øÎü°×)üÀÏC÷
ˆÐútÐÞº£Ðú<«Ðƒ»ü·Ð4¤Ù ¤ðÐÃè ‰Ñúü‘Ñïè üµÑ™é ÙÑúüáÑ9Ðé üŸÒ$”ê ÈÒúüÐÒ"Ðê ü÷ÒPýê ÌÓúüÔÓ2åë ü‹Ô+ÚÜ ü»Ô)±ì üéÔ85 let old_key = o.insert_key(key_two.clone());Áü¦Õ41 assert!(Rc::ptr_eq(&old_key, &key_one));ÁLßÕ¤È,íÕ¾¿ü÷Õ"·í üžÖPäí <óÖƒ»T·×˜ ˜Öá íàíàÛ Â×Û
ëøíàÛá¤çíå$Ç×ÝTÍ×ĦÜü‘Ø52 Takes the value out of the entry, and returns it.ÁËØútÓØÞºæØú<îØƒ»üúØ4¤Ù ³Ùúü»ÙFßä †ÚúüŽÚ.·Ü üÁÚ+ÚÜ üñÚ@= RawEntryMut::Occupied(o) => assert_eq!(o.remove(), 100),Á,¶Û¾¿üÀÛ$þˆ
<éÛƒ»4­ÜÖá ÛáÛÛ
ìøíàÛá¤çíå$´Üüá#üêÜ96 Take the ownership of the key and value from the map.Á¨Ýút°ÝÞºÃÝú<Ë݃»ü×Ý4¤Ù Þúü˜ÞFßä ãÞúüëÞ.·Ü üžß+ÚÜ üÎßMJ RawEntryMut::Occupied(o) => assert_eq!(o.remove_entry(), ("a", 100)),Á, à¾¿üªà$þˆ
<Óàƒ»d—áÖá ³úÛÛ
íøíàÛá¤çíå$¤áü¦ëxüóáFÈÓ ü¾â=: the entry and allows to replace or remove it based on theÁü€ã!éÔ ¦ãút®ãÞºÁãú<É・üÕã4¤Ù Žäúü–äFßä áäúüéä>; let raw_entry = match map.raw_entry_mut().from_key(&"a") {Áü¬å+ÚÜ üÜåA> RawEntryMut::Occupied(o) => o.replace_entry_with(|k, v| {Áü¢æ  assert_eq!(k, &"a");ÁüÇæ assert_eq!(v, 100);ÁÌëæ Some(v + 900)Á\‰ç }),Á4™çÆÛü¤ç%" let raw_entry = match raw_entry {ÁüÎç+ÚÜ üþçAË¢
üÄè —£
üéè  assert_eq!(v, 1000);Á„Žé
NoneÁ\£éޤ
4³éÆÛ¬¾é match raw_entry {ÁüØé&# RawEntryMut::Vacant(_) => { },Áüƒê-ŸØ 4µêÆÛüÀê$þˆ
<éꃻ”­ëÖá ‡¥ Õà ÛïïÛ°¥ Àë–"‡¥  íàÛáԃ쇥 Ô¨
˜"Ëá L”ì
îøíàÛá¤çí凥 $Ãë± Éë{}t«íîç¡ð€¢ðž¢ððîð íàÛá¤çí凥 ³úÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ³ú‡¥ \ãíîç¡ñ€¢ñž¢ññîñ íàÛá¤çí凥 Ûá³úíàü¿ðAøóœô§õ¤ö÷÷õóôöÄó ÈðÕó ËðÃÆ Îðø¤ ÑðŠ¥ LÔðÃâ øùúýÄð@BDFHJLNüíõrü‡ñ;8 Sets the value of the entry with the VacantEntry's key,ÁüÇñ*' and returns a mutable reference to it.ÁöñútþñÞº‘òú<™òƒ»ü¥ò4¤Ù ÞòúüæòFßä ±óúü¹ó.+ match map.raw_entry_mut().from_key(&"c") {Áüìó-ŸØ üžôWT RawEntryMut::Vacant(v) => assert_eq!(v.insert("c", 300), (&mut "c", &mut 300)),Á,úô¾¿„õúüŒõ assert_eq!(map[&"c"], 300);Á<°õƒ»4ôõÃâ íàÛáÌÆ òòþž
$Âö´™ \Óö
øøíàÛá¤çíå$ûõÝTö»,‰öüÍ€Œüå÷;ð¬
ü¥ø*¶­
ÔøútÜøÞºïøú<÷øƒ»üƒù(×»ü°ù4¤Ù éùúüñùYÌÚ üÏú¾üóú4¹¾ì¬û÷¾´Îûž¿,éû¾¿óûúüûûFßä ”Æü let key = "c";ÁüÝü0Ðä ’ýúüšýC@ match map.raw_entry_mut().from_key_hashed_nocheck(hash, &key) {Áüâý-ŸØ ü”þ-* RawEntryMut::Vacant(v) => assert_eq!(ÁüÆþ41 v.insert_hashed_nocheck(hash, key, 300),Áüÿþ  (&mut "c", &mut 300)ÁT¤ÿ ),Á,³ÿ¾¿½ÿúüÅÿž°
<éÿƒ»¬Ô€Ãâ íàÛáÌÆ òòþž
´™ 
ùøíàÛá¤çíå$ꀧ$ð€ÝTû€»üµ·ü«ƒ<9 Set the value of an entry with a custom hasher function.ÁìƒútôƒÞº‡„ú<ƒ»ü›„(×»üÈ„4¤Ù úü‰…EB fn make_hasher<K, S>(hash_builder: &S) -> impl Fn(&K) -> u64 + '_ÁLÓ…¦„
Ìá… K: Hash + ?Sized,Á¼ÿ… S: BuildHasher,Á,›†ã„
Ä¥† move |key: &K| {Áü†# use core::hash::Hasher;Áüê†85 let mut state = hash_builder.build_hasher();Áü§‡! key.hash(&mut state);ÁÔ͇ state.finish()ÁL쇤È,ú‡¾¿„ˆúüŒˆ5¹• ”ƈø• ü݈,) let hash_builder = map.hasher().clone();Áüމ0- let hash = make_hasher(&hash_builder)(&key);ÁÉúüˉ>; match map.raw_entry_mut().from_hash(hash, |q| q == &key) {ÁüŽŠ-ŸØ üÀŠ-ê´
üòŠMJ v.insert_with_hasher(hash, key, 100, make_hasher(&hash_builder)),ÁüÄ‹  (&mut "a", &mut 100)ÁTé‹‹¶
,ø‹¾¿ü‚ŒMJ map.extend([("b", 200), ("c", 300), ("d", 400), ("e", 500), ("f", 600)]);ÁüÔŒ“— <øŒƒ»”¼Ãâ íàÛáÌÆ òûûòÍìÂ
Ïš"Â
 šíàlÞŽšÂ
ØÂ
˜"èŽ
úøíàÛá¤çíåÂ
§ÝTü»,ŒŽá74žŽãúç¡ü€¢üž¢üüúü íàÛá¤çíåÂ
÷ô Â
üÁøÃâ íàÛáÖá òòþž
$¥‘´™ \¶‘
ýøíàÛá¤çíåÝT×»ü«”H8œÿ§¤ÿÄó °”Õó ³”ÃÆ ¶”ø¤ ¹”Š¥ L¼”ÀçƒÀcƒ8:<>@BDFüú”8ý”œž œÀç  c cˆ¢cµ
 `£cØ“
 `àB¤GS
žÿ”
þ þ
ƒ8íàÛá¤çíå$‚•± ˆ•üñ•O8Ÿœ§¤ˆŸˆÄó ö•Õó €–ÃÆ Š–ø¤ б
,ù•›±
,ƒ–Š¥ LŠèÀcJLNPRTVXüÇ–8Ê– ¡¢  Šè ¡ c cˆ¢cµ
 `£cØ“
 `àB¤GS
¢ÿ”
 Ζ
8íàÛá¤çíå$Ï–± Õ–üÛ˜W8£œ§Œ¤Ž£ŒŽÄó à˜Õó ê˜ÃÆ ô˜ø¤ ÷˜б
,㘛±
,혊¥ Lú˜ÑæÀcJLNPRTVXü¹™8¼™¤¥¦ ¤Ñæ ¥ c cˆ¢cµ
 `£cØ“
 `àB¤GS
¦ÿ”
Š À™Š
8íàÛá¤çíå$Á™± Ç™üG8§œ§¤§Äó ”›Õó —›ÃÆ 𛸤 Š¥ L ›ùèÀc8:<>@BDFüÝ›8à›¨©ª ¨ùè © c cˆ¢cµ
 `£cØ“
 `àB¤GS
ªÿ”
 ä›
8íàÛá¤çíå$å›± ë›üÖœE8«œ§˜¤š˜š«Äó ÛœÕó ÞœÃÆ áœø¤ 䜊¥ LçœÏéÀc8:<>@BDFü¢8¥¬­® ¬Ïé ­ c cˆ¢cµ
 `£cØ“
 `àB¤GS
®ÿ”
 ©
8íàÛá¤çíå± °üÒ©'ü™žPÑÇ êžúüîžHE This `enum` is constructed from the [`entry`] method on [`HashMap`].Á·Ÿúü»Ÿ$¶þ üàŸ/, [`entry`]: struct.HashMap.html#method.entryÁ út” Þº£ ú<§ ƒ»ü¯ =: use hashbrown::hash_map::{Entry, HashMap, OccupiedEntry};Áí úüñ !æ¦ü“¡2òÿ ìÆ¡ô§ä¡úäè¡ìÎ ü…¢/, let entry: Entry<_, _, _> = map.entry("a");Áüµ¢96 let _raw_o: OccupiedEntry<_, _, _> = entry.insert(1);Áìï¢ô§ü£ÎÐ ì­£ map.entry("d").insert(4);ÁË£úüÏ£ÕÑ üï£(% let v = map.entry("b").or_insert(2);Áü˜¤,) assert_eq!(std::mem::replace(v, 2), 20);ÁüŤ"¹Ô üè¤  map.entry("e").or_insert(5);Á‰¥úü¥$× ü²¥0- let v = map.entry("c").or_insert_with(|| 3);Áüã¥,) assert_eq!(std::mem::replace(v, 3), 30);Áü¦'ÐÙ ü¸¦(% map.entry("f").or_insert_with(|| 6);Áá¦úüå¦'ŠÜ §úü‘§FÉÜ üاDܾü¨@«¿ÄÞ¨úªü÷¨RO assert_eq!(vec, [("a", 1), ("b", 2), ("c", 3), ("d", 4), ("e", 5), ("f", 6)]);Á<Ê©ƒ»,Û©øœž§Ÿ¤ ¡ž¡Ÿ Äó å©Õó è©ÃÆ ë©ø¤ T¥ L‡ªì¬
üª¼"ý¬

÷Æ ‚¦ œ¢£ÄM¤ˆ¥¦áM§ˆofrU%H9øíàÛá¤çíåofrU%H9¢£¥¦£¤®®‘Z´§øµÝTø¿Nø·Õøv”„š\`ÙsøíàÛá¤çíåƒá
¦§ÈÈå[ΧøÏÝTøÐÕøÐX,§nóqøíàÛá¤çíåƒá
á©§ª­°³¹ î©äÓ©´˜ªîâ ³ªút»ªÞºΪú<Öªƒ»üâª.+ use hashbrown::hash_map::{Entry, HashMap};Áü•«A„ä Û«úÔã« match map.entry("a") {Áü‚¬+( Entry::Vacant(_) => unreachable!(),Áü²¬! Entry::Occupied(_) => { }Á,ج¾¿<⬃»©œœ
£øíàÛá¤çíå©©„â
ć
œœøæ
ì÷¬œœ„â
œœ­Ñæ ´­út¼­ÞºÏ­ú<×­ƒ»üã­.ùã
ü–®5ŽŒЮúÔØ®Íä
ü÷®-* Entry::Occupied(_) => unreachable!(),Áü©¯ Entry::Vacant(_) => { }Á,ͯ¾¿<ׯƒ»œœ
¦øíàÛá¤çíåýâ
ć
œœûé
Üꯜœýâ
ü‹°I8¯œ©§ª¤«¬©«¯ª¬Äó °Õó š°ÃÆ ¤°ø¤ §°б
,“°›±
,°Š¥ Lª°™ê­Àc­JLNPRTVXüÛ°8Þ°°±² °™ê ± c cˆ¢cµ
 `£cØ“
 `àB¤GS
²ÿ”
¨ â°¨
­8íàÛá¤çíå$ã°± é°ü•»Qüݲ1ïé ü³%" It is part of the [`Entry`] enum.Áµ³úô¹³ÇÊ سútܳÞºë³ú<ﳃ»ü÷³=«×
µ´úü¹´!æ¦üÛ´2òÿ ޵úü’µFC let _entry_o: OccupiedEntry<_, _, _> = map.entry("a").insert(100);ÁìÙµô§÷µúüûµ'…Ü Ô£¶Íä
ü¾¶+òä
üê¶&# Entry::Occupied(mut view) => {Áü‘·)ãÝ ü»·#—Þ ¬ß· *v *= 10;Áüõ·0“ß L¦¸¤È,°¸¾¿¶¸úüº¸ ÷ß ìÛ¸ô§ù¸úÔý¸¼à Ô˜¹ match map.entry("c") {Áü³¹+òä
üß¹" Entry::Occupied(view) => {Áü‚º7¿ð Lºº¤È,ĺ¾¿üʺ$! assert_eq!(map.get(&"c"), None);ÁìïºÊã <»ƒ»l »ø¯œ°§±¤²³²°³¯±Äó ²»Õó µ»ÃÆ ´¸»ø¤ ¬Ð»Š¥ LÓ»ì¬
f
ý¬
m
֮ t
‚¦ {
„â
v”„š\`Ùs´µ·®»lnprt ¸»¬~ лäÓLí»$í»ø®®tü»ü»ø®®Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙí़$¼ø®®§÷ ƒ ,ª¼ø®® óüѼ8³œ¹§º¤»¼³¹»¼º Äó ݼÕó à¼ÃÆ ã¼ø¤ æ¼Û¼
$½í¼
$ª½ñù $·½ƒú $ĽŠ¥ L˽þêQSUWY[]_üÚ½8´œ¾§¿¤ÀÁÁ¿¾´À Äó æ½Õó é½ÃÆ ì½ø¤ ï½Óû $¦¾äû $³¾õû $À¾†ü $;Š¥ LÔ¾þêQSUWY[]_üä¾Q8µœÃ§Ä¤ÅÆÃµÄÆÅÄó é¾Õó ó¾ÃÆ ý¾ø¤ €¿б
,ì¾›±
,ö¾Š¥ Lƒ¿þêÇÀcÇJLNPRTVXü¼¿8¿¿·¸ þê · c cˆ¢cµ
 `£cØ“
 `àB¤GS
¸ÿ”
 ÿÂ
Ç8íàÛá¤çíå$Ä¿± Ê¿ü¼ÇOüŒÁ.éû ü»Á%ºí
áÁúôåÁÇÊ „ÂútˆÂÞº—Âú<›Âƒ»ü£Â;8 use hashbrown::hash_map::{Entry, HashMap, VacantEntry};ÁßÂúüãÂ.ñý ’Ãúü–Ã>; let entry_v: VacantEntry<_, _, _> = match map.entry("a") {ÁüÕÃ$! Entry::Vacant(view) => view,ÁüúÃ-õç
4¨ÄÆÛ¼¯Ä entry_v.insert(10);ÁüÇÄ/ò€ ÷ÄúüûÄ*ÿã ԦŠmatch map.entry("b") {ÁüÁÅ-õç
üïÅ  Entry::Vacant(view) => {ÁüÆ'$ let value = view.insert(2);Áü¸Æ" assert_eq!(*value, 2);ÁÄÛÆ¸ƒ LôƤÈ,þƾ¿ü„Ç/÷ƒ <´Çƒ»\ÇÇøÉœÊ§Ë¤ÌÍÌÊÍËÉÄó ×ÇÕó ÚÇÃÆ ´ÝÇø¤ ¬õÇŠ¥ LøÇì¬
ü­È"ý¬

÷Æ ‚¦ ýâ
ÐX,§nóqÎÏÐÓÇjlnpr ÝǬ| õÇäÓL’È$’ÈøÈÈ4¡È¡ÈøÈÈíà¸,­ÈøÈÈ óüÔÈH8¹œÒ§Ó¤ÔÕ¹ÕÓÒÔÄó ÙÈÕó ãÈÃÆ æÈø¤ éÈб
,ÜÈŠ¥ LìÈ‚ìÖÀcÖACEGIKMOü£É8¦Éº»¼ º‚ì » c cˆ¢cµ
 `£cØ“
 `àB¤GS
¼ÿ”
Ñ ªÉÑ
Ö8íàÛá¤çíå$«É± ±ÉüúØ9ü§ÊPM A view into a single entry in a map, which may either be vacant or occupied,ÁüøÊ1. with any borrowed form of the map's key type.ÁªËú®Ëúü²ËLI This `enum` is constructed from the [`entry_ref`] method on [`HashMap`].ÁÿËúüƒÌUR [`Hash`] and [`Eq`] on the borrowed form of the map's key type *must* match thoseÁüÙÌSP for the key type. It also require that key may be constructed from the borrowedÁü­Í$! form through the [`From`] trait.ÁÒÍúüÖÍ$¶þ üûÍ74 [`entry_ref`]: struct.HashMap.html#method.entry_refÁü³Î;©ÖüïÎ@îÖü°ÏC@ [`From`]: https://doc.rust-lang.org/std/convert/trait.From.htmlÁôÏútøÏÞº‡Ðú<‹Ðƒ»ü“ÐC@ use hashbrown::hash_map::{EntryRef, HashMap, OccupiedEntryRef};Á×ÐúüÛÐ!æ¦üýÐKH map.extend([("a".to_owned(), 10), ("b".into(), 20), ("c".into(), 30)]);ÁìÉÑô§çÑúäëÑìÎ üˆÒ  let key = String::from("a");Áü©Ò:7 let entry: EntryRef<_, _, _, _> = map.entry_ref(&key);ÁüäÒ?< let _raw_o: OccupiedEntryRef<_, _, _, _> = entry.insert(1);Áì¤Óô§üÂÓÎÐ üâÓ! map.entry_ref("d").insert(4);Á„ÔúüˆÔÕÑ ü¨Ô,) let v = map.entry_ref("b").or_insert(2);ÁüÕÔ,ØÚ
ü‚Õ"¹Ô ü¥Õ$! map.entry_ref("e").or_insert(5);ÁÊÕúüÎÕ$× üóÕ41 let v = map.entry_ref("c").or_insert_with(|| 3);Áü¨Ö, Ü
üÕÖ'ÐÙ üýÖ,) map.entry_ref("f").or_insert_with(|| 6);Áª×úü®×'ŠÜ Ö×úüÚ×OL for (key, value) in ["a", "b", "c", "d", "e", "f"].into_iter().zip(1..=6) {ÁüªØ# assert_eq!(map[key], value)Á,ÎØ¾¿ìÔØÒº <ò؃»DƒÙøØ™:ٜڢۧܤÝÞÙÝÞÜØÚÛÍì¶í ”ÙÎì¼í —ÙÍìÂí ¢ÙÍìÈí ¥ÙÍìÎíT¨Ù#ÎíLÁÙ¼í™:,¹ã¶íøü†ò"ÂíøÈíøÎíø+×ßàÄMáˆâãáMäˆa,Ã]Œ]ø™:¶í¼íÂíÈíÎía,Ã]Œ]ßàâãàáÃî—›ãä£ £ Þa« §ø¬ ÝTø­ Õø¨1A¥üÆ{ø™:¶í¼íÂíÈíÎí—›ŒÙÙ¾Á»¾¸»µ¸² ¨ÙäÓÖª´ÒÙîâ íÙútõÙÞºˆÚú<Úƒ»üœÚ1. use hashbrown::hash_map::{EntryRef, HashMap};ÁüÒÚSP let mut map: HashMap<_, _> = [("a".to_owned(), 100), ("b".into(), 200)].into();ÁªÛúô²Û match map.entry_ref("a") {ÁüÕÛ.+ EntryRef::Vacant(_) => unreachable!(),ÁüˆÜ$! EntryRef::Occupied(_) => { }Á,±Ü¾¿<»Üƒ»Öª××
àø™:¶í¼íÂíÈíÎíÖªÖªÃî—›××®¡üÐÜ'××ÃÿÜÑæ —ÝútŸÝÞº²Ýú<ºÝƒ»üÆÝ1ÓüüÝ74 let mut map: HashMap<String, i32> = HashMap::new();Á¸ÞúôÀÞùžüãÞ0- EntryRef::Occupied(_) => unreachable!(),Áü˜ß" EntryRef::Vacant(_) => { }Á,¿ß¾¿<É߃»¬××
ãø™:¶í¼íÂíÈíÎí¬¬·œ—›××÷¤üÜß%××·œü‡àn8½8¾œæ¢ç§è¤éêæè¾çéê½ æ™ Œàø™ šàŠš ­àœš ·à®š ºà ¶í¼íLà¿c¼í,¦à¿cÂí,°àÀšL½àäìëÀcëxz|~ˆŠüüà8ÿà¿ÀÁ ¿äì À c cˆ¢cµ
 `£cØ“
 `àB¤GS
Áÿ”
å ƒáå
ë88¶í¼íÂíÈíÎí$„á± ŠáüŠãDãøøíœî¢ïíîïÄó œã¥ž
ŸãŠáø Ûí”e%@NbJðñóôñò øŠáÛíôõíàÛí˜ãoqsu¬¬øìì
ñøíàŠá¬¬ø«Ûíììï«åèøìì«øìì
ôøíàŠáøíàÛíììò¬ ËãøììíàüÒã)ø÷œø¢ùø÷ùÄó Û㥞
ÞãÛíú×ã "ü‚ä:T…äøÛííàööéíà«\°ä
úøíàŠá$äüÍåAøüœý¢þüýþÄó Ö奞
äå íàŠáLÙåÛíÿâÿÒå9;=?´•æ4˜æÂ ÂÛí Šáû Ÿæû
ÿøíàŠá$ æüãðNüºç1ïé üìç(% It is part of the [`EntryRef`] enum.Á•èúü™è$! [`EntryRef`]: enum.EntryRef.htmlÁ¾èútÂèÞºÑèú<Õ胻üÝèCÞ¡éúü¥é!æ¦üÇéKÈ“êúü—ê Ç‘ü¸êQN let _entry_o: OccupiedEntryRef<_, _, _, _> = map.entry_ref(&key).insert(100);ÁìŠëô§¨ëúü¬ë'…Ü ôÔëùžüóë.¢Ÿü¢ì)& EntryRef::Occupied(mut view) => {ÁüÌì)ãÝ üöì#—Þ ¬šíèð
ü°í0“ß Láí¤È,ëí¾¿ñíúüõí assert_eq!(map["a"], 1111);Áì•îô§³îúÔ·î¼à ôÒî match map.entry_ref("c") {Áüñî.¢Ÿü ï%" EntryRef::Occupied(view) => {ÁüÆïB? assert_eq!(view.remove_entry(), ("c".to_owned(), 30));ÁL‰ð¤È,“ð¾¿ü™ð# assert_eq!(map.get("c"), None);Áì½ðÊã <Ûðƒ»„îðø ™:œƒ ¢§¤ ƒ æ™ ‡ñø™ ŠñŠš •ñœš ˜ñ®š¬›ñÀšLžñКØàšÏñšÖþšÝ‹›äÃî é‚HNK8ˆ ‰ Š ‹ ÿðƒñƒ ›ñäÓL¸ñ$¸ñøüÇñÇñøÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙìðñ´^òˆøóôÑ^õˆø”e%@NbJ™:¶í¼í¤ìñ$ìñønnÌpµ zw0üC¶íÂí,†òø ø®4ÕϹ$º¶íÂíÈíÎíü­ò¯ø ™:Ž œ ¢ §¤ Ž     æ™ Áòø™ ÄòŠš Çòœš Êò®š ÍòÌì¶í$Žó ¼í$›óÌìÂí$±óÌìÈí$¾óÌìÎí$ËóÀšLÒóÃî¹ò½òŸ¡£¥§©«­¯üáó¯ø™:œ¢˜ §¤š ˜ š  æ™ õóø™ øóŠš ûóœš þó®š ô ¶í$Âô‰À$Ïô Âí$åô Èí$òô Îí$ÿôÀšL†õÃîíóñóŸ¡£ü–õv8Ã8Äœ ¢ž §Ÿ ¤  ¡ Ä Ÿ ¡   Þ  æ™ ›õø™ ©õŠš ¼õœš Æõ®š Éõ–§Lžõ«§,µõ¼§,¿õÀšLÌõÇï¢ Àc¢ \^`bdfhjlnü“ö8–öÅÆÇ ÅÇï Æ c cˆ¢cµ
 `£cØ“
 `àB¤GS
Çÿ”
œ  šöœ
¢ 88¶í¼íÂíÈíÎí$›ö± ¡öüÊþLüñ÷.éû ü ø(å°ÉøúüÍø$¥±òøútöøÞº…ùú<‰ùƒ»ü‘ùA> use hashbrown::hash_map::{EntryRef, HashMap, VacantEntryRef};ÁÓùúü×ù0- let mut map = HashMap::<String, i32>::new();ÁˆúúüŒúHE let entry_v: VacantEntryRef<_, _, _, _> = match map.entry_ref("a") {ÁüÕú'$ EntryRef::Vacant(view) => view,Áüýú0ë¢4®ûÆÛ¼µûÿ€üÍû.+ assert!(map["a"] == 10 && map.len() == 1);Áüûúü€ü*ÿã ô«ü match map.entry_ref("b") {ÁüÊü0ë¢üûü# EntryRef::Vacant(view) => {ÁüŸý'ª‚üÇý"Ü‚Äêý¸ƒ Lƒþ¤È,þ¾¿ü“þ.+ assert!(map["b"] == 20 && map.len() == 2);Á<Âþƒ»tÕþø¤ ™:¥ œ¦ ¢§ §¨ ¤© ª ª ¨ ¤ ¦ § ¥ © æ™ ìþø™ ïþŠš úþœš ýþ®š¬€ÿÀšLƒÿКUàšüÉÿ"ñš
þš‹›·œ¨1A¥üÆ{« ¬ ­ äþèþƒ €ÿäÓLÿ$ÿø£ £ ¼¬ÿ¬ÿø£ £ ļÆ,Éÿø£ £ …¾üðÿm8È8Éœ¯ ¢° §± ¤² ³ ² ³ ± ɯ ° Èæ™ õÿø™ ƒ€ Šš –€ œš ™€ ®š œ€ –§Løÿ«§,ÀšLŸ€ ¾ð´ Àc´ SUWY[]_aceüä€ 8ç€ ÊËÌ Ê¾ð Ë c cˆ¢cµ
 `£cØ“
 `àB¤GS
Ìÿ”
®  ë€ ®
´ 88¶í¼íÂíÈíÎí$ì€ ± ò€ ü±ˆ <üì ZW The error returned by [`try_insert`](HashMap::try_insert) when the key already exists.ÁÇ‚ úüË‚ EB Contains the occupied entry, and the value that was not inserted.Á‘ƒ út•ƒ Þº¤ƒ ú<¨ƒ ƒ»ü°ƒ 63 use hashbrown::hash_map::{HashMap, OccupiedError};Áçƒ úüëƒ ?< let mut map: HashMap<_, _> = [("a", 10), ("b", 20)].into();Á«„ úü¯„ SP // try_insert method returns mutable reference to the value if keys are vacant,Áüƒ… PM // but if the map did have key present, nothing is updated, and the providedÁüÔ… 0- // value is returned inside `Err(_)` variantÁü…† $! match map.try_insert("a", 100) {Áüª† 41 Err(OccupiedError { mut entry, value }) => {Áü߆ *' assert_eq!(entry.key(), &"a");ÁüЇ # assert_eq!(value, 100);Áü®‡ -* assert_eq!(entry.insert(100), 10)ÁL܇ ¤È俇  _ => unreachable!(),Á,ƒˆ ¾¿ü‰ˆ “— <©ˆ ƒ»l¼ˆ øœ· §¸ ¤¹ º · º ¸ ¹ Äó Έ Õó ш ÃÆ Ôˆ ø¤ ¬×ˆ Š¥ LÚˆ ì¬
£>ý¬
ª>÷Æ ±>‚¦ ¸>ùñ+EtQ» ¼ ʈ hjlnprt ׈ äÓü¬‰ (üôˆ 30 The entry in the map that was already occupied.Á,°‰ µ µ „â
d¬Š üÚ‰ MJ The value which was not inserted, because the entry was already occupied.Á,°Š µ µ Ûáü½Š Q8Íœ¾ §¿ ¤À Á ; À ¿ Á Äó Š Õó ÌŠ ÃÆ ÖŠ ø¤ ÙŠ б
,ÅŠ ›±
,ÏŠ Š¥ LÜŠ ©ñ Àc JLNPRTVXü•‹ 8˜‹ ÎÏРΩñ Ï c cˆ¢cµ
 `£cØ“
 `àB¤GS
Ðÿ”
½  œ‹ ½
 8íàÛá¤çíå$± £‹ ü¢ \øÄ œÅ §Æ ¤Ç È Ä Å Ç È Æ Äó « Õó µ ÃÆ ¿ ø¤  б
›±
Š¥ ùñÉ ÅcÉ § QSUWY[]_ü…Ž 8ˆŽ ÑÒÓ Ñùñ Ò c cˆ¢cµ
 `£cØ“
 `àB¤GS
Óÿ”
à  ŒŽ Ã
É øíàÛá¤çíå$Ž ± “Ž ü” HøË œÌ §Í ¤Î Ï Ï Ë Í Î Ì Äó Õó   ÃÆ £ ø¤ ¦ Š¥ ÊòÐ Ñ Ò ÈLÉLÊLÒ  MOQSUWY[  Ê Ê ‹úlƒ‘ Dˆ‘ Ê Ê ½óüÆ— $ü¨‘ KH Creates an iterator over the entries of a `HashMap` in arbitrary order.Áüø‘ 2•»¯’ úü·’ KH Return the same `Iter` struct as by the [`iter`] method on [`HashMap`].Á‡“ úü“ -·¦
üÁ“ $¶þ ê“ útò“ Þº…” ú<ƒ»Ü™” °ºü¹” GD let map_one: HashMap<_, _> = [(1, "a"), (2, "b"), (3, "c")].into();Áü…• %" let mut map_two = HashMap::new();Á¯• úü·• " for (key, value) in &map_one {ÁüÞ• 30 println!("Key: {}, Value: {}", key, value);Áü–– 63 map_two.insert_unique_unchecked(*key, *value);Á,Ñ– ¾¿Û– úüã– ! assert_eq!(map_one, map_two);Á<‰— ƒ»LÉ— Êò½óÊ Ê
Ò øíàÛá¤çíå$Ó— üŠ˜ LøÔ œÕ §Ö ¤× Ø Ö Ô Ø × Õ Äó “˜ Õó –˜ ÃÆ ™˜ ø¤ œ˜ Š¥ LŸ˜  óÙ Ú Û ÈLÉLÊLÛ ˜ MOQSUWY[Lݘ $☠Ó Ó ÿ»
lD†™ Ó Ó ¢ôü¾¡ 'ü©™ JG Creates an iterator over the entries of a `HashMap` in arbitrary orderÁüø™ GD with mutable references to the values. The iterator element type isÁÌÄš  `(&'a K, &'a mut V)`.Áâš úüêš EB Return the same `IterMut` struct as by the [`iter_mut`] method onÁ„´› 
[`HashMap`].ÁÉ› úüÑ› 5”´
ü‹œ $¶þ ´œ út¼œ ޺Ϝ ú<ל ƒ»Ü㜠°ºüƒ GD let mut map: HashMap<_, _> = [("a", 1), ("b", 2), ("c", 3)].into();ÁÏ úü× " for (key, value) in &mut map {Áüþ 3Ð줶ž  *value *= 2;Á,Ïž ¾¿Ùž úüáž 1. let mut vec = map.iter().collect::<Vec<_>>();Áü—Ÿ DܾüàŸ @«¿Ä¥  úªü  :7 assert_eq!(vec, [(&"a", &2), (&"b", &4), (&"c", &6)]);Á<¡ ƒ»LÁ¡  ó¢ôÓ Ó
Û øíàÛá¤çíå$Ë¡ ü‰¢ @œÝ §Þ ¤ß à ß Ý à Þ ßç Ž¢ ðç ‘¢ è ”¢ ’è —¢ £èL𢠬ßá â ã ÈLÉLÊLã FHJLNPRTLТ $Õ¢ Ü Ü èùlè¢ Dí¢ Ü Ü éé± íãøÕ’-Ãè!áäßêßößüô¨ 'ü£ HE Creates a consuming iterator, that is, one that moves each key-valueÁüÝ£ HE pair out of the map in arbitrary order. The map cannot be used afterÁŒª¤  calling this.ÁÀ¤ útȤ ÞºÛ¤ ú<㤠ƒ»Üï¤ °º¥ úü—¥ C@ let map: HashMap<_, _> = [("a", 1), ("b", 2), ("c", 3)].into();Áߥ úüç¥  // Not possible with .iter()ÁüŒ¦ >; let mut vec: Vec<(&str, i32)> = map.into_iter().collect();ÁüϦ DA // The `IntoIter` iterator produces items in arbitrary order, soÁü˜§ DA // the items must be sorted to test them against a sorted array.ÁÄá§ úªüþ§ 4„À<·¨ ƒ»L÷¨ ¬ßªûÜ Ü
ã äßêßðßöß$© üï© *øå œæ §ç å æ ç Äó ø© Õó û© ½óè é ê ë úMûMÿMóNê ë é ô© ACEGL ª $¥ª ä ä ‹úüòª ,$õª Ô Ô½ó‡® ä  úª ä
é øíàÛá$ÿª üÒ­ -LÕ­ Õ Õ½ó¬Ôä  ß­ ä
ê øíàÛá$à­ üÜ® p$ß® ½ó÷Ø
²ã÷Ø
ä ì í ì í ä ²Ù
ä® ßã ç® Íì½ó, ¯ “"²ã÷Ø
½óúM̲¯ ²ã‰†˜"÷Ø
ʯ 
ë øíàÛá÷Ø
²ã$ê® ìí$ð® ± ý® Dñ¯ ë ç¡î €¢î ž¢î î ë î íàÛá÷Ø
²ã÷Ø
§÷ ÷Ø
âÛ
üÖ° /8Öœð §ñ ñ ð ÖÄó Û° Õó Þ° ˜áò ÄMò !#´½± À± × ×˜áï  ı ï
ò 8íàÛá$ű üø± +8Øœô §õ õ Øô Äó ý± Õó €² ˜áü¨² -ø÷ œø §ù ù ÷ ø Äó ±² Õó ´² ¢ôú û ü ý úMûMÿMóNü û ý ­² ACEGLܲ $á² ö ö ÿ»
ü²³ 0$µ³ Ù Ù¢ôÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙÿ»
ö  º³ ö
û øíàÛá$¿³ üš¶ -LÚ Ú¢ô¬Ôö  §¶ ö
ü øíàÛá$¨¶ ü¤· p$§· ¢ô÷Ø
²ã÷Ø
ö þ ÿ þ ÿ ö ²Ù
¬· ßã ¯· Íì¢ô,è· “"²ã÷Ø
¢ôúMÌú· ²ã²˜"÷Ø
’¸ 
ý øíàÛá÷Ø
²ã$²· ìí$¸· ± Å· D¹¸ ý ç¡
€¢
ž¢

ý 
íàÛá÷Ø
²ãï‡âÛ
üž¹ 28Ûœ
§ƒ
Û
ƒ
Äó £¹ Õó ¦¹ ôá
ÄM
!#´ˆº ‹º Ü Üôá
 º 
8íàÛá$º üº .8Ýœ
§
Ý

Äó Ǻ Õó ʺ ôáüõº W8Þœ
§Š

Š
ÞÄó úº Õó ýº б
T®» ›±
TÁ» ôá
Àc
/135üÓ» 8Ö» ßàá ßôá à c cˆ¢cµ
 `£cØ“
 `àB¤GS
áÿ”
ˆ
 Ú» ˆ
8íàÛá$Û» ± á» ü̼ 7œ
§Ž


Ž

ßç Ѽ ðç Ô¼ ƒ‚ ×¼ •‚LÚ¼ ’õ
úMûMÿMóN
LNPRTVLн $½ Œ
Œ
èùüÔ½ $$×½ â â’õÂÆ Œ
 ܽ Œ
äßêߺÝ$á½ üо -LÓ¾ ã ã’õ¬ÔŒ
 ݾ Œ
äßêߺÝ$Þ¾ üÚ¿ l$Ý¿ ’õ÷Ø
²ã÷Ø
Œ




Œ
²Ù
â¿ ßã å¿ Íì’õ,šÀ “"²ã÷Ø
’õúM̬À ²ã"÷Ø
ÄÀ 
äßêߺÝ÷Ø
²ã$è¿ ìí$î¿ ± ÷¿ üöÀ @œ
§˜

˜


ßç ûÀ ðç þÀ ƒ‚ Á •‚L„Á ’õš
ÄMš
/13579´îÁ ñÁ ä ä’õ
 õÁ 
š
äßêߺÝ$öÁ ü¨Â <œœ
§
ž

œ
ž
ßç ­Â ðç °Â ƒ‚ ³Â •‚L¶Â ’õ$&(*,.üé Gœ 
§¡
¢
 
¡
¢
ßç î ðç øÂ ƒ‚ ‚à ‚“
,ñ ““
,ûÂ •‚L…Ã ’õ£
Àc£
ACEGIKü·Ã 8ºÃ åæç å’õ æ c cˆ¢cµ
 `£cØ“
 `àB¤GS
çÿ”
Ÿ
 ¾Ã Ÿ
£
äßêߺÝ$¿Ã ± Åà ü°Ä *ø¥
œ¦
§§
§
¦
¥
Äó ¹Ä Õó ¼Ä ôõ¨
©
ª
«
úMûMÿMóN«
©
ª
µÄ ACEGLáÄ $æÄ ¤
¤
úüªÅ #$­Å è èôõÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙú¤
 ²Å ¤
©
øíàÛá$·Å ü°Ç -L³Ç é éôõ¬Ô¤
 ½Ç ¤
ª
øíàÛá$¾Ç üºÈ p$½È ôõ÷Ø
²ã÷Ø
¤
¬
­
¬
­
¤
²Ù
ÂÈ ßã ÅÈ Íìôõ,þÈ “"²ã÷Ø
ôõúMÌÉ ²ã˦˜"÷Ø
¨É 
«
øíàÛá÷Ø
²ã$ÈÈ ìí$ÎÈ ± ÛÈ lÏÉ «
ç¡®
€¢®
ž¢®
®
«
®
íàÛá÷Ø
²ã÷Ø
 íà Ûá÷Ø
âÛ
üðÉ /8ꜰ
§±
°
±
êÄó õÉ Õó øÉ †ä²
ÄM²
!#´×Ê ÚÊ ë ë†ä¯
 ÞÊ ¯
²
8íàÛá$ßÊ ü‘Ë +8윴
§µ
´
µ
ìÄó –Ë Õó ™Ë †äüÁË ,ø·
œ¸
§¹
·
¸
¹
Äó ÊË Õó ÍË Íöº
»
¼
½
úMûMÿMóN¼
½
»
ÆË ACEGLôË $ùË 

—úü½Ì #$ÀÌ í íÍöÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ—ú
 ÅÌ 
»
øíàÛá$ÊÌ üÃÎ -LÆÎ î îÍö¬Ô
 ÐÎ 
¼
øíàÛá$ÑÎ üÍÏ p$ÐÏ Íö÷Ø
²ã÷Ø

¾
¿
¾
¿

²Ù
ÕÏ ßã ØÏ ÍìÍö,‘Ð “"²ã÷Ø
ÍöúṂР²ãÿ¯˜"÷Ø
»Ð 
½
øíàÛá÷Ø
²ã$ÛÏ ìí$áÏ ± îÏ lâÐ ½
ç¡À
€¢À
ž¢À
À
½
À
íàÛá÷Ø
²ã±¨âÛ
üƒÑ 18ïœÂ
§Ã
Ã
Â
ïÄó ˆÑ Õó ‹Ñ ÓäÄ
ÄMÄ
!#´ìÑ ïÑ ð ðÓäÁ
 óÑ Á
Ä
8íàÛá$ôÑ ü¦Ò -8ñœÆ
§Ç
Ç
ñÆ
Äó «Ò Õó ®Ò ÓäüØÒ /øÉ
œÊ
§Ë
Ë
É
Ê
Äó áÒ Õó äÒ ¦÷Ì
Í
Î
Ï
úMûMÿMóNÏ
Í
Î
ÝÒ ACEGLŽÓ $“Ó È
È
„¼
üÛÓ '$ÞÓ ò ò¦÷Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ„¼
È
 ãÓ È
Í
øíàÛá$èÓ üåÕ -LèÕ ó ó¦÷¬ÔÈ
 òÕ È
Î
øíàÛá$óÕ üïÖ p$òÖ ¦÷÷Ø
²ã÷Ø
È
Ð
Ñ
Ð
Ñ
È
²Ù
÷Ö ßã úÖ Íì¦÷,³× “"²ã÷Ø
¦÷úMÌÅ× ²ãš¹˜"÷Ø
Ý× 
Ï
øíàÛá÷Ø
²ã$ýÖ ìí$ƒ× ± × l„Ø Ï
ç¡Ò
€¢Ò
ž¢Ò
Ò
Ï
Ò
íàÛá÷Ø
²ã÷Ø
»¨ Ûá÷Ø
âÛ
ü¥Ø 48ôœÔ
§Õ
ôÔ
Õ
Äó ªØ Õó ­Ø é÷Ö
ÄMÖ
!#´‘Ù ”Ù õ õé÷Ó
 ˜Ù Ó
Ö
8íàÛá$™Ù üËÙ 08öœØ
§Ù
Ø
Ù
öÄó ÐÙ Õó ÓÙ é÷ü€Ú 48÷œÛ
§Ü
Û
Ü
÷Äó …Ú Õó ˆÚ ›±
,‹Ú é÷Ý
ÀcÝ
&(*,ü»Ú 8¾Ú øùú øé÷ ù c cˆ¢cµ
 `£cØ“
 `àB¤GS
úÿ”
Ú
 ÂÚ Ú
Ý
8íàÛá$ÃÚ ± ÉÚ T¸Û Ý
ç¡Þ
€¢Þ
ž¢Þ
Þ
Ý
Þ
íàÛṨÁ¨üèÛ <øà
χ
§â
ã
à
â
ã
á
Äó ñÛ Õó ôÛ ’è ÷Û £èLúÛ Áøä
å
æ
ç
úMûMÿMóNæ
å
ç
íÛ SUWY[]L«Ü $°Ü ß
ß
³úüõÜ $$øÜ û ûÁø»ª
ß
 ýÜ ß
å
øíàÛáöß$‚Ý üñÝ -LôÝ ü üÁø¬Ôß
 þÝ ß
æ
øíàÛáöß$ÿÝ üûÞ l$þÞ Áø‡¥ Åß
è
é
è
é
ß
ÍìÅ ƒß °¥ †ß ÍìÁø,»ß “"‡¥ ÅÁøúMÌÍß ‡¥ ƒÆ˜"Å åß 
ç
øíàÛáößŇ¥ $‰ß ìí$ß ± ˜ß ü—à A8ýœë
§ì
í
ýí
ë
ì
Äó œà Õó Ÿà ’è ¢à £èL¥à ˆùî
ÄMî
/13579´á “á þ þˆùê
 —á ê
î
8íàÛáöß$˜á üÊá =8ÿœð
§ñ
ò
ÿñ
ò
ð
Äó Ïá Õó Òá ’è Õá £èLØá ˆù$&(*,.üŒâ m8œô
§õ
ö
ö
ô
õ
Äó ‘â Õó ”â ’è —â б
TÉâ ›±
TÜâ £èLïâ ˆù÷
Àc÷
ACEGIKü€ã 8ƒã ƒ ˆù  c cˆ¢cµ
 `£cØ“
 `àB¤GS
ƒÿ”
ó
 ‡ã ó
÷
8íàÛáöß$ˆã ± Žã üùã 5øù
Ϝ
§û
¤ü
ý
ü
ú
û
ù
ý
Äó ‚ä Õó …ä ÃÆ ˆä ø¤ ‹ä Š¥ LŽä ƒá
þ
ÿ
þã IKMOQSUWü¶ç qüµä >; Sets the value of the entry, and returns an OccupiedEntry.Áøä út€å Þº“å ú<›å ƒ»ܧå °ºÇå úüÏå 5¹• ü‰æ 30 let entry = map.entry("horseyland").insert(37);ÁÁæ úüÉæ +( assert_eq!(entry.key(), &"horseyland");Á<ùæ ƒ»4½ç ƒá
Ûá„â
ø
ø
þž
$Šè ´™ \›è 
þ
øíàÛá¤çíå$Äç »,Êç üÞî büŒê R÷À üãê 2¨° šë út¢ë Þºµë ú<½ë ƒ»ÜÉë °ºéë úüñë 5¹• «ì ú´³ì  // nonexistent keyÁüÎì (% map.entry("poneyland").or_insert(3);Áüûì $ØÃ ¤í úœ¬í  // existing keyÁüÄí /, *map.entry("poneyland").or_insert(10) *= 2;Áüøí $ðÄ <¡î ƒ»Låî ƒá
Ûᄼ
ø
ø
þž
$£ï ´™ \´ï 
ÿ
øíàÛá¤çíå$ïî ><õî üÝõ yüäð ]ÜÆ üÆñ >; and returns a mutable reference to the value in the entry.Á‰ò út‘ò Þº¤ò ú<¬ò ƒ»ܸò °ºØò úüàò 5¹• šó ú´¢ó ÞÒü½ó 0- map.entry("poneyland").or_insert_with(|| 3);Áüòó $ØÃ ›ô úœ£ô ÍÓü»ô 74 *map.entry("poneyland").or_insert_with(|| 10) *= 2;Áü÷ô $ðÄ < õ ƒ»täõ ƒá
‡¥ „¼
ø
  ø
°¥ óõ ëÌ löõ ‡¥ ˜"Ûá ‚ö þž
$¹ö ´™ \Êö 
øíàÛá¤çí凥 $…ö ><‹ö fhüÌÿ üü÷ _\ Ensures a value is in the entry by inserting, if empty, the result of the default function.Áüàø _\ This method allows for generating key-derived values for insertion by providing the defaultÁüÄù XU function a reference to the key that was moved during the `.entry(key)` method call.Á¡ú úü©ú TQ The reference to the moved key is provided so that cloning or copying the key isÁü‚û 85 unnecessary, unlike with `.or_insert_with(|| ... )`.Á¿û útÇû ÞºÚû ú<âû ƒ»Üîû °ºŽü úü–ü 74 let mut map: HashMap<&str, usize> = HashMap::new();ÁÒü ú´Úü ÞÒüõü IF map.entry("poneyland").or_insert_with_key(|key| key.chars().count());ÁüÃý $! assert_eq!(map["poneyland"], 9);Áìý úœôý ÍÓüŒþ TQ *map.entry("poneyland").or_insert_with_key(|key| key.chars().count() * 10) *= 2;Áüåþ %" assert_eq!(map["poneyland"], 18);Á<ÿ ƒ»”Óÿ ƒá
‡¥ „¼
ø
ƒ ƒ ø
°¥ æÿ –"‡¥  íà|éÿ ‡¥ Êã˜"Ûá ÷ÿ þž
$®€
´™ \¿€

øíàÛá¤çí凥 $úÿ ><€€
¼
ü¾‚
,) Returns a reference to this entry's key.Áï‚
út÷‚
ÞºŠƒ
ú<’ƒ
ƒ»Üžƒ
°º¾ƒ
úüƃ
5¹• ü€„
(ÿÒœ­„
ÍÓüÅ„
;8 assert_eq!(map.entry("poneyland").key(), &"poneyland");Á´……
ÞÒü …
;8 assert_eq!(map.entry("horseland").key(), &"horseland");Á<à…
ƒ»¤†
 ć
íàø
 ¨†
ø
øíàÛá¤çíå$©†
üµŒ
Mü·
DõÌ ü—ˆ
#ÄÍ ¿ˆ
útLj
ÞºÚˆ
ú<âˆ
ƒ»Üîˆ
°ºމ
úü–‰
5¹• Љ
úÔØ‰
 map.entry("poneyland")Áü÷‰
# .and_modify(|e| { *e += 1 })Á´ŸŠ
 .or_insert(42);ÁüºŠ
%‡Ð äŠ
úÔìŠ
Áèü‹‹
#æè´³‹
“éü΋
%œÑ <ø‹
ƒ»T¼Œ
ć
‡¥ ƒá
ø
  ø
°¥ ÇŒ
"‡¥  ÛátóŒ
‡¥ òë˜"
øíàÛá¤çí凥 $ÊŒ
± ÐŒ
tvü¿›
eüòŽ
FÈÓ ü½
E™Ô ü‡
!éÔ ­
ú
ÞºÈ
ú
ƒ»ÜÜ
°ºüü
# use hashbrown::hash_map::Entry;Á¤‘
úü¬‘
5¹• æ‘
úœî‘
µÖ ܆’
 .entry("poneyland")Áü¦’
3‰× Þ’
úŒæ’
Ó× ìü’
 Entry::Vacant(e) => {Áüž“
.ãÛ LÑ“
¤Èüß“
'$ Entry::Occupied(_) => panic!(),Á,‹”
¾¿•”
úü
òØ ”
úœÊ”
µÖ Üâ”
Äíü‚•
(ÔÙ ü¯•
(‡Ú ôÜ•
¹Ú ¼ÿ•
áÚ \›–
‚Û «–
úŒ³–
Ó× üÉ–
 Entry::Occupied(e) => {Áüí–
.ãÛ ü —
%œÜ LÊ—
¤ÈüØ—
%" Entry::Vacant(_) => panic!(),Á,‚˜
¾¿Œ˜
úü”˜
%œÑ ¾˜
úœÆ˜
µÖ ÜÞ˜
Äíüþ˜
/ñÝ ²™
úŒº™
Ó× üЙ
>; Entry::Vacant(e) => assert_eq!(e.key(), &"poneyland"),Áü“š
'Øî,¿š
¾¿Éš
úüÑš
,ÿÞ <‚›
ƒ»´Æ›
ć
‡¥ ƒá
ø
ˆ ˆ ø
°¥ Ý›
"‡¥  íàÛáÔ‰œ
‡¥ ­õ˜"Ëá Lšœ

øíàÛá¤çí凥 $à›
± æ›
{}ü¼
>øŠ œ §Œ ¤ Ž  Œ Š Ž  Äó Å
Õó È
ÃÆ Ô
ø¤ ×
³Ûá
Š¥
ć
Á
HJLNPRTVü€£
Wüž
LI Ensures a value is in the entry by inserting the default value if empty,ÁüÒž
>ÐÕ•Ÿ
útŸ
Þº°Ÿ
ú<¸Ÿ
ƒ»ÜÄŸ
°ºäŸ
úüìŸ
=: let mut map: HashMap<&str, Option<u32>> = HashMap::new();Á® 
ú´¶ 
ÞÒüÑ 
(% map.entry("poneyland").or_default();Áüþ 
'$ assert_eq!(map["poneyland"], None);Áª¡
úü²¡
%" map.insert("horseland", Some(3));ÁÜ¡
úœä¡
ÍÓüü¡
B? assert_eq!(map.entry("horseland").or_default(), &mut Some(3));Á<â
ƒ»T‡£
ć
„¼
  þž
$º£
´™ \Ë£

øíàÛá¤çíå$’£
ü„¥
=ø œ § ¤       Äó ¥
Õó ¥
ÃÆ “¥
ø¤ –¥
Š¥ L™¥
„â
˜ š œ ž Ÿ ‰¥
RTVXZ\^`¼¹©
üÈ¥
-Õã ú¥
út‚¦
Þº•¦
ú<¦
ƒ»ü©¦
.ùã
ܦ
úüä¦
5¹• üž§
)& map.entry("poneyland").or_insert(12);Á̧
úüÔ§
" match map.entry("poneyland") {Áüû§
%–ñü¥¨
HE Entry::Occupied(entry) => assert_eq!(entry.key(), &"poneyland"),Á,ò¨
¾¿<ü¨
ƒ»À©
ˆ ˆ„â
ˆíà  Ä©

øíàÛá¤çíå$Å©
ü¹°
#ü‡ª
9êœ
üŪ
)—êóª
útûª
ÞºŽ«
ú<–«
ƒ»Ü¢«
°ºü«
#àìê«
úüò«
5¹• ¼¬¬
“¼ üȬ
3µ¼ €­
úüˆ­
)‚ÿ¶­
úü¾­
85 if let Entry::Occupied(o) = map.entry("poneyland") {Áüû­
,) // We delete the entry from the map.Áü¬®
85 assert_eq!(o.remove_entry(), ("poneyland", 12));Á,é®
¾¿ó®
úüû®
52 assert_eq!(map.contains_key("poneyland"), false);Áüµ¯
!ÀÄ äÛ¯
¹¾ <ü¯
ƒ»dÀ°
„â
³ú 
øíàÛá¤çíå$Ͱ
¼¡µ
ü¢±
/­õ Ö±
útÞ±
Þºñ±
ú<ù±
ƒ»Ü…²
°ºü¥²
#àìͲ
úüÕ²
5¹• ü³
)‚ÿ½³
úüų
"Ãÿüì³
%–ñü–´
?< Entry::Occupied(entry) => assert_eq!(entry.get(), &12),Á,Ú´
¾¿<ä´
ƒ»¨µ
 „â
Ûá  ¬µ

˜ øíàÛá¤çíå$­µ
üä¼
#üïµ
7”ý «¶
úü³¶
HE If you need a reference to the `OccupiedEntry` which may outlive theÁü€·
74 destruction of the `Entry` value, see [`into_mut`].Á¼·
úüÄ·
" [`into_mut`]: #method.into_mutÁë·
útó·
Þº†¸
ú<ޏ
ƒ»Üš¸
°ºüº¸
#àìâ¸
úüê¸
5¹• ü¤¹
)‚ÿÒ¹
úüÚ¹
%" assert_eq!(map["poneyland"], 12);Áü„º
<9 if let Entry::Occupied(mut o) = map.entry("poneyland") {ÁÜź
 *o.get_mut() += 10;Áüåº
! assert_eq!(*o.get(), 22);Á‹»
úü“»
41 // We can use the same Entry multiple times.ÁÔÌ»
 *o.get_mut() += 2;Á,ë»
¾¿õ»
úüý»
%" assert_eq!(map["poneyland"], 24);Á<§¼
ƒ»<ë¼
Š Š„â
 ŠÛá  ó¼

øíàÛá¤çíå$ø¼
ü˜Ä
"ü½
QØø ü˜¾
,Ÿð ɾ
úüѾ
LI If you need multiple references to the `OccupiedEntry`, see [`get_mut`].Á¢¿
úüª¿
 [`get_mut`]: #method.get_mutÁÏ¿
út׿
Þºê¿
ú<ò¿
ƒ»üþ¿
.ùã
±À
úü¹À
5¹• üóÀ
)‚ÿ¡Á
úü©Á
%ùŒÓÁ
úÄÛÁ
°ú üøÁ
"ÃÿüŸÂ
;8 Entry::Occupied(entry) => value = entry.into_mut(),ÁüßÂ
%–ñ,‰Ã
¾¿Œ“Ã
 *value += 10;Á©Ã
úü±Ã
%" assert_eq!(map["poneyland"], 22);Á<ÛÃ
ƒ»DŸÄ
„â
„¼
 
š øíàÛá¤çíå$¨Ä
üÉ
'üõÄ
C÷
½Å
útÅÅ
ÞºØÅ
ú<àÅ
ƒ»ÜìÅ
°ºüŒÆ
#àì´Æ
úü¼Æ
5¹• üöÆ
)‚ÿ¤Ç
úü¬Ç
<©üíÇ
%" assert_eq!(o.insert(15), 12);Á,—È
¾¿¡È
úü©È
%" assert_eq!(map["poneyland"], 15);Á<ÓÈ
ƒ»4—É
 „â
ÛáÛá  žÉ

øíàÛá¤çíå$£É
»,©É
ÄÙÏ
üñÉ
5Æ™
ü«Ê
)—êÙÊ
útáÊ
ÞºôÊ
ú<üÊ
ƒ»܈Ë
°ºü¨Ë
#àìÐË
úüØË
5¹• ¼’Ì
“¼ ü®Ì
3µ¼ æÌ
úüîÌ
)‚ÿœÍ
úü¤Í
8ÁƒüáÍ
# assert_eq!(o.remove(), 12);Á,‰Î
¾¿“Î
úü›Î
5™…üÕÎ
!ÀÄ äûÎ
¹¾ <œÏ
ƒ»4àÏ
„â
Ûá 
œ øíàÛá¤çíå$çÏ
üùÙ
.üÐ
\Y Replaces the entry, returning the old key and value. The new key in the hash map will beÁüþÐ
&# the key used to create this entry.穄
úd±Ñ
ò‡ÂÑ
úüÊÑ
KH Will panic if this OccupiedEntry was created through [`Entry::insert`].ÁšÒ
út¢Ò
ÞºµÒ
ú<½Ò
ƒ»üÉÒ
/, use hashbrown::hash_map::{Entry, HashMap};Á¬ýÒ
 use std::rc::Rc;Á—Ó
úüŸÓ
<9 let mut map: HashMap<Rc<String>, u32> = HashMap::new();ÁüàÓ
63 let key_one = Rc::new("Stringthing".to_string());Áü›Ô
63 let key_two = Rc::new("Stringthing".to_string());ÁÖÔ
úüÞÔ
%" map.insert(key_one.clone(), 15);ÁüˆÕ
QN assert!(Rc::strong_count(&key_one) == 2 && Rc::strong_count(&key_two) == 1);ÁÞÕ
úüæÕ
'$ match map.entry(key_two.clone()) {Áü’Ö
$! Entry::Occupied(entry) => {Áü»Ö
SP let (old_key, old_value): (Rc<String>, u32) = entry.replace_entry(16);Áü“×
HE assert!(Rc::ptr_eq(&key_one, &old_key) && old_value == 15);ÁTà×
üï×
&# Entry::Vacant(_) => panic!(),Á4šØ
¥Ø
úü­Ø
QN assert!(Rc::strong_count(&key_one) == 1 && Rc::strong_count(&key_two) == 2);ÁüƒÙ
41 assert_eq!(map[&"Stringthing".to_owned()], 16);Á<¼Ù
ƒ»l€Ú
„â
Ûá³ú 
øíàÛá¤çíå$ŽÚ
»,”Ú
ìýè
ü‡Ü
LI Replaces the key in the hash map with the key used to create this entry.ÁØÜ
údàÜ
ò‡ñÜ
úüùÜ
KßžÉÝ
útÑÝ
ÞºäÝ
ú<ìÝ
ƒ»üøÝ
.ùã
¤«Þ
Ãè ÄÞ
úüÌÞ
HE let mut map: HashMap<Rc<String>, usize> = HashMap::with_capacity(6);Áü™ß
>; let mut keys_one: Vec<Rc<String>> = Vec::with_capacity(6);ÁüÜß
>; let mut keys_two: Vec<Rc<String>> = Vec::with_capacity(6);ÁŸà
úü§à
PM for (value, key) in ["a", "b", "c", "d", "e", "f"].into_iter().enumerate() {Áüüà
-* let rc_key = Rc::new(key.to_owned());Áü®á
&# keys_one.push(rc_key.clone());ÁüÙá
*' map.insert(rc_key.clone(), value);Áüˆâ
/, keys_two.push(Rc::new(key.to_owned()));Á,¼â
¾¿Æâ
údÎâ
 assert!(Áüßâ
=: keys_one.iter().all(|key| Rc::strong_count(key) == 2)Áü¡ã
DA && keys_two.iter().all(|key| Rc::strong_count(key) == 1)Á4êã
Ðõã
úüýã
(% reclaim_memory(&mut map, &keys_two);绊
úd²ä
÷®üÃä
=: keys_one.iter().all(|key| Rc::strong_count(key) == 1)Áü…å
DA && keys_two.iter().all(|key| Rc::strong_count(key) == 2)Á4Îå
ÐÙå
úüáå
RO fn reclaim_memory(map: &mut HashMap<Rc<String>, usize>, keys: &[Rc<String>]) {Á̸æ
 for key in keys {ÁüÖæ
DA if let Entry::Occupied(entry) = map.entry(key.clone()) {ÁüŸç
IF // Replaces the entry's key with our version of it in `keys`.Áüíç
$! entry.replace_key();Ál–è

L¨è
¤È,¶è
¾¿<Àè
ƒ»\„é
„â
íà 
ž øíàÛá¤çíå$é
üôõ
rü‘ê
FÈÓ üÜê
=® 
üžë
!éÔ Äë
útÌë
Þºßë
ú<çë
ƒ»Üóë
°ºü“ì
#àì»ì
úüÃì
5¹• üýì
òØ ¢í
úüªí
.+ let entry = match map.entry("poneyland") {ÁüÝí
Àðüî
)& e.replace_entry_with(|k, v| {Áü¯î
,) assert_eq!(k, &"poneyland");Áüàî
" assert_eq!(v, 42);Á܇ï
 Some(v + 1)Át§ï
 })ÁLºï
¤ÈüÈï
%–ñ4òï
ÆÛýï
úŒ…ð
Ó× ü›ð
Àðü¿ð
.ãÛ üòð
%φ Lϖ
¤Èüªñ
%–ñ,Ôñ
¾¿Þñ
úüæñ
%œÑ ò
úü˜ò
.í·üËò
B? Entry::Occupied(e) => e.replace_entry_with(|_k, _v| None),Áü’ó
%–ñ4¼ó
ÆÛÇó
úŒÏó
Ó× ìåó
“îü‡ô
.ãÛ Lºô
¤ÈüÈô
'Øî,ôô
¾¿þô
úü†õ
,ÿÞ <·õ
ƒ»”ûõ
„â
‡¥ ƒá
      °¥ Žö
Œ"‡¥  ŒíàÛáÔËö
Œ‡¥ ±¿˜"Ëá LÜö

Ÿ øíàÛá¤çí凥 $‘ö
± —ö
{}t‹ø
Ÿ ç¡¡ €¢¡ ž¢¡ ¡ Ÿ ¡ íàÛá¤çí凥 ³ª
‡¥ ˆ÷
üÈü
;ø£ œ¤ §¥ ¤¦ § £ ¤ ¦ § ¥ Äó Ñü
Õó Ôü
ÃÆ ×ü
ø¤ Úü
Š¥ LÝü
ýâ
¨ © ª « Íü
@BDFHJLN¼‰€ üŠý
IF Gets a reference to the key that would be used when inserting a valueÁôØý
 through the `VacantEntry`.Áûý
útƒþ
Þº–þ
ú<žþ
ƒ»ܪþ
°ºÊþ
úüÒþ
5¹• üŒÿ
;å<Ìÿ
ƒ»  ýâ
íࢠ ”€ ¢
¨ øíàÛá¤çíå$•€ Ôðƒ ôÀ€  Take ownership of the key.Á〠útë€ Þºþ€ ú<† ƒ»ü’ .ùã
Å úüÍ 5¹• ‡‚ úü "Ãÿü¶‚ 'Øîüâ‚ B? Entry::Vacant(v) => assert_eq!(v.into_key(), "poneyland"),Á,©ƒ ¾¿<³ƒ ƒ»D÷ƒ ýâ
íࢠ¢
© øíàÛá¤çíå$€„ üŸˆ ]ü©„ ;ð¬
üé„ *¶­
˜… út … Þº³… ú<»… ƒ»ÜÇ… °ºüç… #àì úü—† 5¹• ц úüÙ† 63 if let Entry::Vacant(o) = map.entry("poneyland") {Á¬”‡  o.insert(37);Á,®‡ ¾¿ü¸‡ %" assert_eq!(map["poneyland"], 37);Á<⇠ƒ»4¦ˆ ýâ
Ûᄼ
¢ ¢ þž
$߈ ´™ \ðˆ 
ª øíàÛá¤çíå$­ˆ »,³ˆ ü¦‹ ~d´‹ ýâ
Ûá„â
¢ ¢ þž
$‡Œ ´™ \˜Œ 
« øíàÛá¤çíå$Á‹ »,Ç‹ üæŽ Nø­ ™:® œ¯ ¢° §± ¤² ³ ® ³ ¯ ­ ± ² ° æ™ óŽ ø™ öŽ Šš œš ®š Àš —›´ µ ¸ º » ½ ëŽ ïŽ Y[]_acegiküÄ’ ü» A> Sets the value of the entry, and returns an OccupiedEntryRef.Á út‰ Þºœ ú ƒ»ܰ °ºÐ úüØ 74 let mut map: HashMap<String, u32> = HashMap::new();Áü”‘ 74 let entry = map.entry_ref("horseyland").insert(37);ÁБ úüØ‘ *' assert_eq!(entry.key(), "horseyland");Á<‡’ ƒ»4Ë’ —›ÂíÃî¬ ¬ še¶í$¢“ é¶í ™:¼í\©“ ÅeÈí\Á“ 
´ ø™:¶í¼íÂíÈíÎí$Ò’ »,Ø’ ü”š pü¸• R÷À ü 2¨° Æ– útΖ Þºá– ú<é– ƒ»Üõ– °º•— úü 7ðÏÙ— ú´á— ÞÒüü— ,) map.entry_ref("poneyland").or_insert(3);Áü­˜ $ØÃ Ö˜ úœÞ˜ ÍÓüö˜ 30 *map.entry_ref("poneyland").or_insert(10) *= 2;Áü®™ $ðÄ <×™ ƒ»L›š —›Âí øÂí¬ ¬ ÷Ò$Ùš ˆÓ\àš ¤Ó\øš 
µ ø™:¶í¼íÂíÈíÎí$¥š ><«š ü±¡ ü®œ ]ÜÆ ü >ÐÕÓ ú Þºî ú ƒ»Ü‚ž °º¢ž úüªž 7ðÏæž ú´îž ÞÒü‰Ÿ 41 map.entry_ref("poneyland").or_insert_with(|| 3);ÁüŸ $ØÃ ëŸ úœóŸ ÍÓü‹  ;8 *map.entry_ref("poneyland").or_insert_with(|| 10) *= 2;ÁüË  $ðÄ <ô  ƒ»t¸¡ —›ïÖ¬ · · ¬ ÍìîÚ Ç¡ –"îÚlÊ¡ îÚ˜"Âí Ö¡ ÷Ò$¢ ˆÓ\”¢ ¤Ó\¬¢ 
ø™:¶í¼íÂíÈíÎíîÚ$Ù¡ ><ß¡ üÿ© üä£ _¡ÚüȤ _‹Ûü¬¥ 74 function an access to the borrower form of the key.Áè¥ útð¥ Þºƒ¦ ú<‹¦ ƒ»Ü—¦ °º·¦ úü¿¦ 96 let mut map: HashMap<String, usize> = HashMap::new();Áý¦ ú´…§ ÞÒü § MJ map.entry_ref("poneyland").or_insert_with_key(|key| key.chars().count());Áüò§ $‰à›¨ úœ£¨ ÍÓü»¨ XU *map.entry_ref("poneyland").or_insert_with_key(|key| key.chars().count() * 10) *= 2;Áü˜© %²á<© ƒ»”†ª —›îÚïÖ¬ ¹ ¹ ¬ —Û ™ª Ž–"îÚ Ž¼í|œª ŽîÚµá˜"Âí ªª ÷Ò$᪠–§Lèª ˆÓ\ôª ¤Ó\Œ« 
¸ ø™:¶í¼íÂíÈíÎíîÚ$­ª ><³ª ¥§üƒ± 7ü˜­ ,ÛãÉ­ útÑ­ Þºä­ ú<ì­ ƒ»Üø­ °º˜® úü ® 7ðÏüÜ® ,•Ôœ¯ ÍÓü¥¯ >; assert_eq!(map.entry_ref("poneyland").key(), "poneyland");Á´è¯ ÞÒüƒ° >; assert_eq!(map.entry_ref("horseland").key(), "horseland");Á<ư ƒ»б  —› ¼í¬  ޱ ¬ –§L°± 
º ø™:¶í¼íÂíÈíÎí$± üØ· Müç² DõÌ ü°³ #ÄÍ س útà³ Þºó³ ú<û³ ƒ»܇´ °º§´ úü¯´ 7ðÏë´ úôó´  map.entry_ref("poneyland")Áü–µ #æè´¾µ “éüÙµ %‡Ð ƒ¶ úô‹¶ ¼æü®¶ #æè´Ö¶ “éüñ¶ %œÑ <›· ƒ»Tß· —›îÚ—›¬ ¼ ¼ ¬ —Û ê· –"îÚ Âít–¸ îÚÂé˜"
» ø™:¶í¼íÂíÈíÎíîÚ$í· ± ó· ~ü™Ç eü¡º FÈÓ üìº E™Ô ü¶» !éÔ Ü» útä» Þº÷» ú<ÿ» ƒ»Ü‹¼ °ºü«¼ &# use hashbrown::hash_map::EntryRef;ÁÖ¼ úüÞ¼ 7ðÏš½ úœ¢½ µÖ üº½  .entry_ref("poneyland")ÁüÞ½ 3‰× –¾ úŒž¾ Ó× ü´¾
Û
Ù Û ¶í¼íÂíÈíÎíîÚä½Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙä½îÚ Û¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙìðñ´^òˆøóôÑ^õˆø”e%@NbJ¶í¼íü‘© TøÝ ™:Þ œß ¢à §á ¤â ã à á ß Ý ã â Þ æ™ ž© ø™ ¡© Šš ¬© œš ¯© ®š ²© ÀšLµ© ·œä å æ ç –© š© PRTVXZ\^`bü­ 7üì© IÂüºª ! through the `VacantEntryRef`.Áઠútèª Þºûª ú<ƒ« ƒ»Ü« °º¯« úü·« 7ðÏüó«  let key: &str = "poneyland";Áü˜¬ 63 assert_eq!(map.entry_ref(key).key(), "poneyland");Á<Ó¬ ƒ»—­  ·œ ¼íÜ  ›­ Ü –§L½­ 
ä ø™:¶í¼íÂíÈíÎí$œ­ üÚ± <ôó­ øÄ–® útž® Þº±® ú<¹® ƒ»üÅ® 1Óû® úüƒ¯ 7ðÏü¿¯ Ù¼ä¯ úôì¯  match map.entry_ref(key) {Áü° *çìü¾° PM EntryRef::Vacant(v) => assert_eq!(v.into_key(), "poneyland".to_owned()),Á,“± ¾¿<± ƒ»Dá± ·œ¶íÜ Ü ˆÓ\в 
å ø™:¶í¼íÂíÈíÎí$ê± üè¶ küƲ >; Sets the value of the entry with the VacantEntryRef's key,Áü‰³ *¶­
¸³ útÀ³ ÞºÓ³ ú<Û³ ƒ»Üç³ °ºü‡´ &ºê²´ úüº´ 7ðÏüö´ Ù¼›µ úü£µ 52 if let EntryRef::Vacant(o) = map.entry_ref(key) {Á¬Ýµ ÒÉ,÷µ ¾¿ü %€Ê<«¶ ƒ»4ï¶ ·œÂíïÖÜ Ü ÷Ò$¨· ˆÓ\¯· ¤Ó\Ç· 
æ ø™:¶í¼íÂíÈíÎí$ö¶ »,ü¶ üŠº dº ø·œÂíÃîÜ Ü ÷Ò$êº ˆÓ\ñº ¤Ó\‰» 
ç ø™:¶í¼íÂíÈíÎí$šº », º üç½ œé §ê ¤ë ì é ê ì ë 
ßç ì½ ðç ï½ è ò½ ’è õ½ Ó…²¾ ä…$·¾ îî\ľ ª—
<Ò¾ »—
<â¾ £èLì¾ ¬ßí ÅLí egikmoqsü®¿ =L±¿ ¥¬ßè ¥î î è Íì¡Ê »¿ ÇL¡Êܾ¿ ¡ÊÈLèùlË¿ 
í äßêßðßöß¡Êù$Û¿ LNDžÁ í ç¡ï €¢ï ž¢ï ï í ï äßêßðßöß¡ÊØ×
 ¬ßüð uüèÁ RO Inserts all new key-values from the iterator and replaces values with existingÁü»Â 41 keys with new values returned from the iterator.Áœñ §ò ¤ó ô ô ò ó ñ ßç õ ðç øÂ è û ’è þ Ó…µÃ ä…$ºÃ îî\Çà £èLÛà ¬ßõ ÒLõ SUWY[]_aüÚÎ =üìà SP Inserts all new key-values from the iterator to existing `HashMap<K, V, S, A>`.ÁüÄÄ QN Replace values with existing keys with new values returned from the iterator.ÁšÅ út¢Å ÞºµÅ ú<½Å ƒ»üÉÅ %" use hashbrown::hash_map::HashMap;ÁóÅ úüûÅ !榼¡Æ  map.insert(1, 100);Á½Æ úüÅÆ 1. let some_iter = [(1, 1), (2, 2)].into_iter();ÁÔûÆ  map.extend(some_iter);ÁüšÇ TQ // Replace values with existing keys with new values returned from the iterator.ÁüóÇ 96 // So that the map.get(&1) doesn't return Some(&100).Áü±È &# assert_eq!(map.get(&1), Some(&1));ÁÜÈ úüäÈ 0- let some_vec: Vec<_> = vec![(3, 3), (4, 4)];ÁÌ™É  map.extend(some_vec);Á·É úü¿É $! let some_arr = [(5, 5), (6, 6)];ÁÌèÉ  map.extend(some_arr);Áü†Ê  let old_map_len = map.len();Á«Ê úü³Ê /, // You can also extend from another HashMapÁüçÊ %" let mut new_map = HashMap::new();ÁÄ‘Ë  new_map.extend(map);Áü®Ë +( assert_eq!(new_map.len(), old_map_len);ÁÞË úüæË 85 let mut vec: Vec<_> = new_map.into_iter().collect();Áü£Ì H¿Ä
üðÌ @«¿ÄµÍ úªüÒÍ FC assert_eq!(vec, [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]);Á<Î ƒ»4ÝÎ ˜ ˜¬ß¡Êð ¥ö ö  „Ï ð ÊÊ äÎ ÜÊÜçÎ íÊlôÎ 
õ äßêßðßöß¡Ê$‰Ï ù$Ï AClÓ õ ç¡÷ €¢÷ ž¢÷ ÷ õ ÷ äßêßðßöߡʚ̦ÌüïÙ üçØ RÀËüºÙ 4Ìøù œú §û ¤ü ý ý ù û ü ú 
Äó øÙ Õó ûÙ ÃÆ þÙ ø¤ Ú íž
ÀÚ þž
$ÅÚ Š íà$ÌÚ Š Ûá$ÙÚ ´™ \æÚ Š¥ LúÚ Ðòþ ÒLþ ôÙ |~ˆŠü±ç Eü‹Û S³ÎüãÛ Q‘Ïü¹Ü 63 The keys and values must implement [`Copy`] trait.ÁôÜ úüüÜ C@ [`Copy`]: https://doc.rust-lang.org/core/marker/trait.Copy.htmlÁÄÝ útÌÝ ÞºßÝ ú<çÝ ƒ»üóÝ %£ÐÞ úü¥Þ !榼ËÞ îÐçÞ úüïÞ  let arr = [(1, 1), (2, 2)];Áü“ß 41 let some_iter = arr.iter().map(|(k, v)| (k, v));ÁÔÌß ØÑüëß TýÑüÄà 9ÜÒü‚á & Ó­á úüµá 0ÞÓüêá 52 map.extend(some_vec.iter().map(|(k, v)| (k, v)));Á¤â úü¬â $ÉÔüÕâ 52 map.extend(some_arr.iter().map(|(k, v)| (k, v)));Áã úü—ã /ÓÕüËã %ÖÌõã  new_map.extend(&map);Áì“ä  assert_eq!(new_map, map);Áµä úü½ä 8¢×üúä H¿Ä
üÇå @«¿ÄŒæ úªü©æ F‘Ø<ôæ ƒ»4´ç  Ðò¥ø ¥ÿ ÿ  ãç ø ÍìÙå »ç ÇLÙåü¾ç #ÙåÈL‹ú¬Ëç 
þ øíàÛá¤çíåÙå$èç ù$îç []„¢è þ ç¡ €¢ ž¢  þ  íàÛá¤çíåÙåÁ³úü„ì üüê RÀËüÏë 4Ìø œƒ § ¤     ƒ 
Äó ì Õó ì ÃÆ “ì ø¤ –ì íž
Ñì þž
$Öì µÝ$Ýì ÆÝ$êì ´™ \÷ì Š¥ L‹í Ðò ÒL ‰ì lnprtvxzüÍ÷ Aüœí S³Îüôí Q‘ÏüÊî 6âÝ…ï úüï C°ÞÕï útÝï Þºðï ú<øï ƒ»ü„ð %£Ð®ð úü¶ð !榼Üð îÐøð úü€ñ úßü¤ñ  let some_iter = arr.iter();ÁÔÈñ ØÑüçñ TýÑüÀò 9ÜÒüþò & Ó©ó úü±ó 0ÞÓÔæó  map.extend(&some_vec);Á…ô úüô $ÉÔÔ¶ô  map.extend(&some_arr);ÁÕô úüÝô 41 let mut vec: Vec<_> = map.into_iter().collect();Áü–õ H¿Ä
üãõ @«¿Ĩö úªüÅö F‘Ø<÷ ƒ»4Ð÷ š šÐòÙå ¥ˆ ˆ  û÷  †æ ×÷ ˜æüÚ÷ ÙåÈL­úŒç÷ 
øíàÛá¤çíåÙå$€ø ù$†ø SU|ºø  ç¡ €¢ ž¢    íàÛá¤çíåÙå ³ú³ú´¢û Œ¥û ø
Š ü¿û H<Âû ø®4ÕϹ$º ¬äÓ®4ÕϹ$º îw¬äÓîwŒ Œ
îwÁ Ðû $Êû üžü H<¡ü ø®4ÕϹ$ººò¬äÓ®4ÕϹ$ºó¬äÓîwŽ Ž
îwÁ ¯ü $©ü üýü OD€ý ø ÎβBÒãøÓÚøܦ‹n=ð~“ ºòÎβBÒãøÓÚøܦ‹n=ð~“ óîw  ‰ý 
îwÁ “ý $ý üãý ODæý ø ÎβBÒãøÓÚøܦ‹n=ð~“ ºòÎβBÒãøÓÚøܦ‹n=ð~“ óîw  ïý 
îwÁ ùý $óý üÉþ slÌþ øéé± íãøÕ’-Ãè!áºò²Øéé± íãøÕ’-Ãè!áó²Øîw   ¼é àþ ÎéLãþ 
îw²ØÁ ÷þ $Úþ -/üÓÿ slÖÿ øéé± íãøÕ’-Ãè!áºò²Øéé± íãøÕ’-Ãè!áó²Øîw š š  ¼é êÿ ÎéLíÿ 
˜ îw²ØÁ
$äÿ -/üÝ€
ODà€
øœ ³³¾H·ãø0‘ÍÔáô/œ ºò³³¾H·ãø0‘ÍÔáô/œ óîw  é€

îwÁ ó€
$í€
üÃ
O
øŸ ³³¾H·ãø0‘ÍÔáô/Ÿ ºò³³¾H·ãø0‘ÍÔáô/Ÿ óîw    Ï

ž îwÁ Ù

ü©‚
UT¬‚
ø¢ ÀÀ¤IÄãøýŒ´Õ~3ÌË¢ ºòÀÀ¤IÄãøýŒ´Õ~3ÌË¢ óîw£ £ ·‚

¡ îwÁ Á‚
$»‚
ü•ƒ
UT˜ƒ
ø¥ ÀÀ¤IÄãøýŒ´Õ~3ÌË¥ ºòÀÀ¤IÄãøýŒ´Õ~3ÌË¥ óîw¦ ¦ £ƒ

¤ îwÁ ­ƒ
$§ƒ
ü
q,„„
øÍÍŒJÒãøÎþç>øiÉ’ºòºòäÓÍÍŒJÒãøÎþç>øiÉ’îwóóäÓîw¨ ¨
§ îw¯ ™„
$Š„
° µ ManuallyDropÁd<
ÃÛ© « r,T
é!© ­ DerefMutÁD[
ö!© ® µ j
© ¯ $+
Œ7
[ü+&
MO57%'Üs
T~
¥± ² ² ± Û 
ÜÎ Œ
“"‚û ÅÖ
‚û·‡˜"ÄúMTRa@Êê³ ´ È iknp

© ° ° ‚û

© ° ° ÅÖü×W

ÅÖ‚ûÄú¥ ·  · Û ä
ÜÎ ç
œ“"‚û œÅÖ
œ‚ûɉ˜"
µ ÅÖ‚û»
€{4ô
gilnüÕ7
¥¹ º ¹ º ‚û ÅÖ˜"
ÜÎ Ý
“"‚ûèŠ!Û Ú
Äú»  
79ü¡#

ÄúÅÖ¸ ¸
» ÅÖ‚û£
üõA
¥½ ¾ ¾ ½ ž‚û žÅÖ˜"
ÜÎ ý
ž“"‚ûÑŒ!Û ú
Äú¿ À ê!ë!À FH

¼ ¼ ÅÖ¬à

Ÿ ŸÄú ŸÅÖ¼  é
¼
À ÅÖ‚û
ü•D
¥Â à  à  ‚û  ÅÖ˜"
ÜÎ 
 “"‚ûþŽ!Û š
ÄúÄ ÷!Ä ?Aüî!

¡ ¡Äú ¡ÅÖÁ  û
Á
Ä ÅÖ‚û$€
ü³ @
¥Æ Ç Æ Ç ¢‚û ¢ÅÖ˜"
ÜÎ »
¢“"‚û‹‘!Û ¸
ÄúÈ "È ?A”ˆ
$
£ £ÄúÅ 
Å
È ÅÖ‚û$•
<„ˆä ý
Š˜Ÿ¥îþ¬µD(É Ê öåT>òÉ Ì ¼´|JÄÉ Í ToOwnedÁ<o²É Î × `É Ï \\˜ÅeÉ Ñ ŽšeÉ Ò Ž eÉ Ò ChainÁ,½ð¬É Ô ¦†òPÉ Õ BitAndÁ4äöøÉ × BitOrÁ,ì–úÉ Ø BitXorÁ4ó¶ûÉ Ù SubÁûïÉ Ú Ø$“øÉ Ü ì”™É Ý É Þ ¾H$¶³É ß ø LÎ#É á ö/š²ŸÉ â ö0š²  É â ö0…2dáëÉ ã ö¤,6õø´`ãL|ÕT‹È˹¼˜sv^aHK58T†) ýÿTÁðòÕךœüùDüÜB? A hash set implemented as a `HashMap` where the value is `()`.ÁŸúü£HE As with the [`HashMap`] type, a `HashSet` requires that the elementsÁüìPM implement the [`Eq`] and [`Hash`] traits. This can frequently be achieved byÁü½LI using `#[derive(PartialEq, Eq, Hash)]`. If you implement these yourself,ÁüŠ63 it is important that the following property holds:ÁÁú›³üÑ$°³ƒ»þúü‚F÷³ÉúÍúüÑIF It is a logic error for an item to be modified in such a way that theÁü› IF item's hash, as determined by the [`Hash`] trait, or its equality, asÁüå KH determined by the [`Eq`] trait, changes while it is in the set. This isÁü±
OL normally only possible through [`Cell`], [`RefCell`], global state, I/O, orÁ 
unsafe code.Á úü– O½·üæ N–¸üµ PM panic does occur then the contents of the `HashSet` may become corrupted andÁü†
-ȹ´
út¸
ÞºÇ
ú
ƒ»ÜÓ
 use hashbrown::HashSet;Áüï
Dáºü´30 // would be `HashSet<String>` in this example).Áüè# let mut books = HashSet::new();ÁŒú´ // Add some books.Áü§52 books.insert("A Dance With Dragons".to_string());ÁüÝ63 books.insert("To Kill a Mockingbird".to_string());Áü”,) books.insert("The Odyssey".to_string());ÁüÁ1. books.insert("The Great Gatsby".to_string());Áóúü÷ ‰Áü˜/, if !books.contains("The Winds of Winter") {ÁüÈHE println!("We have {} books, but The Winds of Winter ain't one.",Áô‘ books.len());Á¾¿ú¬º // Remove a book.ÁüÐ  books.remove("The Odyssey");ÁñúüõÊÄ• for book in &books {Áì® println!("{}", book);Á¾¿ƒ»ÚúüÞDA The easiest way to use `HashSet` with a custom type is to deriveÁü£LI [`Eq`] and [`Hash`]. We must also derive [`PartialEq`]. This will in theÁüð  future be implied by [`Eq`].Áú<•ƒ»ÜÓŸü¹)ëÛœãܬ÷¹Ü¬ power: usize,Á¾¿©úü­%" let mut vikings = HashSet::new();ÁÓúü×C@ vikings.insert(Viking { name: "Einar".to_string(), power: 9 });Áü›CÍ©üßB? vikings.insert(Viking { name: "Olaf".to_string(), power: 4 });Áü¢DA vikings.insert(Viking { name: "Harald".to_string(), power: 8 });Áçúüë74 // Use derived implementation to print the vikings.Á¼£ for x in &vikings {Áä» println!("{:?}", x);Á¾¿ƒ»æúüêMJ A `HashSet` with fixed list of elements can be initialized from an array:Á¸úƒ»ÜÄÓŸàúüä-* let viking_names: HashSet<&'static str> =Áü’<9 [ "Einar", "Olaf", "Harald" ].into_iter().collect();ÁüÏ'$ // use the values stored in the setÁƒ»ÿúüƒAÜØüÅ;©Öü@îÖüÂ$¶þ üçI¸×ü±G‹Ø<„¥å ¤æ ç å æ ç Û ŒÀü´ƒ‚¬§•‚¥û n‡@Ö‹5Ïè 68; ¬E §äÓüÄ$Ïä ä ‘üüíI¥ê ¤ë ì ê ì ë Û òÀü üƒ‚ ¸ØÖû,ÿ•‚L‰ غÝ,• ¥ûí î ÙÚî í ^`cehj¼½ ¤ ¤¥û¥ûé  Æ é
í ÅÖÖûºÝü¡!'T¤!¥¦ ¥¥û ¦¥ûé  ¯!é
î ÅÖÖûºÝ$´!·¹4º!üÞI)¥ð ¤ñ ò ñ ð ò Û ãIÀü æIƒ‚ éI•‚LìI¥ûó ô õ ö ÷ ø û ý 8:=?BDüÍLüŽJIF Returns the number of elements the set can hold without reallocating.ÁÜJútäJÞº÷Jú<ÿJƒ»Ü‹KÓŸü«K85 let set: HashSet<i32> = HashSet::with_capacity(100);ÁüèK# assert!(set.capacity() >= 100);Á<Lƒ»DÔL§ §¥ûï  ÝLï
ó ÅÖÖûºÝ$ÞLüâP!ü–M96 An iterator visiting all elements in arbitrary order.ÁüÔM)& The iterator element type is `&'a T`.ÁNútŠNÞºNú<¥Nƒ»ܱNÓŸüÑN! let mut set = HashSet::new();Á¤÷N set.insert("a");Á¤O set.insert("b");Á©Oúü±O(% // Will print in an arbitrary order.ÁÌÞO for x in set.iter() {ÁÔüO println!("{}", x);Á,P¾¿<¥Pƒ»$éP¨ ¨¥ûý
ý
²BùÉ 
Â÷¯ÅÖçåºÝï ü ü  Òiï Á¤ Ïi®“"çå ®ÅÖŒ’j®çåµÖ˜"$Ÿj
û ÅÖÖûºÝçå$×i± Ýigi¼¤nüøk(% Clears the set, removing all values.Á¥lút­lÞºÀlú<Èlƒ»ÜÔlÓŸôlúüül÷¾„ mÿtµm v.clear();ÁÔÈm‡Â<çmƒ»,«n° °¥ûï  ±nï
ý ÅÖÖûºÝ$¶nüán ¥ÿ ¤

ÿ Û ænÀü én’Æ
üúy+üˆoHE Creates a new empty hash set which will use the given hasher to hashÁLÕo‘þãoúüëoJG The hash set is initially created with a capacity of 0, so it will notÁüºp-„ÿìpúÄôpÆÿ‘qúü™qHôÿüæqPM not allow the `HashSet` to be protected against attacks such as [`HashDoS`].Áü»r> üþrIèüÌs.+ as the hasher when creating a [`HashSet`].Áÿsúü‡tLÿ‚üØt@= the HashSet to be useful, see its documentation for details.Áuúü¥u?­„üéu{÷„üévNý…¼wútÄwÞº×wú<ßwƒ»ÜëwÓŸü‹x0š‡ÀxúüÈx*â‡ü÷x*' let mut set = HashSet::with_hasher(s);Á”¦y set.insert(2);Á<½yƒ»\‡zÖû’Æþ þ
ÅÖÖûá7Õ¢ü¤†CüûzA> Creates an empty `HashSet` with the specified capacity, usingÁôÁ{ `hasher` to hash the keys.Áä{úüì{JG The hash set will be able to hold at least `capacity` elements withoutÁü»|EB reallocating. If `capacity` is 0, the hash set will not allocate.Á…}úÄ}Æÿª}úü²}Hôÿüÿ}P²ÛüÔ~> ü—Ièüå.¨Ü˜€úü €Lÿ‚üñ€@úÜúü¾?­„ü‚‚{÷„ü‚ƒNý…Õƒút݃Þºðƒú<øƒƒ»Ü„„ÓŸü¤„0š‡Ù„úüá„*â‡ü;8 let mut set = HashSet::with_capacity_and_hasher(10, s);Á”Ð… set.insert(1);Á<ç…ƒ»Ä«†Öû’Æþ þ
ÅÖÖûˆDĆá74Õ†üÒ‡6¥
¤




Û ׇÀü Ú‡ƒ‚ ݇•‚Lþ‡¥û
ˆ
Š
02468:ìÖˆüˆ4´ýL݈± ±¥û ±ºÝƒ
 爃
ÅÖÖûºÝ$èˆü8üž‰H²ÙL뉑þù‰úüŠJÚüЊ-„ÿ‚‹úÄŠ‹Æÿ§‹úü¯‹Hôÿüü‹P²ÛüÑŒ> ü”Ièüâ.¨Ü•ŽúüŽLÿ‚üîŽ@úܳúü»?­„üÿ{÷„üÿNý…Ò‘útÚ‘Þºí‘ú<õ‘ƒ»ÜÓŸü¡’0š‡Ö’úüÞ’*â‡ü*áÞ”¼“”ß<Ó“ƒ»tÖûºÝ¥ûƒ
ƒ
ˆ
ÅÖÖûºÝá7¤=¤üÑ Pü¨•AŽàôî•Øà‘–úü™–JŒáüè–Eàá²—úĺ—Æÿ×—úüß—Hôÿü¬˜P²Ûü> üÄ™Ièü’š.¨ÜÅšúüÍšLÿ‚üž›@úÜã›úüë›?­„ü¯œ{÷„ü¯Ný…‚žútŠžÞºžú<¥žƒ»ܱžÓŸüÑž0š‡†ŸúüŽŸ*â‡ü½Ÿ;ïä”ýŸ´å<” ƒ»ÜØ ÖûºÝ¥ûƒ
ƒ
ÅÖÖûºÝˆDô á74…¡¤,¡Ô ¦ü˜¢52 Returns a reference to the set's [`BuildHasher`].ÁÒ¢úüÚ¢Ný…­£útµ£ÞºÈ£ú<Уƒ»ÜÜ£ÓŸüü£0š‡±¤úü¹¤/”Ÿüí¤96 let set: HashSet<i32> = HashSet::with_hasher(hasher);Áü«¥30 let hasher: &DefaultHashBuilder = set.hasher();Á<㥃»4§¦² ²¥û ²Öûƒ
 ®¦ƒ
Š
ÅÖÖûºÝ$¯¦üà¦\
É ÷#cK·nÁò
ÅÖÖûºÝ
¾Ç
ÅÖÖûºÝ$ÆÇ¹
,ÌÇ,.üæÎ^üÖÈ<9 Visits the values representing the symmetric difference,Áü—ÉFC i.e., the values that are in `self` or in `other` but not in both.ÁâÉútêÉÞºýÉú<…ʃ»Ü‘ÊÓŸü±Ê8͉üîÊ;Š®Ëúü¶Ë%" // Print 1, 4 in arbitrary order.ÁüàË)& for x in a.symmetric_difference(&b) {ÁÔŽÌš¼,­Ì¾¿·Ìúü¿ÌA> let diff1: HashSet<_> = a.symmetric_difference(&b).collect();Áü…ÍA> let diff2: HashSet<_> = b.symmetric_difference(&a).collect();ÁËÍúìÓÍ assert_eq!(diff1, diff2);ÁüõÍ/, assert_eq!(diff1, [1, 4].iter().collect());Á<©Îƒ»¤íÎ
 
¥ûû–ŸŸï‰¤ùÉ Ê–„sÐ\ó
ÅÖÖûºÝ
‚Ï
ÅÖÖûºÝ$ŠÏ¹
,Ï,.üËÕOüÂÐ41 Visits the values representing the intersection,ÁüûÐ96 i.e., the values that are both in `self` and `other`.Á¹ÑútÁÑÞºÔÑú<Üу»ÜèÑÓŸüˆÒ8͉üÅÒ;Š…ÓúüÓ%" // Print 2, 3 in arbitrary order.Áü·Ó! for x in a.intersection(&b) {ÁÔÝÓš¼,üÓ¾¿†ÔúüŽÔ@= let intersection: HashSet<_> = a.intersection(&b).collect();ÁüÓÔ63 assert_eq!(intersection, [2, 3].iter().collect());Á<ŽÕƒ»dÒÕ˜
 ˜
¥ûÆœéˆùÉ ¹
É ž˜
ÅÖÖûºÝ
ßÕ
ÅÖÖûºÝ$çÕ¹
,íÕ,ÝAü•Ø-* Visits the values representing the union,ÁüÇØB? i.e., all the values in `self` or `other`, without duplicates.ÁŽÙút–ÙÞº©Ùú<±Ùƒ»ܽÙÓŸüÝÙ8͉üšÚ;ŠÚÚúüâÚ+( // Print 1, 2, 3, 4 in arbitrary order.ÁÔ’Û for x in a.union(&b) {ÁÔ±Ûš¼,ÐÛ¾¿ÚÛúüâÛ2/ let union: HashSet<_> = a.union(&b).collect();Áü™Ü52 assert_eq!(union, [1, 2, 3, 4].iter().collect());Á<Ó܃»,—Ýš
 š
¥ûŽ¢¥¥ôªùÉ t
ï/p/'š
ÅÖÖûºÝ
Ý
ÅÖÖûºÝ$¥Ý¹
,«Ý,.ü—æ_üúà/, Returns `true` if the set contains a value.Á®áúü¶áC@ The value may be any borrowed form of the set's value type, butÁüþáCôœÆâ the value type.ÁÞâútæâÞºùâú<・ÜãÓŸ­ãúüµã:7 let set: HashSet<_> = [1, 2, 3].into_iter().collect();Áüôã'$ assert_eq!(set.contains(&1), true);Áü ä(% assert_eq!(set.contains(&4), false);Á<Í䃻Ùäúüáä;©Öü¡å@îÖDžæ·¸ ·¥û ¸¼í
¢œ
œ
 ²æ
ø™ §æše¼í$áæò¼íÅÖlèæ
ÅÖÖûºÝ¼í$³æ»,¹æQSüîì`ü­çZW Returns a reference to the value in the set, if any, that is equal to the given value.ÁŒèúü”èCõ¢üÜèCôœ¤éÑ£¼éútÄéÞº×éú<ß郻ÜëéÓŸ‹êúü“ê:À¤üÒê&# assert_eq!(set.get(&2), Some(&2));Áüýê" assert_eq!(set.get(&4), None);Á<¤ëƒ»°ëúü¸ë;©Öüøë@îÖõ칺 ¹¥û º¼íÛ¼ݼÞ¼©ß¼à¼ÛἈcSñŸ«‡zÙ ¹ÅÖ
¢ž
ž
 „í
ø™ ù쌨$¹í¨lÀí
ÅÖÖûºÝ¼í$…í»,‹í=?üŸó/ü‘ïEB Inserts the given `value` into the set if it is not present, thenÁüÛï0- returns a reference to the value in the set.Áðút˜ðÞº«ðú<³ðƒ»Ü¿ðÓŸßðúüçð>ÜÄìªñ¾ËüÌñ)& assert_eq!(set.get_or_insert(2), &2);Áüúñ-* assert_eq!(set.get_or_insert(100), &100);Áü¬ò1. assert_eq!(set.len(), 4); // 100 was insertedÁ<âòƒ»l¦ó» »¥ûÅÖ »ÅÖ
 ´ó
Ÿ
ÅÖÖûºÝ$¹ó»,¿óü‹ûü–öHE Inserts an owned copy of the given `value` into the set if it is notÁüãö>; present, then returns a reference to the value in the set.Á¦÷út®÷ÞºÁ÷ú<É÷ƒ»ÜÕ÷ÓŸõ÷úüý÷:7 let mut set: HashSet<String> = ["cat", "dog", "horse"]Áü¼ø52 .iter().map(|&pet| pet.to_owned()).collect();Áöøúìþø¾Ëü ù)& for &pet in &["cat", "dog", "fish"] {ÁüÎù1. let value = set.get_or_insert_owned(pet);Áü„ú assert_eq!(value, pet);Á,¨ú¾¿ü²ú:7 assert_eq!(set.len(), 4); // a new "fish" was insertedÁ<ñúƒ»œ’û¼½ ¼¥û ½¼í ¼ÅÖ
¢¡
¡
 ±û
ø™ ¦ûŒ¨$âû¨léû²¼í”ùû¼í³ÅÖLü
 
ÅÖÖûºÝ¼í$¶û»,¼ûbd·þ 
ç¡¢
€¢¢
ž¢¢
¢
 
¢
ÅÖÖûºÝ¼íÅÖ ¼íü˜„üìþJG Inserts a value computed from `f` into the set if the given `value` isÁü»ÿB? not present, then returns a reference to the value in the set.Á‚€útŠ€Þºú<¥€ƒ»ܱ€ÓŸÑ€úüÙ€:¸³ü˜5ý³ÒúìÚ¾Ëüü)Ø´üª‚?< let value = set.get_or_insert_with(pet, str::to_owned);Áüî‚ȵ,’ƒ¾¿üœƒ:€¶<Ûƒƒ»”Ÿ„¿À ¿¥û À¼í²ã ¿ÅÖ
¢¤
¥
¤
¥
 À„
ø™ ²„ßã ½„Œ¨$÷„¨lþ„¾–"²ã ¾¼í|˜…¾²ã³¿˜"ÅÖ ¦…
£
ÅÖÖûºÝ¼í²ã$Å„»,Ë„± Ö„˜šœÓ‡£
硦
€¢¦
ž¢¦
¦
£
¦
ÅÖÖûºÝ¼í²ã–º²ã¨ºü¤’7ü€ˆTQ Gets the given value's corresponding entry in the set for in-place manipulation.ÁÙˆútáˆÞºôˆú<üˆƒ»܈‰ÓŸü¨‰&# use hashbrown::hash_set::Entry::*;ÁÓ‰ú
,™¨
ç¡©
€¢©
ž¢©
©
¨
©
ÅÖÖûºÝ ÅÖ ¥ûüÉ-üÁ™52 Returns `true` if the set is a subset of another,Áüû™=: i.e., `other` contains at least all the values in `self`.Á½šútŚ޺ؚú<àšƒ»ÜìšÓŸŒ›úü”›:7 let sup: HashSet<_> = [1, 2, 3].into_iter().collect();ÁüÓ›!Öºù›úüœ*' assert_eq!(set.is_subset(&sup), true);Á”°œ”ßüÇœ*ßÔ”öœ set.insert(4);Áü+( assert_eq!(set.is_subset(&sup), false);Áƒ»ÄŠĥû Å¥û
 Ú
ª
ÅÖÖûºÝ¹
®žª
ç¡«
€¢«
ž¢«
«
ª
«
ÅÖÖûºÝûÒ‹Óü¶£/üО74 Returns `true` if the set is a superset of another,ÁüŒŸ=: i.e., `self` contains at least all the values in `other`.ÁΟútÖŸÞºéŸú<ñŸƒ»ÜýŸÓŸ úü¥ 74 let sub: HashSet<_> = [1, 2].into_iter().collect();Áüá !Öº‡¡úü¡-* assert_eq!(set.is_superset(&sub), false);ÁÁ¡ú”É¡ set.insert(0);Á”à¡´åü÷¡-µÚ©¢ú”±¢”ßüÈ¢,) assert_eq!(set.is_superset(&sub), true);Á<ù¢ƒ»\½£ÆÇ Æ¥û Ç¥û
 ɣ
¬
ÅÖÖûºÝ$Ê£¹
,Уü†¨*䑤 Adds a value to the set.Á²¤úüº¤C@ If the set did not have this value present, `true` is returned.Á‚¥úüŠ¥@= If the set did have this value present, `false` is returned.ÁÏ¥út×¥Þºê¥ú<ò¥ƒ»Üþ¥ÓŸž¦úü¦¦!Öº̦úüÔ¦$! assert_eq!(set.insert(2), true);Áüý¦%" assert_eq!(set.insert(2), false);Áì§§ assert_eq!(set.len(), 1);Á<ɧƒ»4¨È È¥ûÅÖ
 Ӭ
­
ÅÖÖûºÝ$™¨»,Ÿ¨üœ°9üë¨SP Insert a value the set without checking if the value already exists in the set.ÁéúüË©30 Returns a reference to the value just inserted.Áƒªúü‹ª@= This operation is safe if a value does not exist in the set.ÁЪúüتOL However, if a value exists in the set already, the behavior is unspecified:Áü¬«SP this operation may panic, loop forever, or any following operation with the setÁü„¬7ô¢ À¬úüȬJã ô—­—¤ º­úü­Mͤ ä”®¤¥ µ®úü½®B? This operation is useful during initial population of the set.Áü„¯B? For example, when constructing a set from another set, we knowÁÜ˯ that values are unique.Á¼£°É É¥ûÅÖ ÉÅÖ
 »°
®
ÅÖÖûºÝ$À°»,ưüµµ0ü™±]Z Adds a value to the set, replacing the existing value, if any, that is equal to the givenÁüû±$! one. Returns the replaced value.Á¤²út¬²Þº¿²ú<Dzƒ»ÜÓ²ÓŸó²úüû²!Öºü¡³" set.insert(Vec::<i32>::new());Áȳúüг85 assert_eq!(set.get(&[][..]).unwrap().capacity(), 0);Áü´(% set.replace(Vec::with_capacity(10));Áüº´96 assert_eq!(set.get(&[][..]).unwrap().capacity(), 10);Á<ø´ƒ»<¼µÊ Ê¥ûÅÖì
 ĵ
¯
ÅÖÖûºÝ$ɵ»,ϵü¬½aüá·?< Removes a value from the set. Returns whether the value wasÁ¼¥¸ present in the set.ÁÁ¸úüɸCõ¢ü‘¹CôœÙ¹Ñ£ñ¹útù¹ÞºŒºú<”ºƒ»Ü ºÓŸÀºúüȺ!Öºîºú”öº”ßü»%" assert_eq!(set.remove(&2), true);Áü·»&# assert_eq!(set.remove(&2), false);Á<⻃»î»úüö»;©Öü¶¼@îÖ4³½ËÌ Ë¥û ̼í
¢±
±
 Ž
ø™ º½Œ¨$ø½¨lÿ½
°
ÅÖÖûºÝ¼í$ʽ»,н=?ü‰ÄdüȾUR Removes and returns the value in the set, if any, that is equal to the given one.Á¢¿úüª¿Cõ¢üò¿CôœºÀÑ£ÒÀútÚÀÞºíÀú<õÀƒ»ÜÁÓŸ¡Áúü©Á>ÜÄüìÁ&# assert_eq!(set.take(&2), Some(2));Áü—Â# assert_eq!(set.take(&2), None);Á<¿Âƒ»ËÂúüÓÂ;©Öü“Ã@îÖ$ÄÍΠͥû μíì
¢³
³
  Ä
ø™ •ÄŒ¨$ØÄ¨lßÄ
²