NT4/private/ole32/stg/exp/nmidmap.hxx
2020-09-30 17:12:29 +02:00

151 lines
3.5 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: nmidmap.hxx
//
// Contents: CNameIdMap header
//
// Classes: CNameIdMap
//
// History: 11-May-93 DrewB Created
//
//----------------------------------------------------------------------------
#ifndef __NMIDMAP_HXX__
#define __NMIDMAP_HXX__
#include <ole2.h>
//+---------------------------------------------------------------------------
//
// Structure: SNameId (ni)
//
// Purpose: Holds a name/id pair
//
// History: 11-May-93 DrewB Created
//
//----------------------------------------------------------------------------
struct SNameId
{
LPWSTR lpwstr;
PROPID id;
SNameId *pniNext;
};
//+---------------------------------------------------------------------------
//
// Class: CNameIdMap (nim)
//
// Purpose: Keeps track of a mapping between a name and an id
//
// Interface: See below
//
// History: 11-May-93 DrewB Created
//
//----------------------------------------------------------------------------
class CNameIdMap
{
public:
inline CNameIdMap(void);
~CNameIdMap(void);
SNameId *Add(LPWSTR lpwstr, PROPID id);
inline LPWSTR NameFromId(PROPID id);
inline PROPID IdFromName(LPWSTR lpwstr);
void RemoveByName(LPWSTR lpwstr);
void RemoveById(PROPID id);
private:
SNameId *FindMapping(LPWSTR lpwstr, PROPID id, SNameId ***pppniPrevPtr);
void Remove(SNameId **ppniPrevPtr, SNameId *pni);
SNameId *_pniHead;
};
//+---------------------------------------------------------------------------
//
// Member: CNameIdMap::CNameIdMap, public
//
// Synopsis: Initializes a map
//
// History: 11-May-93 DrewB Created
//
//----------------------------------------------------------------------------
inline CNameIdMap::CNameIdMap(void)
{
_pniHead = NULL;
}
//+---------------------------------------------------------------------------
//
// Member: CNameIdMap::NameFromId, public
//
// Synopsis: Maps an id to a name
//
// Arguments: [id] - Id
//
// Returns: Name or NULL
//
// History: 11-May-93 DrewB Created
//
//----------------------------------------------------------------------------
inline LPWSTR CNameIdMap::NameFromId(PROPID id)
{
SNameId *pni;
pni = FindMapping(NULL, id, NULL);
return pni ? pni->lpwstr : NULL;
}
//+---------------------------------------------------------------------------
//
// Member: CNameIdMap::IdFromName, public
//
// Synopsis: Maps a name to an id
//
// Arguments: [lpwstr] - Name
//
// Returns: Id or PROPID_UNKNOWN
//
// History: 11-May-93 DrewB Created
//
//----------------------------------------------------------------------------
inline PROPID CNameIdMap::IdFromName(LPWSTR lpwstr)
{
SNameId *pni;
pni = FindMapping(lpwstr, PROPID_UNKNOWN, NULL);
return pni ? pni->id : PROPID_UNKNOWN;
}
//+---------------------------------------------------------------------------
//
// Member: CNameIdMap::Remove, private
//
// Synopsis: Unlinks a mapping from the list
//
// Arguments: [ppniPrevPtr] - Previous pointer to element to remove
// [pni] - Element to remove
//
// History: 12-Jul-93 DrewB Created
//
// Notes: Frees memory
//
//----------------------------------------------------------------------------
inline void CNameIdMap::Remove(SNameId **ppniPrevPtr, SNameId *pni)
{
*ppniPrevPtr = pni->pniNext;
DfMemFree(pni->lpwstr);
DfMemFree(pni);
}
#endif // #ifndef __NMIDMAP_HXX__