LibQueue.sol

LibQueue提供了FIFO队列数据结构。

使用方法

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

pragma solidity >=0.4.24 <0.6.11;

import "./LibQueue.sol";

contract Test {
    
    using LibQueue for LibQueue.Queue;
    
    LibQueue.Queue private queue;
    
    function f() public {
        queue.enqueue(bytes32(uint(1)));
        queue.enqueue(bytes32(uint(1)));
        bytes32 pop = queue.dequeue();//Expected to be 1
        uint size = queue.getSize();//Expected to be 1
    }
    
}

API列表

编号 API API描述
1 enqueue(Queue storage queue, bytes32 data) public 入队
2 dequeue(Queue storage queue) public returns (bytes32) 出队
3 getSize(Queue storage self) internal view returns(uint256) 获取队列元素数
4 element(Queue storage queue) public view returns (bytes32) 查询下一个队列中的值,但不从queue中删除。

API详情

1. enqueue 函数

入队

参数

  • Queue:队列
  • bytes32: 元素

返回值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibQueue.sol";

contract Test {
    
    using LibQueue for LibQueue.Queue;
    
    LibQueue.Queue private queue;
    
    function f() public returns(uint) {
        queue.enqueue(bytes32(uint(1)));
        queue.enqueue(bytes32(uint(2)));
        uint size = queue.getSize();//Expected to be 2
        return (size);
    }
    
}

2. dequeue 函数

出队一个元素

参数

  • Queue: 队列

返回值

  • bytes32:队列元素值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibQueue.sol";

contract Test {
    
    using LibQueue for LibQueue.Queue;
    
    LibQueue.Queue private queue;
    
    function f() public returns(bytes32, uint) {
        queue.enqueue(bytes32(uint(1)));
        queue.enqueue(bytes32(uint(2)));
        bytes32 head = queue.dequeue();//Expteced to be 1
        uint size = queue.getSize();//Expected to be 1
        return (head, size);
    }
    
}

3. getSize 函数

查询队列大小

参数

  • Queue: 队列

返回值

  • uint256: 队列大小

实例

    uint size = queue.getSize();//Expected to be 2

4. element 函数

查询队列中的下一个元素,如果队列为空,则函数查询不成功。

参数

  • Queue: 队列

返回值

  • bytes32:队列元素值

实例

pragma solidity >=0.4.24 <0.6.11;

import "./LibQueue.sol";

contract Test {
    
    using LibQueue for LibQueue.Queue;
    
    LibQueue.Queue private queue;
    
    function f() public returns(bytes32, uint) {
        queue.enqueue(bytes32(uint(1)));
        queue.enqueue(bytes32(uint(2)));
        bytes32 head = queue.element();//Expteced to be 1
        uint size = queue.getSize();//Expected to be 2
        return (head, size);
    }
    
}