ReactOS 0.4.16-dev-597-gdbf7844
CMruLongList Class Reference
Inheritance diagram for CMruLongList:
Collaboration diagram for CMruLongList:

Public Member Functions

 CMruLongList ()
 
 ~CMruLongList () override
 
- Public Member Functions inherited from CMruBase
 CMruBase ()
 
virtual ~CMruBase ()
 
STDMETHODIMP QueryInterface (REFIID riid, void **ppvObj) override
 
 STDMETHODIMP_ (ULONG) AddRef() override
 
 STDMETHODIMP_ (ULONG) Release() override
 
STDMETHODIMP InitData (UINT cCapacity, UINT flags, HKEY hKey, LPCWSTR pszSubKey OPTIONAL, SLOTCOMPARE fnCompare OPTIONAL) override
 
STDMETHODIMP AddData (LPCVOID pvData, DWORD cbData, UINT *piSlot) override
 
STDMETHODIMP FindData (LPCVOID pvData, DWORD cbData, UINT *piSlot) override
 
STDMETHODIMP GetData (UINT iSlot, LPVOID pvData, DWORD cbData) override
 
STDMETHODIMP QueryInfo (UINT iSlot, UINT *piGotSlot, DWORD *pcbData) override
 
STDMETHODIMP Delete (UINT iSlot) override
 
virtual BOOL _IsEqual (const SLOTITEMDATA *pItem, LPCVOID pvData, UINT cbData) const
 
virtual DWORD _DeleteValue (LPCWSTR pszValue)
 
virtual HRESULT _InitSlots ()=0
 
virtual void _SaveSlots ()=0
 
virtual UINT _UpdateSlots (UINT iSlot)=0
 
virtual void _SlotString (UINT iSlot, LPWSTR psz, DWORD cch)=0
 
virtual HRESULT _GetSlot (UINT iSlot, UINT *puSlot)=0
 
virtual HRESULT _RemoveSlot (UINT iSlot, UINT *puSlot)=0
 

Protected Member Functions

void _ImportShortList ()
 
HRESULT _InitSlots () override
 
void _SaveSlots () override
 
UINT _UpdateSlots (UINT iSlot) override
 
void _SlotString (UINT iSlot, LPWSTR psz, DWORD cch) override
 
HRESULT _GetSlot (UINT iSlot, UINT *puSlot) override
 
HRESULT _RemoveSlot (UINT iSlot, UINT *puSlot) override
 
- Protected Member Functions inherited from CMruBase
HRESULT _LoadItem (UINT iSlot)
 
HRESULT _AddItem (UINT iSlot, LPCVOID pvData, DWORD cbData)
 
HRESULT _GetItem (UINT iSlot, SLOTITEMDATA **ppItem)
 
void _DeleteItem (UINT iSlot)
 
HRESULT _GetSlotItem (UINT iSlot, SLOTITEMDATA **ppItem)
 
void _CheckUsedSlots ()
 
HRESULT _UseEmptySlot (UINT *piSlot)
 

Protected Attributes

UINTm_puSlotData = NULL
 
- Protected Attributes inherited from CMruBase
LONG m_cRefs = 1
 
DWORD m_dwFlags = 0
 
BOOL m_bNeedSave = FALSE
 
BOOL m_bChecked = FALSE
 
HKEY m_hKey = NULL
 
DWORD m_cSlotRooms = 0
 
DWORD m_cSlots = 0
 
SLOTCOMPARE m_fnCompare = NULL
 
SLOTITEMDATAm_pSlots = NULL
 

Additional Inherited Members

- Static Public Member Functions inherited from CMruBase
static voidoperator new (size_t size)
 
static void operator delete (void *ptr)
 

Detailed Description

Definition at line 559 of file mrulist.cpp.

Constructor & Destructor Documentation

◆ CMruLongList()

CMruLongList::CMruLongList ( )
inline

Definition at line 575 of file mrulist.cpp.

576 {
577 }

◆ ~CMruLongList()

CMruLongList::~CMruLongList ( )
inlineoverride

Definition at line 579 of file mrulist.cpp.

580 {
582 }
UINT * m_puSlotData
Definition: mrulist.cpp:563
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1594
unsigned int UINT
Definition: ndis.h:50

Member Function Documentation

◆ _GetSlot()

HRESULT CMruLongList::_GetSlot ( UINT  iSlot,
UINT puSlot 
)
overrideprotectedvirtual

Implements CMruBase.

Definition at line 648 of file mrulist.cpp.

649{
650 if (iSlot >= m_cSlots)
651 return E_FAIL;
652
653 UINT uSlotData = m_puSlotData[iSlot];
654 if (uSlotData >= m_cSlotRooms)
655 return E_FAIL;
656
657 *puSlot = uSlotData;
658 m_pSlots[uSlotData].dwFlags |= SLOT_SET;
659 return S_OK;
660}
DWORD m_cSlots
Definition: mrulist.cpp:75
SLOTITEMDATA * m_pSlots
Definition: mrulist.cpp:77
DWORD m_cSlotRooms
Definition: mrulist.cpp:74
#define E_FAIL
Definition: ddrawi.h:102
#define S_OK
Definition: intsafe.h:52
#define SLOT_SET
Definition: mrulist.cpp:27

Referenced by _RemoveSlot(), CMruNode::Clear(), and CMruNode::RemoveLeast().

◆ _ImportShortList()

void CMruLongList::_ImportShortList ( )
protected

Definition at line 676 of file mrulist.cpp.

677{
678 CMruShortList *pShortList = new CMruShortList();
679 if (!pShortList)
680 return;
681
682 HRESULT hr = pShortList->InitData(m_cSlotRooms, 0, m_hKey, NULL, NULL);
683 if (SUCCEEDED(hr))
684 {
685 for (;;)
686 {
687 UINT iSlot;
688 hr = pShortList->_GetSlot(m_cSlots, &iSlot);
689 if (FAILED(hr))
690 break;
691
692 SLOTITEMDATA *pItem;
693 hr = pShortList->_GetSlotItem(iSlot, &pItem);
694 if (FAILED(hr))
695 break;
696
697 _AddItem(iSlot, pItem->pvData, pItem->cbData);
698 pShortList->_DeleteItem(iSlot);
699
700 m_puSlotData[m_cSlots++] = iSlot;
701 }
702
704 }
705
706 SHDeleteValueW(m_hKey, NULL, L"MRUList");
707 pShortList->Release();
708}
HKEY m_hKey
Definition: mrulist.cpp:73
void _DeleteItem(UINT iSlot)
Definition: mrulist.cpp:229
BOOL m_bNeedSave
Definition: mrulist.cpp:71
HRESULT _GetSlotItem(UINT iSlot, SLOTITEMDATA **ppItem)
Definition: mrulist.cpp:208
STDMETHODIMP InitData(UINT cCapacity, UINT flags, HKEY hKey, LPCWSTR pszSubKey OPTIONAL, SLOTCOMPARE fnCompare OPTIONAL) override
Definition: mrulist.cpp:274
HRESULT _AddItem(UINT iSlot, LPCVOID pvData, DWORD cbData)
Definition: mrulist.cpp:248
HRESULT _GetSlot(UINT iSlot, UINT *puSlot) override
Definition: mrulist.cpp:531
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
DWORD WINAPI SHDeleteValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue)
Definition: reg.c:1762
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define L(x)
Definition: ntvdm.h:50
HRESULT hr
Definition: shlfolder.c:183

Referenced by _InitSlots().

◆ _InitSlots()

HRESULT CMruLongList::_InitSlots ( )
overrideprotectedvirtual

Implements CMruBase.

Definition at line 585 of file mrulist.cpp.

586{
587 DWORD cbData = (m_cSlotRooms + 1) * sizeof(UINT);
588 m_puSlotData = (UINT*)LocalAlloc(LPTR, cbData);
589 if (!m_puSlotData)
590 return E_OUTOFMEMORY;
591
592 if (SHGetValueW(m_hKey, NULL, L"MRUListEx", NULL, m_puSlotData, &cbData) == ERROR_SUCCESS)
593 m_cSlots = (cbData / sizeof(UINT)) - 1;
594 else
596
598 return S_OK;
599}
void _ImportShortList()
Definition: mrulist.cpp:676
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define ERROR_SUCCESS
Definition: deptool.c:10
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
unsigned long DWORD
Definition: ntddk_ex.h:95
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
#define MAXDWORD
#define LPTR
Definition: winbase.h:407

◆ _RemoveSlot()

HRESULT CMruLongList::_RemoveSlot ( UINT  iSlot,
UINT puSlot 
)
overrideprotectedvirtual

Implements CMruBase.

Definition at line 662 of file mrulist.cpp.

663{
664 HRESULT hr = _GetSlot(iSlot, puSlot);
665 if (FAILED(hr))
666 return hr;
667
668 MoveMemory(&m_puSlotData[iSlot], &m_puSlotData[iSlot + 1], (m_cSlots - iSlot) * sizeof(UINT));
669 --m_cSlots;
670 m_pSlots[0].dwFlags &= ~SLOT_SET;
672
673 return hr;
674}
HRESULT _GetSlot(UINT iSlot, UINT *puSlot) override
Definition: mrulist.cpp:648
#define MoveMemory
Definition: winbase.h:1734

◆ _SaveSlots()

void CMruLongList::_SaveSlots ( )
overrideprotectedvirtual

Implements CMruBase.

Definition at line 601 of file mrulist.cpp.

602{
603 if (m_bNeedSave)
604 {
606 (m_cSlots + 1) * sizeof(UINT));
608 }
609}
#define FALSE
Definition: types.h:117
DWORD WINAPI SHSetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, DWORD dwType, LPCVOID pvData, DWORD cbData)
Definition: reg.c:1306
#define REG_BINARY
Definition: nt_native.h:1496

Referenced by CMruNode::GetNode().

◆ _SlotString()

void CMruLongList::_SlotString ( UINT  iSlot,
LPWSTR  psz,
DWORD  cch 
)
overrideprotectedvirtual

Implements CMruBase.

Definition at line 643 of file mrulist.cpp.

644{
645 StringCchPrintfW(psz, cch, L"%d", iSlot);
646}
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530

Referenced by CMruNode::_CreateNode().

◆ _UpdateSlots()

UINT CMruLongList::_UpdateSlots ( UINT  iSlot)
overrideprotectedvirtual

Implements CMruBase.

Definition at line 611 of file mrulist.cpp.

612{
613 UINT cSlotsToMove, uSlotData;
614
615 cSlotsToMove = iSlot;
616 if (iSlot == m_cSlots)
617 {
618 if (SUCCEEDED(_UseEmptySlot(&uSlotData)))
619 {
620 ++cSlotsToMove;
621 }
622 else
623 {
624 uSlotData = m_puSlotData[m_cSlots - 1];
625 --cSlotsToMove;
626 }
627 }
628 else
629 {
630 uSlotData = m_puSlotData[iSlot];
631 }
632
633 if (cSlotsToMove > 0)
634 {
635 MoveMemory(m_puSlotData + 1, m_puSlotData, cSlotsToMove * sizeof(UINT));
636 m_puSlotData[0] = uSlotData;
638 }
639
640 return uSlotData;
641}
HRESULT _UseEmptySlot(UINT *piSlot)
Definition: mrulist.cpp:418

Referenced by CMruNode::_GetPidlSlot().

Member Data Documentation

◆ m_puSlotData

UINT* CMruLongList::m_puSlotData = NULL
protected

The documentation for this class was generated from the following file: