• Rocket core EventSet


    https://mp.weixin.qq.com/s/0GSNIf0wCApPi8XYwa8MdQ

     

    简单介绍EventSet的实现。

     

     

    1. EventSet

     

    定义事件集合:

     

    0) 类参数

     

    EventSet类包含两个类参数:

    a. gate: (UInt, UInt) => Bool:使用两个参数,返回一个Bool;

    b. events:事件序列;

    c. event:事件的类型为:(String, () => Bool),这是一个二元组:第一个是事件名字符串,第二个是事件返回是否触发的方法;

     

    1) size

     

    返回事件集合中事件的个数。

     

    2) hits

     

    表示事件是否触发,把每个事件是否触发的Bool整合成为UInt返回。

     

    3) check

     

    使用掩码和gate方法来过滤hits,以检察某个事件是否触发。

     

    4) dump

     

    打印触发的事件的名称。

     

    5) withCovers

     

    为每个事件添加覆盖测试。

     

    2. EventSets

     

    定义多个事件集合:

     

    0) 数据成员

     

    a. 类参数:eventsSets:事件集合的序列;

    b. eventSetIdBits:事件集合的ID所占用的位宽;

     

    1) maskEventSelector

     

    这是一个动(词)名(词)结构,对event selector进行mask,取出有效的事件选择位:

    其中:

    a. 参数eventSel是一个事件选择器;

    b. setMask表示事件集合的ID占用的有效位数;eventSetIdBits是为时间集合ID分配的总位数,这里是8;但是不一定用完这8位,由eventSets.size决定;

    c. maskMask从名称可知其是一个二级掩码,即事件集合掩码的掩码;多个事件集合中事件最多的集合中的事件数决定了事件集合掩码的位数;

    d. 左移eventSetIdBits位,表示低eventSetIdBits位是事件集合ID的掩码,高位是事件集合中事件的掩码;

    e. 由此可知,eventSel也是一个二级结构,低eventSetIdBits位表示选择的事件集合的ID,高位则表示该事件集合中事件的掩码;

    f. setMask | maskMask表示事件选择器中的全部有效位,eventSel与之相与则表示取出eventSel中的有效位,而忽略其余的无效位;

     

    2) decode

     

    解出event selector这个二级结构:

     

    3) evaluate

     

    根据事件选择器,确定其中的事件是否发生:

    其中:

    a. 首先使用decode解出事件集合set,事件集合中事件的掩码mask;

    b. 对各个事件集合使用mask进行check;

    c. 选择相应事件集合的check结果返回;

     

  • 相关阅读:
    wampserver服务器离线,无法访问此网站 找不到 项目 的服务器 DNS 地址。
    node.js(一)介绍与安装
    js全局函數
    类和对象的定义
    iframe框架学习
    while和do-while的区别
    html5视频音频
    列表
    html表格的学习
    云课堂数组1
  • 原文地址:https://www.cnblogs.com/wjcdx/p/16041059.html
Copyright © 2020-2023  润新知