递归与非递归

//递归
bool HtmImportDocument::hasSheetFilter(const HtmBox* htmBox)
{
 ASSERT(htmBox != NULL);

 int childCount = 0;
 if (htmBox->name() == Context::sStrHtml().sTr
  && (childCount = htmBox->childCount()) >= 1)
 {
  for (int i = 0; i < childCount; i++)
  {
   const HtmBox* tdBox = htmBox->childItem(i);
   if (tdBox != NULL && tdBox->name() == Context::sStrHtml().sTd)
   {
    AttrSlotsId slot = tdBox->attrSlots();
    if (slot.v() != 0)
    {
     const AttrPack* pack = Context::sGainPackFromSlots(slot).v();
     if(pack->getAttr(Context::sStrAttrName().sX_autofilter)
      || pack->getAttr(Context::sStrAttrName().sX_autofilterrange))
      return true; 
    }
   }
  }
 }
 else
 {
  if ((htmBox->name() == Context::sStrHtml().sBody
   || htmBox->name() == Context::sStrHtml().sTable
   || htmBox->name() == Context::sStrHtml().sTr)
   && (childCount = htmBox->childCount()) >= 1)
  {
   for (int i = 0; i < childCount; i++)
   {
    const HtmBox* childBox = htmBox->childItem(i);
       if (hasSheetFilter(childBox) == true)
     return true;
   }
  }
 }

 return false;
}

//非递归
bool HtmImportDocument::hasSheetFilter(const HtmBox* body)
{
 ASSERT(body != NULL);
 int childCount = 0;
 if (body->name() == Context::sStrHtml().sBody
  && (childCount = body->childCount()) >= 1)
 {
  for (int i= 0; i < childCount; i++)
  {
   const HtmBox* tableBox = body->childItem(i);
   int tableCount = 0;
   if (tableBox != NULL
    && tableBox->name() == Context::sStrHtml().sTable
    && (tableCount = tableBox->childCount()) >= 1)
   {
    for (int j = 0; j < tableCount; j++)
    {
     const HtmBox* trBox = tableBox->childItem(j);
     int trCount = 0;
     if (trBox != NULL
      && trBox->name() == Context::sStrHtml().sTr
      && (trCount = trBox->childCount()) >= 1)
     {
      for (int k = 0; k < trCount; k++)
      {
       const HtmBox* tdBox = trBox->childItem(k);
       if (tdBox != NULL && tdBox->name() == Context::sStrHtml().sTd)
       {
        AttrSlotsId slot = tdBox->attrSlots();
        if (slot.v() != 0)
        {
         const AttrPack* pack = Context::sGainPackFromSlots(slot).v();
         if(pack->getAttr(Context::sStrAttrName().sX_autofilter)
          || pack->getAttr(Context::sStrAttrName().sX_autofilterrange))
          return true; 
        }
       }
      }
     }
    }
   }
  } 
 }

 return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值