00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 # ifndef LIST_H
00014 # define LIST_H
00015
00016 # include <list>
00017
00018 using namespace std ;
00019
00020 namespace mmx {
00021
00022 namespace shape {
00023
00024
00025 template<typename T> T at(list<T> l, int p) ;
00026 template<typename T> void insert(list<T>& l, int p, T t) ;
00027 template<typename T> void replace(list<T>& l, int p, T t) ;
00028 template<typename T> void remove(list<T>& l, int p) ;
00029 template<typename T> void remove(list<T>& l, T t) ;
00030 template<typename T> void operator<<(list<T>& l ,T t) ;
00031
00032
00033 template<typename T> int indexof(list<T> l, T t)
00034 {
00035 typename list<T>::iterator it = l.begin() ;
00036 for(int i = 0 ; it != l.end() ; it++, i++)
00037 if(*it == t) return i ;
00038 return -1 ;
00039 }
00040
00041 template<typename T> T at(list<T> l, int p)
00042 {
00043 typename list<T>::iterator it = l.begin() ;
00044 for(int i = 0 ; i < p ; it++, i++) ;
00045 return *it ;
00046 }
00047
00048 template<typename T> void insert(list<T>& l, int p, T t)
00049 {
00050 typename list<T>::iterator it = l.begin() ;
00051 for(int i = 1 ; i < p ; i++, it++) ;
00052 l.insert(it, t) ;
00053 }
00054
00055 template<typename T> void replace(list<T>& l, int p, T t)
00056 {
00057 typename list<T>::iterator it = l.begin() ;
00058 for(int i = 1 ; i < p ; i++, it++) ;
00059 *it = t ;
00060 }
00061
00062 template<typename T> void remove(list<T>& l, int p)
00063 {
00064 typename list<T>::iterator it = l.begin() ;
00065 for(int i = 1 ; i < p ; i++, it++) ;
00066 l.erase(it) ;
00067 }
00068
00069 template<typename T> void remove(list<T>& l, T t)
00070 {
00071 remove(l, indexof(l, t)) ;
00072 }
00073
00074 template<typename T> void operator<<(list<T>& l ,T t)
00075 {
00076 l.push_back(t) ;
00077 }
00078
00079 }
00080
00081 }
00082
00083 # endif // LIST_H