Source code of Windows XP (NT5)
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.
|
|
//
// Microsoft
//
// CollectionAdapter.h
#pragma once
#include "ScopeCriticalSection.h"
#include "AdapterInfo.h"
#include "PrimaryControlChannel.h"
#include <list>
#include <algorithm>
//
// Adapters
//
typedef std::list<IAdapterInfo*> LISTOF_ADAPTERS;
//
//
//
class CCollectionAdapters {
//
// Properties
//
public:
CComAutoCriticalSection m_AutoCS;
LISTOF_ADAPTERS m_ListOfAdapters;
//
// Methods
//
public:
//
// standard destructor
//
~CCollectionAdapters();
//
// Add a new Adapter (Thread safe)
//
HRESULT Add( IN IAdapterInfo* pAdapterToAdd );
//
// This version of Add will actualy create the new IAdapterInfo before adding it to the collection
// return the newly created IAdapterInfo or NULL is faild
//
IAdapterInfo* Add( IN ULONG nCookie, IN short nType );
//
// Remove a adapter from the list (Thead safe)
// by removing a adapter it will also kill all associated ControlChannel
//
HRESULT Remove( IN IAdapterInfo* pAdapterToRemove );
//
// This version od Remove will remove the IAdapterInfo base on the given index
//
HRESULT Remove( IN ULONG nCookie );
//
// Remove all the adapter from the collection
//
HRESULT RemoveAll();
//
// Return an IAdapterInfo the caller is responsable of releasing the interface
//
HRESULT GetAdapterInfo( IN ULONG nCookie, OUT IAdapterInfo** ppAdapterInfo );
//
// Bind the given addresses with the given index representing the AdapterInfo
//
HRESULT SetAddresses( IN ULONG nCookie, IN ULONG nAdapterIndex, IN ULONG nAddressCount, IN DWORD anAddress[] );
HRESULT ApplyPrimaryChannel( CPrimaryControlChannel* pChannelToActivate );
HRESULT AdapterUpdatePrimaryChannel( ULONG nCookie, CPrimaryControlChannel *pChannel );
private:
//
// Will return the IAdapterInfo* of for the given Cookie or NULL if not found
//
IAdapterInfo* FindUsingCookie( ULONG nCookie ) {
for ( LISTOF_ADAPTERS::iterator theIterator = m_ListOfAdapters.begin(); theIterator != m_ListOfAdapters.end(); theIterator++ ) { CAdapterInfo* pAdapterInfo = (CAdapterInfo*)(*theIterator); if ( pAdapterInfo->m_nCookie == nCookie ) return *theIterator; }
return NULL; }
//
// Will return the IAdapterInfo* of given the AdapterIndex or NULL if not found
//
IAdapterInfo* FindUsingAdapterIndex( ULONG nAdapterIndex ) { MYTRACE_ENTER("FindUsingAdapterIndex"); MYTRACE("Looking for adapter %d", nAdapterIndex);
for ( LISTOF_ADAPTERS::iterator theIterator = m_ListOfAdapters.begin(); theIterator != m_ListOfAdapters.end(); theIterator++ ) { CAdapterInfo* pAdapterInfo = (CAdapterInfo*)(*theIterator); MYTRACE("ADAPTER index %d", pAdapterInfo->m_nAdapterIndex); if ( pAdapterInfo->m_nAdapterIndex == nAdapterIndex ) return *theIterator; }
return NULL; }
//
// Return true if the AdapterInfo is part of the collection
//
inline bool FindUsingInterface( IAdapterInfo* pAdapterToFind ) { LISTOF_ADAPTERS::iterator theIterator = std::find( m_ListOfAdapters.begin(), m_ListOfAdapters.end(), pAdapterToFind );
return *theIterator ? true : false; }
};
|