windows-nt/Source/XPSP1/NT/inetsrv/iis/admin/common/objplus.h
2020-09-26 16:20:57 +08:00

362 lines
6.4 KiB
C++

/*++
Copyright (c) 1994-1998 Microsoft Corporation
Module Name :
objplus.h
Abstract:
Base object class definitions
Author:
Ronald Meijer (ronaldm)
Project:
Internet Services Manager
Revision History:
--*/
#ifndef _COMMON_H_
#define _COMMON_H_
//
// Forward declarations
//
class CObjHelper;
class CObjectPlus;
class CObListPlus;
class CObListIter;
class COMDLL CObjHelper
/*++
Class Description:
Helper class for control of construction and API errors
Public Interface:
IsValid : Determine if the object is in a valid state.
operator BOOL : Boolean cast to IsValid()
SetDirty : Set or reset the dirty flag
IsDirty : Query the dirty state of the object
QueryCreationTime : Query the creation time of the object
QueryAge : Query the age of the object
ReportError : Query/set construction failure
QueryError : Query the error code of the object
QueryApiErr : Query/set API error code
ResetErrors : Reset all error codes
SetApiErr : Echoes the error to the caller
AssertValid : Assert the object is in a valid state (debug only)
--*/
{
protected:
//
// Protected constructor: Not to be declared independently.
//
CObjHelper();
public:
virtual BOOL IsValid() const;
operator BOOL();
//
// Update the Dirty flag
//
void SetDirty(
IN BOOL fDirty = TRUE
);
//
// Query the Dirty flag
//
BOOL IsDirty() const { return m_fDirty; }
//
// Return the creation time of this object
//
DWORD QueryCreationTime() const { return m_time_created; }
//
// Return the elapsed time this object has been alive.
//
DWORD QueryAge() const;
//
// Query/set construction failure
//
void ReportError(
IN LONG errInConstruction
);
//
// Fetch construction error
//
LONG QueryError() const { return m_ctor_err; }
//
// Query/set API errors.
//
LONG QueryApiErr() const { return m_api_err; }
//
// Reset all error conditions.
//
void ResetErrors();
//
// SetApiErr() echoes the error to the caller.
// for use in expressions.
//
LONG SetApiErr(
IN LONG errApi = ERROR_SUCCESS
);
#ifdef _DEBUG
void AssertValid() const;
#endif // _DEBUG
protected:
LONG m_ctor_err;
LONG m_api_err;
DWORD m_time_created;
BOOL m_fDirty;
};
class COMDLL CObjectPlus : public CObject, public CObjHelper
/*++
Class Description:
Super CObject class.
Public Interface:
CObjectPlus : Constructor
Compare : Compare one object with another
--*/
{
public:
CObjectPlus();
//
// Compare one object with another
//
virtual int Compare(
IN const CObjectPlus * pob
) const;
//
// Define a typedef for an ordering function.
//
typedef int (CObjectPlus::*PCOBJPLUS_ORDER_FUNC)(
IN const CObjectPlus * pobOther
) const;
};
class COMDLL CObListPlus : public CObList, public CObjHelper
/*++
Class Description:
Object pointer list which optionally "owns" the objects pointed to, and
with facility to sort. If the list "owns" its objects, the destructor
will clean up its member objects.
Public Interface:
CObListPlus : Constructor
~CObListPlus : Destructor
SetOwnership : Set/reset ownership bit
Index : Get object by index
RemoveIndex : Remove object by index
Remove : Remove object
RemoveAt : Remove object at position
RemoveAll : Remove all objects
FindElement : Find object
SetAll : Set/Reset the dirty flag of all objects
AddTail : Add new object to the tail of the list
Sort : Sort the list elements with sorting function provided
--*/
{
//
// Constructor/Destructor
//
public:
CObListPlus(
IN int nBlockSize = 10
);
virtual ~CObListPlus();
//
// Access
//
public:
BOOL SetOwnership(
IN BOOL fOwned = TRUE
);
//
// Return object at the given index
//
CObject * Index(
IN int index
);
//
// Remove item the given index
//
BOOL RemoveIndex(
IN int index
);
//
// Remove the given object from the list
//
BOOL Remove(
IN CObject * pob
);
//
// Remove the item at the given position
//
void RemoveAt(
IN POSITION & pos
);
//
// Remove all items from the list
//
void RemoveAll();
int FindElement(
IN CObject * pobSought
) const;
//
// Set all elements to dirty or clean. Return TRUE if
// any element was dirty.
//
BOOL SetAll(
IN BOOL fDirty = FALSE
);
//
// Sort the list elements according to the
// given ordering function. Return error code
//
DWORD Sort(
IN CObjectPlus::PCOBJPLUS_ORDER_FUNC pOrderFunc
);
protected:
static int _cdecl SortHelper(
IN const void * pa,
IN const void * pb
);
protected:
BOOL m_fOwned;
};
class COMDLL CObListIter : public CObjectPlus
/*++
Class Description:
Object iteration class
Public Interface:
CObListIter : Constructor
Next : Get next object
Reset : Reset the iteration index
QueryPosition : Query the current iteration index
SetPosition : Set the current position in the list by POSITION
--*/
{
public:
CObListIter(
IN const CObListPlus & obList
);
CObject * Next();
void Reset();
POSITION QueryPosition() const { return m_pos; }
void SetPosition(
IN POSITION pos
);
protected:
POSITION m_pos;
const CObListPlus & m_obList;
};
//
// Inline Expansion
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
inline CObjHelper::operator BOOL()
{
return IsValid();
}
inline void CObjHelper::SetDirty(
IN BOOL fDirty
)
{
m_fDirty = fDirty;
}
inline void CObjHelper::ResetErrors()
{
m_ctor_err = m_api_err = ERROR_SUCCESS;
}
inline BOOL CObListPlus::SetOwnership(
IN BOOL fOwned
)
{
BOOL fOld = m_fOwned;
m_fOwned = fOwned;
return fOld;
}
inline void CObListIter::SetPosition(
IN POSITION pos
)
{
m_pos = pos;
}
#endif // _COMMON_H