00001 // Copyright (C) 2005 Laboratoire d'Informatique de Paris 6 (LIP6), 00002 // département Systèmes Répartis Coopératifs (SRC), Université Pierre 00003 // et Marie Curie. 00004 // 00005 // This file is part of Spot, a model checking library. 00006 // 00007 // Spot is free software; you can redistribute it and/or modify it 00008 // under the terms of the GNU General Public License as published by 00009 // the Free Software Foundation; either version 2 of the License, or 00010 // (at your option) any later version. 00011 // 00012 // Spot is distributed in the hope that it will be useful, but WITHOUT 00013 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 00014 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 00015 // License for more details. 00016 // 00017 // You should have received a copy of the GNU General Public License 00018 // along with Spot; see the file COPYING. If not, write to the Free 00019 // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 00020 // 02111-1307, USA. 00021 00022 #ifndef SPOT_LTLVISIT_RANDOMLTL_HH 00023 # define SPOT_LTLVISIT_RANDOMLTL_HH 00024 00025 #include "apcollect.hh" 00026 #include <iosfwd> 00027 00028 namespace spot 00029 { 00030 namespace ltl 00031 { 00032 00045 class random_ltl 00046 { 00047 public: 00049 random_ltl(const atomic_prop_set* ap); 00050 ~random_ltl(); 00051 00062 formula* generate(int n) const; 00063 00066 std::ostream& dump_priorities(std::ostream& os) const; 00067 00103 const char* parse_options(char* options); 00104 00106 const atomic_prop_set* 00107 ap() const 00108 { 00109 return ap_; 00110 } 00111 00112 protected: 00113 void update_sums(); 00114 00115 private: 00116 struct op_proba 00117 { 00118 const char* name; 00119 int min_n; 00120 double proba; 00121 typedef formula* (*builder)(const random_ltl* rl, int n); 00122 builder build; 00123 void setup(const char* name, int min_n, builder build); 00124 }; 00125 op_proba* proba_; 00126 double total_1_; 00127 op_proba* proba_2_; 00128 double total_2_; 00129 double total_2_and_more_; 00130 const atomic_prop_set* ap_; 00131 }; 00132 } 00133 } 00134 00135 00136 #endif // SPOT_LTLVIST_RANDOMLTL_HH