00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef CLASSIC_SET_IMAGE_SEARCH_H_
00034 #define CLASSIC_SET_IMAGE_SEARCH_H_
00035
00036 #include "search/classic/backtrack_search.h"
00037 #include "predicate/set_image_predicate.h"
00038
00039 namespace permlib {
00040 namespace classic {
00041
00043
00046 template<class BSGSIN,class TRANSRET>
00047 class SetImageSearch : public BacktrackSearch<BSGSIN,TRANSRET> {
00048 public:
00049 typedef typename BacktrackSearch<BSGSIN,TRANSRET>::PERM PERM;
00050
00052
00056 SetImageSearch(const BSGSIN& bsgs, uint pruningLevelDCM);
00057
00059
00065 template<class InputIterator>
00066 void construct(InputIterator begin, InputIterator end, InputIterator beginImg, InputIterator endImg);
00067 };
00068
00069 template<class BSGSIN,class TRANSRET>
00070 SetImageSearch<BSGSIN,TRANSRET>::SetImageSearch(const BSGSIN& bsgs, uint pruningLevelDCM)
00071 : BacktrackSearch<BSGSIN,TRANSRET>(bsgs, pruningLevelDCM, false, true)
00072 { }
00073
00074 template<class BSGSIN,class TRANSRET>
00075 template<class InputIterator>
00076 void SetImageSearch<BSGSIN,TRANSRET>::construct(InputIterator begin, InputIterator end, InputIterator beginImg, InputIterator endImg) {
00077 SetImagePredicate<PERM>* stabPred = new SetImagePredicate<PERM>(begin, end, beginImg, endImg);
00078
00079 this->m_limitLevel = stabPred->limit();
00080 this->m_limitBase = this->m_limitLevel;
00081 this->m_limitInitialized = true;
00082
00083 BacktrackSearch<BSGSIN,TRANSRET>::construct(stabPred, false);
00084 }
00085
00086 }
00087 }
00088
00089 #endif // -- CLASSIC_SET_IMAGE_SEARCH_H_