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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 namespace Gecode {
00043
00044
00045
00046
00047
00048
00049 namespace Search {
00050
00051 forceinline
00052 BabEngine::BabEngine(unsigned int c_d0, unsigned int a_d,
00053 Stop* st, size_t sz)
00054 : EngineCtrl(st,sz), rcs(a_d), cur(NULL),
00055 mark(0), es(ES_SOLUTION), best(NULL),
00056 c_d(c_d0), d(0) {}
00057
00058
00059 forceinline void
00060 BabEngine::init(Space* s) {
00061 cur = s;
00062 }
00063
00064 forceinline size_t
00065 BabEngine::stacksize(void) const {
00066 return rcs.stacksize();
00067 }
00068
00069 forceinline
00070 BabEngine::~BabEngine(void) {
00071 rcs.reset();
00072 delete best;
00073 delete cur;
00074 }
00075 }
00076
00077
00078
00079
00080
00081
00082 template <class T>
00083 forceinline
00084 BAB<T>::BAB(T* s, const Search::Options& o)
00085 : Search::BAB(s,o.c_d,o.a_d,o.stop,sizeof(T)) {}
00086
00087 template <class T>
00088 forceinline T*
00089 BAB<T>::next(void) {
00090 Space *s1, *s2;
00091 while (e.explore(s1,s2) == Search::BabEngine::ES_CONSTRAIN)
00092 dynamic_cast<T*>(s1)->constrain(dynamic_cast<T*>(s2));
00093 return dynamic_cast<T*>(s1);
00094 }
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 template <class T>
00105 T*
00106 bab(T* s, const Search::Options& o) {
00107 BAB<T> b(s,o);
00108 T* l = NULL;
00109 while (T* n = b.next()) {
00110 delete l; l = n;
00111 }
00112 return l;
00113 }
00114
00115 }
00116
00117