SatSolver.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2008 Kamil Dudka <xdudka00@stud.fit.vutbr.cz>
00003  *
00004  * This file is part of fss (Fast SAT Solver).
00005  *
00006  * fss is free software: you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation, either version 3 of the License, or
00009  * any later version.
00010  *
00011  * fss is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with fss.  If not, see <http://www.gnu.org/licenses/>.
00018  */
00019 
00020 #ifndef SATSOLVER_H
00021 #define SATSOLVER_H
00022 
00031 #include <iostream>
00032 
00033 namespace FastSatSolver {
00034   class SatProblem;
00035 
00042   class ISatItem
00043   {
00044     public:
00045       virtual ~ISatItem() { }
00046       
00051       virtual ISatItem* clone() const = 0;
00052 
00057       virtual int getLength ( ) const = 0;
00058 
00063       virtual bool getBit (int index ) const = 0;
00064   };
00065 
00072   class IObserver {
00073     public:
00074       virtual ~IObserver() { }
00075       
00081       virtual void notify() = 0;
00082   };
00083 
00090   class ISubject {
00091     public:
00092       virtual ~ISubject() { }
00093       
00101       virtual void addObserver(IObserver *observer) = 0;
00102   };
00103 
00104 
00110   class AbstractSubject: public ISubject {
00111     public:
00112       virtual ~AbstractSubject();
00113       
00114       // see ISubject dox
00115       virtual void addObserver(IObserver *);
00116     protected:
00117       AbstractSubject();
00118       
00124       void notify();
00125     private:
00126       struct Private;
00127       Private *d;
00128   };
00129 
00135   class IProcess {
00136     public:
00137       virtual ~IProcess() { }
00138       
00143       virtual void start() = 0;
00144       
00148       virtual void stop() = 0;
00149       
00154       virtual void reset() = 0;
00155   };
00156 
00162   class AbstractProcess:
00163     public AbstractSubject,
00164     public IProcess
00165   {
00166     public:
00167       virtual ~AbstractProcess();
00168       virtual void start();
00169       virtual void stop();
00170       virtual void reset();
00171       
00176       virtual int getStepsCount();
00177     protected:
00178       AbstractProcess();
00179       
00184       virtual void initialize() = 0;
00185       
00190       virtual void doStep() = 0;
00191     private:
00192       struct Private;
00193       Private *d;
00194   };
00195 
00201   class IStopWatch {
00202     public:
00203       virtual ~IStopWatch() { }
00204       
00209       virtual long getTimeElapsed() = 0;
00210   };
00211 
00217   class AbstractProcessWatched:
00218     public AbstractProcess,
00219     public IStopWatch
00220   {
00221     public:
00222       virtual ~AbstractProcessWatched();
00223       virtual void start();
00224       virtual void stop();
00225       virtual void reset();
00226       virtual long getTimeElapsed();
00227     protected:
00228       AbstractProcessWatched();
00229     private:
00230       struct Private;
00231       Private *d;
00232   };
00233 
00240   class SatItemVector {
00241     public:
00242       SatItemVector();
00243       SatItemVector(const SatItemVector &); 
00244       ~SatItemVector();
00245       
00249       int getLength() const;
00250       
00256       ISatItem* getItem(int index) const;
00257       
00264       void addItem(ISatItem *item);
00265       
00269       void clear();
00270       
00277       void writeOut(SatProblem *, std::ostream &streamTo) const;
00278     private:
00279       struct Private;
00280       Private *d;
00281   };
00282 
00289   class SatItemSet {
00290     public:
00291       SatItemSet();
00292       ~SatItemSet();
00293       
00297       int getLength();
00298       
00305       void addItem(ISatItem *item);
00306       
00311       SatItemVector* createVector();
00312       
00316       void clear();
00317     private:
00318       struct Private;
00319       Private *d;
00320   };
00321 
00328   class AbstractSatSolver: public AbstractProcessWatched
00329   {
00330     public:
00331       virtual ~AbstractSatSolver();
00332       
00337       virtual SatProblem* getProblem() = 0;
00338       
00343       virtual int getSolutionsCount() = 0;
00344       
00350       virtual SatItemVector* getSolutionVector() = 0;
00351       
00355       virtual float minFitness() = 0;
00356       
00360       virtual float avgFitness() = 0;
00361       
00366       virtual float maxFitness() = 0;
00367 
00368     protected:
00369       AbstractSatSolver();
00370 
00371     private:
00372       struct Private;
00373       Private *d;
00374   };
00375 
00376 } // namespace FastSatSolver
00377 
00378 #endif // SATSOLVER_H

Generated on Wed Nov 5 22:30:22 2008 for Fast SAT Solver by  doxygen 1.5.4