3 #include <boost/range/algorithm/find.hpp> 
    4 #include <boost/range/algorithm/find_if.hpp> 
    5 #include <boost/range/algorithm_ext/is_sorted.hpp> 
   17     template <
typename LabelSet>
 
   18     using genset_t = decltype(std::declval<LabelSet>().genset());
 
   20     template <
typename LabelSet>
 
   28     template <
typename LabelSet>
 
   29     using one_t = decltype(std::declval<LabelSet>().one());
 
   31     template <
typename LabelSet>
 
   40     template <
typename LabelSet>
 
   43                      typename LabelSet::value_t>
 
   48     template <
typename LabelSet>
 
   52                      typename LabelSet::value_t>
 
   57 #if defined __GNUC__ && !defined __clang__ 
   60 # pragma GCC diagnostic push 
   61 # pragma GCC diagnostic ignored "-Wsuggest-attribute=noreturn" 
   65     template <
typename LabelSet>
 
   67       -> 
typename LabelSet::value_t
 
   69       return label_one<LabelSet>();
 
   72 #if defined __GNUC__ && !defined __clang__ 
   73 # pragma GCC diagnostic pop 
   80     template <
typename LabelSet>
 
   88         return std::make_shared<labelset_t>(
labelset_t{ls.genset()});
 
   92     template <
typename LabelSet>
 
   96     template <
typename LabelSet>
 
  100     template <
typename LabelSet>
 
  112     template <
typename Context>
 
  118     template <
typename LabelSet, 
typename WeightSet>
 
  138     template <
typename LabelSet,
 
  139               typename Enable = 
void>
 
  144     template <
typename LabelSet>
 
  148     template <
typename LabelSet>
 
  159     template <
typename Ctx>
 
  164     template <
typename LabelSet, 
typename WeightSet>
 
  183     template <
typename LabelSet>
 
  194     template <
typename LabelSet>
 
  198     template <
typename LabelSet>
 
  210     template <
typename Context>
 
  216     template <
typename LabelSet, 
typename WeightSet>
 
  229     template <
typename Context>
 
  235     template <
typename LabelSet, 
typename WeightSet>
 
  250     template <
typename ValueSet>
 
  255     template <
typename LabelSet>
 
  259     template <
typename LabelSet>
 
  270     template <
typename Ctx>
 
  275     template <
typename LabelSet, 
typename WeightSet>
 
  291     template <
typename LabelSet>
 
  294                         const std::vector<typename LabelSet::value_t>& letters,
 
  295                         const std::vector<typename LabelSet::value_t>& alphabet,
 
  299       for (
auto it = std::begin(letters), letters_end = std::end(letters);
 
  300            it != letters_end; ++it)
 
  305                                      boost::range::find(alphabet, *it),
 
  306                                      alphabet.end()).first;
 
  307           ls.print(*it, out, fmt);
 
  309           auto width = std::distance(it, end);
 
  317               ls.print(*it, out, fmt);
 
  327     template <
typename LabelSet>
 
  330                       const std::vector<typename LabelSet::value_t>& letters,
 
  334       using letters_t = std::vector<typename LabelSet::value_t>;
 
  336       auto alphabet = letters_t{};
 
  337       for (
auto l : ls.genset())
 
  338         alphabet.emplace_back(ls.value(l));
 
  346           && 2 * boost::distance(alphabet) < 3 * boost::distance(letters))
 
  350           auto negated = letters_t{};
 
  351           for (
auto l: alphabet)
 
  353               negated.emplace_back(l);
 
bool_constant< letterized_traits< LabelSet >::is_letterized > is_letterized_t
std::ostream & print_label_class(const LabelSet &ls, const std::vector< typename LabelSet::value_t > &letters, std::ostream &out, format fmt)
Print a set of labels (letterized) with classes. 
typename proper_traits< LabelSet >::type proper_t
The type of the corresponding proper LabelSet. 
nullableset_context_t< context< LabelSet, WeightSet > > make_nullableset_context(const context< LabelSet, WeightSet > &ctx)
The nullableset context of a context. 
auto label_one() -> enable_if_t< LabelSet::has_one(), typename LabelSet::value_t >
This LabelSet's one(), if supported. 
word_context_t< context< LabelSet, WeightSet > > make_word_context(const context< LabelSet, WeightSet > &ctx)
The wordset context of a context. 
letterized_t< LabelSet > make_letterized(const LabelSet &ls)
static labelset_t labelset(const labelset_t &ls)
typename detail::weightset_t_of_impl< base_t< ValueSet >>::type weightset_t_of
typename std::enable_if< Cond, T >::type enable_if_t
std::pair< InputIt1, InputIt2 > mismatch(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2)
Same as C++14's mismatch, which is not available in G++-4.8 with -std=c++1y. 
std::ostream & print_label_ranges_(const LabelSet &ls, const std::vector< typename LabelSet::value_t > &letters, const std::vector< typename LabelSet::value_t > &alphabet, std::ostream &out, format fmt)
Print a set of labels with ranges. 
auto make_proper_context(const context< LabelSet, WeightSet > &ctx) -> proper_context< context< LabelSet, WeightSet >>
From a context, its non-nullable context. 
decltype(std::declval< LabelSet >().one()) one_t
typename nullableset_traits< LabelSet >::type nullableset_t
The smallest nullableset that includes LabelSet. 
static dyn::context ctx(const driver &d)
Get the context of the driver. 
context< letterized_t< labelset_t_of< Context >>, weightset_t_of< Context >> letterized_context
const weightset_ptr & weightset() const 
static constexpr bool is_letterized
bool none_of_equal(const Range &r, const Value &value)
From a labelset, its non-nullable labelset. 
proper_t< LabelSet > make_proper(const LabelSet &ls)
The corresponding proper LabelSet. 
law_t< LabelSet > make_wordset(const LabelSet &ls)
The wordset of a labelset. 
free_context< context< LabelSet, WeightSet > > make_free_context(const context< LabelSet, WeightSet > &c)
The free context for c. 
context< nullableset_t< labelset_t_of< Ctx >>, weightset_t_of< Ctx >> nullableset_context_t
decltype(std::declval< LabelSet >().genset()) genset_t
typename law_traits< LabelSet >::type law_t
The smallest wordset that includes LabelSet. 
The smallest nullableset which includes LabelSet. 
const labelset_ptr & labelset() const 
Functor to compare Values of ValueSets. 
context< proper_t< letterized_t< labelset_t_of< Context >>>, weightset_t_of< Context >> free_context
context< proper_t< labelset_t_of< Context >>, weightset_t_of< Context >> proper_context
nullableset_t< LabelSet > make_nullableset(const LabelSet &ls)
The nullableset of a labelset. 
static type value(const LabelSet &ls)
letterized_context< context< LabelSet, WeightSet > > make_letterized_context(const context< LabelSet, WeightSet > &c)
The letterized context for c. 
std::integral_constant< bool, B > bool_constant
constant< type_t::one, Context > one
typename letterized_traits< LabelSet >::labelset_t letterized_t
context< law_t< labelset_t_of< Ctx >>, weightset_t_of< Ctx >> word_context_t