LibAddressSet.sol

LibAddressSet 提供了存储Address类型的Set数据结构,支持包括add, remove, contains, get, getAll, size等方法。

使用方法

首先需要通过import引入LibAddressSet类库,然后通过”.”进行方法调用,如下为调用LibAddressSet方法的例子:

pragma solidity >=0.4.24 <0.6.11;

import "./LibAddressSet.sol";

contract Test {
    using LibAddressSet for LibAddressSet.AddressSet;
    LibAddressSet.AddressSet private addressSet;

    event Log(uint256 size);
    
    function testAddress() public {
        addressSet.add(address(1));
        uint256 size = addressSet.getSize();//Expected to be 1
        emit Log(size);
    }
}

API列表

编号 API API描述
1 add(AddressSet storage self, address value) internal 往Set里添加元素。
2 contains(AddressSet storage self, address value) internal view returns (bool) 判断Set里是否包含了元素value。
3 remove(AddressSet storage self, address value) internal 删除Set中的元素。
4 size(AddressSet storage self) internal view returns (uint256) 获取Set内元素数。
5 get(AddressSet storage self, uint256 index) internal view returns (address) 查询某个Set的元素。
6 getAll(AddressSet storage self) internal view returns(address[]) 返回所有元素。

API详情

1. add 函数

往Set里添加元素

参数

  • AddressSet: set容器
  • address: 元素

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibAddressSet.sol";

contract Test {
    using LibAddressSet for LibAddressSet.AddressSet;
    LibAddressSet.AddressSet private addressSet;

    event Log(uint256 size);
    
    function testAddress() public {
        addressSet.add(address(1));
        uint256 size = addressSet.getSize();//Expected to be 1
        emit Log(size);
    }

}

2. contains 函数

判断Set里是否包含了元素value。

参数

  • AddressSet: set容器
  • address: 元素

返回值

  • bool: 是否包含

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibAddressSet.sol";

contract Test {
    using LibAddressSet for LibAddressSet.AddressSet;
    LibAddressSet.AddressSet private addressSet;

    event Log(bool b);
    
    function testAddress() public {
        addressSet.add(address(1));
        emit Log(addressSet.contains(address(1)));//Expected true
    }

}

3. remove 函数

删除Set中的指定元素

参数

  • AddressSet: set容器
  • address: 元素

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibAddressSet.sol";

contract Test {
    using LibAddressSet for LibAddressSet.AddressSet;
    LibAddressSet.AddressSet private addressSet;

    event Log(bool b);
    
    function testAddress() public {
        addressSet.add(address(1));
        addressSet.remove(address(1));
        emit Log(addressSet.contains(address(1)));
    }

}

4. getSize 函数

查询Set中的元素数量。

参数

  • AddressSet: set容器

返回值

  • uint256: 元素数量

实例

    uint256 setSize = addressSet.getSize();

5. get 函数

查询Set中指定index的值

参数

  • AddressSet: set容器
  • uint256: index

返回值

  • address: 元素

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibAddressSet.sol";

contract Test {
    using LibAddressSet for LibAddressSet.AddressSet;
    LibAddressSet.AddressSet private addressSet;

    event Log(bool b);
    
    function testAddress() public returns(address) {
        addressSet.add(address(1));
        addressSet.add(address(2));
        return addressSet.get(1);//Expected be 2
    }

}

6. getAll 函数

查询Set中所有的值,返回一个address[]数组

参数

  • AddressSet: set容器

返回值

  • address[]: 所有元素值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibAddressSet.sol";

contract Test {
    using LibAddressSet for LibAddressSet.AddressSet;
    LibAddressSet.AddressSet private addressSet;

    event Log(bool b);
    
    function testAddress() public returns(address[] memory) {
        addressSet.add(address(1));
        addressSet.add(address(2));
        return addressSet.getAll();//Expected be 2
    }

}