- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

# alphabet_set.hh

    00001 // alphabet_set.hh: this file is part of the Vaucanson project.
    00002 //
    00003 // Vaucanson, a generic library for finite state machines.
    00004 //
    00005 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008 The Vaucanson Group.
    00006 //
    00007 // This program is free software; you can redistribute it and/or
    00008 // modify it under the terms of the GNU General Public License
    00009 // as published by the Free Software Foundation; either version 2
    00010 // of the License, or (at your option) any later version.
    00011 //
    00012 // The complete GNU General Public Licence Notice can be found as the
    00013 // `COPYING' file in the root directory.
    00014 //
    00015 // The Vaucanson Group consists of people listed in the `AUTHORS' file.
    00016 //
    00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_ALPHABETS_ALPHABET_SET_HH
    00018 # define VCSN_ALGEBRA_IMPLEMENTATION_ALPHABETS_ALPHABET_SET_HH
    00019
    00020 # include <vaucanson/algebra/implementation/alphabets/alphabets.hh>
    00021 # include <vaucanson/misc/usual_macros.hh>
    00022
    00023 namespace vcsn {
    00024
    00025   namespace algebra {
    00026
    00030     /*--------------------------------------------.
    00031     | alphabet_traits<AlphabetSet<L>,std::set<L>> |
    00032     `--------------------------------------------*/
    00033
    00035     template <typename L>
    00036     struct alphabet_traits<AlphabetSet<L>, std::set<L> >
    00037     {
    00039       typedef Element<AlphabetSet<L>, std::set<L> > alphabet_t;
    00040
    00042       typedef L letter_t;
    00043
    00045       typedef typename letter_traits<letter_t>::first_projection_t
    00046       first_projection_letter_t;
    00047
    00049       typedef typename letter_traits<letter_t>::second_projection_t
    00050       second_projection_letter_t;
    00051
    00053       typedef Element<AlphabetSet<first_projection_letter_t>,
    00054               std::set<first_projection_letter_t> > first_projection_t;
    00055
    00057       typedef Element<AlphabetSet<second_projection_letter_t>,
    00058               std::set<second_projection_letter_t> > second_projection_t;
    00059
    00061       static first_projection_t first_projection(const alphabet_t&);
    00062
    00064       static second_projection_t second_projection(const alphabet_t&);
    00065     };
    00066
    00070   } // algebra
    00071
    00075   /*-----------------------------------------.
    00076   | MetaElement<AlphabetSet<L>, std::set<L>> |
    00077   `-----------------------------------------*/
    00078
    00084   template<typename L>
    00085   struct MetaElement<algebra::AlphabetSet<L>, std::set<L> >
    00086     : MetaElement<algebra::AlphabetSetBase<algebra::AlphabetSet<L> >, std::set<L> >
    00087   {
    00089       static const bool dynamic_value = true;
    00090   };
    00091
    00095   namespace algebra {
    00096
    00097     template <typename L>
    00098     std::pair<bool, L> op_parse(const AlphabetSet<L>&,
    00099                                 const std::set<L>&,
    00100                                 const std::string&,
    00101                                 size_t&);
    00102
    00103     template <typename L>
    00104     size_t op_max_size(const algebra::AlphabetSet<L>&, const std::set<L>&);
    00105
    00106     template <typename L>
    00107     bool op_contains(const algebra::AlphabetSet<L>& s, const std::set<L>& a);
    00108
    00109     template <typename L>
    00110     bool op_is_finite(const algebra::AlphabetSet<L>& s, const std::set<L>& a);
    00111
    00112     template <typename L>
    00113     bool op_contains_e(const algebra::AlphabetSet<L>& s, const std::set<L>& a,
    00114                        const L& v);
    00115   }
    00116
    00117 } // vcsn
    00118
    00119 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
    00120 #  include <vaucanson/algebra/implementation/alphabets/alphabet_set.hxx>
    00121 # endif // VCSN_USE_INTERFACE_ONLY
    00122
    00123 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_ALPHABETS_ALPHABET_SET_HH