00001
00002
00003
00004 #ifndef __IRCLIST_H__
00005 #define __IRCLIST_H__
00006
00007 #include <string>
00008 #include <set>
00009 #include <iostream>
00010
00011 namespace ircpp {
00012 class session;
00013
00020 enum listmode {off, automatic, manual};
00021
00022
00023 template <class T>
00024 class irclist
00025 {
00026 public:
00027
00028 class iterator
00029 {
00030 public:
00031 iterator();
00032 ~iterator();
00033 explicit iterator(const typename std::set<T*>::iterator& it);
00034 T& operator* () const;
00035 const iterator& operator++ (int);
00036 const iterator& operator= (const iterator& rhs);
00037 bool operator== (const iterator& rhs);
00038 bool operator!= (const iterator& rhs);
00039 const typename std::set<T*>::iterator set_iterator() const;
00040 private:
00041 typename std::set<T*>::iterator _it;
00042 };
00043
00044
00045 public:
00046
00047 explicit irclist(session& parent);
00048 ~irclist();
00049
00050
00051 T* find(const std::string& name) const;
00052 T* add(T* item);
00053 iterator begin() const;
00054 iterator end() const;
00055 size_t count() const;
00056 bool remove(T& item);
00057
00058
00059 private:
00060 class compare {
00061 public:
00062 bool operator()(const T* a, const T* b) const {
00063 return (*a < *b);
00064 }
00065 };
00066 std::set<T*, compare> _set;
00067 session& s;
00068 };
00069
00070 }
00071
00072 #endif