Awali
Another Weighted Automata library
transpose_view.hh
Go to the documentation of this file.
1 // This file is part of Awali.
2 // Copyright 2016-2021 Sylvain Lombardy, Victor Marsault, Jacques Sakarovitch
3 //
4 // Awali is a free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program. If not, see <http://www.gnu.org/licenses/>.
16 
17 #ifndef AWALI_CORE_TRANSPOSE_VIEW_HH
18 # define AWALI_CORE_TRANSPOSE_VIEW_HH
19 
21 # include <memory>
22 
23 namespace awali { namespace sttc {
24 
25  namespace internal
26  {
27  template <typename Aut>
29  {
30  public:
31  using context_t = typename Aut::context_t;
34  using kind_t = typename context_t::kind_t;
35 
36  using labelset_ptr = typename context_t::labelset_ptr;
37  using weightset_ptr = typename context_t::weightset_ptr;
38 
40  using label_t = typename labelset_t::value_t;
42  using weight_t = typename weightset_t::value_t;
44  using history_t = typename Aut::history_t;
45 
46  using st_store_t = typename Aut::st_store_t;
47  using tr_store_t = typename Aut::tr_store_t;
48  using tr_cont_t = typename Aut::tr_cont_t;
49 
50  transpose_view_impl() = delete;
52  transpose_view_impl(const Aut& aut)
53  : aut_{&aut}
54  {}
55  private:
56  const Aut* aut_;
57  public:
59 
61 
62  // Related sets
64 
65  static std::string sname()
66  {
67  return "transpose_view<" + context_t::sname() + ">";
68  }
69 
70  std::string vname(bool full = true) const
71  {
72  return "transpose_view<" + context().vname(full) + ">";
73  }
74 
75  const context_t& context() const { return aut_->context(); }
76  const weightset_ptr& weightset() const { return aut_->weightset(); }
77  const labelset_ptr& labelset() const { return aut_->labelset(); }
78 
79  // Special states and transitions
81 
82  // pseudo-initial and final states.
83  // The code below assumes that pre() and post() are the first
84  // two states of the automaton. In other words, all other states
85  // have greater numbers.
86  static constexpr state_t pre() { return Aut::post(); }
87  static constexpr state_t post() { return Aut::pre(); }
88 
90  {
91  return aut_->prepost_label();
92  }
93 
94  // Statistics
96 
97  size_t num_all_states() const { return aut_->num_all_states(); }
98  size_t num_states() const { return aut_->num_states(); }
99  size_t num_initials() const { return aut_->num_initials(); }
100  size_t num_finals() const { return aut_->num_finals(); }
101  size_t num_transitions() const { return aut_->num_transitions(); }
102 
103  // Queries on states
105 
106  bool has_state(state_t s) const { return aut_->has_state(s); }
107 
108  state_t max_state() const { return aut_->max_state(); }
109 
110  bool is_initial(state_t s) const { return aut_->is_final(s); }
111  bool is_final(state_t s) const { return aut_->is_initial(s); }
112  weight_t get_initial_weight(state_t s) const { return aut_->get_final_weight(s); }
113  weight_t get_final_weight(state_t s) const { return aut_->get_initial_weight(s); }
114 
115  // Queries on transitions
117 
119  {
120  return aut_->get_transition(dst, src, l);
121  }
122 
123  bool
125  {
126  return aut_->has_transition(dst, src, l);
127  }
128 
129  bool has_transition(transition_t t) const {return aut_->has_transition(t); }
130 
131  state_t src_of(transition_t t) const { return aut_->dst_of(t); }
132  state_t dst_of(transition_t t) const { return aut_->src_of(t); }
133  label_t label_of(transition_t t) const { return aut_->label_of(t); }
134  weight_t weight_of(transition_t t) const { return aut_->weight_of(t); }
135 
136  history_t history() const { return aut_->history(); }
137 
138  std::ostream&
139  print_state(state_t s, std::ostream& o) const {
140  return aut_->print_state(s, o);
141  }
142 
143  std::ostream&
144  print_state_name(state_t s, std::ostream& o,
145  const std::string& fmt = "text") const {
146  return aut_->print_state_name(s, o, fmt);
147  }
148 
149  void set_name(const std::string& n) {
150  aut_->set_name(n);
151  }
152 
153  void set_desc(const std::string& d) {
154  aut_->set_desc(d);
155  }
156 
157  const std::string& get_name() const {
158  return aut_->get_name();
159  }
160 
161  const std::string& get_desc() const {
162  return aut_->get_desc();
163  }
164 
165  std::string get_state_name(state_t s) const {
166  return aut_->get_state_name(s);
167  }
168 
169  std::ostream& print_state_history(state_t s, std::ostream& o,
170  const std::string& fmt = "text") const {
171  return aut_->print_state_history(s, o, fmt);
172  }
173 
174  bool has_history(state_t s) const {
175  return aut_->has_history(s);
176  }
177 
178  bool has_explicit_name(state_t s) const {
179  return aut_->has_explicit_name(s);
180  }
181 
182  state_t get_state_by_name(const std::string& name) const {
183  return aut_->get_state_by_name(name);
184  }
185 
186  // Iteration on states and transitions
188 
190 
193  states_output_t states() const { return aut_->states(); }
194 
197  states_output_t all_states() const { return aut_->all_states(); }
198 
200 
202  transitions_output_t transitions() const { return aut_->transitions(); }
203 
205  transitions_output_t all_transitions() const { return aut_->all_transitions(); }
206 
208 
212  {
213  return out(pre());
214  }
215 
219  {
220  return in(post());
221  }
222 
225  transitions_s_output_t out(state_t s) const { return aut_->in(s); }
226 
229  const tr_cont_t& all_out(state_t s) const { return aut_->all_in(s); }
230 
234  {
235  return aut_->in(s, l);
236  }
237 
240  transitions_s_output_t in(state_t s) const { return aut_->out(s); }
241 
244  const tr_cont_t& all_in(state_t s) const { return aut_->all_out(s); }
245 
249  {
250  return aut_->out(s, l);
251  }
252 
256  {
257  return aut_->outin(d,s);
258  }
259  };
260  }
261 
262  template <typename Aut>
263  std::shared_ptr<internal::transpose_view_impl<Aut>>
264  transpose_view(std::shared_ptr<Aut> aut)
265  {
266  return std::make_shared<internal::transpose_view_impl<Aut>>(*aut);
267  }
268 }}//end of ns awali::stc
269 
270 #endif // !AWALI_CORE_TRANSPOSE_VIEW_HH
Definition: transpose_view.hh:29
transitions_s_output_t in(state_t s) const
Indexes of visible transitions arriving to state s.
Definition: transpose_view.hh:240
weightset_t_of< context_t > weightset_t
Definition: transpose_view.hh:33
typename Aut::tr_store_t tr_store_t
Definition: transpose_view.hh:47
weight_t get_final_weight(state_t s) const
Definition: transpose_view.hh:113
state_t get_state_by_name(const std::string &name) const
Definition: transpose_view.hh:182
size_t num_all_states() const
Definition: transpose_view.hh:97
const tr_cont_t & all_in(state_t s) const
Indexes of all transitions arriving to state s.
Definition: transpose_view.hh:244
typename context_t::weightset_ptr weightset_ptr
Definition: transpose_view.hh:37
void set_desc(const std::string &d)
Definition: transpose_view.hh:153
size_t num_initials() const
Definition: transpose_view.hh:99
size_t num_transitions() const
Definition: transpose_view.hh:101
label_t prepost_label() const
Definition: transpose_view.hh:89
typename Aut::st_store_t st_store_t
Definition: transpose_view.hh:46
transpose_view_impl(transpose_view_impl &&that)=delete
bool is_initial(state_t s) const
Definition: transpose_view.hh:110
transitions_output_t transitions() const
All the transition indexes between visible states.
Definition: transpose_view.hh:202
typename weightset_t::value_t weight_t
Transition weight.
Definition: transpose_view.hh:42
bool has_transition(state_t src, state_t dst, label_t l) const
Definition: transpose_view.hh:124
typename context_t::kind_t kind_t
Definition: transpose_view.hh:34
bool has_state(state_t s) const
Definition: transpose_view.hh:106
weight_t weight_of(transition_t t) const
Definition: transpose_view.hh:134
std::string get_state_name(state_t s) const
Definition: transpose_view.hh:165
static std::string sname()
Definition: transpose_view.hh:65
bool has_transition(transition_t t) const
Definition: transpose_view.hh:129
size_t num_states() const
Definition: transpose_view.hh:98
labelset_t_of< context_t > labelset_t
Definition: transpose_view.hh:32
std::ostream & print_state_name(state_t s, std::ostream &o, const std::string &fmt="text") const
Definition: transpose_view.hh:144
static constexpr state_t pre()
Definition: transpose_view.hh:86
history_t history() const
Definition: transpose_view.hh:136
transitions_output_t all_transitions() const
All the transition indexes between all states (including pre and post).
Definition: transpose_view.hh:205
transitions_s_output_t outin(state_t s, state_t d) const
Indexes of visible transitions from state s to state d.
Definition: transpose_view.hh:255
transitions_s_output_t out(state_t s) const
Indexes of visible transitions leaving state s.
Definition: transpose_view.hh:225
size_t num_finals() const
Definition: transpose_view.hh:100
transition_t get_transition(state_t src, state_t dst, label_t l) const
Definition: transpose_view.hh:118
state_t src_of(transition_t t) const
Definition: transpose_view.hh:131
transpose_view_impl & operator=(transpose_view_impl &&that)=delete
std::ostream & print_state(state_t s, std::ostream &o) const
Definition: transpose_view.hh:139
states_output_t states() const
All states excluding pre()/post().
Definition: transpose_view.hh:193
std::string vname(bool full=true) const
Definition: transpose_view.hh:70
bool has_history(state_t s) const
Definition: transpose_view.hh:174
typename Aut::tr_cont_t tr_cont_t
Definition: transpose_view.hh:48
transitions_s_output_t final_transitions() const
Indexes of transitions from visible final states.
Definition: transpose_view.hh:218
std::ostream & print_state_history(state_t s, std::ostream &o, const std::string &fmt="text") const
Definition: transpose_view.hh:169
state_t max_state() const
Definition: transpose_view.hh:108
const tr_cont_t & all_out(state_t s) const
Indexes of all transitions leaving state s.
Definition: transpose_view.hh:229
const context_t & context() const
Definition: transpose_view.hh:75
bool has_explicit_name(state_t s) const
Definition: transpose_view.hh:178
void set_name(const std::string &n)
Definition: transpose_view.hh:149
transitions_s_output_t in(state_t s, const label_t &l) const
Indexes of visible transitions arriving to state s on label l.
Definition: transpose_view.hh:248
transpose_view_impl(const Aut &aut)
Definition: transpose_view.hh:52
const std::string & get_name() const
Definition: transpose_view.hh:157
typename Aut::history_t history_t
History.
Definition: transpose_view.hh:44
const weightset_ptr & weightset() const
Definition: transpose_view.hh:76
cont_filter< tr_cont_t > transitions_s_output_t
Definition: transpose_view.hh:207
typename Aut::context_t context_t
Definition: transpose_view.hh:31
transpose_view_impl(const transpose_view_impl &)=delete
label_t label_of(transition_t t) const
Definition: transpose_view.hh:133
states_output_t all_states() const
All states including pre()/post().
Definition: transpose_view.hh:197
weight_t get_initial_weight(state_t s) const
Definition: transpose_view.hh:112
transitions_s_output_t out(state_t s, const label_t &l) const
Indexes of all transitions leaving state s on label l.
Definition: transpose_view.hh:233
bool is_final(state_t s) const
Definition: transpose_view.hh:111
state_t dst_of(transition_t t) const
Definition: transpose_view.hh:132
transitions_s_output_t initial_transitions() const
Indexes of transitions to visible initial states.
Definition: transpose_view.hh:211
const std::string & get_desc() const
Definition: transpose_view.hh:161
const labelset_ptr & labelset() const
Definition: transpose_view.hh:77
typename labelset_t::value_t label_t
Transition label.
Definition: transpose_view.hh:40
static constexpr state_t post()
Definition: transpose_view.hh:87
typename context_t::labelset_ptr labelset_ptr
Definition: transpose_view.hh:36
The semiring of Natural numbers.
Definition: n.hh:33
typename internal::labelset_t_of_impl< internal::base_t< ValueSet > >::type labelset_t_of
Helper to retrieve the type of the labelset of a value set.
Definition: traits.hh:76
std::shared_ptr< internal::transpose_view_impl< Aut > > transpose_view(std::shared_ptr< Aut > aut)
Definition: transpose_view.hh:264
typename internal::weightset_t_of_impl< internal::base_t< ValueSet > >::type weightset_t_of
Helper to retrieve the type of the weightset of a value set.
Definition: traits.hh:86
static const std::string full
Completely version of Awali as a std::string.
Definition: version.hh:40
Main namespace of Awali.
Definition: ato.hh:22
unsigned state_t
Definition: types.hh:21
unsigned transition_t
Definition: types.hh:22
Definition: cont_filter.hh:145
Definition: cont_filter.hh:69