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

# handlers.hxx

    00001 // handlers.hxx: 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, 2006 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_AUTOMATA_CONCEPT_HANDLERS_HXX
    00018 # define VCSN_AUTOMATA_CONCEPT_HANDLERS_HXX
    00019
    00020 # include <vaucanson/automata/concept/handlers.hh>
    00021
    00022 namespace vcsn
    00023 {
    00024
    00025   template<typename Tag>
    00026   handler<Tag>::handler() : v_(0)
    00027   {}
    00028
    00029   template<typename Tag>
    00030   handler<Tag>::handler(int h) : v_(h)
    00031   {}
    00032
    00033   template<typename Tag>
    00034   handler<Tag>::handler(const handler& h) : v_(h.v_)
    00035   {}
    00036
    00037   template<typename Tag>
    00038   handler<Tag>&
    00039   handler<Tag>::operator=(const handler<Tag>& h)
    00040   {
    00041     v_ = h.v_;
    00042     return *this;
    00043   }
    00044
    00045   template<typename Tag>
    00046   handler<Tag>& handler<Tag>::operator=(int h)
    00047   {
    00048     v_ = h;
    00049     return *this;
    00050   }
    00051
    00052   template<typename Tag>
    00053   int handler<Tag>::value() const
    00054   {
    00055     return v_;
    00056   }
    00057
    00058   template<typename Tag>
    00059   handler<Tag>::operator int () const
    00060   {
    00061     return v_;
    00062   }
    00063
    00064 } // vcsn
    00065
    00066 #define HOPERATOR(Op)                                   \
    00067 template<typename kind>                                 \
    00068 bool operator Op (const handler<kind>& h1,      \
    00069                   const handler<kind>& h2)      \
    00070 { return h1.value() Op h2.value(); }
    00071
    00072 namespace vcsn {
    00073 HOPERATOR(==);
    00074 HOPERATOR(!=);
    00075 HOPERATOR(<);
    00076 HOPERATOR(>);
    00077 HOPERATOR(<=);
    00078 HOPERATOR(>=);
    00079 }
    00080
    00081 namespace std {
    00082
    00083   template <typename kind>
    00084   std::ostream&
    00085   operator<<(std::ostream& out, const vcsn::handler<kind>& h)
    00086   {
    00087     out << h.value();
    00088     return out;
    00089   }
    00090
    00091 } // std
    00092
    00093 #undef HOPERATOR
    00094 #endif // ! VCSN_AUTOMATA_CONCEPT_HANDLERS_HXX