Vcsn  2.1
Be Rational
vcsn::detail::product_automaton_impl< Aut, Auts > Class Template Reference

Build the (accessible part of the) product. More...

#include <conjunction.hh>

Inheritance diagram for vcsn::detail::product_automaton_impl< Aut, Auts >:
Collaboration diagram for vcsn::detail::product_automaton_impl< Aut, Auts >:

Classes

struct  label_equal_p
 
struct  not_to_post_p
 

Public Types

using state_name_t = typename tuple_automaton_t::element_type::state_name_t
 
using state_t = typename tuple_automaton_t::element_type::state_t
 
template<size_t... I>
using seq = typename tuple_automaton_t::element_type::template seq< I...>
 
using context_t = context_t_of< Aut >
 The context of the result. More...
 
using labelset_t = labelset_t_of< context_t >
 
using weightset_t = weightset_t_of< context_t >
 
using label_t = typename labelset_t::value_t
 
using weight_t = typename weightset_t::value_t
 
using automata_t = std::tuple< Auts...>
 The type of input automata. More...
 
template<size_t I>
using input_automaton_t = base_t< tuple_element_t< I, automata_t >>
 The type of the Ith input automaton, unqualified. More...
 
- Public Types inherited from vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >
using automaton_t = tuple_automaton< Aut, Auts...>
 The type of automaton to wrap. More...
 
using context_t = context_t_of< tuple_automaton< Aut, Auts...> >
 
using element_type = typename automaton_t::element_type
 The automaton type, without shared_ptr. More...
 
using fresh_automaton_t = typename element_type::template fresh_automaton_t< Ctx >
 The (shared pointer) type to use it we have to create an automaton of the same (underlying) type. More...
 
using kind_t = typename context_t::kind_t
 
using labelset_t = typename context_t::labelset_t
 
using labelset_ptr = typename context_t::labelset_ptr
 
using label_t = typename labelset_t::value_t
 
using weightset_t = typename context_t::weightset_t
 
using weightset_ptr = typename context_t::weightset_ptr
 
using weight_t = typename weightset_t::value_t
 
using state_t = state_t_of< automaton_t >
 
using transition_t = transition_t_of< automaton_t >
 

Public Member Functions

std::ostream & print_set (std::ostream &o, format fmt={}) const
 
 product_automaton_impl (Aut aut, const Auts &...auts)
 Build a product automaton. More...
 
auto all_out (state_t s) const -> decltype(aut_->all_out(s))
 
template<typename Pred >
auto all_out (state_t s, Pred pred) const -> decltype(aut_->all_out(s, pred))
 All the outgoing transitions satisfying the predicate. More...
 
auto out (state_t s) -> decltype(this->all_out(s, not_to_post_p
 Indexes of visible transitions leaving state s. More...
 
auto out (state_t s, label_t_of< self_t > l) -> decltype(this->all_out(s, label_equal_p
 Indexes of all transitions leaving state s on label l. More...
 
void conjunction (bool lazy=false)
 Compute the (accessible part of the) conjunction. More...
 
void shuffle ()
 Compute the (accessible part of the) shuffle product. More...
 
void infiltration ()
 Compute the (accessible part of the) infiltration product. More...
 
- Public Member Functions inherited from vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >
 automaton_decorator (automaton_t aut)
 
 automaton_decorator (const automaton_decorator &aut)
 
 automaton_decorator (const context_t &ctx)
 
 automaton_decorator (automaton_decorator &&aut)
 
automaton_decoratoroperator= (automaton_decorator &&that)
 
automaton_t strip ()
 
auto all_in (Args &&...args) const -> decltype(aut_-> all_in(std::forward< Args >(args)...))
 
auto all_out (Args &&...args) const -> decltype(aut_-> all_out(std::forward< Args >(args)...))
 
auto all_states (Args &&...args) const -> decltype(aut_-> all_states(std::forward< Args >(args)...))
 
auto all_transitions (Args &&...args) const -> decltype(aut_-> all_transitions(std::forward< Args >(args)...))
 
auto context (Args &&...args) const -> decltype(aut_-> context(std::forward< Args >(args)...))
 
auto dst_of (Args &&...args) const -> decltype(aut_-> dst_of(std::forward< Args >(args)...))
 
auto final_transitions (Args &&...args) const -> decltype(aut_-> final _transitions(std
 
auto get_final_weight (Args &&...args) const -> decltype(aut_-> get_ final _weight(std
 
auto get_initial_weight (Args &&...args) const -> decltype(aut_-> get_initial_weight(std::forward< Args >(args)...))
 
auto get_transition (Args &&...args) const -> decltype(aut_-> get_transition(std::forward< Args >(args)...))
 
auto has_state (Args &&...args) const -> decltype(aut_-> has_state(std::forward< Args >(args)...))
 
auto has_transition (Args &&...args) const -> decltype(aut_-> has_transition(std::forward< Args >(args)...))
 
auto in (Args &&...args) const -> decltype(aut_-> in(std::forward< Args >(args)...))
 
auto initial_transitions (Args &&...args) const -> decltype(aut_-> initial_transitions(std::forward< Args >(args)...))
 
auto is_final (Args &&...args) const -> decltype(aut_-> is_ final(std
 
auto is_initial (Args &&...args) const -> decltype(aut_-> is_initial(std::forward< Args >(args)...))
 
auto label_of (Args &&...args) const -> decltype(aut_-> label_of(std::forward< Args >(args)...))
 
auto labelset (Args &&...args) const -> decltype(aut_-> labelset(std::forward< Args >(args)...))
 
auto num_all_states (Args &&...args) const -> decltype(aut_-> num_all_states(std::forward< Args >(args)...))
 
auto num_finals (Args &&...args) const -> decltype(aut_-> num_ final s(std
 
auto num_initials (Args &&...args) const -> decltype(aut_-> num_initials(std::forward< Args >(args)...))
 
auto num_states (Args &&...args) const -> decltype(aut_-> num_states(std::forward< Args >(args)...))
 
auto num_transitions (Args &&...args) const -> decltype(aut_-> num_transitions(std::forward< Args >(args)...))
 
auto out (Args &&...args) const -> decltype(aut_-> out(std::forward< Args >(args)...))
 
auto outin (Args &&...args) const -> decltype(aut_-> outin(std::forward< Args >(args)...))
 
auto prepost_label (Args &&...args) const -> decltype(aut_-> prepost_label(std::forward< Args >(args)...))
 
auto print_set (Args &&...args) const -> decltype(aut_-> print_set(std::forward< Args >(args)...))
 
auto print_state (Args &&...args) const -> decltype(aut_-> print_state(std::forward< Args >(args)...))
 
auto print_state_name (Args &&...args) const -> decltype(aut_-> print_state_name(std::forward< Args >(args)...))
 
auto src_of (Args &&...args) const -> decltype(aut_-> src_of(std::forward< Args >(args)...))
 
auto state_has_name (Args &&...args) const -> decltype(aut_-> state_has_name(std::forward< Args >(args)...))
 
auto state_is_strict (Args &&...args) const -> decltype(aut_-> state_is_strict(std::forward< Args >(args)...))
 
auto states (Args &&...args) const -> decltype(aut_-> states(std::forward< Args >(args)...))
 
auto transitions (Args &&...args) const -> decltype(aut_-> transitions(std::forward< Args >(args)...))
 
auto weight_of (Args &&...args) const -> decltype(aut_-> weight_of(std::forward< Args >(args)...))
 
auto weightset (Args &&...args) const -> decltype(aut_-> weightset(std::forward< Args >(args)...))
 
auto add_final (Args &&...args) -> decltype(aut_-> add_ final(std
 
auto add_initial (Args &&...args) -> decltype(aut_-> add_initial(std::forward< Args >(args)...))
 
auto add_transition (Args &&...args) -> decltype(aut_-> add_transition(std::forward< Args >(args)...))
 
auto add_transition_copy (Args &&...args) -> decltype(aut_-> add_transition_copy(std::forward< Args >(args)...))
 
auto add_weight (Args &&...args) -> decltype(aut_-> add_weight(std::forward< Args >(args)...))
 
auto del_state (Args &&...args) -> decltype(aut_-> del_state(std::forward< Args >(args)...))
 
auto del_transition (Args &&...args) -> decltype(aut_-> del_transition(std::forward< Args >(args)...))
 
auto lmul_weight (Args &&...args) -> decltype(aut_-> lmul_weight(std::forward< Args >(args)...))
 
auto new_state (Args &&...args) -> decltype(aut_-> new_state(std::forward< Args >(args)...))
 
auto new_transition (Args &&...args) -> decltype(aut_-> new_transition(std::forward< Args >(args)...))
 
auto new_transition_copy (Args &&...args) -> decltype(aut_-> new_transition_copy(std::forward< Args >(args)...))
 
auto rmul_weight (Args &&...args) -> decltype(aut_-> rmul_weight(std::forward< Args >(args)...))
 
auto set_final (Args &&...args) -> decltype(aut_-> set_ final(std
 
auto set_initial (Args &&...args) -> decltype(aut_-> set_initial(std::forward< Args >(args)...))
 
auto set_transition (Args &&...args) -> decltype(aut_-> set_transition(std::forward< Args >(args)...))
 
auto set_weight (Args &&...args) -> decltype(aut_-> set_weight(std::forward< Args >(args)...))
 
auto unset_final (Args &&...args) -> decltype(aut_-> unset_ final(std
 
auto unset_initial (Args &&...args) -> decltype(aut_-> unset_initial(std::forward< Args >(args)...))
 

Static Public Member Functions

static symbol sname ()
 
- Static Public Member Functions inherited from vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >
static constexpr auto null_state (Args &&...args) -> decltype(element_type::null_state(std::forward< Args >(args)...))
 
static constexpr auto null_transition (Args &&...args) -> decltype(element_type::null_transition(std::forward< Args >(args)...))
 
static constexpr auto post (Args &&...args) -> decltype(element_type::post(std::forward< Args >(args)...))
 
static constexpr auto pre (Args &&...args) -> decltype(element_type::pre(std::forward< Args >(args)...))
 
static constexpr auto sname (Args &&...args) -> decltype(element_type::sname(std::forward< Args >(args)...))
 

Private Types

using automaton_t = Aut
 The type of the resulting automaton. More...
 
using tuple_automaton_t = tuple_automaton< automaton_t, Auts...>
 
using self_t = product_automaton_impl
 
using super_t = automaton_decorator< tuple_automaton_t >
 
template<typename A >
using transition_map_t = transition_map< A, weightset_t, false, true >
 The type of our transition maps: convert the weight to weightset_t, non deterministic, and including transitions to post(). More...
 

Private Member Functions

void initialize_conjunction ()
 Fill the worklist with the initial source-state pairs, as needed for the conjunction algorithm. More...
 
void initialize_shuffle ()
 Fill the worklist with the initial source-state pairs, as needed for the shuffle algorithm. More...
 
template<typename... Args>
state_t state (Args &&...args)
 Conversion from state name to state number. More...
 
std::tuple< typename transition_map_t< Auts >::map_t &...> out_ (const state_name_t &ss)
 The outgoing tuple of transitions from state tuple ss. More...
 
template<size_t... I>
std::tuple< typename transition_map_t< Auts >::map_t &...> out_ (const state_name_t &ss, seq< I...>)
 
void add_conjunction_transitions (const state_t src, const state_name_t &psrc)
 Add transitions to the result automaton, starting from the given result input state, which must correspond to the given pair of input state automata. More...
 
template<std::size_t... I>
void add_one_transitions_ (const state_t src, const state_name_t &psrc, seq< I...>)
 Add the spontaneous transitions leaving state src, if it is relevant (i.e. More...
 
template<std::size_t I, typename L >
vcsn::enable_if_t<!L::has_one(), voidmaybe_add_one_transitions_ (const L &, const state_t, const state_name_t &)
 In the case where the labelset doesn't have one, do nothing. More...
 
template<std::size_t I, typename L >
vcsn::enable_if_t< L::has_one(), voidmaybe_add_one_transitions_ (const L &ls, const state_t src, const state_name_t &psrc)
 If the labelset has one, add the relevant spontaneous-transitions leaving the state. More...
 
template<std::size_t... I>
bool has_one_in (const state_name_t &psrc, std::size_t i, seq< I...>) const
 Check if all the tapes after the Ith have only incoming spontaneous transitions. More...
 
template<std::size_t... I>
bool has_only_one_out (const state_name_t &psrc, std::size_t i, seq< I...>)
 Check if all the tapes before the Ith have only outgoing spontaneous transitions. More...
 
template<typename Aut_ >
vcsn::enable_if_t< labelset_t_of< Aut_ >::has_one(), bool > is_one (const Aut_ &aut, transition_t_of< Aut_ > tr) const
 Check if the transition is spontaneous (in the case of a labelset with one). More...
 
template<typename Aut_ >
constexpr vcsn::enable_if_t<!labelset_t_of< Aut_ >::has_one(), bool > is_one (const Aut_ &, transition_t_of< Aut_ >) const
 Same as above, but for labelsets without one, so it's always false. More...
 
template<typename Aut_ >
constexpr vcsn::enable_if_t<!labelset_t_of< Aut_ >::has_one(), bool > is_spontaneous_in (const Aut_ &, state_t_of< Aut_ >) const
 Check if the state has only incoming spontaneous transitions. More...
 
template<typename Aut_ >
vcsn::enable_if_t< labelset_t_of< Aut_ >::has_one(), bool > is_spontaneous_in (const Aut_ &rhs, state_t_of< Aut_ > rst) const
 Whether the state has only incoming spontaneous transitions. More...
 
template<size_t I>
bool has_only_ones_out (const state_name_t &psrc)
 Whether the Ith state of psrc in the Ith input automaton has no non-spontaneous outgoing transitions. More...
 
template<bool Infiltration = false>
void add_shuffle_transitions (const state_t src, const state_name_t &psrc)
 Add transitions to the given result automaton, starting from the given result input state, which must correspond to the given tuple of input state automata. More...
 
template<bool Infiltration, size_t... I>
weight_t add_shuffle_transitions_ (const state_t src, const state_name_t &psrc, seq< I...>)
 Let all automata advance one after the other, and add the corresponding transitions in the output. More...
 
template<bool Infiltration, size_t I>
weight_t add_shuffle_transitions_ (const state_t src, const state_name_t &psrc)
 Let Ith automaton advance, and add the corresponding transitions in the output. More...
 

Private Attributes

const weightset_tws_ = *aut_->weightset()
 The resulting weightset. More...
 
std::tuple< transition_map_t< Auts >...> transition_maps_
 Transition caches. More...
 
std::set< state_tdone_ = {aut_->post()}
 When performing the lazy construction, list of states that have been completed (i.e., their outgoing transitions have been computed). More...
 

Additional Inherited Members

- Protected Attributes inherited from vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >
automaton_t aut_
 The wrapped automaton, possibly const. More...
 

Detailed Description

template<typename Aut, typename... Auts>
class vcsn::detail::product_automaton_impl< Aut, Auts >

Build the (accessible part of the) product.

Definition at line 29 of file conjunction.hh.

Member Typedef Documentation

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::automata_t = std::tuple<Auts...>

The type of input automata.

Definition at line 73 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::automaton_t = Aut
private

The type of the resulting automaton.

Definition at line 36 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::context_t = context_t_of<Aut>

The context of the result.

Definition at line 64 of file conjunction.hh.

template<typename Aut , typename... Auts>
template<size_t I>
using vcsn::detail::product_automaton_impl< Aut, Auts >::input_automaton_t = base_t<tuple_element_t<I, automata_t>>

The type of the Ith input automaton, unqualified.

Definition at line 77 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::label_t = typename labelset_t::value_t

Definition at line 68 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::labelset_t = labelset_t_of<context_t>

Definition at line 65 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::self_t = product_automaton_impl
private

Definition at line 38 of file conjunction.hh.

template<typename Aut , typename... Auts>
template<size_t... I>
using vcsn::detail::product_automaton_impl< Aut, Auts >::seq = typename tuple_automaton_t::element_type::template seq<I...>

Definition at line 48 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::state_name_t = typename tuple_automaton_t::element_type::state_name_t

Definition at line 43 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::state_t = typename tuple_automaton_t::element_type::state_t

Definition at line 45 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::super_t = automaton_decorator<tuple_automaton_t>
private

Definition at line 39 of file conjunction.hh.

template<typename Aut , typename... Auts>
template<typename A >
using vcsn::detail::product_automaton_impl< Aut, Auts >::transition_map_t = transition_map<A, weightset_t, false, true>
private

The type of our transition maps: convert the weight to weightset_t, non deterministic, and including transitions to post().

Definition at line 268 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::tuple_automaton_t = tuple_automaton<automaton_t, Auts...>
private

Definition at line 37 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::weight_t = typename weightset_t::value_t

Definition at line 69 of file conjunction.hh.

template<typename Aut , typename... Auts>
using vcsn::detail::product_automaton_impl< Aut, Auts >::weightset_t = weightset_t_of<context_t>

Definition at line 66 of file conjunction.hh.

Constructor & Destructor Documentation

template<typename Aut , typename... Auts>
vcsn::detail::product_automaton_impl< Aut, Auts >::product_automaton_impl ( Aut  aut,
const Auts &...  auts 
)
inline

Build a product automaton.

Parameters
autthe automaton to build.
autsthe input automata.

Definition at line 84 of file conjunction.hh.

References vcsn::make_tuple_automaton().

Here is the call graph for this function:

Member Function Documentation

template<typename Aut , typename... Auts>
void vcsn::detail::product_automaton_impl< Aut, Auts >::add_conjunction_transitions ( const state_t  src,
const state_name_t psrc 
)
inlineprivate
template<typename Aut , typename... Auts>
template<std::size_t... I>
void vcsn::detail::product_automaton_impl< Aut, Auts >::add_one_transitions_ ( const state_t  src,
const state_name_t psrc,
seq< I...>   
)
inlineprivate

Add the spontaneous transitions leaving state src, if it is relevant (i.e.

only for the labelsets that have one).

Definition at line 313 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::labelset(), and vcsn::detail::void.

Referenced by vcsn::detail::product_automaton_impl< Aut, Auts >::add_conjunction_transitions().

Here is the call graph for this function:

template<typename Aut , typename... Auts>
template<bool Infiltration = false>
void vcsn::detail::product_automaton_impl< Aut, Auts >::add_shuffle_transitions ( const state_t  src,
const state_name_t psrc 
)
inlineprivate

Add transitions to the given result automaton, starting from the given result input state, which must correspond to the given tuple of input state automata.

Update the worklist with the needed source-state pairs.

Definition at line 442 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_.

template<typename Aut , typename... Auts>
template<bool Infiltration, size_t... I>
weight_t vcsn::detail::product_automaton_impl< Aut, Auts >::add_shuffle_transitions_ ( const state_t  src,
const state_name_t psrc,
seq< I...>   
)
inlineprivate

Let all automata advance one after the other, and add the corresponding transitions in the output.

Return the product of the final states.

Definition at line 455 of file conjunction.hh.

References vcsn::detail::void, and vcsn::detail::product_automaton_impl< Aut, Auts >::ws_.

template<typename Aut , typename... Auts>
template<bool Infiltration, size_t I>
weight_t vcsn::detail::product_automaton_impl< Aut, Auts >::add_shuffle_transitions_ ( const state_t  src,
const state_name_t psrc 
)
inlineprivate

Let Ith automaton advance, and add the corresponding transitions in the output.

If we reach a final state, return the corresponding final weight (zero otherwise).

Template Parameters
Infiltrationwhether we are called after add_conjunction_transitions.
Ithe tape on which to perform a transition.

Definition at line 482 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::add_transition(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::new_transition(), vcsn::detail::product_automaton_impl< Aut, Auts >::state(), vcsn::detail::product_automaton_impl< Aut, Auts >::transition_maps_, and vcsn::detail::product_automaton_impl< Aut, Auts >::ws_.

Here is the call graph for this function:

template<typename Aut , typename... Auts>
auto vcsn::detail::product_automaton_impl< Aut, Auts >::all_out ( state_t  s) const -> decltype(aut_->all_out(s))
inline

Definition at line 114 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, and vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::state_is_strict().

Here is the call graph for this function:

template<typename Aut , typename... Auts>
template<typename Pred >
auto vcsn::detail::product_automaton_impl< Aut, Auts >::all_out ( state_t  s,
Pred  pred 
) const -> decltype(aut_->all_out(s, pred))
inline

All the outgoing transitions satisfying the predicate.

Definition at line 124 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, and vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::state_is_strict().

Here is the call graph for this function:

template<typename Aut , typename... Auts>
void vcsn::detail::product_automaton_impl< Aut, Auts >::conjunction ( bool  lazy = false)
inline

Compute the (accessible part of the) conjunction.

Definition at line 172 of file conjunction.hh.

References vcsn::detail::product_automaton_impl< Aut, Auts >::add_conjunction_transitions(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, and vcsn::detail::product_automaton_impl< Aut, Auts >::initialize_conjunction().

Referenced by vcsn::conjunction().

Here is the call graph for this function:

template<typename Aut , typename... Auts>
template<std::size_t... I>
bool vcsn::detail::product_automaton_impl< Aut, Auts >::has_one_in ( const state_name_t psrc,
std::size_t  i,
seq< I...>   
) const
inlineprivate

Check if all the tapes after the Ith have only incoming spontaneous transitions.

Definition at line 355 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, and vcsn::detail::product_automaton_impl< Aut, Auts >::is_spontaneous_in().

Referenced by vcsn::detail::product_automaton_impl< Aut, Auts >::maybe_add_one_transitions_().

Here is the call graph for this function:

template<typename Aut , typename... Auts>
template<std::size_t... I>
bool vcsn::detail::product_automaton_impl< Aut, Auts >::has_only_one_out ( const state_name_t psrc,
std::size_t  i,
seq< I...>   
)
inlineprivate

Check if all the tapes before the Ith have only outgoing spontaneous transitions.

Definition at line 369 of file conjunction.hh.

Referenced by vcsn::detail::product_automaton_impl< Aut, Auts >::maybe_add_one_transitions_().

template<typename Aut , typename... Auts>
template<size_t I>
bool vcsn::detail::product_automaton_impl< Aut, Auts >::has_only_ones_out ( const state_name_t psrc)
inlineprivate

Whether the Ith state of psrc in the Ith input automaton has no non-spontaneous outgoing transitions.

Definition at line 425 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::labelset(), and vcsn::detail::product_automaton_impl< Aut, Auts >::transition_maps_.

Here is the call graph for this function:

template<typename Aut , typename... Auts>
void vcsn::detail::product_automaton_impl< Aut, Auts >::infiltration ( )
inline

Compute the (accessible part of the) infiltration product.

Definition at line 199 of file conjunction.hh.

References vcsn::detail::product_automaton_impl< Aut, Auts >::add_conjunction_transitions(), vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, vcsn::detail::product_automaton_impl< Aut, Auts >::initialize_shuffle(), and vcsn::require().

Referenced by vcsn::infiltration().

Here is the call graph for this function:

template<typename Aut , typename... Auts>
void vcsn::detail::product_automaton_impl< Aut, Auts >::initialize_conjunction ( )
inlineprivate

Fill the worklist with the initial source-state pairs, as needed for the conjunction algorithm.

Definition at line 244 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_.

Referenced by vcsn::detail::product_automaton_impl< Aut, Auts >::conjunction().

template<typename Aut , typename... Auts>
void vcsn::detail::product_automaton_impl< Aut, Auts >::initialize_shuffle ( )
inlineprivate

Fill the worklist with the initial source-state pairs, as needed for the shuffle algorithm.

Definition at line 251 of file conjunction.hh.

References vcsn::detail::product_automaton_impl< Aut, Auts >::add_conjunction_transitions(), and vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_.

Referenced by vcsn::detail::product_automaton_impl< Aut, Auts >::infiltration(), and vcsn::detail::product_automaton_impl< Aut, Auts >::shuffle().

Here is the call graph for this function:

template<typename Aut , typename... Auts>
template<typename Aut_ >
vcsn::enable_if_t<labelset_t_of<Aut_>::has_one(), bool> vcsn::detail::product_automaton_impl< Aut, Auts >::is_one ( const Aut_ &  aut,
transition_t_of< Aut_ >  tr 
) const
inlineprivate

Check if the transition is spontaneous (in the case of a labelset with one).

Definition at line 383 of file conjunction.hh.

Referenced by vcsn::detail::product_automaton_impl< Aut, Auts >::is_spontaneous_in().

template<typename Aut , typename... Auts>
template<typename Aut_ >
constexpr vcsn::enable_if_t<!labelset_t_of<Aut_>::has_one(), bool> vcsn::detail::product_automaton_impl< Aut, Auts >::is_one ( const Aut_ &  ,
transition_t_of< Aut_ >   
) const
inlineprivate

Same as above, but for labelsets without one, so it's always false.

Definition at line 392 of file conjunction.hh.

template<typename Aut , typename... Auts>
template<typename Aut_ >
constexpr vcsn::enable_if_t<!labelset_t_of<Aut_>::has_one(), bool> vcsn::detail::product_automaton_impl< Aut, Auts >::is_spontaneous_in ( const Aut_ &  ,
state_t_of< Aut_ >   
) const
inlineprivate

Check if the state has only incoming spontaneous transitions.

As it is in the case of the one-free labelset, it's always false.

Definition at line 402 of file conjunction.hh.

Referenced by vcsn::detail::product_automaton_impl< Aut, Auts >::has_one_in().

template<typename Aut , typename... Auts>
template<typename Aut_ >
vcsn::enable_if_t<labelset_t_of<Aut_>::has_one(), bool> vcsn::detail::product_automaton_impl< Aut, Auts >::is_spontaneous_in ( const Aut_ &  rhs,
state_t_of< Aut_ >  rst 
) const
inlineprivate

Whether the state has only incoming spontaneous transitions.

The automaton has been insplit, so either all incoming transitions are proper, or all transitions are spontaneous (including the first one).

Definition at line 414 of file conjunction.hh.

References vcsn::detail::product_automaton_impl< Aut, Auts >::is_one().

Here is the call graph for this function:

template<typename Aut , typename... Auts>
template<std::size_t I, typename L >
vcsn::enable_if_t<!L::has_one(), void> vcsn::detail::product_automaton_impl< Aut, Auts >::maybe_add_one_transitions_ ( const L ,
const state_t  ,
const state_name_t  
)
inlineprivate

In the case where the labelset doesn't have one, do nothing.

Definition at line 327 of file conjunction.hh.

template<typename Aut , typename... Auts>
template<std::size_t I, typename L >
vcsn::enable_if_t<L::has_one(), void> vcsn::detail::product_automaton_impl< Aut, Auts >::maybe_add_one_transitions_ ( const L ls,
const state_t  src,
const state_name_t psrc 
)
inlineprivate

If the labelset has one, add the relevant spontaneous-transitions leaving the state.

Definition at line 334 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, vcsn::detail::product_automaton_impl< Aut, Auts >::has_one_in(), vcsn::detail::product_automaton_impl< Aut, Auts >::has_only_one_out(), vcsn::detail::product_automaton_impl< Aut, Auts >::state(), and vcsn::detail::product_automaton_impl< Aut, Auts >::transition_maps_.

Here is the call graph for this function:

template<typename Aut , typename... Auts>
auto vcsn::detail::product_automaton_impl< Aut, Auts >::out ( state_t  s) -> decltype(this->all_out(s, not_to_post_p
inline

Indexes of visible transitions leaving state s.

Invalidated by del_transition() and del_state().

Definition at line 157 of file conjunction.hh.

template<typename Aut , typename... Auts>
auto vcsn::detail::product_automaton_impl< Aut, Auts >::out ( state_t  s,
label_t_of< self_t l 
) -> decltype(this->all_out(s, label_equal_p
inline

Indexes of all transitions leaving state s on label l.

Invalidated by del_transition() and del_state().

Definition at line 165 of file conjunction.hh.

template<typename Aut , typename... Auts>
std::tuple<typename transition_map_t<Auts>::map_t&...> vcsn::detail::product_automaton_impl< Aut, Auts >::out_ ( const state_name_t ss)
inlineprivate

The outgoing tuple of transitions from state tuple ss.

Definition at line 272 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_.

Referenced by vcsn::detail::product_automaton_impl< Aut, Auts >::add_conjunction_transitions().

template<typename Aut , typename... Auts>
template<size_t... I>
std::tuple<typename transition_map_t<Auts>::map_t&...> vcsn::detail::product_automaton_impl< Aut, Auts >::out_ ( const state_name_t ss,
seq< I...>   
)
inlineprivate
template<typename Aut , typename... Auts>
std::ostream& vcsn::detail::product_automaton_impl< Aut, Auts >::print_set ( std::ostream &  o,
format  fmt = {} 
) const
inline

Definition at line 57 of file conjunction.hh.

template<typename Aut , typename... Auts>
void vcsn::detail::product_automaton_impl< Aut, Auts >::shuffle ( )
inline

Compute the (accessible part of the) shuffle product.

Definition at line 186 of file conjunction.hh.

References vcsn::detail::automaton_decorator< tuple_automaton< Aut, Auts...> >::aut_, and vcsn::detail::product_automaton_impl< Aut, Auts >::initialize_shuffle().

Here is the call graph for this function:

template<typename Aut , typename... Auts>
static symbol vcsn::detail::product_automaton_impl< Aut, Auts >::sname ( )
inlinestatic

Definition at line 50 of file conjunction.hh.

Member Data Documentation

template<typename Aut , typename... Auts>
std::set<state_t> vcsn::detail::product_automaton_impl< Aut, Auts >::done_ = {aut_->post()}
mutableprivate

When performing the lazy construction, list of states that have been completed (i.e., their outgoing transitions have been computed).

Definition at line 525 of file conjunction.hh.

template<typename Aut , typename... Auts>
const weightset_t& vcsn::detail::product_automaton_impl< Aut, Auts >::ws_ = *aut_->weightset()
private

The documentation for this class was generated from the following file: