@@ -19,8 +19,8 @@ contract DiamondLoupeFacet is IDiamondLoupe {
1919 /// @notice Gets all facet addresses and their function selectors.
2020 /// @return facets_ Facet
2121 function facets () external view returns (Facet[] memory facets_ ) {
22- DiamondStorage storage ds = LibDiamond.diamondStorage ();
23- uint256 facetCount = ds.facetAddresses.length ;
22+ DiamondStorage storage ds = LibDiamond._diamondStorage ();
23+ uint256 facetCount = ds.facetAddresses.length () ;
2424 facets_ = new Facet [](facetCount);
2525 for (uint256 facet; facet < facetCount;) {
2626 address facetAddr = ds.facetAddresses.at (facet);
@@ -35,27 +35,22 @@ contract DiamondLoupeFacet is IDiamondLoupe {
3535 /// @notice Gets all the function selectors provided by a facet.
3636 /// @param _facet The facet address.
3737 /// @return facetFunctionSelectors_
38- function facetFunctionSelectors (address _facet )
39- external
40- view
41- override
42- returns (bytes4 [] memory facetFunctionSelectors_ )
43- {
44- facetFunctionSelectors_ = LibDiamond.diamondStorage ().facetToSelectorsAndPosition[_facet].functionSelectors;
38+ function facetFunctionSelectors (address _facet ) external view override returns (bytes4 [] memory ) {
39+ return bytes32SetToBytes4 (LibDiamond._diamondStorage ().facetToSelectors[_facet].values ());
4540 }
4641
4742 /// @notice Get all the facet addresses used by a diamond.
4843 /// @return facetAddresses_
49- function facetAddresses () external view override returns (address [] memory facetAddresses_ ) {
50- facetAddresses_ = LibDiamond.diamondStorage ().facetAddresses;
44+ function facetAddresses () external view override returns (address [] memory ) {
45+ return LibDiamond._diamondStorage ().facetAddresses. values () ;
5146 }
5247
5348 /// @notice Gets the facet that supports the given selector.
5449 /// @dev If facet is not found return address(0).
5550 /// @param _functionSelector The function selector.
5651 /// @return facetAddress_ The facet address.
57- function facetAddress (bytes4 _functionSelector ) external view override returns (address facetAddress_ ) {
58- facetAddress_ = LibDiamond.diamondStorage ().selectorToFacetAndPosition [_functionSelector].facetAddress ;
52+ function facetAddress (bytes4 _functionSelector ) external view override returns (address ) {
53+ return LibDiamond._diamondStorage ().selectorToFacet [_functionSelector];
5954 }
6055
6156 /// @notice Query if a contract implements an interface
@@ -65,6 +60,12 @@ contract DiamondLoupeFacet is IDiamondLoupe {
6560 /// @return `true` if the contract implements `interfaceID` and
6661 /// `interfaceID` is not 0xffffffff, `false` otherwise
6762 function supportsInterface (bytes4 _interfaceId ) external view returns (bool ) {
68- return LibDiamond.diamondStorage ().supportedInterfaces[_interfaceId];
63+ return LibDiamond._diamondStorage ().supportedInterfaces[_interfaceId];
64+ }
65+
66+ function bytes32SetToBytes4 (bytes32 [] memory _data ) private pure returns (bytes4 [] memory result_ ) {
67+ assembly ("memory-safe" ) {
68+ result_ := _data
69+ }
6970 }
7071}
0 commit comments