Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

compmod.h

Go to the documentation of this file.
00001 #ifndef COMPMOD_H
00002 #define COMPMOD_H
00003 
00004 #include <vector>
00005 #include <cstdlib>
00006 #include <iterator>
00007 #include <set>
00008 #include <map>
00009 
00010 #include "parser-structs.h"
00011 #include "unify.h"
00012 
00018 class compmod
00019 {
00023    enum strategy { STRATEGY_RANDOM = 1, STRATEGY_FIRST,
00024                    STRATEGY_LAST };
00025    
00029    class compmod_error: public exception {};
00030    
00034    class entry
00035    {
00041       friend std::ostream &operator<<(std::ostream &os, const entry &e);
00042 
00047       entry(const c_rule *r);
00048 
00053       static void init();
00054 
00061       bool operator<(const entry &rhs) const;
00062 
00066       const c_rule *rule;
00067 
00072       mutable std::set<int> possibles;
00073 
00078       static std::map<std::string, std::set<int> > all_possibles;
00079    };
00080 
00087    friend std::ostream &operator<<(std::ostream &os, const compmod &c);
00088 
00094    compmod(c_rule *rule);
00095       
00099    void finalise();
00100 
00106    static strategy get_strategy(const std::string &name);
00107 
00112    void report_answer(const c_term *ans_head) const;
00113 
00117    void deep_delete();
00118 
00124    bool extend_set();
00125 
00135    void set_pick_strategy(const std::string &s);
00136 
00141    void set_ans_a_pick_strategy(const strategy &s);
00142 
00147    void set_ans_b_pick_strategy(const strategy &s);
00148 
00153    void set_calls_pick_strategy(const strategy &s);
00154 
00160    void set_possibles_strategy(const strategy &s);
00161 
00165    void set_local_ebc_percentage(size_t p);
00166 
00167 private:
00168 
00174    entry get_next_entry(const std::set<entry> &s, compmod::strategy pick_strategy) const;
00175 
00180    entry get_next_call() const;
00181 
00186    entry get_next_answer_alternative() const;
00187 
00192    entry get_next_answer_bound() const;
00193 
00197    void extend_by_call();
00198 
00202    void extend_by_answer_alternative();
00203 
00207    void extend_by_answer_bound();
00208 
00214    std::pair<const c_rule*, unifier*> add_to_set(c_rule *rule);
00215 
00227    void extend_by_first_answer(const c_rule *rule, const con_type &answer, const unifier *mgu);
00228 
00237    void change_constraint_disjunction_call(const c_rule *original, const con_type &addition);
00238 
00247    void change_constraint_disjunction_answer(const c_rule *original, const con_type &addition);
00248 
00256    void change_constraint_disjunction(const c_rule *original, const con_type &addition);
00257 
00266    void change_constraint_conjunction_call(const c_rule *original, const con_type &addition);
00267 
00276    void change_constraint_conjunction_answer(const c_rule *original, const con_type &addition);
00277 
00285    void change_constraint_conjunction(const c_rule *original, const con_type &addition);
00286 
00300    bool get_answer(const c_term *t, con_type &answer, unifier &mgu) const;
00301 
00309    void get_calls(const c_term *t, std::vector<const c_rule*> &calls) const;
00310 
00316    void fatal_error() const;
00317 
00318 
00323    std::set<entry> calls;
00324 
00329    std::set<entry> ob_calls;
00330 
00335    std::set<entry> ans_a;
00336 
00341    std::set<entry> ans_b;
00342 
00347    std::set<entry> ob_ans_a;
00348 
00353    std::set<entry> ob_ans_b;
00354 
00358    strategy calls_pick_strategy;
00359       
00364    strategy ans_a_pick_strategy;
00365 
00369    strategy ans_b_pick_strategy;
00370 
00374    strategy possibles_strategy;
00375 
00380    std::string pick_strategy;
00381 
00388    size_t percent_local_extensions;
00389 
00396    std::map<const c_rule*, std::pair<const c_rule*, unifier*> > answer_extension;
00397       
00401    std::set<const c_rule*> used_ebc;
00402 
00407    std::vector<c_rule*> all_rules;
00408 };
00409 
00410 #endif // COMPMOD_H

Generated on Wed Feb 16 20:53:35 2005 for Fixpoint Engine by  doxygen 1.3.9.1