分析
本文中我们分析WarehouseBase,SingleValueWarehouse,MultiValueWarehouse这三个类。
首先,我们看下它们之间的关系:
WarehouseBase
WarehouseBase是一个纯虚类,里面定义了一系列的接口
这些接口可以分为如下几类:
标签 | 说明 |
---|---|
添加 |
|
删除 |
|
查询 |
|
SingleValueWarehouse
我们来先看下SingleValueWarehouse。
- 第一点,它继承了WarehouseBase
- 它本质上来说,只有一个成员:
- 可以看到它是一个map,它相当于一个记事簿,里面记录了一些角色(Warehouse可以翻译为仓库)
- 推测上面接口中所有的增删改都是针对这个记事簿来做的
成员 | 说明 |
---|---|
RoleMap roles_; |
|
我们来看下增:
可以看到功能就是:使用身份证key把role注册到仓库中
- 一个key只对应一个role
- 一个role可能有多个key
- (默认如果key已经存在,那么就不允许注册,如果将ignore_if_exist设置为false,那么如果key已经存在,那么替换为新role)
通过Size()可以查询到当前仓库中已经放置了多少个角色(或者说身份证更合适???)
还可以通过GetAllRoles()获取仓库中的所有角色或者角色属性
其他的接口类似
接口 | 说明 |
---|---|
bool Search(uint64_t key) override | key对应的角色是否存在 |
bool Search(uint64_t key, RolePtr* first_matched_role) override; | key对应的角色是否存在,如果存在,那么将匹配的角色通过first_matched_role返回 |
bool Search(uint64_t key, proto::RoleAttributes* first_matched_role_attr) override; | key对应的角色是否存在,如果存在,那么将匹配的角色属性通过first_matched_role返回 |
bool Search(uint64_t key, std::vector< RolePtr>* matched_roles) override; | key对应的角色是否存在,如果存在,那么将匹配的角色通过matched_roles返回(实际上,只有一个) |
bool Search(uint64_t key,std::vector< proto::RoleAttributes>* matched_roles_attr) override; | key对应的角色是否存在,如果存在,那么将匹配的角色属性通过matched_roles_attr返回(实际上,只有一个) |
MultiValueWarehouse
然后我们看下MultiValueWarehouse,它跟几乎一模一样,只是它的记事本是unordered_multimap的
map不允许容器中有重复key值元素 , multimap允许容器中有重复key值元素