Vaucanson  1.4.1
structure.hh
Go to the documentation of this file.
1 // structure.hh: this file is part of the Vaucanson project.
2 //
3 // Vaucanson, a generic library for finite state machines.
4 //
5 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 The Vaucanson Group.
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License
9 // as published by the Free Software Foundation; either version 2
10 // of the License, or (at your option) any later version.
11 //
12 // The complete GNU General Public Licence Notice can be found as the
13 // `COPYING' file in the root directory.
14 //
15 // The Vaucanson Group consists of people listed in the `AUTHORS' file.
16 //
17 #ifndef VCSN_DESIGN_PATTERN_STRUCTURE_HH
18 # define VCSN_DESIGN_PATTERN_STRUCTURE_HH
19 
29 # include <vaucanson/misc/unique.hh>
30 
31 namespace vcsn {
32 
35  /*-------------.
36  | Structure<S> |
37  `-------------*/
38 
48  template<typename S>
49  struct Structure : misc::unique::unifiable
50  {
52  template<typename T>
53  bool contains(const Element<S, T>& elt) const;
54 
61  template<typename OtherS, typename T>
62  bool contains(const Element<OtherS, T>& other) const;
63 
65  template<typename T>
66  bool contains(const T& elt_value) const;
67 
69  template <class T>
71  choose(SELECTOR(T)) const;
72 
73 
75  typedef S self_t;
76 
78 
85  self_t& self();
86  const self_t& self() const;
88 
89  protected:
90 
92 
93  Structure();
94  Structure(const Structure& other);
96  };
97 
98  /*--------------------.
99  | default comparisons |
100  `--------------------*/
101 
111  template<typename S>
112  bool operator != (const vcsn::Structure<S>& a,
113  const vcsn::Structure<S>& b);
117  /*------------------------------.
118  | dynamic_traits<Structure<S> > |
119  `------------------------------*/
120 
126  template<typename S>
127  struct dynamic_traits<Structure<S> >
128  {
129  static const bool ret = false;
130  };
131 
132  /*-----------------------------.
133  | virtual_types<Structure<S> > |
134  `-----------------------------*/
135 
137  template<typename S>
138  struct virtual_types<Structure<S> >
139  { };
140 
143 } // vcsn
144 
145 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
146 # include <vaucanson/design_pattern/structure.hxx>
147 # endif // VCSN_USE_INTERFACE_ONLY
148 
149 #endif // ! VCSN_DESIGN_PATTERN_STRUCTURE_HH