您的位置:首页 > 其它

采用掩码方式简化产品国家地区支持能力的表示

2014-05-16 16:38 218 查看

一、背景描述

某系列产品中,不同产品、国家和地区支持不同的配置项(但差异不大)。各配置项均由其BranchLeaf结点值(BLV)唯一标识。

作为ONU通用配置媒介之一,某模块对各配置项创建合法性校验函数IsBranchLeafValid(…),其中包含的结点列表表示产品缺省支持的所有配置项,类似“白名单”;此外根据各国家地区的要求创建屏蔽函数IsBranchLeafScreened (…),其中包含的结点列表表示该国家/地区不予支持的配置项,类似“黑名单”。其中,“黑名单”列表为“白名单”列表的子集。两个名单结合起来对接收到的OLT配置帧进行校验,从而表现出不同的支持能力。

因此,对于M个产品,N个国家地区,在物理上将需要M+N个黑白名单。具体实现上,黑白名单函数内充斥着大量if...else与switch...case结构:

BOOL IsBranchLeafSupported(OAM_BRANCH_LEAF eBranchLeaf)
{
INT32U dwMapIdx = 0;
for(dwMapIdx = 0; dwMapIdx < gOamCmdMapNum; dwMapIdx++)
{
if(eBranchLeaf == gOamCmdFuncMap[dwMapIdx].eBranchLeaf)
break;

}
if(dwMapIdx == gOamCmdMapNum)
{
CtcOamLog(FUNCTION_Oam,"Unknown BranchLeaf(0x%08X)!\n", eBranchLeaf);
return FALSE;
}

if(GET_BIT(gOamCmdFuncMap[dwMapIdx].ucProductMask, PRODUCT_SHIFT)  //也可先&&后GET_BIT
&& GET_BIT(gOamCmdFuncMap[dwMapIdx].dwNationMask, gdwRegionVer.ucNatShift)
&& GET_BIT(gOamCmdFuncMap[dwMapIdx].dwRegionMask, gdwRegionVer.ucRegShift))
return TRUE;

return FALSE;
}


View Code

四、总结说明

1. 采用掩码的表示方法,可极大地消除冗余度和增强扩展性。

可支持10个产品、32个国家及31个地区的不同配置能力,已支持5个产品、1个国家(缺省)和两个地区,后续新增产品、国家、地区只需要修改掩码值即可,无需增加代码。

2. 相比原有做法,掩码方式在可读性和易用性方面稍嫌不足,可编写掩码的生成和解析函数或工具予以弥补。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐