Changeset 3469 for trunk/src


Ignore:
Timestamp:
May 1, 2000, 3:33:25 AM (25 years ago)
Author:
phaller
Message:

Fix: massive performance enhancements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/shell32/pidl.cpp

    r3257 r3469  
    1 /* $Id: pidl.cpp,v 1.7 2000-03-28 15:28:43 cbratschi Exp $ */
     1/* $Id: pidl.cpp,v 1.8 2000-05-01 01:33:25 phaller Exp $ */
    22
    33/*
     
    5050ODINDEBUGCHANNEL(SHELL32-PIDL)
    5151
     52
     53/*****************************************************************************
     54 * Local prototypes (performance optimization)                               *
     55 *****************************************************************************/
     56
     57LPITEMIDLIST _Optlink ODIN_ILGetNext         (LPITEMIDLIST pidl);
     58BOOL         _Optlink ODIN__ILIsDesktop      (LPCITEMIDLIST pidl);
     59BOOL         _Optlink ODIN__ILIsValue        (LPCITEMIDLIST pidl);
     60LPPIDLDATA   _Optlink ODIN__ILGetDataPointer (LPITEMIDLIST pidl);
     61LPITEMIDLIST _Optlink ODIN_ILFindLastID      (LPITEMIDLIST pidl);
     62LPSTR        _Optlink ODIN__ILGetTextPointer (PIDLTYPE type, LPPIDLDATA pidldata);
     63DWORD        _Optlink ODIN__ILSimpleGetText  (LPCITEMIDLIST pidl,LPSTR szOut, UINT uOutSize);
     64DWORD        _Optlink ODIN_ILGetSize         (LPITEMIDLIST pidl);
     65LPITEMIDLIST _Optlink ODIN_ILClone           (LPCITEMIDLIST pidl);
     66LPITEMIDLIST _Optlink ODIN_ILCloneFirst      (LPCITEMIDLIST pidl);
     67
     68
     69
     70
    5271#ifdef DEBUG
    5372void pdump (LPCITEMIDLIST pidl)
     
    7897       do
    7998       {
    80          type   = _ILGetDataPointer(pidltemp)->type;
    81          szData = _ILGetTextPointer(type, _ILGetDataPointer(pidltemp));
    82          szShortName = _ILGetSTextPointer(type, _ILGetDataPointer(pidltemp));
    83          _ILSimpleGetText(pidltemp, szName, MAX_PATH);
     99         type   = ODIN__ILGetDataPointer(pidltemp)->type;
     100         szData = ODIN__ILGetTextPointer(type, ODIN__ILGetDataPointer(pidltemp));
     101         szShortName = _ILGetSTextPointer(type, ODIN__ILGetDataPointer(pidltemp));
     102         ODIN__ILSimpleGetText(pidltemp, szName, MAX_PATH);
    84103
    85104         MESSAGE ("-- pidl=%p size=%u type=%lx name=%s (%s,%s)\n",
    86105                  pidltemp, pidltemp->mkid.cb,type,szName,debugstr_a(szData), debugstr_a(szShortName));
    87106
    88          pidltemp = ILGetNext(pidltemp);
     107         pidltemp = ODIN_ILGetNext(pidltemp);
    89108
    90109       } while (pidltemp->mkid.cb);
     
    115134        if (pidltemp && pidltemp->mkid.cb)
    116135        { do
    117           { type   = _ILGetDataPointer(pidltemp)->type;
     136          { type   = ODIN__ILGetDataPointer(pidltemp)->type;
    118137            switch (type)
    119138       { case PT_DESKTOP:
     
    154173         }
    155174       }
    156        pidltemp = ILGetNext(pidltemp);
     175       pidltemp = ODIN_ILGetNext(pidltemp);
    157176     } while (pidltemp->mkid.cb);
    158177   }
     
    186205   {
    187206     pidlLast = pidl;
    188      pidl = ILGetNext(pidl);
     207     pidl = ODIN_ILGetNext(pidl);
    189208   }
    190209   return pidlLast;
     
    201220   if (!pidl || !pidl->mkid.cb)
    202221     return 0;
    203    ILFindLastID(pidl)->mkid.cb = 0;
     222   ODIN_ILFindLastID(pidl)->mkid.cb = 0;
    204223   return 1;
    205224}
     
    219238    return NULL;
    220239
    221   len = ILGetSize(pidl);
     240  len = ODIN_ILGetSize(pidl);
    222241  newpidl = (LPITEMIDLIST)SHAlloc(len);
    223242  if (newpidl)
     
    253272
    254273       if (len)
    255          ILGetNext(pidlNew)->mkid.cb = 0x00;
     274         ODIN_ILGetNext(pidlNew)->mkid.cb = 0x00;
    256275     }
    257276   }
     
    388407     return NULL;
    389408
    390    len = ILGetSize(pidl);
     409   len = ODIN_ILGetSize(pidl);
    391410   newpidl = (LPITEMIDLIST)pCOMCTL32_Alloc(len);
    392411   if (newpidl)
     
    424443   while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
    425444   {
    426        _ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
    427        _ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
     445       ODIN__ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
     446       ODIN__ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
    428447
    429448       if (strcmp ( szData1, szData2 )!=0 )
    430449         return FALSE;
    431450
    432        pidltemp1 = ILGetNext(pidltemp1);
    433        pidltemp2 = ILGetNext(pidltemp2);
     451       pidltemp1 = ODIN_ILGetNext(pidltemp1);
     452       pidltemp2 = ODIN_ILGetNext(pidltemp2);
    434453   }
    435454
     
    461480   while (pParent->mkid.cb && pChild->mkid.cb)
    462481   {
    463      _ILSimpleGetText(pParent, szData1, MAX_PATH);
    464      _ILSimpleGetText(pChild, szData2, MAX_PATH);
     482     ODIN__ILSimpleGetText(pParent, szData1, MAX_PATH);
     483     ODIN__ILSimpleGetText(pChild, szData2, MAX_PATH);
    465484
    466485     if (strcmp ( szData1, szData2 )!=0 )
    467486       return FALSE;
    468487
    469      pParent = ILGetNext(pParent);
    470      pChild = ILGetNext(pChild);
     488     pParent = ODIN_ILGetNext(pParent);
     489     pChild = ODIN_ILGetNext(pChild);
    471490   }
    472491
     
    474493     return FALSE;
    475494
    476    if ( ILGetNext(pChild)->mkid.cb && bImmediate) /* not immediate descent */
     495   if ( ODIN_ILGetNext(pChild)->mkid.cb && bImmediate) /* not immediate descent */
    477496     return FALSE;
    478497
     
    511530   pdump (pidl2);
    512531
    513    if ( _ILIsDesktop(pidl1) )
     532   if ( ODIN__ILIsDesktop(pidl1) )
    514533   {
    515534     ret = pidl2;
     
    519538     while (pidltemp1->mkid.cb && pidltemp2->mkid.cb)
    520539     {
    521        _ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
    522        _ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
     540       ODIN__ILSimpleGetText(pidltemp1, szData1, MAX_PATH);
     541       ODIN__ILSimpleGetText(pidltemp2, szData2, MAX_PATH);
    523542
    524543       if (strcmp(szData1,szData2))
    525544         break;
    526545
    527        pidltemp1 = ILGetNext(pidltemp1);
    528        pidltemp2 = ILGetNext(pidltemp2);
     546       pidltemp1 = ODIN_ILGetNext(pidltemp1);
     547       pidltemp2 = ODIN_ILGetNext(pidltemp2);
    529548       ret = pidltemp2;
    530549     }
     
    561580   if(!pidl1)
    562581   {
    563      pidlNew = ILClone(pidl2);
     582     pidlNew = ODIN_ILClone(pidl2);
    564583     return pidlNew;
    565584   }
     
    567586   if(!pidl2)
    568587   {
    569      pidlNew = ILClone(pidl1);
     588     pidlNew = ODIN_ILClone(pidl1);
    570589     return pidlNew;
    571590   }
    572591
    573    len1  = ILGetSize(pidl1)-2;
    574    len2  = ILGetSize(pidl2);
     592   len1  = ODIN_ILGetSize(pidl1)-2;
     593   len2  = ODIN_ILGetSize(pidl2);
    575594   pidlNew  = (ITEMIDLIST*)SHAlloc(len1+len2);
    576595
     
    618637
    619638/*************************************************************************
    620  * ILGetSize [SHELL32.152]
     639 * ODIN_ILGetSize [SHELL32.152]
    621640 *  gets the byte size of an idlist including zero terminator (pidl)
    622641 *
     
    648667
    649668/*************************************************************************
    650  * ILGetNext [SHELL32.153]
     669 * ODIN_ILGetNext [SHELL32.153]
    651670 *  gets the next simple pidl of a complex pidl
    652671 *
     
    694713   pdump (item);
    695714
    696    if (_ILIsDesktop(pidl))
    697    {
    698       idlRet = ILClone(item);
     715   if (ODIN__ILIsDesktop(pidl))
     716   {
     717      idlRet = ODIN_ILClone(item);
    699718      if (pidl)
    700719        SHFree (pidl);
     
    926945               pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
    927946               pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
    928                type   = _ILGetDataPointer(pidl)->type;
    929                lstrcpynA(pfd->cFileName,_ILGetTextPointer(type,_ILGetDataPointer(pidl)), MAX_PATH);
    930                lstrcpynA(pfd->cAlternateFileName,_ILGetSTextPointer(type,_ILGetDataPointer(pidl)), 14);
     947               type   = ODIN__ILGetDataPointer(pidl)->type;
     948               lstrcpynA(pfd->cFileName,ODIN__ILGetTextPointer(type,ODIN__ILGetDataPointer(pidl)), MAX_PATH);
     949               lstrcpynA(pfd->cAlternateFileName,_ILGetSTextPointer(type,ODIN__ILGetDataPointer(pidl)), 14);
    931950       }
    932951       return NOERROR;
     
    970989               pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
    971990               pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
    972                type   = _ILGetDataPointer(pidl)->type;
    973                lstrcpynAtoW(pfd->cFileName,_ILGetTextPointer(type,_ILGetDataPointer(pidl)), MAX_PATH);
    974                lstrcpynAtoW(pfd->cAlternateFileName,_ILGetSTextPointer(type,_ILGetDataPointer(pidl)), 14);
     991               type   = ODIN__ILGetDataPointer(pidl)->type;
     992               lstrcpynAtoW(pfd->cFileName,ODIN__ILGetTextPointer(type,ODIN__ILGetDataPointer(pidl)), MAX_PATH);
     993               lstrcpynAtoW(pfd->cAlternateFileName,_ILGetSTextPointer(type,ODIN__ILGetDataPointer(pidl)), 14);
    975994            }
    976995            return NOERROR;
     
    10151034   pdump(pidl);
    10161035#ifdef SHELL_NO_DESKTOP
    1017    if(_ILIsDesktop(pidl))
     1036   if(ODIN__ILIsDesktop(pidl))
    10181037   {
    10191038      SHGetSpecialFolderPathA(0, pszPath, CSIDL_DESKTOPDIRECTORY, FALSE);
     
    10711090     /* we are on desktop level */
    10721091     if (ppidlLast)
    1073        *ppidlLast = ILClone(pidl);
     1092       *ppidlLast = ODIN_ILClone(pidl);
    10741093     hr = SHGetDesktopFolder((IShellFolder**)ppv);
    10751094   }
    10761095   else
    10771096   {
    1078      pidlChild =  ILClone(ILFindLastID(pidl));
    1079      pidlParent = ILClone(pidl);
     1097     pidlChild =  ODIN_ILClone(ODIN_ILFindLastID(pidl));
     1098     pidlParent = ODIN_ILClone(pidl);
    10801099     ILRemoveLastID(pidlParent);
    10811100
     
    12011220   {
    12021221     LPPIDLDATA pData;
    1203      pData = _ILGetDataPointer(pidl);
     1222     pData = ODIN__ILGetDataPointer(pidl);
    12041223     FileTimeToDosDateTime(&(stffile->ftLastWriteTime),&pData->u.folder.uFileDate,&pData->u.folder.uFileTime);
    12051224     pData->u.folder.dwFileSize = stffile->nFileSizeLow;
     
    12411260   {
    12421261     LPPIDLDATA pData;
    1243      pData = _ILGetDataPointer(pidl);
     1262     pData = ODIN__ILGetDataPointer(pidl);
    12441263     FileTimeToDosDateTime(&(stffile->ftLastWriteTime),&pData->u.folder.uFileDate,&pData->u.folder.uFileTime);
    12451264     pData->u.folder.dwFileSize = stffile->nFileSizeLow;
     
    12861305       ZeroMemory(pidlOut, uSize + 2);
    12871306       pidlOut->mkid.cb = uSize;
    1288        pData =_ILGetDataPointer(pidlOut);
     1307       pData =ODIN__ILGetDataPointer(pidlOut);
    12891308       pData->type = type;
    12901309       memcpy(&(pData->u.mycomp.guid), pIn, uInSize);
     
    12971316       ZeroMemory(pidlOut, uSize + 2);
    12981317       pidlOut->mkid.cb = uSize;
    1299        pData =_ILGetDataPointer(pidlOut);
     1318       pData =ODIN__ILGetDataPointer(pidlOut);
    13001319       pData->type = type;
    1301        pszDest =  _ILGetTextPointer(type, pData);
     1320       pszDest =  ODIN__ILGetTextPointer(type, pData);
    13021321       memcpy(pszDest, pIn, uInSize);
    13031322       TRACE_(pidl)("- create Drive: %s\n",debugstr_a(pszDest));
     
    13101329       ZeroMemory(pidlOut, uSize + 2);
    13111330       pidlOut->mkid.cb = uSize;
    1312        pData =_ILGetDataPointer(pidlOut);
     1331       pData =ODIN__ILGetDataPointer(pidlOut);
    13131332       pData->type = type;
    1314        pszDest =  _ILGetTextPointer(type, pData);
     1333       pszDest =  ODIN__ILGetTextPointer(type, pData);
    13151334       memcpy(pszDest, pIn, uInSize);
    13161335       TRACE_(pidl)("- create Value: %s\n",debugstr_a(pszDest));
     
    13181337   }
    13191338
    1320    pidlTemp = ILGetNext(pidlOut);
     1339   pidlTemp = ODIN_ILGetNext(pidlOut);
    13211340   if (pidlTemp)
    13221341     pidlTemp->mkid.cb = 0x00;
     
    13401359{
    13411360   if(_ILIsMyComputer(pidl))
    1342      pidl = ILGetNext(pidl);
     1361     pidl = ODIN_ILGetNext(pidl);
    13431362
    13441363   if (pidl && _ILIsDrive(pidl))
    1345      return _ILSimpleGetText(pidl, pOut, uSize);
     1364     return ODIN__ILSimpleGetText(pidl, pOut, uSize);
    13461365
    13471366   return 0;
     
    13531372 *
    13541373 **************************************************************************
    1355  *  _ILIsDesktop()
     1374 *  ODIN__ILIsDesktop()
    13561375 *  _ILIsMyComputer()
    13571376 *  _ILIsSpecialFolder()
    13581377 *  _ILIsDrive()
    13591378 *  _ILIsFolder()
    1360  *  _ILIsValue()
     1379 *  ODIN__ILIsValue()
    13611380 *  _ILIsPidlSimple()
    13621381 */
     
    13801399ODINFUNCTION1(BOOL,_ILIsSpecialFolder,LPCITEMIDLIST, pidl)
    13811400{
    1382    LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
     1401   LPPIDLDATA lpPData = ODIN__ILGetDataPointer(pidl);
    13831402   TRACE_(pidl)("(%p)\n",pidl);
    13841403   return (pidl && ( (lpPData && (PT_MYCOMP== lpPData->type || PT_SPECIAL== lpPData->type)) ||
     
    13881407
    13891408ODINFUNCTION1(BOOL,_ILIsDrive,LPCITEMIDLIST, pidl)
    1390 {  LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
     1409{  LPPIDLDATA lpPData = ODIN__ILGetDataPointer(pidl);
    13911410   TRACE_(pidl)("(%p)\n",pidl);
    13921411   return (pidl && lpPData && (PT_DRIVE == lpPData->type ||
     
    13971416
    13981417ODINFUNCTION1(BOOL,_ILIsFolder,LPCITEMIDLIST, pidl)
    1399 {  LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
     1418{  LPPIDLDATA lpPData = ODIN__ILGetDataPointer(pidl);
    14001419   TRACE_(pidl)("(%p)\n",pidl);
    14011420   return (pidl && lpPData && (PT_FOLDER == lpPData->type || PT_FOLDER1 == lpPData->type));
     
    14031422
    14041423ODINFUNCTION1(BOOL,_ILIsValue,LPCITEMIDLIST, pidl)
    1405 {  LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
     1424{  LPPIDLDATA lpPData = ODIN__ILGetDataPointer(pidl);
    14061425   TRACE_(pidl)("(%p)\n",pidl);
    14071426   return (pidl && lpPData && PT_VALUE == lpPData->type);
     
    14151434   BOOL ret = TRUE;
    14161435
    1417    if(! _ILIsDesktop(pidl))              /* pidl=NULL or mkid.cb=0 */
     1436   if(! ODIN__ILIsDesktop(pidl))              /* pidl=NULL or mkid.cb=0 */
    14181437   {
    14191438     WORD len = pidl->mkid.cb;
     
    14331452
    14341453 /**************************************************************************
    1435  *  _ILSimpleGetText
     1454 *  ODIN__ILSimpleGetText
    14361455 *
    14371456 * gets the text for the first item in the pidl (eg. simple pidl)
     
    14551474     *szOut = 0;
    14561475
    1457    pData = _ILGetDataPointer(pidl);
    1458 
    1459    if (_ILIsDesktop(pidl))
     1476   pData = ODIN__ILGetDataPointer(pidl);
     1477
     1478   if (ODIN__ILIsDesktop(pidl))
    14601479   {
    14611480    /* desktop */
     
    14681487     }
    14691488   }
    1470    else if (( szSrc = _ILGetTextPointer(pData->type, pData) ))
     1489   else if (( szSrc = ODIN__ILGetTextPointer(pData->type, pData) ))
    14711490   {
    14721491     /* filesystem */
     
    15011520 *
    15021521 **************************************************************************
    1503  *  _ILGetDataPointer()
     1522 *  ODIN__ILGetDataPointer()
    15041523 */
    15051524
     
    15121531
    15131532/**************************************************************************
    1514  *  _ILGetTextPointer()
     1533 *  ODIN__ILGetTextPointer()
    15151534 * gets a pointer to the long filename string stored in the pidl
    15161535 */
     
    15841603ODINFUNCTION1(REFIID,_ILGetGUIDPointer,LPCITEMIDLIST, pidl)
    15851604{
    1586    LPPIDLDATA pdata =_ILGetDataPointer(pidl);
     1605   LPPIDLDATA pdata =ODIN__ILGetDataPointer(pidl);
    15871606
    15881607   if (pdata)
     
    16171636                                       FILETIME *,    pFt)
    16181637{
    1619     LPPIDLDATA pdata =_ILGetDataPointer(pidl);
     1638    LPPIDLDATA pdata =ODIN__ILGetDataPointer(pidl);
    16201639
    16211640    switch (pdata->type)
     
    16831702                                  UINT,          uOutSize)
    16841703{
    1685    LPPIDLDATA pdata =_ILGetDataPointer(pidl);
     1704   LPPIDLDATA pdata =ODIN__ILGetDataPointer(pidl);
    16861705   DWORD dwSize;
    16871706
     
    17171736DWORD _ILGetFileSizeKB (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
    17181737{
    1719     LPPIDLDATA pdata =_ILGetDataPointer(pidl);
     1738    LPPIDLDATA pdata =ODIN__ILGetDataPointer(pidl);
    17201739    DWORD dwSize;
    17211740    char tempSizeStr[24];
     
    17771796   if (!pidl) return FALSE;
    17781797
    1779    pidlTemp = ILFindLastID(pidl);
    1780 
    1781    if (!_ILIsValue(pidlTemp)) return FALSE;
    1782    if (!_ILSimpleGetText(pidlTemp, szTemp, MAX_PATH)) return FALSE;
     1798   pidlTemp = ODIN_ILFindLastID(pidl);
     1799
     1800   if (!ODIN__ILIsValue(pidlTemp)) return FALSE;
     1801   if (!ODIN__ILSimpleGetText(pidlTemp, szTemp, MAX_PATH)) return FALSE;
    17831802
    17841803   pPoint = PathFindExtensionA(szTemp);
     
    18131832                              UINT,          uOutSize)
    18141833{
    1815    if(_ILIsValue(pidl))
     1834   if(ODIN__ILIsValue(pidl))
    18161835   {
    18171836     char sTemp[64];
     
    18561875                                        UINT,          uOutSize)
    18571876{
    1858     LPPIDLDATA pData =_ILGetDataPointer(pidl);
     1877    LPPIDLDATA pData =ODIN__ILGetDataPointer(pidl);
    18591878    WORD wAttrib = 0;
    18601879    int i;
Note: See TracChangeset for help on using the changeset viewer.