30 lines
871 B
Solidity
30 lines
871 B
Solidity
|
// SPDX-License-Identifier: CC0-1.0
|
||
|
pragma solidity ^0.8.0;
|
||
|
|
||
|
import "./ERC6150.sol";
|
||
|
import "./interfaces/IERC6150Enumerable.sol";
|
||
|
|
||
|
abstract contract ERC6150Enumerable is ERC6150, IERC6150Enumerable {
|
||
|
function childrenCountOf(
|
||
|
uint256 parentId
|
||
|
) external view virtual override returns (uint256) {
|
||
|
return childrenOf(parentId).length;
|
||
|
}
|
||
|
|
||
|
function childOfParentByIndex(
|
||
|
uint256 parentId,
|
||
|
uint256 index
|
||
|
) external view virtual override returns (uint256) {
|
||
|
uint256[] memory children = childrenOf(parentId);
|
||
|
return children[index];
|
||
|
}
|
||
|
|
||
|
function indexInChildrenEnumeration(
|
||
|
uint256 parentId,
|
||
|
uint256 tokenId
|
||
|
) external view virtual override returns (uint256) {
|
||
|
require(parentOf(tokenId) == parentId, "wrong parent");
|
||
|
return _getIndexInChildrenArray(tokenId);
|
||
|
}
|
||
|
}
|