Cbc trunk
|
00001 /* 00002 Copyright (C) 2006, International Business Machines Corporation and others. 00003 All Rights Reserved. 00004 00005 This code is licensed under the terms of the Eclipse Public License (EPL). 00006 00007 $Id$ 00008 */ 00009 00010 #ifndef CbcEventHandler_H 00011 #define CbcEventHandler_H 00012 00049 #include <map> 00050 00051 /* May well already be declared, but can't hurt. */ 00052 00053 class CbcModel ; 00054 00055 /* 00056 cvs/svn: $Id$ 00057 */ 00058 00081 class CbcEventHandler { 00082 00083 public: 00084 00087 enum CbcEvent { 00088 node = 200, 00090 treeStatus, 00092 solution, 00094 heuristicSolution, 00096 beforeSolution1, 00098 beforeSolution2, 00100 afterHeuristic, 00102 endSearch 00103 } ; 00104 00110 enum CbcAction { 00111 noAction = -1, 00113 stop = 0, 00117 restart, 00119 restartRoot, 00121 addCuts, 00123 killSolution 00124 00125 } ; 00126 00129 typedef std::map<CbcEvent, CbcAction> eaMapPair ; 00130 00131 00134 00141 virtual CbcAction event(CbcEvent whichEvent) ; 00142 00144 00145 00148 00151 CbcEventHandler(CbcModel *model = 0 /* was NULL but 4.6 complains */) ; 00152 00155 CbcEventHandler(const CbcEventHandler &orig) ; 00156 00159 CbcEventHandler& operator=(const CbcEventHandler &rhs) ; 00160 00163 virtual CbcEventHandler* clone() const ; 00164 00167 virtual ~CbcEventHandler() ; 00168 00170 00173 00176 inline void setModel(CbcModel *model) { 00177 model_ = model ; 00178 } 00179 00182 inline const CbcModel* getModel() const { 00183 return model_ ; 00184 } 00185 00188 inline void setDfltAction(CbcAction action) { 00189 dfltAction_ = action ; 00190 } 00191 00194 inline void setAction(CbcEvent event, CbcAction action) { 00195 if (eaMap_ == 0) { 00196 eaMap_ = new eaMapPair ; 00197 } 00198 (*eaMap_)[event] = action ; 00199 } 00200 00202 00203 00204 protected: 00205 00211 00214 CbcModel *model_ ; 00215 00218 CbcAction dfltAction_ ; 00219 00222 eaMapPair *eaMap_ ; 00223 00225 } ; 00226 00227 #endif 00228