00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __moSimpleMoveTabuList_h
00013 #define __moSimpleMoveTabuList_h
00014
00015 #include <list>
00016 #include <iterator>
00017
00018 #include "moTabuList.h"
00019
00021 template <class M>
00022 class moSimpleMoveTabuList: public moTabuList < M >
00023 {
00024
00025 public:
00026
00028 typedef typename M::EOType EOT;
00029
00031
00032
00033
00034 moSimpleMoveTabuList(unsigned __size): maxSize(__size)
00035 {
00036 currentSize=0;
00037 }
00038
00040
00045 bool
00046 operator () (const M & __move, const EOT & __sol)
00047 {
00048 typename std::list<M>::iterator it;
00049
00050 it=tabuList.begin();
00051 while(it!=tabuList.end()&&(!((*it)==__move)))
00052 {
00053 it++;
00054 }
00055
00056 return it!=tabuList.end();
00057 }
00058
00059 void
00060 add (const M & __move, const EOT & __sol)
00061 {
00062 tabuList.push_back(__move);
00063
00064 if(currentSize==maxSize)
00065 {
00066 tabuList.erase(tabuList.begin());
00067 }
00068 else
00069 {
00070 currentSize++;
00071 }
00072 }
00073
00074 void
00075 update ()
00076 {
00077
00078 }
00079
00080 void
00081 init ()
00082 {
00083
00084 }
00085
00086 private:
00087
00089 unsigned maxSize;
00090
00092 unsigned currentSize;
00093
00095 std::list<M> tabuList;
00096 };
00097
00098 #endif