Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

98 lines
2.8 KiB

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name: group.hxx
Abstract:
Manages cache group.
Author:
Danpo Zhang (DanpoZ) 02-08-98
--*/
#ifndef _GROUP_
#define _GROUP_
#define GROUP_INFO_TO_ENTRY 1
#define GROUP_ENTRY_TO_INFO 2
class GroupMgr
{
public:
GroupMgr();
~GroupMgr();
BOOL Init(URL_CONTAINER* pContainer);
DWORD CreateGroup(DWORD, GROUPID*);
DWORD CreateDefaultGroups();
DWORD DeleteGroup(GROUPID, DWORD);
DWORD GetNextGroup(DWORD*, GROUPID*);
DWORD GetGroup(GROUPID, DWORD, INTERNET_CACHE_GROUP_INFOA*, DWORD*);
DWORD SetGroup(GROUPID, DWORD, INTERNET_CACHE_GROUP_INFOA*);
protected:
URL_CONTAINER* _pContainer;
private:
GROUPID ObtainNewGID();
DWORD CreateNewPage(DWORD* dwOffset, BOOL fIsFirstPage);
DWORD FindRootEntry(GROUP_ENTRY** ppEntryOut, BOOL fCreate);
DWORD FindEntry(GROUPID gid, GROUP_ENTRY** ppEntryOut, BOOL fCreate);
BOOL IsIndexToNewPage(GROUP_ENTRY* pG)
{
return (pG->gid == GID_INDEX_TO_NEXT_PAGE) ? TRUE : FALSE;
}
BOOL Translate(DWORD, INTERNET_CACHE_GROUP_INFOA*, GROUP_ENTRY*,
DWORD, DWORD*);
BOOL GetHeaderData(DWORD nIdx, LPDWORD pdwData)
{
return _pContainer->_UrlObjStorage->GetHeaderData(
nIdx, pdwData);
}
BOOL SetHeaderData(DWORD nIdx, DWORD dwData)
{
return _pContainer->_UrlObjStorage->SetHeaderData(
nIdx, dwData);
}
DWORD FindDataEntry(LPGROUP_ENTRY, GROUP_DATA_ENTRY**, BOOL);
VOID FreeDataEntry(GROUP_DATA_ENTRY*);
LPGROUP_DATA_ENTRY GetHeadDataEntry(BOOL);
BOOL IsLastPage(GROUP_ENTRY*);
BOOL IsPageEmpty(GROUP_ENTRY*);
BOOL FreeEmptyPages(DWORD);
DWORD CreateNewGroupList(DWORD*);
DWORD GetOffsetFromList(DWORD, GROUPID, DWORD*);
DWORD AddToGroupList(DWORD, DWORD);
DWORD RemoveFromGroupList(DWORD, DWORD, DWORD*);
void AdjustUsageOnList(DWORD dwHeadOffset, LONGLONG llDelta);
DWORD FindEmptySlotInListPage(DWORD* pdwOffset);
DWORD CreateNewListPage(DWORD* pdwOffset, BOOL fIsFirstPage);
BOOL IsIndexToNewListPage(LIST_GROUP_ENTRY* p)
{
return
(p->dwGroupOffset == OFFSET_TO_NEXT_PAGE) ? TRUE : FALSE;
}
BOOL IsGroupOnList(DWORD dwHeadOffset, DWORD dwGroupOffset);
BOOL NoMoreStickyEntryOnList(DWORD dwHeadOffset);
void AddToFreeList(LIST_GROUP_ENTRY* pFreeListGroup);
friend class URL_CONTAINER;
};
#endif