bab.icc
Go to the documentation of this file.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 namespace Gecode {
00027
00028
00029
00030
00031
00032
00033 namespace Search {
00034
00035 forceinline
00036 BabEngine::BabEngine(unsigned int c_d0, unsigned int a_d,
00037 Stop* st, size_t sz)
00038 : EngineCtrl(st,sz), ds(a_d), cur(NULL), mark(0), best(NULL),
00039 c_d(c_d0), d(0) {}
00040
00041
00042 forceinline void
00043 BabEngine::init(Space* s) {
00044 cur = s;
00045 }
00046
00047 forceinline size_t
00048 BabEngine::stacksize(void) const {
00049 return ds.size();
00050 }
00051
00052 forceinline
00053 BabEngine::~BabEngine(void) {
00054 ds.reset();
00055 delete best;
00056 delete cur;
00057 }
00058 }
00059
00060
00061
00062
00063
00064
00065 template <class T>
00066 forceinline
00067 BAB<T>::BAB(T* s, unsigned int c_d, unsigned int a_d, Search::Stop* st)
00068 : Search::BAB(s,c_d,a_d,st,sizeof(T)) {}
00069
00070 template <class T>
00071 forceinline T*
00072 BAB<T>::next(void) {
00073 Space *s1, *s2;
00074 while (!e.explore(s1,s2))
00075 static_cast<T*>(s1)->constrain(static_cast<T*>(s2));
00076 return static_cast<T*>(s1);
00077 }
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 template <class T>
00088 T*
00089 bab(T* s, unsigned int c_d, unsigned int a_d, Search::Stop* st) {
00090 BAB<T> b(s,c_d,a_d,st);
00091 T* l = NULL;
00092 while (T* n = b.next()) {
00093 delete l; l = n;
00094 }
00095 return l;
00096 }
00097
00098 }
00099
00100