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.
 
 
 
 
 
 

892 lines
20 KiB

// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
#ifndef __SNMPCONT_H
#define __SNMPCONT_H
#include <provexpt.h>
#include <ScopeGuard.h>
template<class TYPE, class ARG_TYPE>
class SnmpList
{
private:
CCriticalSection * criticalSection ;
CList <TYPE, ARG_TYPE> clist ;
protected:
public:
SnmpList ( BOOL threadSafeArg = FALSE ) ;
virtual ~SnmpList () ;
int GetCount() const;
BOOL IsEmpty() const;
TYPE& GetHead();
TYPE GetHead() const;
TYPE& GetTail();
TYPE GetTail() const;
TYPE RemoveHead();
TYPE RemoveTail();
POSITION AddHead(ARG_TYPE newElement);
POSITION AddTail(ARG_TYPE newElement);
void AddHead(SnmpList<TYPE,ARG_TYPE>* pNewList);
void AddTail(SnmpList<TYPE,ARG_TYPE>* pNewList);
void RemoveAll();
POSITION GetHeadPosition() const;
POSITION GetTailPosition() const;
TYPE& GetNext(POSITION& rPosition);
TYPE GetNext(POSITION& rPosition) const;
TYPE& GetPrev(POSITION& rPosition);
TYPE GetPrev(POSITION& rPosition) const;
TYPE& GetAt(POSITION position);
TYPE GetAt(POSITION position) const;
void SetAt(POSITION pos, ARG_TYPE newElement);
void RemoveAt(POSITION position);
POSITION InsertBefore(POSITION position, ARG_TYPE newElement);
POSITION InsertAfter(POSITION position, ARG_TYPE newElement);
POSITION Find(ARG_TYPE searchValue, POSITION startAfter = NULL) const;
POSITION FindIndex(int nIndex) const;
} ;
template<class TYPE, class ARG_TYPE>
SnmpList <TYPE,ARG_TYPE>:: SnmpList ( BOOL threadSafeArg ) : criticalSection ( NULL )
{
if ( threadSafeArg )
criticalSection = new CCriticalSection ;
else
criticalSection = NULL ;
}
template<class TYPE, class ARG_TYPE>
SnmpList <TYPE,ARG_TYPE> :: ~SnmpList ()
{
if ( criticalSection )
delete criticalSection ;
}
template<class TYPE, class ARG_TYPE>
int SnmpList <TYPE,ARG_TYPE> :: GetCount() const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
int count = clist.GetCount () ;
return count ;
}
else
{
return clist.GetCount () ;
}
}
template<class TYPE, class ARG_TYPE>
BOOL SnmpList <TYPE,ARG_TYPE> :: IsEmpty() const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
BOOL isEmpty = clist.IsEmpty () ;
return isEmpty ;
}
else
{
return clist.IsEmpty () ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE &SnmpList <TYPE,ARG_TYPE> :: GetHead ()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE &head = clist.GetHead () ;
return head;
}
else
{
return clist.GetHead () ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpList <TYPE,ARG_TYPE> :: GetHead () const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE head = clist.GetHead () ;
return head ;
}
else
{
return clist.GetHead () ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE &SnmpList <TYPE,ARG_TYPE> :: GetTail()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE &tail = clist.GetTail () ;
return tail ;
}
else
{
return clist.GetTail () ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpList <TYPE,ARG_TYPE> :: GetTail() const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE tail = clist.GetTail () ;
return tail ;
}
else
{
return clist.GetTail () ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpList <TYPE,ARG_TYPE> :: RemoveHead()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE head = clist.RemoveHead () ;
return head ;
}
else
{
return clist.RemoveHead () ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpList <TYPE,ARG_TYPE> :: RemoveTail()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE tail = clist.RemoveTail () ;
return tail ;
}
else
{
return clist.RemoveTail () ;
}
}
template<class TYPE, class ARG_TYPE>
POSITION SnmpList <TYPE,ARG_TYPE> :: AddHead(ARG_TYPE newElement)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
POSITION position = clist.AddHead ( newElement ) ;
return position ;
}
else
{
return clist.AddHead ( newElement ) ;
}
}
template<class TYPE, class ARG_TYPE>
POSITION SnmpList <TYPE,ARG_TYPE> :: AddTail(ARG_TYPE newElement)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
POSITION position = clist.AddTail ( newElement ) ;
return position ;
}
else
{
return clist.AddTail ( newElement ) ;
}
}
template<class TYPE, class ARG_TYPE>
void SnmpList <TYPE,ARG_TYPE> :: AddHead(SnmpList<TYPE,ARG_TYPE> *pNewList)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
clist.AddHead ( pNewList->clist ) ;
}
else
{
clist.AddHead ( pNewList->clist ) ;
}
}
template<class TYPE, class ARG_TYPE>
void SnmpList <TYPE,ARG_TYPE> :: AddTail(SnmpList<TYPE,ARG_TYPE> *pNewList)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
clist.AddTail ( pNewList->clist ) ;
}
else
{
clist.AddTail ( pNewList->clist ) ;
}
}
template<class TYPE, class ARG_TYPE>
void SnmpList <TYPE,ARG_TYPE> :: RemoveAll ()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
clist.RemoveAll () ;
}
else
{
clist.RemoveAll () ;
}
}
template<class TYPE, class ARG_TYPE>
POSITION SnmpList <TYPE,ARG_TYPE> :: GetHeadPosition() const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
POSITION position = clist.GetHeadPosition () ;
return position ;
}
else
{
return clist.GetHeadPosition () ;
}
}
template<class TYPE, class ARG_TYPE>
POSITION SnmpList <TYPE,ARG_TYPE> :: GetTailPosition() const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
POSITION position = clist.GetTailPosition () ;
return position ;
}
else
{
return clist.GetTailPosition () ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE& SnmpList <TYPE,ARG_TYPE> :: GetNext(POSITION& rPosition)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE &type = clist.GetNext ( rPosition ) ;
return type ;
}
else
{
return clist.GetNext ( rPosition ) ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpList <TYPE,ARG_TYPE> :: GetNext(POSITION& rPosition) const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE type = clist.GetNext ( rPosition ) ;
return type ;
}
else
{
return clist.GetNext ( rPosition ) ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE& SnmpList <TYPE,ARG_TYPE> :: GetPrev(POSITION& rPosition)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE &type = clist.GetPrev ( rPosition ) ;
return type ;
}
else
{
return clist.GetPrev ( rPosition ) ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpList <TYPE,ARG_TYPE> :: GetPrev(POSITION& rPosition) const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE type = clist.GetPrev ( rPosition ) ;
return type ;
}
else
{
return clist.GetPrev ( rPosition ) ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE& SnmpList <TYPE,ARG_TYPE> :: GetAt(POSITION rPosition)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE &type = clist.GetAt ( rPosition ) ;
return type ;
}
else
{
return clist.GetAt ( rPosition ) ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpList <TYPE,ARG_TYPE> :: GetAt(POSITION rPosition) const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE type = clist.GetAt ( rPosition ) ;
return type ;
}
else
{
return clist.GetAt ( rPosition ) ;
}
}
template<class TYPE, class ARG_TYPE>
void SnmpList <TYPE,ARG_TYPE> :: SetAt(POSITION pos, ARG_TYPE newElement)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
clist.SetAt ( pos , newElement ) ;
}
else
{
clist.SetAt ( pos , newElement ) ;
}
}
template<class TYPE, class ARG_TYPE>
void SnmpList <TYPE,ARG_TYPE> :: RemoveAt(POSITION position)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
clist.RemoveAt ( position ) ;
}
else
{
clist.RemoveAt ( position ) ;
}
}
template<class TYPE, class ARG_TYPE>
POSITION SnmpList <TYPE,ARG_TYPE> :: InsertBefore(POSITION position, ARG_TYPE newElement)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
POSITION position = clist.InsertBefore ( position , newElement ) ;
return position ;
}
else
{
return clist.InsertBefore ( position , newElement ) ;
}
}
template<class TYPE, class ARG_TYPE>
POSITION SnmpList <TYPE,ARG_TYPE> :: InsertAfter(POSITION position, ARG_TYPE newElement)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
POSITION position = clist.InsertAfter ( position , newElement ) ;
return position ;
}
else
{
return clist.InsertAfter ( position , newElement ) ;
}
}
template<class TYPE, class ARG_TYPE>
POSITION SnmpList <TYPE,ARG_TYPE> :: Find(ARG_TYPE searchValue, POSITION startAfter ) const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
POSITION position = clist.Find ( searchValue , startAfter ) ;
return position ;
}
else
{
return clist.Find ( searchValue , startAfter ) ;
}
}
template<class TYPE, class ARG_TYPE>
POSITION SnmpList <TYPE,ARG_TYPE> :: FindIndex(int nIndex) const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
POSITION position = clist.Find ( nIndex ) ;
return position ;
}
else
{
return clist.Find ( nIndex ) ;
}
}
template<class TYPE, class ARG_TYPE>
class SnmpStack : public SnmpList<TYPE,ARG_TYPE>
{
private:
CCriticalSection * criticalSection ;
protected:
public:
SnmpStack ( BOOL threadSafeArg = FALSE ) ;
virtual ~SnmpStack () ;
void Add ( ARG_TYPE type ) ;
TYPE Get () ;
TYPE Delete () ;
} ;
template<class TYPE, class ARG_TYPE>
SnmpStack <TYPE, ARG_TYPE> :: SnmpStack ( BOOL threadSafeArg ) :
SnmpList<TYPE,ARG_TYPE> ( FALSE ) ,
criticalSection ( NULL )
{
if ( threadSafeArg )
criticalSection = new CCriticalSection ;
else
criticalSection = NULL ;
}
template<class TYPE, class ARG_TYPE>
SnmpStack <TYPE, ARG_TYPE> :: ~SnmpStack ()
{
if ( criticalSection )
delete criticalSection ;
}
template<class TYPE, class ARG_TYPE>
void SnmpStack <TYPE, ARG_TYPE> :: Add ( ARG_TYPE type )
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
AddHead ( type ) ;
}
else
{
AddHead ( type ) ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpStack <TYPE, ARG_TYPE> :: Get ()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE type = GetHead () ;
return type ;
}
else
{
return GetHead () ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpStack <TYPE,ARG_TYPE> :: Delete ()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE type = RemoveHead () ;
return type ;
}
else
{
return RemoveHead () ;
}
}
template<class TYPE, class ARG_TYPE>
class SnmpQueue : public SnmpList<TYPE,ARG_TYPE>
{
private:
CCriticalSection * criticalSection ;
protected:
public:
SnmpQueue ( BOOL threadSafeArg = FALSE ) ;
virtual ~SnmpQueue () ;
void Add ( ARG_TYPE type ) ;
TYPE Get () ;
TYPE Delete () ;
void Rotate () ;
} ;
template<class TYPE, class ARG_TYPE>
SnmpQueue <TYPE, ARG_TYPE> :: SnmpQueue ( BOOL threadSafeArg ) :
SnmpList<TYPE,ARG_TYPE> ( FALSE ) ,
criticalSection ( NULL )
{
if ( threadSafeArg )
criticalSection = new CCriticalSection ;
else
criticalSection = NULL ;
}
template<class TYPE, class ARG_TYPE>
SnmpQueue <TYPE, ARG_TYPE> :: ~SnmpQueue ()
{
if ( criticalSection )
delete criticalSection ;
}
template<class TYPE, class ARG_TYPE>
void SnmpQueue <TYPE, ARG_TYPE> :: Add ( ARG_TYPE type )
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
AddTail ( type ) ;
}
else
{
AddTail ( type ) ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpQueue <TYPE, ARG_TYPE> :: Get ()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE type = GetHead () ;
return type ;
}
else
{
return GetHead () ;
}
}
template<class TYPE, class ARG_TYPE>
TYPE SnmpQueue <TYPE, ARG_TYPE> :: Delete ()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE type = RemoveHead () ;
return type ;
}
else
{
return RemoveHead () ;
}
}
template<class TYPE, class ARG_TYPE>
void SnmpQueue <TYPE, ARG_TYPE> :: Rotate ()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
TYPE type = Delete () ;
Add ( type ) ;
}
else
{
TYPE type = Delete () ;
Add ( type ) ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
class SnmpMap
{
private:
CCriticalSection * criticalSection ;
CMap <KEY, ARG_KEY, VALUE, ARG_VALUE> cmap ;
protected:
public:
SnmpMap ( BOOL threadSafe = FALSE ) ;
virtual ~SnmpMap () ;
int GetCount () const ;
BOOL IsEmpty () const ;
BOOL Lookup(ARG_KEY key, VALUE& rValue) const ;
VALUE& operator[](ARG_KEY key) ;
void SetAt(ARG_KEY key, ARG_VALUE newValue) ;
BOOL RemoveKey(ARG_KEY key) ;
void RemoveAll () ;
POSITION GetStartPosition() const ;
void GetNextAssoc(POSITION& rNextPosition, KEY& rKey, VALUE& rValue) const ;
BOOL GetCurrentAssoc(POSITION rPosition, KEY& rKey, VALUE& rValue) const;
} ;
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: SnmpMap ( BOOL threadSafeArg ) : criticalSection ( NULL )
{
if ( threadSafeArg )
criticalSection = new CCriticalSection ;
else
criticalSection = FALSE ;
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: ~SnmpMap ()
{
if ( criticalSection )
delete criticalSection ;
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
int SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: GetCount() const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
int count = cmap.GetCount () ;
return count ;
}
else
{
return cmap.GetCount () ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
BOOL SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: IsEmpty() const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
BOOL isEmpty = cmap.IsEmpty () ;
return isEmpty ;
}
else
{
return cmap.IsEmpty () ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
BOOL SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: Lookup(ARG_KEY key, VALUE& rValue) const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
BOOL lookup = cmap.Lookup ( key , rValue ) ;
return lookup ;
}
else
{
return cmap.Lookup ( key , rValue ) ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
VALUE& SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: operator[](ARG_KEY key)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
VALUE &value = cmap.operator [] ( key ) ;
return value ;
}
else
{
return cmap.operator [] ( key ) ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
void SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: SetAt(ARG_KEY key, ARG_VALUE newValue)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
cmap.SetAt ( key , newValue ) ;
}
else
{
cmap.SetAt ( key , newValue ) ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
BOOL SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: RemoveKey(ARG_KEY key)
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
BOOL removeKey = cmap.RemoveKey ( key ) ;
return removeKey ;
}
else
{
return cmap.RemoveKey ( key ) ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
void SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: RemoveAll()
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
cmap.RemoveAll () ;
}
else
{
cmap.RemoveAll () ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
POSITION SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE> :: GetStartPosition() const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
POSITION position = cmap.GetStartPosition () ;
return position ;
}
else
{
return cmap.GetStartPosition () ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
void SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE>:: GetNextAssoc(POSITION& rNextPosition, KEY& rKey, VALUE& rValue) const
{
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
cmap.GetNextAssoc ( rNextPosition , rKey , rValue ) ;
}
else
{
cmap.GetNextAssoc ( rNextPosition , rKey , rValue ) ;
}
}
template<class KEY, class ARG_KEY, class VALUE, class ARG_VALUE>
BOOL SnmpMap <KEY, ARG_KEY, VALUE, ARG_VALUE>:: GetCurrentAssoc(POSITION rPosition, KEY& rKey, VALUE& rValue) const
{
BOOL t_Status ;
if ( criticalSection )
{
criticalSection->Lock () ;
ScopeGuard t_1 = MakeObjGuard ( *criticalSection , CCriticalSection :: Unlock ) ;
t_Status = cmap.GetCurrentAssoc ( rPosition , rKey , rValue ) ;
}
else
{
t_Status = cmap.GetCurrentAssoc ( rPosition , rKey , rValue ) ;
}
return t_Status ;
}
#endif // __SNMPCONT_H