From 2cd30f2330c513519948a17334234e196e05613c Mon Sep 17 00:00:00 2001 From: nbougalis Date: Wed, 9 Dec 2020 13:55:00 +0000 Subject: [PATCH] deploy: 434e2f4cbf28a66adad49101842aa649e66fccea --- BuildInfo_8cpp_source.html | 2 +- DatabaseShard__test_8cpp_source.html | 2 +- Database_8cpp_source.html | 4 +- Ledger_8cpp_source.html | 2 +- SHAMapDelta_8cpp_source.html | 6 +- SHAMapInnerNode_8cpp_source.html | 715 ++-- SHAMapInnerNode_8h_source.html | 330 +- SHAMapNodeID_8cpp_source.html | 4 +- SHAMapSync_8cpp_source.html | 40 +- SHAMapSync__test_8cpp_source.html | 6 +- SHAMapTreeNode_8cpp_source.html | 4 +- SHAMap_8cpp_source.html | 22 +- SHAMap_8h_source.html | 1056 +++--- SHAMap__test_8cpp_source.html | 6 +- TaggedPointer_8h_source.html | 214 ++ annotated.html | 178 +- classes.html | 972 +++--- classripple_1_1SHAMap.html | 49 +- classripple_1_1SHAMapInnerNode-members.html | 76 +- classripple_1_1SHAMapInnerNode.html | 505 ++- ...ripple_1_1SHAMapInnerNode__coll__graph.map | 23 +- ...ripple_1_1SHAMapInnerNode__coll__graph.md5 | 2 +- ...ripple_1_1SHAMapInnerNode__coll__graph.png | Bin 57122 -> 54253 bytes classripple_1_1SHAMapLeafNode.html | 2 +- classripple_1_1SHAMapTreeNode.html | 2 +- classripple_1_1SHAMap_1_1const__iterator.html | 36 +- classripple_1_1TaggedPointer-members.html | 105 + classripple_1_1TaggedPointer.html | 816 +++++ classripple_1_1TaggedPointer__coll__graph.map | 4 + classripple_1_1TaggedPointer__coll__graph.md5 | 1 + classripple_1_1TaggedPointer__coll__graph.png | Bin 0 -> 4285 bytes dir_105cccbbf432365df53e381b580b4a54.html | 2 + functions_b.html | 7 +- functions_c.html | 27 +- functions_d.html | 12 +- functions_f.html | 13 +- functions_func_c.html | 35 +- functions_func_d.html | 12 +- functions_func_g.html | 17 +- functions_func_i.html | 25 +- functions_func_l.html | 2 +- functions_func_o.html | 78 +- functions_func_r.html | 11 +- functions_func_s.html | 56 +- functions_func_t.html | 41 +- functions_func_w.html | 2 +- functions_func_~.html | 3 + functions_g.html | 19 +- functions_h.html | 5 +- functions_i.html | 30 +- functions_l.html | 2 +- functions_m.html | 24 +- functions_o.html | 66 +- functions_p.html | 21 +- functions_r.html | 9 +- functions_s.html | 82 +- functions_t.html | 37 +- functions_v.html | 8 +- functions_vars_b.html | 1 + functions_vars_f.html | 3 + functions_vars_h.html | 3 + functions_vars_i.html | 3 + functions_vars_m.html | 12 - functions_vars_p.html | 3 + functions_vars_t.html | 6 + functions_w.html | 8 +- functions_~.html | 3 + group__SHAMap.html | 2 +- hierarchy.html | 1496 ++++----- inherit_graph_16.md5 | 2 +- inherit_graph_160.md5 | 2 +- inherit_graph_17.md5 | 2 +- inherit_graph_248.md5 | 2 +- inherit_graph_256.md5 | 2 +- inherit_graph_264.md5 | 2 +- inherit_graph_294.md5 | 2 +- inherit_graph_35.md5 | 2 +- inherit_graph_392.md5 | 2 +- inherit_graph_42.md5 | 2 +- inherit_graph_436.md5 | 2 +- inherit_graph_44.md5 | 2 +- inherit_graph_450.md5 | 2 +- inherit_graph_466.md5 | 2 +- inherit_graph_467.md5 | 2 +- inherit_graph_478.md5 | 2 +- inherit_graph_506.md5 | 2 +- inherit_graph_529.md5 | 2 +- inherit_graph_550.md5 | 2 +- inherit_graph_561.md5 | 2 +- inherit_graph_578.map | 2 +- inherit_graph_578.md5 | 2 +- inherit_graph_578.png | Bin 2495 -> 1648 bytes inherit_graph_579.map | 2 +- inherit_graph_579.md5 | 2 +- inherit_graph_579.png | Bin 2864 -> 2463 bytes inherit_graph_580.map | 2 +- inherit_graph_580.md5 | 2 +- inherit_graph_580.png | Bin 2645 -> 2495 bytes inherit_graph_581.map | 2 +- inherit_graph_581.md5 | 2 +- inherit_graph_581.png | Bin 2607 -> 2864 bytes inherit_graph_582.map | 2 +- inherit_graph_582.md5 | 2 +- inherit_graph_582.png | Bin 2067 -> 2645 bytes inherit_graph_583.map | 5 +- inherit_graph_583.md5 | 2 +- inherit_graph_583.png | Bin 8393 -> 2607 bytes inherit_graph_584.map | 2 +- inherit_graph_584.md5 | 2 +- inherit_graph_584.png | Bin 3160 -> 2067 bytes inherit_graph_585.map | 5 +- inherit_graph_585.md5 | 2 +- inherit_graph_585.png | Bin 2330 -> 8393 bytes inherit_graph_586.map | 2 +- inherit_graph_586.md5 | 2 +- inherit_graph_586.png | Bin 2633 -> 3160 bytes inherit_graph_587.map | 2 +- inherit_graph_587.md5 | 2 +- inherit_graph_587.png | Bin 2964 -> 2330 bytes inherit_graph_588.map | 2 +- inherit_graph_588.md5 | 2 +- inherit_graph_588.png | Bin 2002 -> 2633 bytes inherit_graph_589.map | 2 +- inherit_graph_589.md5 | 2 +- inherit_graph_589.png | Bin 2663 -> 2964 bytes inherit_graph_590.map | 2 +- inherit_graph_590.md5 | 2 +- inherit_graph_590.png | Bin 2075 -> 2002 bytes inherit_graph_591.map | 2 +- inherit_graph_591.md5 | 2 +- inherit_graph_591.png | Bin 2029 -> 2663 bytes inherit_graph_592.map | 2 +- inherit_graph_592.md5 | 2 +- inherit_graph_592.png | Bin 2824 -> 2075 bytes inherit_graph_593.map | 2 +- inherit_graph_593.md5 | 2 +- inherit_graph_593.png | Bin 3599 -> 2029 bytes inherit_graph_594.map | 2 +- inherit_graph_594.md5 | 2 +- inherit_graph_594.png | Bin 3428 -> 2824 bytes inherit_graph_595.map | 2 +- inherit_graph_595.md5 | 2 +- inherit_graph_595.png | Bin 2112 -> 3599 bytes inherit_graph_596.map | 2 +- inherit_graph_596.md5 | 2 +- inherit_graph_596.png | Bin 3235 -> 3428 bytes inherit_graph_597.map | 2 +- inherit_graph_597.md5 | 2 +- inherit_graph_597.png | Bin 1859 -> 2112 bytes inherit_graph_598.map | 3 +- inherit_graph_598.md5 | 2 +- inherit_graph_598.png | Bin 3403 -> 3235 bytes inherit_graph_599.map | 2 +- inherit_graph_599.md5 | 2 +- inherit_graph_599.png | Bin 1872 -> 1859 bytes inherit_graph_6.md5 | 2 +- inherit_graph_600.map | 3 +- inherit_graph_600.md5 | 2 +- inherit_graph_600.png | Bin 2112 -> 3403 bytes inherit_graph_601.map | 2 +- inherit_graph_601.md5 | 2 +- inherit_graph_601.png | Bin 2477 -> 1872 bytes inherit_graph_602.map | 2 +- inherit_graph_602.md5 | 2 +- inherit_graph_602.png | Bin 2521 -> 2112 bytes inherit_graph_603.map | 2 +- inherit_graph_603.md5 | 2 +- inherit_graph_603.png | Bin 2708 -> 2477 bytes inherit_graph_604.map | 2 +- inherit_graph_604.md5 | 2 +- inherit_graph_604.png | Bin 3140 -> 2521 bytes inherit_graph_605.map | 2 +- inherit_graph_605.md5 | 2 +- inherit_graph_605.png | Bin 4051 -> 2708 bytes inherit_graph_606.map | 2 +- inherit_graph_606.md5 | 2 +- inherit_graph_606.png | Bin 4502 -> 3140 bytes inherit_graph_607.map | 2 +- inherit_graph_607.md5 | 2 +- inherit_graph_607.png | Bin 3320 -> 4051 bytes inherit_graph_608.map | 2 +- inherit_graph_608.md5 | 2 +- inherit_graph_608.png | Bin 3681 -> 4502 bytes inherit_graph_609.map | 2 +- inherit_graph_609.md5 | 2 +- inherit_graph_609.png | Bin 2324 -> 3320 bytes inherit_graph_610.map | 2 +- inherit_graph_610.md5 | 2 +- inherit_graph_610.png | Bin 1812 -> 3681 bytes inherit_graph_611.map | 2 +- inherit_graph_611.md5 | 2 +- inherit_graph_611.png | Bin 3378 -> 2324 bytes inherit_graph_612.map | 2 +- inherit_graph_612.md5 | 2 +- inherit_graph_612.png | Bin 2723 -> 1812 bytes inherit_graph_613.map | 2 +- inherit_graph_613.md5 | 2 +- inherit_graph_613.png | Bin 2052 -> 3378 bytes inherit_graph_614.map | 2 +- inherit_graph_614.md5 | 2 +- inherit_graph_614.png | Bin 2110 -> 2723 bytes inherit_graph_615.map | 2 +- inherit_graph_615.md5 | 2 +- inherit_graph_615.png | Bin 1696 -> 2052 bytes inherit_graph_616.map | 2 +- inherit_graph_616.md5 | 2 +- inherit_graph_616.png | Bin 2099 -> 2110 bytes inherit_graph_617.map | 2 +- inherit_graph_617.md5 | 2 +- inherit_graph_617.png | Bin 2424 -> 1696 bytes inherit_graph_618.map | 2 +- inherit_graph_618.md5 | 2 +- inherit_graph_618.png | Bin 2107 -> 2099 bytes inherit_graph_619.map | 2 +- inherit_graph_619.md5 | 2 +- inherit_graph_619.png | Bin 2475 -> 2424 bytes inherit_graph_620.map | 2 +- inherit_graph_620.md5 | 2 +- inherit_graph_620.png | Bin 2454 -> 2107 bytes inherit_graph_621.map | 2 +- inherit_graph_621.md5 | 2 +- inherit_graph_621.png | Bin 2119 -> 2475 bytes inherit_graph_622.map | 2 +- inherit_graph_622.md5 | 2 +- inherit_graph_622.png | Bin 1982 -> 2454 bytes inherit_graph_623.map | 2 +- inherit_graph_623.md5 | 2 +- inherit_graph_623.png | Bin 1488 -> 2119 bytes inherit_graph_624.map | 2 +- inherit_graph_624.md5 | 2 +- inherit_graph_624.png | Bin 2762 -> 1982 bytes inherit_graph_625.map | 2 +- inherit_graph_625.md5 | 2 +- inherit_graph_625.png | Bin 1830 -> 1488 bytes inherit_graph_626.map | 2 +- inherit_graph_626.md5 | 2 +- inherit_graph_626.png | Bin 2519 -> 2762 bytes inherit_graph_627.map | 2 +- inherit_graph_627.md5 | 2 +- inherit_graph_627.png | Bin 1866 -> 1830 bytes inherit_graph_628.map | 2 +- inherit_graph_628.md5 | 2 +- inherit_graph_628.png | Bin 2338 -> 2519 bytes inherit_graph_629.map | 2 +- inherit_graph_629.md5 | 2 +- inherit_graph_629.png | Bin 2705 -> 1866 bytes inherit_graph_630.map | 2 +- inherit_graph_630.md5 | 2 +- inherit_graph_630.png | Bin 1854 -> 2338 bytes inherit_graph_631.map | 2 +- inherit_graph_631.md5 | 2 +- inherit_graph_631.png | Bin 2711 -> 2705 bytes inherit_graph_632.map | 2 +- inherit_graph_632.md5 | 2 +- inherit_graph_632.png | Bin 1449 -> 1854 bytes inherit_graph_633.map | 2 +- inherit_graph_633.md5 | 2 +- inherit_graph_633.png | Bin 2169 -> 2711 bytes inherit_graph_634.map | 2 +- inherit_graph_634.md5 | 2 +- inherit_graph_634.png | Bin 2217 -> 1449 bytes inherit_graph_635.map | 2 +- inherit_graph_635.md5 | 2 +- inherit_graph_635.png | Bin 1904 -> 2169 bytes inherit_graph_636.map | 2 +- inherit_graph_636.md5 | 2 +- inherit_graph_636.png | Bin 2655 -> 2217 bytes inherit_graph_637.map | 4 +- inherit_graph_637.md5 | 2 +- inherit_graph_637.png | Bin 6471 -> 1904 bytes inherit_graph_638.map | 2 +- inherit_graph_638.md5 | 2 +- inherit_graph_638.png | Bin 2353 -> 2655 bytes inherit_graph_639.map | 4 +- inherit_graph_639.md5 | 2 +- inherit_graph_639.png | Bin 2904 -> 6471 bytes inherit_graph_640.map | 2 +- inherit_graph_640.md5 | 2 +- inherit_graph_640.png | Bin 2237 -> 2353 bytes inherit_graph_641.map | 2 +- inherit_graph_641.md5 | 2 +- inherit_graph_641.png | Bin 1649 -> 2904 bytes inherit_graph_642.map | 2 +- inherit_graph_642.md5 | 2 +- inherit_graph_642.png | Bin 2460 -> 2237 bytes inherit_graph_643.map | 2 +- inherit_graph_643.md5 | 2 +- inherit_graph_643.png | Bin 2161 -> 1649 bytes inherit_graph_644.map | 2 +- inherit_graph_644.md5 | 2 +- inherit_graph_644.png | Bin 2175 -> 2460 bytes inherit_graph_645.map | 2 +- inherit_graph_645.md5 | 2 +- inherit_graph_645.png | Bin 3869 -> 2161 bytes inherit_graph_646.map | 2 +- inherit_graph_646.md5 | 2 +- inherit_graph_646.png | Bin 1948 -> 2175 bytes inherit_graph_647.map | 2 +- inherit_graph_647.md5 | 2 +- inherit_graph_647.png | Bin 2462 -> 3869 bytes inherit_graph_648.map | 2 +- inherit_graph_648.md5 | 2 +- inherit_graph_648.png | Bin 3281 -> 1948 bytes inherit_graph_649.map | 2 +- inherit_graph_649.md5 | 2 +- inherit_graph_649.png | Bin 3096 -> 2462 bytes inherit_graph_650.map | 2 +- inherit_graph_650.md5 | 2 +- inherit_graph_650.png | Bin 1362 -> 3281 bytes inherit_graph_651.map | 2 +- inherit_graph_651.md5 | 2 +- inherit_graph_651.png | Bin 1972 -> 3096 bytes inherit_graph_652.map | 2 +- inherit_graph_652.md5 | 2 +- inherit_graph_652.png | Bin 2222 -> 1362 bytes inherit_graph_653.map | 2 +- inherit_graph_653.md5 | 2 +- inherit_graph_653.png | Bin 1765 -> 1972 bytes inherit_graph_654.map | 2 +- inherit_graph_654.md5 | 2 +- inherit_graph_654.png | Bin 2447 -> 2222 bytes inherit_graph_655.map | 2 +- inherit_graph_655.md5 | 2 +- inherit_graph_655.png | Bin 2024 -> 1765 bytes inherit_graph_656.map | 2 +- inherit_graph_656.md5 | 2 +- inherit_graph_656.png | Bin 2390 -> 2447 bytes inherit_graph_657.map | 2 +- inherit_graph_657.md5 | 2 +- inherit_graph_657.png | Bin 3247 -> 2024 bytes inherit_graph_658.map | 2 +- inherit_graph_658.md5 | 2 +- inherit_graph_658.png | Bin 2575 -> 2390 bytes inherit_graph_659.map | 2 +- inherit_graph_659.md5 | 2 +- inherit_graph_659.png | Bin 2399 -> 3247 bytes inherit_graph_660.map | 2 +- inherit_graph_660.md5 | 2 +- inherit_graph_660.png | Bin 2767 -> 2575 bytes inherit_graph_661.map | 2 +- inherit_graph_661.md5 | 2 +- inherit_graph_661.png | Bin 3071 -> 2399 bytes inherit_graph_662.map | 2 +- inherit_graph_662.md5 | 2 +- inherit_graph_662.png | Bin 2633 -> 2767 bytes inherit_graph_663.map | 2 +- inherit_graph_663.md5 | 2 +- inherit_graph_663.png | Bin 1811 -> 3071 bytes inherit_graph_664.map | 5 +- inherit_graph_664.md5 | 2 +- inherit_graph_664.png | Bin 7882 -> 2633 bytes inherit_graph_665.map | 2 +- inherit_graph_665.md5 | 2 +- inherit_graph_665.png | Bin 3002 -> 1811 bytes inherit_graph_666.map | 5 +- inherit_graph_666.md5 | 2 +- inherit_graph_666.png | Bin 2968 -> 7882 bytes inherit_graph_667.map | 1 - inherit_graph_667.md5 | 2 +- inherit_graph_667.png | Bin 4149 -> 3002 bytes inherit_graph_668.map | 2 +- inherit_graph_668.md5 | 2 +- inherit_graph_668.png | Bin 1543 -> 2968 bytes inherit_graph_669.map | 3 +- inherit_graph_669.md5 | 2 +- inherit_graph_669.png | Bin 1656 -> 4149 bytes inherit_graph_67.md5 | 2 +- inherit_graph_670.map | 2 +- inherit_graph_670.md5 | 2 +- inherit_graph_670.png | Bin 1782 -> 1543 bytes inherit_graph_671.map | 2 +- inherit_graph_671.md5 | 2 +- inherit_graph_671.png | Bin 1747 -> 1656 bytes inherit_graph_672.map | 2 +- inherit_graph_672.md5 | 2 +- inherit_graph_672.png | Bin 1741 -> 1782 bytes inherit_graph_673.map | 2 +- inherit_graph_673.md5 | 2 +- inherit_graph_673.png | Bin 2100 -> 1747 bytes inherit_graph_674.map | 2 +- inherit_graph_674.md5 | 2 +- inherit_graph_674.png | Bin 2043 -> 1741 bytes inherit_graph_675.map | 2 +- inherit_graph_675.md5 | 2 +- inherit_graph_675.png | Bin 2166 -> 2100 bytes inherit_graph_676.map | 2 +- inherit_graph_676.md5 | 2 +- inherit_graph_676.png | Bin 2248 -> 2043 bytes inherit_graph_677.map | 2 +- inherit_graph_677.md5 | 2 +- inherit_graph_677.png | Bin 1926 -> 2166 bytes inherit_graph_678.map | 2 +- inherit_graph_678.md5 | 2 +- inherit_graph_678.png | Bin 2808 -> 2248 bytes inherit_graph_679.map | 8 +- inherit_graph_679.md5 | 2 +- inherit_graph_679.png | Bin 30241 -> 1926 bytes inherit_graph_680.map | 2 +- inherit_graph_680.md5 | 2 +- inherit_graph_680.png | Bin 1868 -> 2808 bytes inherit_graph_681.map | 8 +- inherit_graph_681.md5 | 2 +- inherit_graph_681.png | Bin 2679 -> 30241 bytes inherit_graph_682.map | 2 +- inherit_graph_682.md5 | 2 +- inherit_graph_682.png | Bin 2039 -> 1868 bytes inherit_graph_683.map | 2 +- inherit_graph_683.md5 | 2 +- inherit_graph_683.png | Bin 1691 -> 2679 bytes inherit_graph_684.map | 2 +- inherit_graph_684.md5 | 2 +- inherit_graph_684.png | Bin 2018 -> 2039 bytes inherit_graph_685.map | 2 +- inherit_graph_685.md5 | 2 +- inherit_graph_685.png | Bin 1757 -> 1691 bytes inherit_graph_686.map | 2 +- inherit_graph_686.md5 | 2 +- inherit_graph_686.png | Bin 1717 -> 2018 bytes inherit_graph_687.map | 3 +- inherit_graph_687.md5 | 2 +- inherit_graph_687.png | Bin 3124 -> 1757 bytes inherit_graph_688.map | 2 +- inherit_graph_688.md5 | 2 +- inherit_graph_688.png | Bin 2077 -> 1717 bytes inherit_graph_689.map | 3 +- inherit_graph_689.md5 | 2 +- inherit_graph_689.png | Bin 2160 -> 3124 bytes inherit_graph_690.map | 2 +- inherit_graph_690.md5 | 2 +- inherit_graph_690.png | Bin 1820 -> 2077 bytes inherit_graph_691.map | 2 +- inherit_graph_691.md5 | 2 +- inherit_graph_691.png | Bin 1882 -> 2160 bytes inherit_graph_692.map | 2 +- inherit_graph_692.md5 | 2 +- inherit_graph_692.png | Bin 2204 -> 1820 bytes inherit_graph_693.map | 4 +- inherit_graph_693.md5 | 2 +- inherit_graph_693.png | Bin 7061 -> 1882 bytes inherit_graph_694.map | 2 +- inherit_graph_694.md5 | 2 +- inherit_graph_694.png | Bin 1768 -> 2204 bytes inherit_graph_695.map | 4 +- inherit_graph_695.md5 | 2 +- inherit_graph_695.png | Bin 1612 -> 7061 bytes inherit_graph_696.map | 2 +- inherit_graph_696.md5 | 2 +- inherit_graph_696.png | Bin 1452 -> 1768 bytes inherit_graph_697.map | 2 +- inherit_graph_697.md5 | 2 +- inherit_graph_697.png | Bin 2110 -> 1612 bytes inherit_graph_698.map | 2 +- inherit_graph_698.md5 | 2 +- inherit_graph_698.png | Bin 1665 -> 1452 bytes inherit_graph_699.map | 2 +- inherit_graph_699.md5 | 2 +- inherit_graph_699.png | Bin 2586 -> 2110 bytes inherit_graph_700.map | 2 +- inherit_graph_700.md5 | 2 +- inherit_graph_700.png | Bin 1675 -> 1665 bytes inherit_graph_701.map | 2 +- inherit_graph_701.md5 | 2 +- inherit_graph_701.png | Bin 1874 -> 2586 bytes inherit_graph_702.map | 2 +- inherit_graph_702.md5 | 2 +- inherit_graph_702.png | Bin 1307 -> 1675 bytes inherit_graph_703.map | 2 +- inherit_graph_703.md5 | 2 +- inherit_graph_703.png | Bin 1929 -> 1874 bytes inherit_graph_704.map | 2 +- inherit_graph_704.md5 | 2 +- inherit_graph_704.png | Bin 1531 -> 1307 bytes inherit_graph_705.map | 2 +- inherit_graph_705.md5 | 2 +- inherit_graph_705.png | Bin 1577 -> 1929 bytes inherit_graph_706.map | 2 +- inherit_graph_706.md5 | 2 +- inherit_graph_706.png | Bin 1290 -> 1531 bytes inherit_graph_707.map | 2 +- inherit_graph_707.md5 | 2 +- inherit_graph_707.png | Bin 1797 -> 1577 bytes inherit_graph_708.map | 2 +- inherit_graph_708.md5 | 2 +- inherit_graph_708.png | Bin 2038 -> 1290 bytes inherit_graph_709.map | 2 +- inherit_graph_709.md5 | 2 +- inherit_graph_709.png | Bin 1489 -> 1797 bytes inherit_graph_710.map | 2 +- inherit_graph_710.md5 | 2 +- inherit_graph_710.png | Bin 1874 -> 2038 bytes inherit_graph_711.map | 2 +- inherit_graph_711.md5 | 2 +- inherit_graph_711.png | Bin 1805 -> 1489 bytes inherit_graph_712.map | 2 +- inherit_graph_712.md5 | 2 +- inherit_graph_712.png | Bin 1936 -> 1874 bytes inherit_graph_713.map | 2 +- inherit_graph_713.md5 | 2 +- inherit_graph_713.png | Bin 1865 -> 1805 bytes inherit_graph_714.map | 2 +- inherit_graph_714.md5 | 2 +- inherit_graph_714.png | Bin 1934 -> 1936 bytes inherit_graph_715.map | 2 +- inherit_graph_715.md5 | 2 +- inherit_graph_715.png | Bin 1874 -> 1865 bytes inherit_graph_716.map | 2 +- inherit_graph_716.md5 | 2 +- inherit_graph_716.png | Bin 1507 -> 1934 bytes inherit_graph_717.map | 2 +- inherit_graph_717.md5 | 2 +- inherit_graph_717.png | Bin 1815 -> 1874 bytes inherit_graph_718.map | 2 +- inherit_graph_718.md5 | 2 +- inherit_graph_718.png | Bin 1557 -> 1507 bytes inherit_graph_719.map | 2 +- inherit_graph_719.md5 | 2 +- inherit_graph_719.png | Bin 1606 -> 1815 bytes inherit_graph_720.map | 2 +- inherit_graph_720.md5 | 2 +- inherit_graph_720.png | Bin 2715 -> 1557 bytes inherit_graph_721.map | 2 +- inherit_graph_721.md5 | 2 +- inherit_graph_721.png | Bin 1845 -> 1606 bytes inherit_graph_722.map | 2 +- inherit_graph_722.md5 | 2 +- inherit_graph_722.png | Bin 1396 -> 2715 bytes inherit_graph_723.map | 2 +- inherit_graph_723.md5 | 2 +- inherit_graph_723.png | Bin 1657 -> 1845 bytes inherit_graph_724.map | 2 +- inherit_graph_724.md5 | 2 +- inherit_graph_724.png | Bin 2192 -> 1396 bytes inherit_graph_725.map | 2 +- inherit_graph_725.md5 | 2 +- inherit_graph_725.png | Bin 1960 -> 1657 bytes inherit_graph_726.map | 2 +- inherit_graph_726.md5 | 2 +- inherit_graph_726.png | Bin 1895 -> 2192 bytes inherit_graph_727.map | 2 +- inherit_graph_727.md5 | 2 +- inherit_graph_727.png | Bin 2457 -> 1960 bytes inherit_graph_728.map | 2 +- inherit_graph_728.md5 | 2 +- inherit_graph_728.png | Bin 2029 -> 1895 bytes inherit_graph_729.map | 2 +- inherit_graph_729.md5 | 2 +- inherit_graph_729.png | Bin 2495 -> 2457 bytes inherit_graph_730.map | 2 +- inherit_graph_730.md5 | 2 +- inherit_graph_730.png | Bin 1632 -> 2029 bytes inherit_graph_731.map | 2 +- inherit_graph_731.md5 | 2 +- inherit_graph_731.png | Bin 1868 -> 2495 bytes inherit_graph_732.map | 2 +- inherit_graph_732.md5 | 2 +- inherit_graph_732.png | Bin 1490 -> 1632 bytes inherit_graph_733.map | 2 +- inherit_graph_733.md5 | 2 +- inherit_graph_733.png | Bin 1540 -> 1868 bytes inherit_graph_734.map | 2 +- inherit_graph_734.md5 | 2 +- inherit_graph_734.png | Bin 1728 -> 1490 bytes inherit_graph_735.map | 2 +- inherit_graph_735.md5 | 2 +- inherit_graph_735.png | Bin 2157 -> 1540 bytes inherit_graph_736.map | 2 +- inherit_graph_736.md5 | 2 +- inherit_graph_736.png | Bin 1470 -> 1728 bytes inherit_graph_737.map | 2 +- inherit_graph_737.md5 | 2 +- inherit_graph_737.png | Bin 1211 -> 2157 bytes inherit_graph_738.map | 2 +- inherit_graph_738.md5 | 2 +- inherit_graph_738.png | Bin 1718 -> 1470 bytes inherit_graph_739.map | 2 +- inherit_graph_739.md5 | 2 +- inherit_graph_739.png | Bin 1793 -> 1211 bytes inherit_graph_740.map | 2 +- inherit_graph_740.md5 | 2 +- inherit_graph_740.png | Bin 1733 -> 1718 bytes inherit_graph_741.map | 2 +- inherit_graph_741.md5 | 2 +- inherit_graph_741.png | Bin 1183 -> 1793 bytes inherit_graph_742.map | 2 +- inherit_graph_742.md5 | 2 +- inherit_graph_742.png | Bin 1963 -> 1733 bytes inherit_graph_743.map | 4 +- inherit_graph_743.md5 | 2 +- inherit_graph_743.png | Bin 5981 -> 1183 bytes inherit_graph_744.map | 2 +- inherit_graph_744.md5 | 2 +- inherit_graph_744.png | Bin 1587 -> 1963 bytes inherit_graph_745.map | 4 +- inherit_graph_745.md5 | 2 +- inherit_graph_745.png | Bin 1864 -> 5981 bytes inherit_graph_746.map | 2 +- inherit_graph_746.md5 | 2 +- inherit_graph_746.png | Bin 2390 -> 1587 bytes inherit_graph_747.map | 2 +- inherit_graph_747.md5 | 2 +- inherit_graph_747.png | Bin 2025 -> 1864 bytes inherit_graph_748.map | 2 +- inherit_graph_748.md5 | 2 +- inherit_graph_748.png | Bin 1405 -> 2390 bytes inherit_graph_749.map | 2 +- inherit_graph_749.md5 | 2 +- inherit_graph_749.png | Bin 2077 -> 2025 bytes inherit_graph_750.map | 2 +- inherit_graph_750.md5 | 2 +- inherit_graph_750.png | Bin 1477 -> 1405 bytes inherit_graph_751.map | 2 +- inherit_graph_751.md5 | 2 +- inherit_graph_751.png | Bin 2512 -> 2077 bytes inherit_graph_752.map | 2 +- inherit_graph_752.md5 | 2 +- inherit_graph_752.png | Bin 2441 -> 1477 bytes inherit_graph_753.map | 2 +- inherit_graph_753.md5 | 2 +- inherit_graph_753.png | Bin 2158 -> 2512 bytes inherit_graph_754.map | 2 +- inherit_graph_754.md5 | 2 +- inherit_graph_754.png | Bin 1936 -> 2441 bytes inherit_graph_755.map | 2 +- inherit_graph_755.md5 | 2 +- inherit_graph_755.png | Bin 2050 -> 2158 bytes inherit_graph_756.map | 2 +- inherit_graph_756.md5 | 2 +- inherit_graph_756.png | Bin 1971 -> 1936 bytes inherit_graph_757.map | 3 +- inherit_graph_757.md5 | 2 +- inherit_graph_757.png | Bin 3643 -> 2050 bytes inherit_graph_758.map | 2 +- inherit_graph_758.md5 | 2 +- inherit_graph_758.png | Bin 2023 -> 1971 bytes inherit_graph_759.map | 3 +- inherit_graph_759.md5 | 2 +- inherit_graph_759.png | Bin 1724 -> 3643 bytes inherit_graph_760.map | 2 +- inherit_graph_760.md5 | 2 +- inherit_graph_760.png | Bin 2003 -> 2023 bytes inherit_graph_761.map | 2 +- inherit_graph_761.md5 | 2 +- inherit_graph_761.png | Bin 1998 -> 1724 bytes inherit_graph_762.map | 2 +- inherit_graph_762.md5 | 2 +- inherit_graph_762.png | Bin 2454 -> 2003 bytes inherit_graph_763.map | 2 +- inherit_graph_763.md5 | 2 +- inherit_graph_763.png | Bin 2658 -> 1998 bytes inherit_graph_764.map | 2 +- inherit_graph_764.md5 | 2 +- inherit_graph_764.png | Bin 1624 -> 2454 bytes inherit_graph_765.map | 2 +- inherit_graph_765.md5 | 2 +- inherit_graph_765.png | Bin 2010 -> 2658 bytes inherit_graph_766.map | 2 +- inherit_graph_766.md5 | 2 +- inherit_graph_766.png | Bin 2747 -> 1624 bytes inherit_graph_767.map | 2 +- inherit_graph_767.md5 | 2 +- inherit_graph_767.png | Bin 2310 -> 2010 bytes inherit_graph_768.map | 2 +- inherit_graph_768.md5 | 2 +- inherit_graph_768.png | Bin 2536 -> 2747 bytes inherit_graph_769.map | 2 +- inherit_graph_769.md5 | 2 +- inherit_graph_769.png | Bin 2043 -> 2310 bytes inherit_graph_770.map | 4 +- inherit_graph_770.md5 | 2 +- inherit_graph_770.png | Bin 8577 -> 2536 bytes inherit_graph_771.map | 2 +- inherit_graph_771.md5 | 2 +- inherit_graph_771.png | Bin 2306 -> 2043 bytes inherit_graph_772.map | 5 +- inherit_graph_772.md5 | 2 +- inherit_graph_772.png | Bin 4359 -> 8577 bytes inherit_graph_773.map | 3 +- inherit_graph_773.md5 | 2 +- inherit_graph_773.png | Bin 3693 -> 2306 bytes inherit_graph_774.map | 3 +- inherit_graph_774.md5 | 2 +- inherit_graph_774.png | Bin 3123 -> 4359 bytes inherit_graph_775.map | 3 +- inherit_graph_775.md5 | 2 +- inherit_graph_775.png | Bin 1858 -> 3693 bytes inherit_graph_776.map | 2 +- inherit_graph_776.md5 | 2 +- inherit_graph_776.png | Bin 2537 -> 3123 bytes inherit_graph_777.map | 2 +- inherit_graph_777.md5 | 2 +- inherit_graph_777.png | Bin 2894 -> 1858 bytes inherit_graph_778.map | 2 +- inherit_graph_778.md5 | 2 +- inherit_graph_778.png | Bin 2281 -> 2537 bytes inherit_graph_779.map | 2 +- inherit_graph_779.md5 | 2 +- inherit_graph_779.png | Bin 1898 -> 2894 bytes inherit_graph_780.map | 2 +- inherit_graph_780.md5 | 2 +- inherit_graph_780.png | Bin 1700 -> 2281 bytes inherit_graph_781.map | 22 +- inherit_graph_781.md5 | 2 +- inherit_graph_781.png | Bin 83448 -> 1898 bytes inherit_graph_782.map | 2 +- inherit_graph_782.md5 | 2 +- inherit_graph_782.png | Bin 1679 -> 1700 bytes inherit_graph_783.map | 22 +- inherit_graph_783.md5 | 2 +- inherit_graph_783.png | Bin 1539 -> 83448 bytes inherit_graph_784.map | 2 +- inherit_graph_784.md5 | 2 +- inherit_graph_784.png | Bin 1836 -> 1679 bytes inherit_graph_785.map | 2 +- inherit_graph_785.md5 | 2 +- inherit_graph_785.png | Bin 1253 -> 1539 bytes inherit_graph_786.map | 2 +- inherit_graph_786.md5 | 2 +- inherit_graph_786.png | Bin 1265 -> 1836 bytes inherit_graph_787.map | 2 +- inherit_graph_787.md5 | 2 +- inherit_graph_787.png | Bin 1754 -> 1253 bytes inherit_graph_788.map | 2 +- inherit_graph_788.md5 | 2 +- inherit_graph_788.png | Bin 1148 -> 1265 bytes inherit_graph_789.map | 2 +- inherit_graph_789.md5 | 2 +- inherit_graph_789.png | Bin 2031 -> 1754 bytes inherit_graph_790.map | 2 +- inherit_graph_790.md5 | 2 +- inherit_graph_790.png | Bin 1753 -> 1148 bytes inherit_graph_791.map | 2 +- inherit_graph_791.md5 | 2 +- inherit_graph_791.png | Bin 2511 -> 2031 bytes inherit_graph_792.map | 2 +- inherit_graph_792.md5 | 2 +- inherit_graph_792.png | Bin 1825 -> 1753 bytes inherit_graph_793.map | 2 +- inherit_graph_793.md5 | 2 +- inherit_graph_793.png | Bin 1859 -> 2511 bytes inherit_graph_794.map | 2 +- inherit_graph_794.md5 | 2 +- inherit_graph_794.png | Bin 1850 -> 1825 bytes inherit_graph_795.map | 2 +- inherit_graph_795.md5 | 2 +- inherit_graph_795.png | Bin 1516 -> 1859 bytes inherit_graph_796.map | 2 +- inherit_graph_796.md5 | 2 +- inherit_graph_796.png | Bin 1723 -> 1850 bytes inherit_graph_797.map | 2 +- inherit_graph_797.md5 | 2 +- inherit_graph_797.png | Bin 1802 -> 1516 bytes inherit_graph_798.map | 2 +- inherit_graph_798.md5 | 2 +- inherit_graph_798.png | Bin 1345 -> 1723 bytes inherit_graph_799.map | 2 +- inherit_graph_799.md5 | 2 +- inherit_graph_799.png | Bin 2457 -> 1802 bytes inherit_graph_800.map | 2 +- inherit_graph_800.md5 | 2 +- inherit_graph_800.png | Bin 1630 -> 1345 bytes inherit_graph_801.map | 2 +- inherit_graph_801.md5 | 2 +- inherit_graph_801.png | Bin 2077 -> 2457 bytes inherit_graph_802.map | 2 +- inherit_graph_802.md5 | 2 +- inherit_graph_802.png | Bin 2484 -> 1630 bytes inherit_graph_803.map | 2 +- inherit_graph_803.md5 | 2 +- inherit_graph_803.png | Bin 3067 -> 2077 bytes inherit_graph_804.map | 2 +- inherit_graph_804.md5 | 2 +- inherit_graph_804.png | Bin 3425 -> 2484 bytes inherit_graph_805.map | 2 +- inherit_graph_805.md5 | 2 +- inherit_graph_805.png | Bin 2069 -> 3067 bytes inherit_graph_806.map | 2 +- inherit_graph_806.md5 | 2 +- inherit_graph_806.png | Bin 1761 -> 3425 bytes inherit_graph_807.map | 2 +- inherit_graph_807.md5 | 2 +- inherit_graph_807.png | Bin 2373 -> 2069 bytes inherit_graph_808.map | 2 +- inherit_graph_808.md5 | 2 +- inherit_graph_808.png | Bin 2613 -> 1761 bytes inherit_graph_809.map | 2 +- inherit_graph_809.md5 | 2 +- inherit_graph_809.png | Bin 1622 -> 2373 bytes inherit_graph_810.map | 2 +- inherit_graph_810.md5 | 2 +- inherit_graph_810.png | Bin 1870 -> 2613 bytes inherit_graph_811.map | 2 +- inherit_graph_811.md5 | 2 +- inherit_graph_811.png | Bin 2434 -> 1622 bytes inherit_graph_812.map | 2 +- inherit_graph_812.md5 | 2 +- inherit_graph_812.png | Bin 2187 -> 1870 bytes inherit_graph_813.map | 2 +- inherit_graph_813.md5 | 2 +- inherit_graph_813.png | Bin 1691 -> 2434 bytes inherit_graph_814.map | 2 +- inherit_graph_814.md5 | 2 +- inherit_graph_814.png | Bin 2311 -> 2187 bytes inherit_graph_815.map | 2 +- inherit_graph_815.md5 | 2 +- inherit_graph_815.png | Bin 1465 -> 1691 bytes inherit_graph_816.map | 2 +- inherit_graph_816.md5 | 2 +- inherit_graph_816.png | Bin 1549 -> 2311 bytes inherit_graph_817.map | 2 +- inherit_graph_817.md5 | 2 +- inherit_graph_817.png | Bin 2338 -> 1465 bytes inherit_graph_818.map | 3 +- inherit_graph_818.md5 | 2 +- inherit_graph_818.png | Bin 2050 -> 1549 bytes inherit_graph_819.map | 3 +- inherit_graph_819.md5 | 2 +- inherit_graph_819.png | Bin 4055 -> 2338 bytes inherit_graph_820.map | 26 +- inherit_graph_820.md5 | 2 +- inherit_graph_820.png | Bin 118084 -> 2050 bytes inherit_graph_821.map | 3 +- inherit_graph_821.md5 | 2 +- inherit_graph_821.png | Bin 2292 -> 4055 bytes inherit_graph_822.map | 25 +- inherit_graph_822.md5 | 2 +- inherit_graph_822.png | Bin 1950 -> 118084 bytes inherit_graph_823.map | 3 +- inherit_graph_823.md5 | 2 +- inherit_graph_823.png | Bin 5321 -> 2292 bytes inherit_graph_824.map | 3 +- inherit_graph_824.md5 | 2 +- inherit_graph_824.png | Bin 4523 -> 1950 bytes inherit_graph_825.map | 4 +- inherit_graph_825.md5 | 2 +- inherit_graph_825.png | Bin 2489 -> 5321 bytes inherit_graph_826.map | 4 +- inherit_graph_826.md5 | 2 +- inherit_graph_826.png | Bin 5043 -> 4523 bytes inherit_graph_827.map | 5 +- inherit_graph_827.md5 | 2 +- inherit_graph_827.png | Bin 11380 -> 2489 bytes inherit_graph_828.map | 4 +- inherit_graph_828.md5 | 2 +- inherit_graph_828.png | Bin 4727 -> 5043 bytes inherit_graph_829.map | 5 +- inherit_graph_829.md5 | 2 +- inherit_graph_829.png | Bin 6096 -> 11380 bytes inherit_graph_830.map | 4 +- inherit_graph_830.md5 | 2 +- inherit_graph_830.png | Bin 4428 -> 4727 bytes inherit_graph_831.map | 9 +- inherit_graph_831.md5 | 2 +- inherit_graph_831.png | Bin 20653 -> 6096 bytes inherit_graph_832.map | 4 +- inherit_graph_832.md5 | 2 +- inherit_graph_832.png | Bin 3769 -> 4428 bytes inherit_graph_833.map | 11 +- inherit_graph_833.md5 | 2 +- inherit_graph_833.png | Bin 10024 -> 20653 bytes inherit_graph_834.map | 5 +- inherit_graph_834.md5 | 2 +- inherit_graph_834.png | Bin 4928 -> 3769 bytes inherit_graph_835.map | 6 +- inherit_graph_835.md5 | 2 +- inherit_graph_835.png | Bin 3752 -> 10024 bytes inherit_graph_836.map | 6 +- inherit_graph_836.md5 | 2 +- inherit_graph_836.png | Bin 9264 -> 4928 bytes inherit_graph_837.map | 11 +- inherit_graph_837.md5 | 2 +- inherit_graph_837.png | Bin 25947 -> 3752 bytes inherit_graph_838.map | 6 +- inherit_graph_838.md5 | 2 +- inherit_graph_838.png | Bin 8781 -> 9264 bytes inherit_graph_839.map | 11 +- inherit_graph_839.md5 | 2 +- inherit_graph_839.png | Bin 5370 -> 25947 bytes inherit_graph_840.map | 5 +- inherit_graph_840.md5 | 2 +- inherit_graph_840.png | Bin 4529 -> 8781 bytes inherit_graph_841.map | 4 +- inherit_graph_841.md5 | 2 +- inherit_graph_841.png | Bin 2959 -> 5370 bytes inherit_graph_842.map | 8 +- inherit_graph_842.md5 | 2 +- inherit_graph_842.png | Bin 20819 -> 4529 bytes inherit_graph_843.map | 3 +- inherit_graph_843.md5 | 2 +- inherit_graph_843.png | Bin 2325 -> 2959 bytes inherit_graph_844.map | 8 +- inherit_graph_844.md5 | 2 +- inherit_graph_844.png | Bin 3803 -> 20819 bytes inherit_graph_845.map | 3 +- inherit_graph_845.md5 | 2 +- inherit_graph_845.png | Bin 2832 -> 2325 bytes inherit_graph_846.map | 2 +- inherit_graph_846.md5 | 2 +- inherit_graph_846.png | Bin 3618 -> 3803 bytes inherit_graph_847.map | 3 +- inherit_graph_847.md5 | 2 +- inherit_graph_847.png | Bin 2378 -> 2832 bytes inherit_graph_848.map | 4 +- inherit_graph_848.md5 | 2 +- inherit_graph_848.png | Bin 5740 -> 3618 bytes inherit_graph_849.map | 4 +- inherit_graph_849.md5 | 2 +- inherit_graph_849.png | Bin 11550 -> 2378 bytes inherit_graph_850.map | 4 +- inherit_graph_850.md5 | 2 +- inherit_graph_850.png | Bin 9812 -> 5740 bytes inherit_graph_851.map | 5 +- inherit_graph_851.md5 | 2 +- inherit_graph_851.png | Bin 8344 -> 11550 bytes inherit_graph_852.map | 4 +- inherit_graph_852.md5 | 2 +- inherit_graph_852.png | Bin 8787 -> 9812 bytes inherit_graph_853.map | 4 +- inherit_graph_853.md5 | 2 +- inherit_graph_853.png | Bin 9173 -> 8344 bytes inherit_graph_854.map | 4 +- inherit_graph_854.md5 | 2 +- inherit_graph_854.png | Bin 8920 -> 8787 bytes inherit_graph_855.map | 4 +- inherit_graph_855.md5 | 2 +- inherit_graph_855.png | Bin 6573 -> 9173 bytes inherit_graph_856.map | 8 +- inherit_graph_856.md5 | 2 +- inherit_graph_856.png | Bin 28909 -> 8920 bytes inherit_graph_857.map | 4 +- inherit_graph_857.md5 | 2 +- inherit_graph_857.png | Bin 3857 -> 6573 bytes inherit_graph_858.map | 8 +- inherit_graph_858.md5 | 2 +- inherit_graph_858.png | Bin 5741 -> 28909 bytes inherit_graph_859.map | 3 +- inherit_graph_859.md5 | 2 +- inherit_graph_859.png | Bin 3191 -> 3857 bytes inherit_graph_860.map | 4 +- inherit_graph_860.md5 | 2 +- inherit_graph_860.png | Bin 4954 -> 5741 bytes inherit_graph_861.map | 3 +- inherit_graph_861.md5 | 2 +- inherit_graph_861.png | Bin 11205 -> 3191 bytes inherit_graph_862.map | 4 +- inherit_graph_862.md5 | 2 +- inherit_graph_862.png | Bin 13007 -> 4954 bytes inherit_graph_863.map | 4 +- inherit_graph_863.md5 | 2 +- inherit_graph_863.png | Bin 3501 -> 11205 bytes inherit_graph_864.map | 6 +- inherit_graph_864.md5 | 2 +- inherit_graph_864.png | Bin 8301 -> 13007 bytes inherit_graph_865.map | 4 +- inherit_graph_865.md5 | 2 +- inherit_graph_865.png | Bin 3434 -> 3501 bytes inherit_graph_866.map | 23 +- inherit_graph_866.md5 | 2 +- inherit_graph_866.png | Bin 132783 -> 8301 bytes inherit_graph_867.map | 4 + inherit_graph_867.md5 | 1 + inherit_graph_867.png | Bin 0 -> 3434 bytes inherit_graph_868.map | 21 + inherit_graph_868.md5 | 1 + inherit_graph_868.png | Bin 0 -> 132783 bytes inherits.html | 588 ++-- namespaceripple.html | 7 +- namespaceripple_1_1BuildInfo.html | 4 +- search/all_1.js | 397 ++- search/all_10.js | 1343 ++++---- search/all_11.js | 90 +- search/all_12.js | 1250 +++---- search/all_13.js | 2620 +++++++-------- search/all_14.js | 2977 +++++++++-------- search/all_15.js | 682 ++-- search/all_16.js | 472 +-- search/all_17.js | 440 +-- search/all_18.js | 154 +- search/all_19.js | 14 +- search/all_1a.js | 16 +- search/all_1b.js | 681 ++-- search/all_2.js | 582 ++-- search/all_3.js | 1546 ++++----- search/all_4.js | 363 +- search/all_5.js | 2 +- search/all_6.js | 91 +- search/all_7.js | 1182 +++---- search/all_8.js | 373 ++- search/all_9.js | 1502 ++++----- search/all_a.js | 194 +- search/all_b.js | 106 +- search/all_c.js | 814 ++--- search/all_d.js | 1874 ++++++----- search/all_e.js | 592 ++-- search/all_f.js | 580 ++-- search/classes_0.js | 4 +- search/classes_1.js | 383 ++- search/classes_10.js | 238 +- search/classes_11.js | 20 +- search/classes_12.js | 247 +- search/classes_13.js | 648 ++-- search/classes_14.js | 281 +- search/classes_15.js | 402 +-- search/classes_16.js | 232 +- search/classes_17.js | 136 +- search/classes_18.js | 34 +- search/classes_19.js | 4 +- search/classes_1a.js | 10 +- search/classes_2.js | 228 +- search/classes_3.js | 398 +-- search/classes_4.js | 194 +- search/classes_5.js | 178 +- search/classes_6.js | 162 +- search/classes_7.js | 58 +- search/classes_8.js | 80 +- search/classes_9.js | 416 +-- search/classes_a.js | 46 +- search/classes_b.js | 36 +- search/classes_c.js | 186 +- search/classes_d.js | 256 +- search/classes_e.js | 144 +- search/classes_f.js | 98 +- search/enums_0.js | 10 +- search/enums_1.js | 20 +- search/enums_10.js | 30 +- search/enums_11.js | 30 +- search/enums_12.js | 6 +- search/enums_13.js | 6 +- search/enums_14.js | 6 +- search/enums_2.js | 8 +- search/enums_3.js | 10 +- search/enums_4.js | 6 +- search/enums_5.js | 4 +- search/enums_6.js | 2 +- search/enums_7.js | 4 +- search/enums_8.js | 4 +- search/enums_9.js | 12 +- search/enums_a.js | 4 +- search/enums_b.js | 6 +- search/enums_c.js | 6 +- search/enums_d.js | 10 +- search/enums_e.js | 2 +- search/enums_f.js | 8 +- search/enumvalues_0.js | 40 +- search/enumvalues_1.js | 34 +- search/enumvalues_10.js | 156 +- search/enumvalues_11.js | 170 +- search/enumvalues_12.js | 414 +-- search/enumvalues_13.js | 24 +- search/enumvalues_14.js | 10 +- search/enumvalues_15.js | 14 +- search/enumvalues_16.js | 20 +- search/enumvalues_17.js | 2 +- search/enumvalues_2.js | 50 +- search/enumvalues_3.js | 44 +- search/enumvalues_4.js | 24 +- search/enumvalues_5.js | 34 +- search/enumvalues_6.js | 38 +- search/enumvalues_7.js | 18 +- search/enumvalues_8.js | 30 +- search/enumvalues_9.js | 72 +- search/enumvalues_a.js | 24 +- search/enumvalues_b.js | 140 +- search/enumvalues_c.js | 46 +- search/enumvalues_d.js | 66 +- search/enumvalues_e.js | 34 +- search/enumvalues_f.js | 38 +- search/files_0.js | 8 +- search/files_1.js | 4 +- search/files_10.js | 8 +- search/files_2.js | 68 +- search/files_3.js | 2 +- search/files_4.js | 4 +- search/files_5.js | 10 +- search/files_6.js | 14 +- search/files_7.js | 6 +- search/files_8.js | 8 +- search/files_9.js | 4 +- search/files_a.js | 4 +- search/files_b.js | 2 +- search/files_c.js | 8 +- search/files_d.js | 26 +- search/files_e.js | 10 +- search/files_f.js | 6 +- search/functions_0.js | 2 +- search/functions_1.js | 710 ++-- search/functions_10.js | 892 ++--- search/functions_11.js | 48 +- search/functions_12.js | 569 ++-- search/functions_13.js | 1302 +++---- search/functions_14.js | 2041 +++++------ search/functions_15.js | 220 +- search/functions_16.js | 182 +- search/functions_17.js | 286 +- search/functions_18.js | 88 +- search/functions_19.js | 2 +- search/functions_1a.js | 10 +- search/functions_1b.js | 681 ++-- search/functions_2.js | 278 +- search/functions_3.js | 878 ++--- search/functions_4.js | 683 ++-- search/functions_5.js | 294 +- search/functions_6.js | 500 +-- search/functions_7.js | 1090 +++--- search/functions_8.js | 184 +- search/functions_9.js | 781 ++--- search/functions_a.js | 54 +- search/functions_b.js | 34 +- search/functions_c.js | 318 +- search/functions_d.js | 546 +-- search/functions_e.js | 290 +- search/functions_f.js | 416 +-- search/groups_0.js | 2 +- search/namespaces_0.js | 26 +- search/namespaces_1.js | 4 +- search/namespaces_2.js | 72 +- search/namespaces_3.js | 24 +- search/pages_0.js | 4 +- search/pages_1.js | 10 +- search/pages_2.js | 2 +- search/pages_3.js | 4 +- search/pages_4.js | 6 +- search/pages_5.js | 4 +- search/pages_6.js | 2 +- search/pages_7.js | 2 +- search/pages_8.js | 4 +- search/pages_9.js | 6 +- search/pages_a.js | 14 +- search/pages_b.js | 6 +- search/pages_c.js | 6 +- search/pages_d.js | 2 +- search/related_0.js | 8 +- search/related_1.js | 16 +- search/related_2.js | 6 +- search/related_3.js | 4 +- search/related_4.js | 2 +- search/related_5.js | 2 +- search/related_6.js | 16 +- search/related_7.js | 10 +- search/related_8.js | 34 +- search/related_9.js | 6 +- search/related_a.js | 10 +- search/related_b.js | 12 +- search/related_c.js | 4 +- search/related_d.js | 6 +- search/typedefs_0.js | 50 +- search/typedefs_1.js | 28 +- search/typedefs_10.js | 2 +- search/typedefs_11.js | 58 +- search/typedefs_12.js | 142 +- search/typedefs_13.js | 82 +- search/typedefs_14.js | 18 +- search/typedefs_15.js | 14 +- search/typedefs_16.js | 12 +- search/typedefs_17.js | 4 +- search/typedefs_18.js | 2 +- search/typedefs_2.js | 68 +- search/typedefs_3.js | 24 +- search/typedefs_4.js | 40 +- search/typedefs_5.js | 24 +- search/typedefs_6.js | 2 +- search/typedefs_7.js | 36 +- search/typedefs_8.js | 52 +- search/typedefs_9.js | 6 +- search/typedefs_a.js | 8 +- search/typedefs_b.js | 50 +- search/typedefs_c.js | 58 +- search/typedefs_d.js | 24 +- search/typedefs_e.js | 16 +- search/typedefs_f.js | 58 +- search/variables_0.js | 256 +- search/variables_1.js | 118 +- search/variables_10.js | 38 +- search/variables_11.js | 304 +- search/variables_12.js | 748 ++--- search/variables_13.js | 324 +- search/variables_14.js | 66 +- search/variables_15.js | 108 +- search/variables_16.js | 90 +- search/variables_17.js | 18 +- search/variables_18.js | 4 +- search/variables_19.js | 2 +- search/variables_2.js | 348 +- search/variables_3.js | 190 +- search/variables_4.js | 100 +- search/variables_5.js | 305 +- search/variables_6.js | 38 +- search/variables_7.js | 97 +- search/variables_8.js | 359 +- search/variables_9.js | 42 +- search/variables_a.js | 26 +- search/variables_b.js | 240 +- search/variables_c.js | 1124 ++++--- search/variables_d.js | 180 +- search/variables_e.js | 96 +- search/variables_f.js | 287 +- structripple_1_1SHAMap_1_1MissingNodes.html | 73 +- ...1_1SHAMap_1_1MissingNodes__coll__graph.map | 49 +- ...1_1SHAMap_1_1MissingNodes__coll__graph.md5 | 2 +- ...1_1SHAMap_1_1MissingNodes__coll__graph.png | Bin 154627 -> 152383 bytes ...le_1_1TaggedPointer_1_1RawAllocateTag.html | 83 + 1200 files changed, 29795 insertions(+), 27986 deletions(-) create mode 100644 TaggedPointer_8h_source.html create mode 100644 classripple_1_1TaggedPointer-members.html create mode 100644 classripple_1_1TaggedPointer.html create mode 100644 classripple_1_1TaggedPointer__coll__graph.map create mode 100644 classripple_1_1TaggedPointer__coll__graph.md5 create mode 100644 classripple_1_1TaggedPointer__coll__graph.png create mode 100644 inherit_graph_867.map create mode 100644 inherit_graph_867.md5 create mode 100644 inherit_graph_867.png create mode 100644 inherit_graph_868.map create mode 100644 inherit_graph_868.md5 create mode 100644 inherit_graph_868.png create mode 100644 structripple_1_1TaggedPointer_1_1RawAllocateTag.html diff --git a/BuildInfo_8cpp_source.html b/BuildInfo_8cpp_source.html index 085c156406..15a90d2b66 100644 --- a/BuildInfo_8cpp_source.html +++ b/BuildInfo_8cpp_source.html @@ -104,7 +104,7 @@ $(function() {
33 // and follow the format described at http://semver.org/
34 //------------------------------------------------------------------------------
35 // clang-format off
-
36 char const* const versionString = "1.7.0-b5"
+
36 char const* const versionString = "1.7.0-b6"
37 // clang-format on
38 
39 #if defined(DEBUG) || defined(SANITIZER)
diff --git a/DatabaseShard__test_8cpp_source.html b/DatabaseShard__test_8cpp_source.html index 223170a009..723e0c79b2 100644 --- a/DatabaseShard__test_8cpp_source.html +++ b/DatabaseShard__test_8cpp_source.html @@ -1428,7 +1428,7 @@ $(function() {
void testCreateShard(std::uint64_t const seedValue)
@ hotUNKNOWN
Definition: NodeObject.h:33
@ ledgerMaster
ledger master data for signing
-
bool isValid() const
Definition: SHAMap.h:537
+
bool isValid() const
Definition: SHAMap.h:539
T generate_n(T... args)
void testLedgerData(TestData &data, std::shared_ptr< Ledger > ledger, std::uint32_t seq)
void testReopenDatabase(std::uint64_t const seedValue)
diff --git a/Database_8cpp_source.html b/Database_8cpp_source.html index 613ee82448..a1d4f2a4f6 100644 --- a/Database_8cpp_source.html +++ b/Database_8cpp_source.html @@ -405,7 +405,7 @@ $(function() {
Holds a collection of configuration values.
Definition: BasicConfig.h:43
@ ledgerMaster
ledger master data for signing
uint256 readLastHash_
Definition: Database.h:294
-
bool isValid() const
Definition: SHAMap.h:537
+
bool isValid() const
Definition: SHAMap.h:539
Persistency layer for NodeObject.
Definition: Database.h:53
STL class.
bool readShut_
Definition: Database.h:297
@@ -415,7 +415,7 @@ $(function() {
STL class.
bool isNonZero() const
Definition: base_uint.h:444
void stopped()
Called by derived classes to indicate that the stoppable has stopped.
Definition: Stoppable.cpp:72
-
Family const & family() const
Definition: SHAMap.h:137
+
Family const & family() const
Definition: SHAMap.h:139
Blob & modData()
Definition: Serializer.h:176
T reserve(T... args)
uint256 hash
Definition: ReadView.h:100
diff --git a/Ledger_8cpp_source.html b/Ledger_8cpp_source.html index 61381e7325..a6663b8221 100644 --- a/Ledger_8cpp_source.html +++ b/Ledger_8cpp_source.html @@ -1562,7 +1562,7 @@ $(function() {
SHAMap::const_iterator iter_
Definition: Ledger.cpp:128
SHAMap const & stateMap() const
Definition: Ledger.h:283
XRPAmount FEE_OWNER_RESERVE
Definition: Config.h:169
-
Definition: SHAMap.h:550
+
Definition: SHAMap.h:552
AccountID calcAccountID(PublicKey const &pk)
Definition: AccountID.cpp:80
A SHAMap is both a radix tree with a fan-out of 16 and a Merkle tree.
Definition: SHAMap.h:95
Definition: STArray.h:28
diff --git a/SHAMapDelta_8cpp_source.html b/SHAMapDelta_8cpp_source.html index bb21e3e712..50fcbf0cb9 100644 --- a/SHAMapDelta_8cpp_source.html +++ b/SHAMapDelta_8cpp_source.html @@ -360,7 +360,7 @@ $(function() {
289 
290 } // namespace ripple
-
bool isValid() const
Definition: SHAMap.h:537
+
bool isValid() const
Definition: SHAMap.h:539
STL class.
SHAMapHash getHash() const
Definition: SHAMap.cpp:778
@@ -370,8 +370,8 @@ $(function() {
virtual bool isInner() const =0
Determines if this is an inner node.
-
std::pair< std::shared_ptr< SHAMapItem const > const &, std::shared_ptr< SHAMapItem const > const & > DeltaRef
Definition: SHAMap.h:323
-
+
std::pair< std::shared_ptr< SHAMapItem const > const &, std::shared_ptr< SHAMapItem const > const & > DeltaRef
Definition: SHAMap.h:325
+
A SHAMap is both a radix tree with a fan-out of 16 and a Merkle tree.
Definition: SHAMap.h:95
T pop(T... args)
T top(T... args)
diff --git a/SHAMapInnerNode_8cpp_source.html b/SHAMapInnerNode_8cpp_source.html index 55f63a582f..accd1155b6 100644 --- a/SHAMapInnerNode_8cpp_source.html +++ b/SHAMapInnerNode_8cpp_source.html @@ -99,12 +99,12 @@ $(function() {
28 #include <ripple/protocol/HashPrefix.h>
29 #include <ripple/protocol/digest.h>
30 #include <ripple/shamap/SHAMapTreeNode.h>
-
31 
-
32 #include <openssl/sha.h>
-
33 
-
34 #include <algorithm>
-
35 #include <array>
-
36 #include <atomic>
+
31 #include <ripple/shamap/impl/TaggedPointer.ipp>
+
32 
+
33 #include <openssl/sha.h>
+
34 
+
35 #include <algorithm>
+
36 #include <array>
37 #include <iterator>
38 #include <mutex>
39 #include <utility>
@@ -113,336 +113,471 @@ $(function() {
42 
43 std::mutex SHAMapInnerNode::childLock;
44 
-
45 std::shared_ptr<SHAMapTreeNode>
-
46 SHAMapInnerNode::clone(std::uint32_t cowid) const
-
47 {
-
48  auto p = std::make_shared<SHAMapInnerNode>(cowid);
-
49  p->hash_ = hash_;
-
50  p->mIsBranch = mIsBranch;
-
51  p->mFullBelowGen = mFullBelowGen;
-
52  p->mHashes = mHashes;
-
53  std::lock_guard lock(childLock);
-
54  for (int i = 0; i < 16; ++i)
-
55  p->mChildren[i] = mChildren[i];
-
56  return p;
+
45 SHAMapInnerNode::SHAMapInnerNode(
+
46  std::uint32_t cowid,
+
47  std::uint8_t numAllocatedChildren)
+
48  : SHAMapTreeNode(cowid), hashesAndChildren_(numAllocatedChildren)
+
49 {
+
50 }
+
51 
+
52 template <class F>
+
53 void
+
54 SHAMapInnerNode::iterChildren(F&& f) const
+
55 {
+
56  hashesAndChildren_.iterChildren(isBranch_, std::forward<F>(f));
57 }
58 
-
59 std::shared_ptr<SHAMapTreeNode>
-
60 SHAMapInnerNode::makeFullInner(
-
61  Slice data,
-
62  SHAMapHash const& hash,
-
63  bool hashValid)
-
64 {
-
65  if (data.size() != 512)
-
66  Throw<std::runtime_error>("Invalid FI node");
-
67 
-
68  auto ret = std::make_shared<SHAMapInnerNode>(0);
-
69 
-
70  Serializer s(data.data(), data.size());
-
71 
-
72  for (int i = 0; i < 16; ++i)
-
73  {
-
74  s.getBitString(ret->mHashes[i].as_uint256(), i * 32);
-
75 
-
76  if (ret->mHashes[i].isNonZero())
-
77  ret->mIsBranch |= (1 << i);
-
78  }
-
79 
-
80  if (hashValid)
-
81  ret->hash_ = hash;
-
82  else
-
83  ret->updateHash();
-
84  return ret;
-
85 }
-
86 
-
87 std::shared_ptr<SHAMapTreeNode>
-
88 SHAMapInnerNode::makeCompressedInner(Slice data)
-
89 {
-
90  Serializer s(data.data(), data.size());
-
91 
-
92  int len = s.getLength();
-
93 
-
94  auto ret = std::make_shared<SHAMapInnerNode>(0);
+
59 template <class F>
+
60 void
+
61 SHAMapInnerNode::iterNonEmptyChildIndexes(F&& f) const
+
62 {
+
63  hashesAndChildren_.iterNonEmptyChildIndexes(isBranch_, std::forward<F>(f));
+
64 }
+
65 
+
66 void
+
67 SHAMapInnerNode::resizeChildArrays(std::uint8_t toAllocate)
+
68 {
+
69  hashesAndChildren_ =
+
70  TaggedPointer(std::move(hashesAndChildren_), isBranch_, toAllocate);
+
71 }
+
72 
+
73 std::optional<int>
+
74 SHAMapInnerNode::getChildIndex(int i) const
+
75 {
+
76  return hashesAndChildren_.getChildIndex(isBranch_, i);
+
77 }
+
78 
+
79 std::shared_ptr<SHAMapTreeNode>
+
80 SHAMapInnerNode::clone(std::uint32_t cowid) const
+
81 {
+
82  auto const branchCount = getBranchCount();
+
83  auto const thisIsSparse = !hashesAndChildren_.isDense();
+
84  auto p = std::make_shared<SHAMapInnerNode>(cowid, branchCount);
+
85  p->hash_ = hash_;
+
86  p->isBranch_ = isBranch_;
+
87  p->fullBelowGen_ = fullBelowGen_;
+
88  SHAMapHash *cloneHashes, *thisHashes;
+
89  std::shared_ptr<SHAMapTreeNode>*cloneChildren, *thisChildren;
+
90  // structured bindings can't be captured in c++ 17; use tie instead
+
91  std::tie(std::ignore, cloneHashes, cloneChildren) =
+
92  p->hashesAndChildren_.getHashesAndChildren();
+
93  std::tie(std::ignore, thisHashes, thisChildren) =
+
94  hashesAndChildren_.getHashesAndChildren();
95 
-
96  for (int i = 0; i < (len / 33); ++i)
+
96  if (thisIsSparse)
97  {
-
98  int pos;
-
99 
-
100  if (!s.get8(pos, 32 + (i * 33)))
-
101  Throw<std::runtime_error>("short CI node");
-
102 
-
103  if ((pos < 0) || (pos >= 16))
-
104  Throw<std::runtime_error>("invalid CI node");
-
105 
-
106  s.getBitString(ret->mHashes[pos].as_uint256(), i * 33);
-
107 
-
108  if (ret->mHashes[pos].isNonZero())
-
109  ret->mIsBranch |= (1 << pos);
-
110  }
-
111 
-
112  ret->updateHash();
-
113 
-
114  return ret;
-
115 }
-
116 
-
117 void
-
118 SHAMapInnerNode::updateHash()
-
119 {
-
120  uint256 nh;
-
121  if (mIsBranch != 0)
-
122  {
-
123  sha512_half_hasher h;
-
124  using beast::hash_append;
-
125  hash_append(h, HashPrefix::innerNode);
-
126  for (auto const& hh : mHashes)
-
127  hash_append(h, hh);
-
128  nh = static_cast<typename sha512_half_hasher::result_type>(h);
-
129  }
-
130  hash_ = SHAMapHash{nh};
-
131 }
-
132 
-
133 void
-
134 SHAMapInnerNode::updateHashDeep()
-
135 {
-
136  for (auto pos = 0; pos < 16; ++pos)
-
137  {
-
138  if (mChildren[pos] != nullptr)
-
139  mHashes[pos] = mChildren[pos]->getHash();
-
140  }
-
141  updateHash();
-
142 }
-
143 
-
144 void
-
145 SHAMapInnerNode::serializeForWire(Serializer& s) const
-
146 {
-
147  assert(!isEmpty());
+
98  int cloneChildIndex = 0;
+
99  iterNonEmptyChildIndexes([&](auto branchNum, auto indexNum) {
+
100  cloneHashes[cloneChildIndex++] = thisHashes[indexNum];
+
101  });
+
102  }
+
103  else
+
104  {
+
105  iterNonEmptyChildIndexes([&](auto branchNum, auto indexNum) {
+
106  cloneHashes[branchNum] = thisHashes[indexNum];
+
107  });
+
108  }
+
109  std::lock_guard lock(childLock);
+
110  if (thisIsSparse)
+
111  {
+
112  int cloneChildIndex = 0;
+
113  iterNonEmptyChildIndexes([&](auto branchNum, auto indexNum) {
+
114  cloneChildren[cloneChildIndex++] = thisChildren[indexNum];
+
115  });
+
116  }
+
117  else
+
118  {
+
119  iterNonEmptyChildIndexes([&](auto branchNum, auto indexNum) {
+
120  cloneChildren[branchNum] = thisChildren[indexNum];
+
121  });
+
122  }
+
123 
+
124  return p;
+
125 }
+
126 
+
127 std::shared_ptr<SHAMapTreeNode>
+
128 SHAMapInnerNode::makeFullInner(
+
129  Slice data,
+
130  SHAMapHash const& hash,
+
131  bool hashValid)
+
132 {
+
133  if (data.size() != 512)
+
134  Throw<std::runtime_error>("Invalid FI node");
+
135 
+
136  auto ret = std::make_shared<SHAMapInnerNode>(0, branchFactor);
+
137 
+
138  Serializer s(data.data(), data.size());
+
139 
+
140  auto retHashes = ret->hashesAndChildren_.getHashes();
+
141  for (int i = 0; i < branchFactor; ++i)
+
142  {
+
143  s.getBitString(retHashes[i].as_uint256(), i * 32);
+
144 
+
145  if (retHashes[i].isNonZero())
+
146  ret->isBranch_ |= (1 << i);
+
147  }
148 
-
149  // If the node is sparse, then only send non-empty branches:
-
150  if (getBranchCount() < 12)
-
151  {
-
152  // compressed node
-
153  for (int i = 0; i < mHashes.size(); ++i)
-
154  {
-
155  if (!isEmptyBranch(i))
-
156  {
-
157  s.addBitString(mHashes[i].as_uint256());
-
158  s.add8(i);
-
159  }
-
160  }
-
161 
-
162  s.add8(wireTypeCompressedInner);
-
163  }
-
164  else
-
165  {
-
166  for (auto const& hh : mHashes)
-
167  s.addBitString(hh.as_uint256());
-
168 
-
169  s.add8(wireTypeInner);
-
170  }
-
171 }
-
172 
-
173 void
-
174 SHAMapInnerNode::serializeWithPrefix(Serializer& s) const
-
175 {
-
176  assert(!isEmpty());
+
149  ret->resizeChildArrays(ret->getBranchCount());
+
150 
+
151  if (hashValid)
+
152  ret->hash_ = hash;
+
153  else
+
154  ret->updateHash();
+
155  return ret;
+
156 }
+
157 
+
158 std::shared_ptr<SHAMapTreeNode>
+
159 SHAMapInnerNode::makeCompressedInner(Slice data)
+
160 {
+
161  Serializer s(data.data(), data.size());
+
162 
+
163  int len = s.getLength();
+
164 
+
165  auto ret = std::make_shared<SHAMapInnerNode>(0, branchFactor);
+
166 
+
167  auto retHashes = ret->hashesAndChildren_.getHashes();
+
168  for (int i = 0; i < (len / 33); ++i)
+
169  {
+
170  int pos;
+
171 
+
172  if (!s.get8(pos, 32 + (i * 33)))
+
173  Throw<std::runtime_error>("short CI node");
+
174 
+
175  if ((pos < 0) || (pos >= branchFactor))
+
176  Throw<std::runtime_error>("invalid CI node");
177 
-
178  s.add32(HashPrefix::innerNode);
-
179  for (auto const& hh : mHashes)
-
180  s.addBitString(hh.as_uint256());
-
181 }
-
182 
-
183 bool
-
184 SHAMapInnerNode::isEmpty() const
-
185 {
-
186  return mIsBranch == 0;
-
187 }
-
188 
-
189 int
-
190 SHAMapInnerNode::getBranchCount() const
-
191 {
-
192  int count = 0;
-
193 
-
194  for (int i = 0; i < 16; ++i)
-
195  if (!isEmptyBranch(i))
-
196  ++count;
-
197 
-
198  return count;
-
199 }
-
200 
-
201 std::string
-
202 SHAMapInnerNode::getString(const SHAMapNodeID& id) const
-
203 {
-
204  std::string ret = SHAMapTreeNode::getString(id);
-
205  for (int i = 0; i < mHashes.size(); ++i)
-
206  {
-
207  if (!isEmptyBranch(i))
-
208  {
-
209  ret += "\n";
-
210  ret += std::to_string(i);
-
211  ret += " = ";
-
212  ret += to_string(mHashes[i]);
-
213  }
-
214  }
-
215  return ret;
-
216 }
-
217 
-
218 // We are modifying an inner node
-
219 void
-
220 SHAMapInnerNode::setChild(int m, std::shared_ptr<SHAMapTreeNode> const& child)
-
221 {
-
222  assert((m >= 0) && (m < 16));
-
223  assert(cowid_ != 0);
-
224  assert(child.get() != this);
-
225  mHashes[m].zero();
-
226  hash_.zero();
-
227  if (child)
-
228  mIsBranch |= (1 << m);
-
229  else
-
230  mIsBranch &= ~(1 << m);
-
231  mChildren[m] = child;
-
232 }
-
233 
-
234 // finished modifying, now make shareable
-
235 void
-
236 SHAMapInnerNode::shareChild(int m, std::shared_ptr<SHAMapTreeNode> const& child)
-
237 {
-
238  assert((m >= 0) && (m < 16));
-
239  assert(cowid_ != 0);
-
240  assert(child);
-
241  assert(child.get() != this);
-
242 
-
243  mChildren[m] = child;
-
244 }
-
245 
-
246 SHAMapTreeNode*
-
247 SHAMapInnerNode::getChildPointer(int branch)
-
248 {
-
249  assert(branch >= 0 && branch < 16);
-
250 
-
251  std::lock_guard lock(childLock);
-
252  return mChildren[branch].get();
+
178  s.getBitString(retHashes[pos].as_uint256(), i * 33);
+
179 
+
180  if (retHashes[pos].isNonZero())
+
181  ret->isBranch_ |= (1 << pos);
+
182  }
+
183 
+
184  ret->resizeChildArrays(ret->getBranchCount());
+
185 
+
186  ret->updateHash();
+
187 
+
188  return ret;
+
189 }
+
190 
+
191 void
+
192 SHAMapInnerNode::updateHash()
+
193 {
+
194  uint256 nh;
+
195  if (isBranch_ != 0)
+
196  {
+
197  sha512_half_hasher h;
+
198  using beast::hash_append;
+
199  hash_append(h, HashPrefix::innerNode);
+
200  iterChildren([&](SHAMapHash const& hh) { hash_append(h, hh); });
+
201  nh = static_cast<typename sha512_half_hasher::result_type>(h);
+
202  }
+
203  hash_ = SHAMapHash{nh};
+
204 }
+
205 
+
206 void
+
207 SHAMapInnerNode::updateHashDeep()
+
208 {
+
209  SHAMapHash* hashes;
+
210  std::shared_ptr<SHAMapTreeNode>* children;
+
211  // structured bindings can't be captured in c++ 17; use tie instead
+
212  std::tie(std::ignore, hashes, children) =
+
213  hashesAndChildren_.getHashesAndChildren();
+
214  iterNonEmptyChildIndexes([&](auto branchNum, auto indexNum) {
+
215  if (children[indexNum] != nullptr)
+
216  hashes[indexNum] = children[indexNum]->getHash();
+
217  });
+
218  updateHash();
+
219 }
+
220 
+
221 void
+
222 SHAMapInnerNode::serializeForWire(Serializer& s) const
+
223 {
+
224  assert(!isEmpty());
+
225 
+
226  // If the node is sparse, then only send non-empty branches:
+
227  if (getBranchCount() < 12)
+
228  {
+
229  // compressed node
+
230  auto hashes = hashesAndChildren_.getHashes();
+
231  iterNonEmptyChildIndexes([&](auto branchNum, auto indexNum) {
+
232  s.addBitString(hashes[indexNum].as_uint256());
+
233  s.add8(branchNum);
+
234  });
+
235  s.add8(wireTypeCompressedInner);
+
236  }
+
237  else
+
238  {
+
239  iterChildren(
+
240  [&](SHAMapHash const& hh) { s.addBitString(hh.as_uint256()); });
+
241  s.add8(wireTypeInner);
+
242  }
+
243 }
+
244 
+
245 void
+
246 SHAMapInnerNode::serializeWithPrefix(Serializer& s) const
+
247 {
+
248  assert(!isEmpty());
+
249 
+
250  s.add32(HashPrefix::innerNode);
+
251  iterChildren(
+
252  [&](SHAMapHash const& hh) { s.addBitString(hh.as_uint256()); });
253 }
254 
-
255 std::shared_ptr<SHAMapTreeNode>
-
256 SHAMapInnerNode::getChild(int branch)
-
257 {
-
258  assert(branch >= 0 && branch < 16);
-
259 
-
260  std::lock_guard lock(childLock);
-
261  return mChildren[branch];
-
262 }
-
263 
-
264 std::shared_ptr<SHAMapTreeNode>
-
265 SHAMapInnerNode::canonicalizeChild(
-
266  int branch,
-
267  std::shared_ptr<SHAMapTreeNode> node)
-
268 {
-
269  assert(branch >= 0 && branch < 16);
-
270  assert(node);
-
271  assert(node->getHash() == mHashes[branch]);
-
272 
-
273  std::lock_guard lock(childLock);
-
274  if (mChildren[branch])
-
275  {
-
276  // There is already a node hooked up, return it
-
277  node = mChildren[branch];
-
278  }
-
279  else
-
280  {
-
281  // Hook this node up
-
282  mChildren[branch] = node;
-
283  }
-
284  return node;
-
285 }
-
286 
-
287 void
-
288 SHAMapInnerNode::invariants(bool is_root) const
-
289 {
-
290  unsigned count = 0;
-
291  for (int i = 0; i < 16; ++i)
-
292  {
-
293  if (mHashes[i].isNonZero())
-
294  {
-
295  assert((mIsBranch & (1 << i)) != 0);
-
296  if (mChildren[i] != nullptr)
-
297  mChildren[i]->invariants();
-
298  ++count;
-
299  }
-
300  else
-
301  {
-
302  assert((mIsBranch & (1 << i)) == 0);
-
303  }
-
304  }
-
305  if (!is_root)
-
306  {
-
307  assert(hash_.isNonZero());
-
308  assert(count >= 1);
-
309  }
-
310  assert((count == 0) ? hash_.isZero() : hash_.isNonZero());
-
311 }
-
312 
-
313 } // namespace ripple
+
255 bool
+
256 SHAMapInnerNode::isEmpty() const
+
257 {
+
258  return isBranch_ == 0;
+
259 }
+
260 
+
261 int
+
262 SHAMapInnerNode::getBranchCount() const
+
263 {
+
264  return popcnt16(isBranch_);
+
265 }
+
266 
+
267 std::string
+
268 SHAMapInnerNode::getString(const SHAMapNodeID& id) const
+
269 {
+
270  std::string ret = SHAMapTreeNode::getString(id);
+
271  auto hashes = hashesAndChildren_.getHashes();
+
272  iterNonEmptyChildIndexes([&](auto branchNum, auto indexNum) {
+
273  ret += "\nb";
+
274  ret += std::to_string(branchNum);
+
275  ret += " = ";
+
276  ret += to_string(hashes[indexNum]);
+
277  });
+
278  return ret;
+
279 }
+
280 
+
281 // We are modifying an inner node
+
282 void
+
283 SHAMapInnerNode::setChild(int m, std::shared_ptr<SHAMapTreeNode> const& child)
+
284 {
+
285  assert((m >= 0) && (m < branchFactor));
+
286  assert(cowid_ != 0);
+
287  assert(child.get() != this);
+
288 
+
289  auto const dstIsBranch = [&] {
+
290  if (child)
+
291  return isBranch_ | (1 << m);
+
292  else
+
293  return isBranch_ & ~(1 << m);
+
294  }();
+
295 
+
296  auto const dstToAllocate = popcnt16(dstIsBranch);
+
297  // change hashesAndChildren to remove the element, or make room for the
+
298  // added element, if necessary
+
299  hashesAndChildren_ = TaggedPointer(
+
300  std::move(hashesAndChildren_), isBranch_, dstIsBranch, dstToAllocate);
+
301 
+
302  isBranch_ = dstIsBranch;
+
303 
+
304  if (child)
+
305  {
+
306  auto const childIndex = *getChildIndex(m);
+
307  auto [_, hashes, children] = hashesAndChildren_.getHashesAndChildren();
+
308  hashes[childIndex].zero();
+
309  children[childIndex] = child;
+
310  }
+
311 
+
312  hash_.zero();
+
313 
+
314  assert(getBranchCount() <= hashesAndChildren_.capacity());
+
315 }
+
316 
+
317 // finished modifying, now make shareable
+
318 void
+
319 SHAMapInnerNode::shareChild(int m, std::shared_ptr<SHAMapTreeNode> const& child)
+
320 {
+
321  assert((m >= 0) && (m < branchFactor));
+
322  assert(cowid_ != 0);
+
323  assert(child);
+
324  assert(child.get() != this);
+
325 
+
326  assert(!isEmptyBranch(m));
+
327  hashesAndChildren_.getChildren()[*getChildIndex(m)] = child;
+
328 }
+
329 
+
330 SHAMapTreeNode*
+
331 SHAMapInnerNode::getChildPointer(int branch)
+
332 {
+
333  assert(branch >= 0 && branch < branchFactor);
+
334  assert(!isEmptyBranch(branch));
+
335 
+
336  std::lock_guard lock(childLock);
+
337  return hashesAndChildren_.getChildren()[*getChildIndex(branch)].get();
+
338 }
+
339 
+
340 std::shared_ptr<SHAMapTreeNode>
+
341 SHAMapInnerNode::getChild(int branch)
+
342 {
+
343  assert(branch >= 0 && branch < branchFactor);
+
344  assert(!isEmptyBranch(branch));
+
345 
+
346  std::lock_guard lock(childLock);
+
347  return hashesAndChildren_.getChildren()[*getChildIndex(branch)];
+
348 }
+
349 
+
350 SHAMapHash const&
+
351 SHAMapInnerNode::getChildHash(int m) const
+
352 {
+
353  assert((m >= 0) && (m < branchFactor));
+
354  if (auto const i = getChildIndex(m))
+
355  return hashesAndChildren_.getHashes()[*i];
+
356 
+
357  return zeroSHAMapHash;
+
358 }
+
359 
+
360 std::shared_ptr<SHAMapTreeNode>
+
361 SHAMapInnerNode::canonicalizeChild(
+
362  int branch,
+
363  std::shared_ptr<SHAMapTreeNode> node)
+
364 {
+
365  assert(branch >= 0 && branch < branchFactor);
+
366  assert(node);
+
367  assert(!isEmptyBranch(branch));
+
368  auto const childIndex = *getChildIndex(branch);
+
369  auto [_, hashes, children] = hashesAndChildren_.getHashesAndChildren();
+
370  assert(node->getHash() == hashes[childIndex]);
+
371 
+
372  std::lock_guard lock(childLock);
+
373  if (children[childIndex])
+
374  {
+
375  // There is already a node hooked up, return it
+
376  node = children[childIndex];
+
377  }
+
378  else
+
379  {
+
380  // Hook this node up
+
381  children[childIndex] = node;
+
382  }
+
383  return node;
+
384 }
+
385 
+
386 void
+
387 SHAMapInnerNode::invariants(bool is_root) const
+
388 {
+
389  unsigned count = 0;
+
390  auto [numAllocated, hashes, children] =
+
391  hashesAndChildren_.getHashesAndChildren();
+
392 
+
393  if (numAllocated != branchFactor)
+
394  {
+
395  auto const branchCount = getBranchCount();
+
396  for (int i = 0; i < branchCount; ++i)
+
397  {
+
398  assert(hashes[i].isNonZero());
+
399  if (children[i] != nullptr)
+
400  children[i]->invariants();
+
401  ++count;
+
402  }
+
403  }
+
404  else
+
405  {
+
406  for (int i = 0; i < branchFactor; ++i)
+
407  {
+
408  if (hashes[i].isNonZero())
+
409  {
+
410  assert((isBranch_ & (1 << i)) != 0);
+
411  if (children[i] != nullptr)
+
412  children[i]->invariants();
+
413  ++count;
+
414  }
+
415  else
+
416  {
+
417  assert((isBranch_ & (1 << i)) == 0);
+
418  }
+
419  }
+
420  }
+
421 
+
422  if (!is_root)
+
423  {
+
424  assert(hash_.isNonZero());
+
425  assert(count >= 1);
+
426  }
+
427  assert((count == 0) ? hash_.isZero() : hash_.isNonZero());
+
428 }
+
429 
+
430 } // namespace ripple
std::uint32_t cowid() const
Returns the SHAMap that owns this node.
-
void serializeWithPrefix(Serializer &) const override
Serialize the node in a format appropriate for hashing.
-
void setChild(int m, std::shared_ptr< SHAMapTreeNode > const &child)
-
std::shared_ptr< SHAMapTreeNode > clone(std::uint32_t cowid) const override
Make a copy of this node, setting the owner.
+
void serializeWithPrefix(Serializer &) const override
Serialize the node in a format appropriate for hashing.
+
void setChild(int m, std::shared_ptr< SHAMapTreeNode > const &child)
+
std::shared_ptr< SHAMapTreeNode > clone(std::uint32_t cowid) const override
Make a copy of this node, setting the owner.
+
SHAMapInnerNode(std::uint32_t cowid, std::uint8_t numAllocatedChildren=branchFactor)
+
std::optional< int > getChildIndex(std::uint16_t isBranch, int i) const
Get the child's index inside the hashes or children array (which may or may not be sparse).
STL class.
STL class.
-
std::array< SHAMapHash, 16 > mHashes
+
TaggedPointer hashesAndChildren_
Opaque type that contains the hashes array (array of type SHAMapHash) and the children array (array o...
Returns the SHA512-Half digest of a message.
Definition: digest.h:166
-
std::shared_ptr< SHAMapTreeNode > getChild(int branch)
+
std::shared_ptr< SHAMapTreeNode > getChild(int branch)
An immutable linear range of bytes.
Definition: Slice.h:44
-
static std::shared_ptr< SHAMapTreeNode > makeFullInner(Slice data, SHAMapHash const &hash, bool hashValid)
-
virtual std::shared_ptr< SHAMapTreeNode > canonicalizeChild(int branch, std::shared_ptr< SHAMapTreeNode > node)
+
static std::shared_ptr< SHAMapTreeNode > makeFullInner(Slice data, SHAMapHash const &hash, bool hashValid)
+
virtual std::shared_ptr< SHAMapTreeNode > canonicalizeChild(int branch, std::shared_ptr< SHAMapTreeNode > node)
std::uint32_t cowid_
Determines the owning SHAMap, if any.
-
std::uint32_t mFullBelowGen
int add8(unsigned char i)
Definition: Serializer.cpp:158
-
void updateHash() override
Recalculate the hash of this node.
+
void updateHash() override
Recalculate the hash of this node.
STL class.
bool isZero() const
-
void shareChild(int m, std::shared_ptr< SHAMapTreeNode > const &child)
+
static constexpr unsigned int branchFactor
Each inner node has 16 children (the 'radix tree' part of the map)
+
void shareChild(int m, std::shared_ptr< SHAMapTreeNode > const &child)
static constexpr unsigned const char wireTypeInner
std::string to_string(ListDisposition disposition)
Identifies a node inside a SHAMap.
Definition: SHAMapNodeID.h:33
bool isNonZero() const
virtual std::string getString(SHAMapNodeID const &) const
SHAMapHash hash_
+
void iterChildren(F &&f) const
Call the f callback for all 16 (branchFactor) branches - even if the branch is empty.
+
TaggedPointer is a combination of a pointer and a mask stored in the lowest two bits.
Definition: TaggedPointer.h:57
-
bool isEmptyBranch(int m) const
+
T tie(T... args)
+
bool isEmptyBranch(int m) const
+
void iterNonEmptyChildIndexes(F &&f) const
Call the f callback for all non-empty branches.
-
std::string getString(SHAMapNodeID const &) const override
+
std::string getString(SHAMapNodeID const &) const override
@ innerNode
inner node in V1 tree
+
SHAMapHash const & getChildHash(int m) const
+
void resizeChildArrays(std::uint8_t toAllocate)
Convert arrays stored in hashesAndChildren_ so they can store the requested number of children.
+
SHAMapHash * getHashes() const
Get the hashes array.
+
bool isDense() const
Check if the arrays have a dense format.
T to_string(T... args)
+
std::optional< int > getChildIndex(int i) const
Get the child's index inside the hashes or children array (stored in hashesAndChildren_.
bool get8(int &, int offset) const
Definition: Serializer.cpp:166
-
void updateHashDeep()
Recalculate the hash of all children and this node.
-
int getBranchCount() const
+
void updateHashDeep()
Recalculate the hash of all children and this node.
+
std::uint16_t isBranch_
+
int getBranchCount() const
-
+
void iterNonEmptyChildIndexes(std::uint16_t isBranch, F &&f) const
Call the f callback for all non-empty branches.
+
SHAMapHash const & getHash() const
Return the hash of this node.
Definition: Serializer.h:39
static constexpr unsigned const char wireTypeCompressedInner
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
-
void serializeForWire(Serializer &) const override
Serialize the node in a format appropriate for sending over the wire.
+
void serializeForWire(Serializer &) const override
Serialize the node in a format appropriate for sending over the wire.
int addBitString(base_uint< Bits, Tag > const &v)
Definition: Serializer.h:97
bool getBitString(base_uint< Bits, Tag > &data, int offset) const
Definition: Serializer.h:144
-
int mIsBranch
void zero()
std::enable_if_t< is_contiguously_hashable< T, Hasher >::value > hash_append(Hasher &h, T const &t) noexcept
Logically concatenate input data to a Hasher.
Definition: hash_append.h:237
void hash_append(Hasher &h, Slice const &v)
Definition: Slice.h:195
-
static std::mutex childLock
+
static std::mutex childLock
+
+
std::shared_ptr< SHAMapTreeNode > * getChildren() const
Get the children array.
int add32(std::uint32_t i)
Definition: Serializer.cpp:38
-
bool isEmpty() const
-
static std::shared_ptr< SHAMapTreeNode > makeCompressedInner(Slice data)
-
SHAMapTreeNode * getChildPointer(int branch)
+
void iterChildren(std::uint16_t isBranch, F &&f) const
Call the f callback for all 16 (branchFactor) branches - even if the branch is empty.
+
bool isEmpty() const
+
static std::shared_ptr< SHAMapTreeNode > makeCompressedInner(Slice data)
+
std::tuple< std::uint8_t, SHAMapHash *, std::shared_ptr< SHAMapTreeNode > * > getHashesAndChildren() const
Get the number of elements in each array and a pointer to the start of each array.
+
uint256 const & as_uint256() const
+
SHAMapTreeNode * getChildPointer(int branch)
+
std::uint8_t capacity() const
Get the number of elements allocated for each array.
int getLength() const
Definition: Serializer.h:197
-
void invariants(bool is_root=false) const override
-
std::shared_ptr< SHAMapTreeNode > mChildren[16]
+
void invariants(bool is_root=false) const override
+
std::uint32_t fullBelowGen_