00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024
00025
00029 template <typename Type>
00030 void Selector<Type>::Add(Type Socket)
00031 {
00032 if (Socket.IsValid())
00033 {
00034 SelectorBase::Add(Socket.mySocket);
00035 mySockets[Socket.mySocket] = Socket;
00036 }
00037 }
00038
00039
00043 template <typename Type>
00044 void Selector<Type>::Remove(Type Socket)
00045 {
00046 typename SocketTable::iterator It = mySockets.find(Socket.mySocket);
00047 if (It != mySockets.end())
00048 {
00049 SelectorBase::Remove(Socket.mySocket);
00050 mySockets.erase(It);
00051 }
00052 }
00053
00054
00058 template <typename Type>
00059 void Selector<Type>::Clear()
00060 {
00061 SelectorBase::Clear();
00062 mySockets.clear();
00063 }
00064
00065
00071 template <typename Type>
00072 unsigned int Selector<Type>::Wait(float Timeout)
00073 {
00074
00075 if (mySockets.empty())
00076 return 0;
00077
00078 return SelectorBase::Wait(Timeout);
00079 }
00080
00081
00087 template <typename Type>
00088 Type Selector<Type>::GetSocketReady(unsigned int Index)
00089 {
00090 SocketHelper::SocketType Socket = SelectorBase::GetSocketReady(Index);
00091
00092 typename SocketTable::const_iterator It = mySockets.find(Socket);
00093 if (It != mySockets.end())
00094 return It->second;
00095 else
00096 return Type(Socket);
00097 }