spot  0.8.3
tgbaproduct.hh
Go to the documentation of this file.
00001 // Copyright (C) 2011 Laboratoire de Recherche et Développement
00002 // de l'Epita (LRDE).
00003 // Copyright (C) 2003, 2004, 2006 Laboratoire d'Informatique de Paris
00004 // 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
00005 // Université Pierre et Marie Curie.
00006 //
00007 // This file is part of Spot, a model checking library.
00008 //
00009 // Spot is free software; you can redistribute it and/or modify it
00010 // under the terms of the GNU General Public License as published by
00011 // the Free Software Foundation; either version 2 of the License, or
00012 // (at your option) any later version.
00013 //
00014 // Spot is distributed in the hope that it will be useful, but WITHOUT
00015 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
00016 // or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
00017 // License for more details.
00018 //
00019 // You should have received a copy of the GNU General Public License
00020 // along with Spot; see the file COPYING.  If not, write to the Free
00021 // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
00022 // 02111-1307, USA.
00023 
00024 #ifndef SPOT_TGBA_TGBAPRODUCT_HH
00025 # define SPOT_TGBA_TGBAPRODUCT_HH
00026 
00027 #include "tgba.hh"
00028 #include "misc/fixpool.hh"
00029 
00030 namespace spot
00031 {
00032 
00038   class state_product : public state
00039   {
00040   public:
00047     state_product(state* left, state* right, fixed_size_pool* pool)
00048       : left_(left), right_(right), count_(1), pool_(pool)
00049     {
00050     }
00051 
00052     virtual void destroy() const;
00053 
00054     state*
00055     left() const
00056     {
00057       return left_;
00058     }
00059 
00060     state*
00061     right() const
00062     {
00063       return right_;
00064     }
00065 
00066     virtual int compare(const state* other) const;
00067     virtual size_t hash() const;
00068     virtual state_product* clone() const;
00069 
00070   private:
00071     state* left_;               
00072     state* right_;              
00073     mutable unsigned count_;
00074     fixed_size_pool* pool_;
00075 
00076     virtual ~state_product();
00077     state_product(const state_product& o); // No implementation.
00078   };
00079 
00080 
00082   class tgba_product: public tgba
00083   {
00084   public:
00089     tgba_product(const tgba* left, const tgba* right);
00090 
00091     virtual ~tgba_product();
00092 
00093     virtual state* get_init_state() const;
00094 
00095     virtual tgba_succ_iterator*
00096     succ_iter(const state* local_state,
00097               const state* global_state = 0,
00098               const tgba* global_automaton = 0) const;
00099 
00100     virtual bdd_dict* get_dict() const;
00101 
00102     virtual std::string format_state(const state* state) const;
00103 
00104     virtual std::string
00105     transition_annotation(const tgba_succ_iterator* t) const;
00106 
00107     virtual state* project_state(const state* s, const tgba* t) const;
00108 
00109     virtual bdd all_acceptance_conditions() const;
00110     virtual bdd neg_acceptance_conditions() const;
00111 
00112   protected:
00113     virtual bdd compute_support_conditions(const state* state) const;
00114     virtual bdd compute_support_variables(const state* state) const;
00115 
00116   protected:
00117     bdd_dict* dict_;
00118     const tgba* left_;
00119     const tgba* right_;
00120     bool left_kripke_;
00121     bdd left_acc_complement_;
00122     bdd right_acc_complement_;
00123     bdd all_acceptance_conditions_;
00124     bdd neg_acceptance_conditions_;
00125     bddPair* right_common_acc_;
00126     fixed_size_pool pool_;
00127 
00128   private:
00129     // Disallow copy.
00130     tgba_product(const tgba_product&);
00131     tgba_product& operator=(const tgba_product&);
00132   };
00133 
00135   class tgba_product_init: public tgba_product
00136   {
00137   public:
00138     tgba_product_init(const tgba* left, const tgba* right,
00139                       const state* left_init, const state* right_init);
00140     virtual state* get_init_state() const;
00141   protected:
00142     const state* left_init_;
00143     const state* right_init_;
00144   };
00145 
00146 }
00147 
00148 #endif // SPOT_TGBA_TGBAPRODUCT_HH

Please comment this page and report errors about it on the RefDocComments page.
Generated on Fri Mar 9 2012 13:52:09 for spot by doxygen 1.7.6.1