Return TypeFunction nameArguments
hzEcodehzXmlNode::SelectSubnodes(hzVect<hzXmlNode*>&,hzMapM<hzString,hzXmlNode*>&,const char*,)

Declared in file: hzDocument.h
Defined in file : hzDocXml.cpp

Function Logic:

0:START 1:hzVect::Clear hzMapM::Count 2:!allsubnodes.Count() 3:Return E_NODATA 4:!criteria||!criteria[0] 5:nIndex 6:hzMapM::GetObj pnode hzVect::Add 7:Return E_OK 8:*i; 9:i[0]==(char)46 10:hzString::SetValue hzVect::Add j 11:i[0]==(char)61||(i[0]==(char)45&&i[1]==(char)62) 12:hzString::SetValue hzVect::Add j 13:j 14:S hzVect::Add hzVect::Count nIndex 15:nIndex; 16:S 17:hzMapM::First nLo 18:nLo<0 19:Return E_NODATA 20:hzMapM::Last nHi nX 21:nX<=nHi; 22:hzMapM::GetObj pnode 23:pnode->txtName()!=S 24:ar.Count()==1 25:hzVect::Add 26:Return E_OK

Function body:

hzEcode hzXmlNode::SelectSubnodes (hzVect<hzXmlNode*>& result, hzMapM<hzString,hzXmlNode*>& allsubnodes, const char* criteria)
{
   _hzfunc("hzXmlNode::SelectSubnodes") ;
   hzVect<hzString>    ar ;
   hzXmlNode*  pnode ;
   const char* i ;
   const char* j ;
   hzString    S ;
   uint32_t    nIndex ;
   uint32_t    nLo ;
   uint32_t    nHi ;
   uint32_t    nX ;
   result.Clear() ;
   if (!allsubnodes.Count())
       return E_NODATA ;
   if (!criteria || !criteria[0])
   {
       for (nIndex = 0; nIndex < allsubnodes.Count() ; nIndex++)
       {
           pnode = allsubnodes.GetObj(nIndex) ;
           result.Add(pnode) ;
       }
       return E_OK ;
   }
   for (j = i = criteria ; *i ; i++)
   {
       if (i[0]== CHAR_PERIOD)
       {
           S.SetValue(j, i) ;
           ar.Add(S) ;
           j = i + 1;
           continue ;
       }
       if (i[0]== CHAR_EQUAL || (i[0]== CHAR_MINUS && i[1]== CHAR_MORE))
       {
           S.SetValue(j, i) ;
           ar.Add(S) ;
           j = 0;
           break ;
       }
   }
   if (j)
   {
       S = j ;
       ar.Add(S) ;
   }
   for (nIndex = ar.Count() ; nIndex ; nIndex--)
   {
       S = ar[nIndex-1];
   }
   nLo = allsubnodes.First(S) ;
   if (nLo < 0)
       return E_NODATA ;
   nHi = allsubnodes.Last(S) ;
   for (nX = nLo ; nX <&eq; nHi ; nX++)
   {
       pnode = allsubnodes.GetObj(nX) ;
       if (pnode->txtName() != S)
           continue ;
       if (ar.Count() == 1)
       {
           result.Add(pnode) ;
           continue ;
       }
   }
   return E_OK ;
}