@@ -1662,6 +1662,87 @@ func Benchmark_findIndex16(b *testing.B) {
16621662 }
16631663}
16641664
1665+ func Benchmark_find48 (b * testing.B ) {
1666+ n := & node48 [bool ]{
1667+ header : header [bool ]{},
1668+ children : [48 ]* header [bool ]{},
1669+ leaf : nil ,
1670+ index : [256 ]int8 {},
1671+ }
1672+ keyBytes := [48 ]byte {}
1673+ leaves := [48 ]leaf [bool ]{}
1674+ for i := range n .index {
1675+ n .index [i ] = - 1
1676+ }
1677+ for i := range 48 {
1678+ keyBytes [i ] = byte (i )
1679+ leaves [i ].prefixP = & keyBytes [i ]
1680+ leaves [i ].prefixLen = 1
1681+ leaves [i ].setKind (nodeKindLeaf )
1682+ n .children [i ] = leaves [i ].self ()
1683+ n .index [byte (i )] = int8 (i )
1684+ }
1685+ n .setKind (nodeKind48 )
1686+ n .setSize (48 )
1687+
1688+ for b .Loop () {
1689+ n .find (48 )
1690+ }
1691+ }
1692+
1693+ func Benchmark_findIndex48_hit (b * testing.B ) {
1694+ n := & node48 [bool ]{
1695+ header : header [bool ]{},
1696+ children : [48 ]* header [bool ]{},
1697+ leaf : nil ,
1698+ index : [256 ]int8 {},
1699+ }
1700+ keyBytes := [48 ]byte {}
1701+ leaves := [48 ]leaf [bool ]{}
1702+ for i := range 48 {
1703+ keyBytes [i ] = byte (i )
1704+ leaves [i ].prefixP = & keyBytes [i ]
1705+ leaves [i ].prefixLen = 1
1706+ leaves [i ].setKind (nodeKindLeaf )
1707+ n .children [i ] = leaves [i ].self ()
1708+ n .index [byte (i )] = int8 (i + 1 )
1709+ }
1710+ n .setKind (nodeKind48 )
1711+ n .setSize (48 )
1712+
1713+ for b .Loop () {
1714+ n .findIndex (47 )
1715+ }
1716+ }
1717+
1718+ func Benchmark_findIndex48_miss (b * testing.B ) {
1719+ n := & node48 [bool ]{
1720+ header : header [bool ]{},
1721+ children : [48 ]* header [bool ]{},
1722+ leaf : nil ,
1723+ index : [256 ]int8 {},
1724+ }
1725+ keyBytes := [48 ]byte {}
1726+ leaves := [48 ]leaf [bool ]{}
1727+ for i := range n .index {
1728+ n .index [i ] = - 1
1729+ }
1730+ for i := range 48 {
1731+ keyBytes [i ] = byte (i )
1732+ leaves [i ].prefixP = & keyBytes [i ]
1733+ leaves [i ].prefixLen = 1
1734+ leaves [i ].setKind (nodeKindLeaf )
1735+ n .children [i ] = leaves [i ].self ()
1736+ n .index [byte (i )] = int8 (i )
1737+ }
1738+ n .setKind (nodeKind48 )
1739+ n .setSize (48 )
1740+
1741+ for b .Loop () {
1742+ n .findIndex (48 )
1743+ }
1744+ }
1745+
16651746func Benchmark_find4 (b * testing.B ) {
16661747 n := & node4 [bool ]{
16671748 header : header [bool ]{},
0 commit comments