gist.hh
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 #ifndef __GECODE_GIST_HH__
00034 #define __GECODE_GIST_HH__
00035
00036 #include <gecode/kernel.hh>
00037 #include <gecode/search.hh>
00038 #include <gecode/int.hh>
00039 #ifdef GECODE_HAS_SET_VARS
00040 #include <gecode/set.hh>
00041 #endif
00042 #ifdef GECODE_HAS_FLOAT_VARS
00043 #include <gecode/float.hh>
00044 #endif
00045
00046
00047
00048
00049
00050
00051 #if !defined(GIST_STATIC_LIBS) && \
00052 (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
00053
00054 #ifdef GECODE_BUILD_GIST
00055 #define GECODE_GIST_EXPORT __declspec( dllexport )
00056 #else
00057 #define GECODE_GIST_EXPORT __declspec( dllimport )
00058 #endif
00059
00060 #else
00061
00062 #ifdef GECODE_GCC_HAS_CLASS_VISIBILITY
00063 #define GECODE_GIST_EXPORT __attribute__ ((visibility("default")))
00064 #else
00065 #define GECODE_GIST_EXPORT
00066 #endif
00067
00068 #endif
00069
00070
00071 #ifndef GECODE_BUILD_GIST
00072 #define GECODE_LIBRARY_NAME "Gist"
00073 #include <gecode/support/auto-link.hpp>
00074 #endif
00075
00076 #include <string>
00077 #include <sstream>
00078
00079 namespace Gecode {
00080
00089 namespace Gist {
00090
00099 class GECODE_GIST_EXPORT Inspector {
00100 public:
00102 virtual void inspect(const Space& s) = 0;
00104 virtual std::string name(void);
00106 virtual void finalize(void);
00108 virtual ~Inspector(void);
00109 };
00110
00119 class GECODE_GIST_EXPORT Comparator {
00120 public:
00122
00123
00125 virtual void compare(const Space& s0, const Space& s1) = 0;
00127 virtual std::string name(void);
00129 virtual void finalize(void);
00131 virtual ~Comparator(void);
00132
00134
00136
00137
00139 template<class Var>
00140 static std::string compare(std::string x_n, const VarArgArray<Var>& x,
00141 const VarArgArray<Var>& y);
00143 static std::string compare(std::string x_n, IntVar x, IntVar y);
00145 static std::string compare(std::string x_n, BoolVar x, BoolVar y);
00146 #ifdef GECODE_HAS_SET_VARS
00147
00148 static std::string compare(std::string x_n, SetVar x, SetVar y);
00149 #endif
00150 #ifdef GECODE_HAS_FLOAT_VARS
00151
00152 static std::string compare(std::string x_n, FloatVar x, FloatVar y);
00153 #endif
00154
00155 };
00156
00157 class TextOutputI;
00158
00160 class GECODE_GIST_EXPORT TextOutput {
00161 private:
00163 TextOutputI *t;
00165 std::string n;
00166 protected:
00168 void init(void);
00170 std::ostream& getStream(void);
00172 void flush(void);
00174 void addHtml(const char* s);
00175 public:
00177 TextOutput(const std::string& name);
00179 void finalize(void);
00181 virtual ~TextOutput(void);
00183 virtual std::string name(void);
00184 };
00185
00187 template<class S>
00188 class Print : public TextOutput, public Inspector {
00189 public:
00191 Print(const std::string& name);
00193 virtual void inspect(const Space& node);
00195 virtual std::string name(void);
00197 virtual void finalize(void);
00198 };
00199
00210 template<class S>
00211 class VarComparator : public TextOutput, public Comparator {
00212 public:
00214 VarComparator(std::string name);
00216 virtual void compare(const Space& s0, const Space& s1);
00218 virtual std::string name(void);
00220 virtual void finalize(void);
00221 };
00222
00224 GECODE_GIST_EXPORT
00225 void stopBranch(Space& home);
00226
00234 class Options : public Search::Options {
00235 public:
00237 class _I {
00238 private:
00239 Support::DynamicArray<Inspector*,Heap> _click;
00240 unsigned int n_click;
00241 Support::DynamicArray<Inspector*,Heap> _solution;
00242 unsigned int n_solution;
00243 Support::DynamicArray<Inspector*,Heap> _move;
00244 unsigned int n_move;
00245 Support::DynamicArray<Comparator*,Heap> _compare;
00246 unsigned int n_compare;
00247 public:
00249 _I(void);
00251 void click(Inspector* i);
00253 void solution(Inspector* i);
00255 void move(Inspector* i);
00257 void compare(Comparator* c);
00258
00260 Inspector* click(unsigned int i) const;
00262 Inspector* solution(unsigned int i) const;
00264 Inspector* move(unsigned int i) const;
00266 Comparator* compare(unsigned int i) const;
00267 } inspect;
00269 GECODE_GIST_EXPORT static const Options def;
00271 Options(void);
00272 };
00273
00274
00276 GECODE_GIST_EXPORT int
00277 explore(Space* root, bool bab, const Options& opt);
00278
00283 int
00284 dfs(Space* root, const Gist::Options& opt = Gist::Options::def);
00285
00290 int
00291 bab(Space* root, const Gist::Options& opt = Gist::Options::def);
00292
00293 }
00294
00295 }
00296
00297 #include <gecode/gist/gist.hpp>
00298
00299 #endif
00300
00301