Olena-patches
Threads by month
- ----- 2025 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
October 2009
- 7 participants
- 111 discussions
* milena/mln/data/paste.spe.hh,
* milena/mln/data/stretch.hh,
* milena/mln/fun/x2v/bilinear.hh,
* milena/mln/morpho/erosion.hh,
* milena/mln/value/mixin.hh: Fix layout.
* milena/mln/debug/filename.hh: Update doc.
* milena/mln/subsampling/subsampling.hh: Fix invalid min rows and
cols.
---
milena/ChangeLog | 15 ++++++++++++
milena/mln/data/paste.spe.hh | 3 +-
milena/mln/data/stretch.hh | 41 +++++++++++++++++----------------
milena/mln/debug/filename.hh | 15 +++++------
milena/mln/fun/x2v/bilinear.hh | 3 +-
milena/mln/morpho/erosion.hh | 3 +-
milena/mln/subsampling/subsampling.hh | 9 +++++--
milena/mln/value/mixin.hh | 3 +-
scribo/src/debug/show_objects_thin.cc | 3 --
9 files changed, 57 insertions(+), 38 deletions(-)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 371f6d3..b6f9ce4 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,3 +1,18 @@
+2009-10-22 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ Small fixes.
+
+ * milena/mln/data/paste.spe.hh,
+ * milena/mln/data/stretch.hh,
+ * milena/mln/fun/x2v/bilinear.hh,
+ * milena/mln/morpho/erosion.hh,
+ * milena/mln/value/mixin.hh: Fix layout.
+
+ * milena/mln/debug/filename.hh: Update doc.
+
+ * milena/mln/subsampling/subsampling.hh: Fix invalid min rows and
+ cols.
+
2009-10-26 Roland Levillain <roland(a)lrde.epita.fr>
Regen Makefile helpers.
diff --git a/milena/mln/data/paste.spe.hh b/milena/mln/data/paste.spe.hh
index 30adca8..d071be8 100644
--- a/milena/mln/data/paste.spe.hh
+++ b/milena/mln/data/paste.spe.hh
@@ -1,4 +1,5 @@
-// Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2007, 2008, 2009 EPITA Research and Development
+// Laboratory (LRDE)
//
// This file is part of Olena.
//
diff --git a/milena/mln/data/stretch.hh b/milena/mln/data/stretch.hh
index 8fa6517..90ba8c6 100644
--- a/milena/mln/data/stretch.hh
+++ b/milena/mln/data/stretch.hh
@@ -1,4 +1,5 @@
-// Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2007, 2008, 2009 EPITA Research and Development
+// Laboratory (LRDE)
//
// This file is part of Olena.
//
@@ -79,7 +80,7 @@ namespace mln
template <typename V, typename I>
inline
mln_ch_value(I, V)
- stretch(const V& v, const Image<I>& input)
+ stretch(const V& v, const Image<I>& input)
{
trace::entering("data::impl::stretch");
@@ -91,25 +92,25 @@ namespace mln
mln_value(I) min_, max_;
estim::min_max(input, min_, max_);
if (max_ != min_)
- {
- //FIXME: we would like to use float instead of double but we
- //can't for precision reasons. See ticket #179.
- double
- min = double(min_),
- max = double(max_),
- epsilon = mln_epsilon(float),
- M = mln_max(V) + 0.5f - epsilon,
- m = 0.0f - 0.5f + epsilon,
- a = (M - m) / (max - min),
- b = (m * max - M * min) / (max - min);
- fun::v2v::linear_sat<mln_value(I), double, V> f(a, b);
- output = data::transform(input, f);
- }
+ {
+ //FIXME: we would like to use float instead of double but we
+ //can't for precision reasons. See ticket #179.
+ double
+ min = double(min_),
+ max = double(max_),
+ epsilon = mln_epsilon(float),
+ M = mln_max(V) + 0.5f - epsilon,
+ m = 0.0f - 0.5f + epsilon,
+ a = (M - m) / (max - min),
+ b = (m * max - M * min) / (max - min);
+ fun::v2v::linear_sat<mln_value(I), double, V> f(a, b);
+ output = data::transform(input, f);
+ }
else
- {
- initialize(output, input);
- trace::warning("output has no significative data!");
- }
+ {
+ initialize(output, input);
+ trace::warning("output has no significative data!");
+ }
trace::exiting("data::impl::stretch");
return output;
diff --git a/milena/mln/debug/filename.hh b/milena/mln/debug/filename.hh
index 1df7992..85def95 100644
--- a/milena/mln/debug/filename.hh
+++ b/milena/mln/debug/filename.hh
@@ -45,18 +45,17 @@ namespace mln
/*!
** The file name is formatted as follow:
**
- ** `filename_prefix`_`id`_`filename`_`postfix_id`
+ ** `filename_prefix`_`id`_`filename`
**
** Where:
** - `filename_prefix` can be set through the global variable
** debug::internal::filename_prefix.
- ** - `id` is auto-incremented and cannot be controlled.
+ ** - `postfix_id` is autoincremented by default. Its value can be
+ forced.
** - `filename` is the given filename
- ** - `postfix_id` is an optional counter which can be controlled contrary
- ** to `id`.
*/
std::string
- filename(const std::string& filename, int postfix_id);
+ filename(const std::string& filename, int id);
# ifndef MLN_INCLUDE_ONLY
@@ -66,7 +65,7 @@ namespace mln
std::string filename_prefix = "";
- } // end of namespace scribo::make::internal
+ } // end of namespace mln::debug::internal
inline
@@ -80,7 +79,7 @@ namespace mln
if (! internal::filename_prefix.empty())
os << internal::filename_prefix << "_";
- if (id >= 0)
+ if (id == -1)
{
if (file_id < 10)
os << "0";
@@ -90,7 +89,7 @@ namespace mln
os << file_id++;
}
else
- os << "_" << id;
+ os << id;
os << "_"
<< filename;
diff --git a/milena/mln/fun/x2v/bilinear.hh b/milena/mln/fun/x2v/bilinear.hh
index ab0786d..0b2dbd2 100644
--- a/milena/mln/fun/x2v/bilinear.hh
+++ b/milena/mln/fun/x2v/bilinear.hh
@@ -1,4 +1,5 @@
-// Copyright (C) 2008, 2009 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2008, 2009 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of Olena.
//
diff --git a/milena/mln/morpho/erosion.hh b/milena/mln/morpho/erosion.hh
index 477de6c..9946d7e 100644
--- a/milena/mln/morpho/erosion.hh
+++ b/milena/mln/morpho/erosion.hh
@@ -1,4 +1,5 @@
-// Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2007, 2008, 2009 EPITA Research and Development
+// Laboratory (LRDE)
//
// This file is part of Olena.
//
diff --git a/milena/mln/subsampling/subsampling.hh b/milena/mln/subsampling/subsampling.hh
index 4cb376d..60ee3c0 100644
--- a/milena/mln/subsampling/subsampling.hh
+++ b/milena/mln/subsampling/subsampling.hh
@@ -1,4 +1,5 @@
-// Copyright (C) 2008, 2009 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2008, 2009 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of Olena.
//
@@ -66,8 +67,10 @@ namespace mln
mln_concrete(image2d<T>) output(geom::nrows(input) / gap,
geom::ncols(input) / gap);
- for (unsigned j = 0; j < geom::ncols(output); ++j)
- for (unsigned i = 0; i < geom::nrows(output); ++i)
+ for (def::coord j = geom::min_col(output);
+ j <= geom::max_col(output); ++j)
+ for (def::coord i = geom::min_row(output);
+ i <= geom::max_row(output); ++i)
{
point2d p1(i, j);
point2d p2(first_p[0] + i * gap, first_p[1] + j * gap);
diff --git a/milena/mln/value/mixin.hh b/milena/mln/value/mixin.hh
index ed7ef51..a917344 100644
--- a/milena/mln/value/mixin.hh
+++ b/milena/mln/value/mixin.hh
@@ -1,4 +1,5 @@
-// Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2007, 2008, 2009 EPITA Research and Development
+// Laboratory (LRDE)
//
// This file is part of Olena.
//
diff --git a/scribo/src/debug/show_objects_thin.cc b/scribo/src/debug/show_objects_thin.cc
index 6b61168..e69de29 100644
--- a/scribo/src/debug/show_objects_thin.cc
+++ b/scribo/src/debug/show_objects_thin.cc
@@ -1,3 +0,0 @@
-// FIXME: Dummy main to have this program compile and link. Populate
-// with an actual test case.
-int main() {}
--
1.5.6.5
1
0

4675: lazzara/fonctionnalites_milena.ods: Add a document listing Milena's features.
by Guillaume Lazzara 28 Oct '09
by Guillaume Lazzara 28 Oct '09
28 Oct '09
---
milena/sandbox/ChangeLog | 5 +++++
milena/sandbox/lazzara/fonctionnalites_milena.ods | Bin 0 -> 21834 bytes
2 files changed, 5 insertions(+), 0 deletions(-)
create mode 100644 milena/sandbox/lazzara/fonctionnalites_milena.ods
diff --git a/milena/sandbox/ChangeLog b/milena/sandbox/ChangeLog
index 1c96678..9580b1b 100644
--- a/milena/sandbox/ChangeLog
+++ b/milena/sandbox/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-14 Guillaume Lazzara <z(a)lrde.epita.fr>
+
+ * lazzara/fonctionnalites_milena.ods: Add a document listing
+ Milena's features.
+
2009-10-21 Thierry Geraud <thierry.geraud(a)lrde.epita.fr>
Add new morphological operators.
diff --git a/milena/sandbox/lazzara/fonctionnalites_milena.ods b/milena/sandbox/lazzara/fonctionnalites_milena.ods
new file mode 100644
index 0000000000000000000000000000000000000000..4b002ea88275da22293f61c391ec8f56b46b9ac6
GIT binary patch
literal 21834
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
literal 0
HcmV?d00001
--
1.5.6.5
1
0
* vcs/dynamic_static_bridge_vcs.rb: Here.
---
dynamic-use-of-static-c++/ChangeLog | 6 ++++++
.../vcs/dynamic_static_bridge_vcs.rb | 8 ++------
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/dynamic-use-of-static-c++/ChangeLog b/dynamic-use-of-static-c++/ChangeLog
index 35e52ee..4ed1afd 100644
--- a/dynamic-use-of-static-c++/ChangeLog
+++ b/dynamic-use-of-static-c++/ChangeLog
@@ -1,5 +1,11 @@
2009-10-26 Roland Levillain <roland(a)lrde.epita.fr>
+ Send dyn patches to the olena-patches mailing list.
+
+ * vcs/dynamic_static_bridge_vcs.rb: Here.
+
+2009-10-26 Roland Levillain <roland(a)lrde.epita.fr>
+
Aesthetic changes.
* src/function_loader.cc: Wrap long lines.
diff --git a/dynamic-use-of-static-c++/vcs/dynamic_static_bridge_vcs.rb b/dynamic-use-of-static-c++/vcs/dynamic_static_bridge_vcs.rb
index 7457fe5..44cb217 100644
--- a/dynamic-use-of-static-c++/vcs/dynamic_static_bridge_vcs.rb
+++ b/dynamic-use-of-static-c++/vcs/dynamic_static_bridge_vcs.rb
@@ -5,13 +5,9 @@ class Vcs
protocol_version '0.1'
def dynamic_static_bridge_commit! ( *args )
-
- common_commit!("[DynamicStaticBridge]: <%= rev %>: <%= title %>", *args) do |subject|
-
- mail! :to => ["damien.thivolle(a)gmail.com", "nicolas.pouillard(a)gmail.com"], :subject => subject
-
+ common_commit!("dyn: <%= rev %>: <%= title %>", *args) do |subject|
+ mail!(:to => %w[olena-patches(a)lrde.epita.fr], :subject => subject)
end
-
end
alias_command :dystci, :dynamic_static_bridge_commit
default_commit :dynamic_static_bridge_commit
--
1.6.5
1
0
From: levill_r <levill_r@4aad255d-cdde-0310-9447-f3009e2ae8c0>
* dynamic-use-of-static-c++/: New directory.
Fetched from
https://svn.lrde.epita.fr/svn/oln/prototypes/dynamic-use-of-static-c++/trunk
at revision 377.
git-svn-id: https://svn.lrde.epita.fr/svn/oln/trunk@4640 4aad255d-cdde-0310-9447-f3009e2ae8c0
---
ChangeLog | 9 +
dynamic-use-of-static-c++/.vcs | 23 +
dynamic-use-of-static-c++/ChangeLog | 884 ++++++
dynamic-use-of-static-c++/Makefile.am | 5 +
dynamic-use-of-static-c++/README | 23 +
dynamic-use-of-static-c++/bin/Makefile.am | 4 +
dynamic-use-of-static-c++/bin/dyn-config.in | 70 +
dynamic-use-of-static-c++/bin/mk_swig_input | 38 +
dynamic-use-of-static-c++/bin/swig_tree_to_yaml | 8 +
dynamic-use-of-static-c++/bin/yaml_to_dyn_decls | 197 ++
dynamic-use-of-static-c++/bootstrap | 18 +
dynamic-use-of-static-c++/config.site | 24 +
dynamic-use-of-static-c++/config/Makefile.am | 1 +
dynamic-use-of-static-c++/config/erbx | 111 +
.../config/mk_local_config_rb_in.rb | 22 +
dynamic-use-of-static-c++/config/rbconfig_gen.rb | 19 +
dynamic-use-of-static-c++/config/ruby.m4 | 45 +
dynamic-use-of-static-c++/config/warning.m4 | 105 +
dynamic-use-of-static-c++/configure.ac | 154 +
dynamic-use-of-static-c++/data/Makefile.am | 33 +
dynamic-use-of-static-c++/data/function.cc | 5 +
.../lib/.libs/libiberty-i486-linux.a | Bin 0 -> 486694 bytes
.../lib/.libs/libiberty-powerpc-darwin.a | Bin 0 -> 472928 bytes
.../lib/libiberty-i486-linux.la | 35 +
.../lib/libiberty-powerpc-darwin.la | 35 +
.../lib/libiberty-powerpc-darwin8.3.0.la | 35 +
dynamic-use-of-static-c++/src/Makefile.am | 79 +
dynamic-use-of-static-c++/src/all_methods.erb.cc | 37 +
dynamic-use-of-static-c++/src/all_methods.erb.hh | 37 +
dynamic-use-of-static-c++/src/ansidecl.h | 326 +++
dynamic-use-of-static-c++/src/config.hh.in | 3 +
dynamic-use-of-static-c++/src/cxx_symbols.rb | 115 +
dynamic-use-of-static-c++/src/data.cc | 128 +
dynamic-use-of-static-c++/src/data.erb.hh | 418 +++
dynamic-use-of-static-c++/src/data.hxx | 61 +
dynamic-use-of-static-c++/src/demangle.h | 163 ++
dynamic-use-of-static-c++/src/dyn.hh | 62 +
dynamic-use-of-static-c++/src/function.erb.cc | 47 +
dynamic-use-of-static-c++/src/function.erb.hh | 63 +
dynamic-use-of-static-c++/src/function_loader.cc | 359 +++
dynamic-use-of-static-c++/src/function_loader.hh | 29 +
dynamic-use-of-static-c++/src/function_loader.rb | 39 +
dynamic-use-of-static-c++/src/name_of.cc | 25 +
dynamic-use-of-static-c++/src/name_of.hh | 183 ++
dynamic-use-of-static-c++/src/policy.cc | 18 +
dynamic-use-of-static-c++/src/policy.hh | 107 +
dynamic-use-of-static-c++/src/ruby_stream.cc | 11 +
dynamic-use-of-static-c++/src/ruby_stream.hh | 100 +
dynamic-use-of-static-c++/test/Makefile.am | 60 +
.../test/fixtures/my_lib/damien.hh | 60 +
.../test/fixtures/my_lib/damien.hxx | 57 +
.../test/fixtures/my_lib/lib.hh | 105 +
.../test/fixtures/some_identifiers.yml.cc | 8 +
.../test/fixtures/tree/tree.swig | 2824 +++++++++++++++++++
.../test/fixtures/tree/tree.yml | 2943 ++++++++++++++++++++
.../fixtures/vaucanson/dyn_vaucanson_dyn_mirror.hh | 887 ++++++
.../vaucanson/dyn_vaucanson_mlc_name_of.hh | 126 +
dynamic-use-of-static-c++/test/test_containers.cc | 89 +
dynamic-use-of-static-c++/test/test_damien.cc | 96 +
.../test/test_function_loader.cc | 75 +
.../test/test_function_loader.rb | 23 +
.../test/test_function_loader_cxx.rb | 26 +
dynamic-use-of-static-c++/test/test_methods.cc | 26 +
dynamic-use-of-static-c++/test/test_olena.cc | 21 +
dynamic-use-of-static-c++/test/test_var_and_val.cc | 95 +
.../test/vaucanson/Makefile.am | 18 +
.../test/vaucanson/dyn_algorithms.cc | 464 +++
.../test/vaucanson/dyn_vaucanson_dyn_mirror.hh | 1277 +++++++++
.../test/vaucanson/test-loader.cc | 39 +
.../vcs/dynamic_static_bridge_vcs.rb | 19 +
70 files changed, 13651 insertions(+), 0 deletions(-)
create mode 100644 dynamic-use-of-static-c++/.vcs
create mode 100644 dynamic-use-of-static-c++/ChangeLog
create mode 100644 dynamic-use-of-static-c++/Makefile.am
create mode 100644 dynamic-use-of-static-c++/README
create mode 100644 dynamic-use-of-static-c++/bin/Makefile.am
create mode 100755 dynamic-use-of-static-c++/bin/dyn-config.in
create mode 100755 dynamic-use-of-static-c++/bin/mk_swig_input
create mode 100755 dynamic-use-of-static-c++/bin/swig_tree_to_yaml
create mode 100755 dynamic-use-of-static-c++/bin/yaml_to_dyn_decls
create mode 100755 dynamic-use-of-static-c++/bootstrap
create mode 100644 dynamic-use-of-static-c++/config.site
create mode 100644 dynamic-use-of-static-c++/config/Makefile.am
create mode 100755 dynamic-use-of-static-c++/config/erbx
create mode 100644 dynamic-use-of-static-c++/config/mk_local_config_rb_in.rb
create mode 100644 dynamic-use-of-static-c++/config/rbconfig_gen.rb
create mode 100644 dynamic-use-of-static-c++/config/ruby.m4
create mode 100644 dynamic-use-of-static-c++/config/warning.m4
create mode 100644 dynamic-use-of-static-c++/configure.ac
create mode 100644 dynamic-use-of-static-c++/data/Makefile.am
create mode 100644 dynamic-use-of-static-c++/data/function.cc
create mode 100644 dynamic-use-of-static-c++/lib/.libs/libiberty-i486-linux.a
create mode 100644 dynamic-use-of-static-c++/lib/.libs/libiberty-powerpc-darwin.a
create mode 100644 dynamic-use-of-static-c++/lib/libiberty-i486-linux.la
create mode 100644 dynamic-use-of-static-c++/lib/libiberty-powerpc-darwin.la
create mode 100644 dynamic-use-of-static-c++/lib/libiberty-powerpc-darwin8.3.0.la
create mode 100644 dynamic-use-of-static-c++/src/Makefile.am
create mode 100644 dynamic-use-of-static-c++/src/all_methods.erb.cc
create mode 100644 dynamic-use-of-static-c++/src/all_methods.erb.hh
create mode 100644 dynamic-use-of-static-c++/src/ansidecl.h
create mode 100644 dynamic-use-of-static-c++/src/config.hh.in
create mode 100644 dynamic-use-of-static-c++/src/cxx_symbols.rb
create mode 100644 dynamic-use-of-static-c++/src/data.cc
create mode 100644 dynamic-use-of-static-c++/src/data.erb.hh
create mode 100644 dynamic-use-of-static-c++/src/data.hxx
create mode 100644 dynamic-use-of-static-c++/src/demangle.h
create mode 100644 dynamic-use-of-static-c++/src/dyn.hh
create mode 100644 dynamic-use-of-static-c++/src/function.erb.cc
create mode 100644 dynamic-use-of-static-c++/src/function.erb.hh
create mode 100644 dynamic-use-of-static-c++/src/function_loader.cc
create mode 100644 dynamic-use-of-static-c++/src/function_loader.hh
create mode 100644 dynamic-use-of-static-c++/src/function_loader.rb
create mode 100644 dynamic-use-of-static-c++/src/name_of.cc
create mode 100644 dynamic-use-of-static-c++/src/name_of.hh
create mode 100644 dynamic-use-of-static-c++/src/policy.cc
create mode 100644 dynamic-use-of-static-c++/src/policy.hh
create mode 100644 dynamic-use-of-static-c++/src/ruby_stream.cc
create mode 100644 dynamic-use-of-static-c++/src/ruby_stream.hh
create mode 100644 dynamic-use-of-static-c++/test/Makefile.am
create mode 100644 dynamic-use-of-static-c++/test/fixtures/my_lib/damien.hh
create mode 100644 dynamic-use-of-static-c++/test/fixtures/my_lib/damien.hxx
create mode 100644 dynamic-use-of-static-c++/test/fixtures/my_lib/lib.hh
create mode 100644 dynamic-use-of-static-c++/test/fixtures/some_identifiers.yml.cc
create mode 100644 dynamic-use-of-static-c++/test/fixtures/tree/tree.swig
create mode 100644 dynamic-use-of-static-c++/test/fixtures/tree/tree.yml
create mode 100644 dynamic-use-of-static-c++/test/fixtures/vaucanson/dyn_vaucanson_dyn_mirror.hh
create mode 100644 dynamic-use-of-static-c++/test/fixtures/vaucanson/dyn_vaucanson_mlc_name_of.hh
create mode 100644 dynamic-use-of-static-c++/test/test_containers.cc
create mode 100644 dynamic-use-of-static-c++/test/test_damien.cc
create mode 100644 dynamic-use-of-static-c++/test/test_function_loader.cc
create mode 100644 dynamic-use-of-static-c++/test/test_function_loader.rb
create mode 100644 dynamic-use-of-static-c++/test/test_function_loader_cxx.rb
create mode 100644 dynamic-use-of-static-c++/test/test_methods.cc
create mode 100644 dynamic-use-of-static-c++/test/test_olena.cc
create mode 100644 dynamic-use-of-static-c++/test/test_var_and_val.cc
create mode 100644 dynamic-use-of-static-c++/test/vaucanson/Makefile.am
create mode 100644 dynamic-use-of-static-c++/test/vaucanson/dyn_algorithms.cc
create mode 100644 dynamic-use-of-static-c++/test/vaucanson/dyn_vaucanson_dyn_mirror.hh
create mode 100644 dynamic-use-of-static-c++/test/vaucanson/test-loader.cc
create mode 100644 dynamic-use-of-static-c++/vcs/dynamic_static_bridge_vcs.rb
diff --git a/ChangeLog b/ChangeLog
index ba281c8..bc82322 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-06-08 Roland Levillain <roland(a)lrde.epita.fr>
+
+ Import dynamic-use-of-static-c++.
+
+ * dynamic-use-of-static-c++/: New directory.
+ Fetched from
+ https://svn.lrde.epita.fr/svn/oln/prototypes/dynamic-use-of-static-c++/trunk
+ at revision 377.
+
2009-10-16 Edwin Carlinet <carlinet(a)lrde.epita.fr>
Update configure.ac with AVS IO tests Makefile.
diff --git a/dynamic-use-of-static-c++/.vcs b/dynamic-use-of-static-c++/.vcs
new file mode 100644
index 0000000..ef8e8b2
--- /dev/null
+++ b/dynamic-use-of-static-c++/.vcs
@@ -0,0 +1,23 @@
+---
+precious:
+ - repository
+
+unmask:
+ - test/olena/proto-stl-style
+ - test/dyn.log
+ - libltdl
+
+exclude:
+ - Makefile.in
+ - _build
+ - _config
+ - _install
+
+ # autotools stuffs
+ - configure
+ - autom4te.cache
+ - aclocal.m4
+
+junk:
+ - \.gdb_history
+ - a.out
diff --git a/dynamic-use-of-static-c++/ChangeLog b/dynamic-use-of-static-c++/ChangeLog
new file mode 100644
index 0000000..5a65dfe
--- /dev/null
+++ b/dynamic-use-of-static-c++/ChangeLog
@@ -0,0 +1,884 @@
+2006-01-15 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add another version of libiberty.
+
+ * lib/libiberty-powerpc-darwin8.3.0.la: A copy of
+ libiberty-powerpc-darwin.la
+
+2005-12-06 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Remove to ruby evals.
+
+ * src/function_loader.cc: Update.
+
+2005-12-06 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Remove options, add method.
+
+ * src/function.erb.cc,
+ * src/function.erb.hh,
+ * src/function_loader.cc,
+ * src/function_loader.hh,
+ * src/all_methods.erb.cc,
+ * src/data.erb.hh,
+ * src/data.cc: Update.
+ * src/dyn.hh: Add typdefs.
+ * test/test_function_loader.cc,
+ * test/test_damien.cc,
+ * test/test_methods.cc,
+ * test/test_containers.cc: Update tests.
+
+2005-12-06 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Disable the ruby segv handler.
+
+ * src/function_loader.cc: Ignore segv cause the system handle it
+ normally.
+
+2005-12-06 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Flags and include_dirs go to the (dark) C++ side.
+
+ * src/function_loader.rb: Simplify since it's just a function now.
+ * src/function_loader.cc: Update accordingly.
+ * test/Makefile.am: Add a rule to build tests.
+
+2005-12-06 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Generate the C++ code from C++.
+
+ * src/function_loader.cc,
+ * src/function_loader.hh,
+ * src/function_loader.rb: More C++, less ruby.
+
+ * src/function.erb.cc: Reverse load_function argument order.
+ * src/function.erb.hh: Reorder arguments.
+ * src/ruby_stream.hh: Add a debug mode.
+ * src/data.erb.hh: Remove a useless comma.
+ * src/data.cc: Add * to paths in method().
+ * config/erbx: Add * to fake_method.
+ * test/test_function_loader.cc: The path is the third argument.
+ * configure.ac: Add -Werror.
+
+2005-12-04 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Make the config.site compliant with sub-confgiures on linux.
+
+ * config.site: Do not exit if the package name is wrong.
+
+2005-12-04 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Use libltdl.
+
+ * bootstrap,
+ * Makefile.am,
+ * configure.ac: Add the libltld.
+
+ * src/Makefile.am,
+ * src/function.erb.cc,
+ * src/ruby_stream.hh,
+ * src/function.erb.hh,
+ * src/function_loader.cc,
+ * src/function_loader.hh,
+ * src/function_loader.rb: More C++ less ruby.
+
+ * bin/dyn-config.in: .
+ * data/Makefile.am: Produce two makefiles for the repository.
+ * data/function.cc: Update the include.
+
+ * test/Makefile.am: Update flags.
+ * test/fixtures/my_lib/damien.hxx: Remove the name_of include.
+ * test/test_function_loader.cc: Add another dfoo1 call.
+
+2005-12-04 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Remove all svn:ignore properties.
+
+ * ., test, src: Update.
+
+2005-12-01 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Use a more portable pattern.
+
+ * src/Makefile.am: No # since it begins a comment.
+
+2005-12-01 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Now works installed.
+
+ * src/Makefile.am: Adapt to the new design.
+ * src/function_loader.rb: Use dyn-light.hh.
+ * src/data.erb.hh: Leave a FIXME.
+ * bin/dyn-config.in: More calls to expand.
+ * bin/Makefile.am: Install just dyn-config.
+
+ * test/test_var_and_val.cc,
+ * test/test_damien.cc,
+ * test/test_olena.cc,
+ * test/test_methods.cc,
+ * test/test_containers.cc,
+ * test/test_function_loader.cc: Include dyn-all.hh.
+
+2005-12-01 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Update the liberty lib for i486-linux.
+
+ * lib/libiberty-linux.a: Remove.
+ * lib/libiberty-i486-linux.la: New.
+ * lib/.libs/libiberty-i486-linux.a: New.
+
+2005-12-01 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Clean svn:ignore properties.
+
+ * .,
+ * src,
+ * test,
+ * test/vaucanson,
+ * test/olena: Remove svn:ignore since the .vcs handle them.
+
+2005-12-01 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Commit a common .vcs.
+
+ * .vcs: New.
+
+2005-12-01 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ 2 little fixes.
+
+ * configure.ac: Remove useless echo ans comments.
+ * README: Talk about the PATH extension.
+
+2005-12-01 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Dyn now use the autotools!
+
+ * README: Deal with the new the schema.
+ * bin/dyn-config.in: New. A nice tool to use the project.
+
+ Removing part:
+ * configure: Remove.
+ * Makefile.in: Remove.
+ * test/Makefile.in: Remove.
+ * test/vaucanson/Makefile.in: Remove.
+
+ New autotools part:
+ * bootstrap: New.
+ * configure.ac: New.
+ * config: New.
+ * config/erbx: New.
+ * config/ruby.m4: New.
+ * config/mk_local_config_rb_in.rb: New.
+ * config/rbconfig_gen.rb: New.
+ * config/warning.m4: New.
+ * config/Makefile.am: New.
+ * config.site: New.
+ * Makefile.am: New.
+ * data/Makefile.am: New.
+ * data/function.cc: New. Dummy function to make a base makefile.
+ * bin/Makefile.am: New.
+ * src/Makefile.am: New.
+ * test/Makefile.am: New.
+ * test/vaucanson/Makefile.am: New.
+
+ Test part:
+ * test/test_var_and_val.cc,
+ * test/test_damien.cc,
+ * test/test_olena.cc,
+ * test/test_methods.cc,
+ * test/test_containers.cc,
+ * test/test_function_loader.cc: Update include dirs.
+
+ * src/all_methods.erb.hh,
+ * src/all_methods.erb.cc,
+ * src/function.erb.hh,
+ * src/function.erb.cc,
+ * src/ruby_stream.hh: Update includes and erb variables.
+
+ * src/function_loader.rb: Use md5 for filenames.
+ * src/config.hh.in: Add DYN_FIXTURES.
+ * src/data.cc: Properly setup de logger.
+
+2005-11-27 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Improve background compilation.
+
+ * configure: Add silent_link (libtool --silent).
+ * src/function_loader.rb: Make objects without libtool (to avoid the
+ double compilation), and use the silent linking.
+
+2005-11-27 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Vaucanson test...
+
+
+2005-11-27 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Handle multiple paths for a same function (sep by `:').
+
+ * test/test_methods.cc: New.
+ * bin/mk_swig_input,
+ * bin/yaml_to_dyn_decls,
+ * src/cxx_symbols.rb,
+ * src/function_loader.rb,
+ * configure,
+ * test/Makefile.in,
+ * test/fixtures/my_lib/lib.hh: Update.
+
+2005-11-26 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Code re-organisation. Produce a library using libtool.
+
+ * src/dyn.hh: Update.
+ * src/data.erb.hh: Inherit from all_methods.
+ * src/data.erb.hxx: Remove. No more an erb template.
+ * src/data.hxx: New. From data.erb.hxx.
+ * src/data.cc: New.
+ * src/ruby_stream.hh: Export ruby::eval, add the environment struct.
+ * src/ruby_stream.cc: New.
+ * src/function.erb.cc: New.
+ * src/policy.hh: Export the implementation.
+ * src/policy.cc: New.
+ * src/name_of.hh: Export the implementation.
+ * src/name_of.cc: New.
+ * src/function_loader.hh: Export the implementation.
+ * src/function_loader.cc: New.
+ * src/function_loader.rb: Update to libtool.
+ * src/all_methods.erb.hh: New.
+ * src/all_methods.erb.cc: New.
+ * src/function.erb.hxx: Remove.
+
+ Remove the old static library, add a libtool one.
+ * lib/libiberty-macos.a: Remove.
+ * lib/.libs: New.
+ * lib/libiberty-powerpc-darwin.la: New.
+ * lib/.libs/libiberty-powerpc-darwin.a: New.
+
+ * configure: Improve and simplify.
+ * Makefile.in: New.
+
+ * test/Makefile.in: Update to libtool.
+ * test/fixtures/my_lib/lib.hh,
+ * test/fixtures/my_lib/damien.hh: Remove the name_of.hh include.
+
+2005-11-25 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Use a data_proxy_by_ptr values returned by a ctor.
+
+ * src/function_loader.rb: Change the generated code for ctors.
+ * src/data.erb.hh: Some fixes in data_proxy_by_ptr<T>.
+
+2005-11-25 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Change the data methods extension system.
+
+ * src/data.erb.hh: Declare them.
+ * src/data.erb.hxx: Implement them.
+ * configure: Give it as argument the file containing your methods.
+ * src/dyn.hh: Define DYN_FULL_IMPLEMENTATION.
+ * bin/yaml_to_dyn_decls: Generate methods with the new format.
+ * test/vaucanson/Makefile.in: Update.
+
+2005-11-25 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Higly simplify the arguments handling.
+
+ * src/function_loader.rb: No more stringify then parse arguments.
+
+2005-11-25 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Revert the previous patch.
+
+ * src/data.erb.hxx, src/data.erb.hh: Restore this useful piece
+ of code.
+
+2005-11-25 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Remove a FIXME and some useless code.
+
+ * src/data.erb.hh, src/data.erb.hxx: Remove data::get_const_ref and the
+ const version of operator*.
+
+2005-11-25 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Make works the var -> val conversion.
+
+ * src/dyn.hh: Use const_assign.
+ * src/data.erb.hh: Implement it.
+ * test/test_var_and_val.cc: Remove the FIXME about that.
+
+2005-11-25 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Factor cpy ctors.
+
+ * src/data.erb.hh, src/data.erb.hxx:
+ Clean, unify and factor the cpy ctors, and assignments operators.
+
+2005-11-25 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Little fix with the constness.
+
+ * test/test_containers.cc: Restore the "for" loop over a std::vector.
+ * src/function_loader.rb: Make const optional in the first_type_is_ptr
+ regexp.
+ * src/policy.hh: Do not write in cout but in logger. Do not propagate
+ the const here.
+ * src/data.erb.hh: But here.
+
+2005-11-25 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Automatic void detection, and automatic referencing for ret values.
+
+ * src/policy.hh: New. Use few C++ tricks to get rid of void functions,
+ and detect functions returning references and const references.
+ * src/data.erb.hh,
+ * src/data.erb.hxx,
+ * src/function_loader.rb: Update to the new policy system.
+ * src/function.erb.hh: Remove proc and ctor2.
+ * src/cxx_symbols.rb: Better const handling.
+ * src/dyn.hh: Update.
+ * bin/yaml_to_dyn_decls: No more generate proc decls.
+
+ * lib/libiberty-macos.a: Use a new and patched version (no use of environ).
+
+ * test/test_damien.cc,
+ * test/test_olena.cc,
+ * test/test_function_loader.cc: Replace proc by fun.
+
+2005-11-24 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Merge the demangling branch into the trunk.
+
+
+2005-11-23 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Use the compiler typeof + binutils demangling.
+
+2005-11-22 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Merge trunk -> branch.
+
+ Merge from 342 to 344.
+
+2005-11-22 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ No more share the same nil object.
+
+ * src/data.erb.hh: Update clone and the cpy ctor of data.
+
+2005-11-22 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Work in progess.
+
+
+2005-11-22 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Merge trunk -> branch.
+
+ Merge from 335 to 341.
+ Replace misc_compile_line to cflags and ldflags
+
+2005-11-21 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ More ctors, more tests.
+
+ * test/test_var_and_val.cc: More tests.
+ * src/name_of.hh: Add T[], and T[N].
+ * src/data.erb.hxx: Add 2 ctors defs.
+ * src/dyn.hh: Add 3 ctors defs.
+ * src/cxx_symbols.rb: Handle [].
+ * src/data.erb.hh: Add is_const() and 2 ctors decls.
+
+2005-11-21 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Make nil_proxy a pointer and no more take its address.
+
+ * src/data.erb.hxx, src/data.erb.hh: Update.
+
+2005-11-21 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add val, improve var.
+
+ * test/test_var_and_val.cc: New. Does not works completly.
+ * src/dyn.hh: Add the var and the val classes.
+ * src/data.erb.hh: Add new ctors decls.
+ * src/data.erb.hxx: Add the new ctors defs.
+
+ * test/Makefile.in:Make it an erb template.
+ * src/config.hh.in,
+ * configure,
+ * test/test_damien.cc,
+ * test/test_olena.cc,
+ * test/test_containers.cc,
+ * test/test_function_loader.cc: Update.
+ * test/olena: New.
+
+2005-11-20 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Constness, reference/copy returned values...
+
+ * src/data.erb.hh, src/data.erb.hxx:
+ Really handle the constness (without const_cast), provide different
+ kinds of memory managment (by_ptr, by_ref, by_cpy, by_const_ref), to
+ honor readonly, lvalue, by_cpy properties. Add a traits to make a
+ good automatic default behaviour.
+
+ * configure: Improve and make it loadable.
+ * src/dyn.hh,
+ * src/function_loader.hh,
+ * src/function_loader.rb,
+ * src/function.erb.hh: Update.
+ * src/cxx_symbols.rb: Better const handling.
+
+ * test/test_containers.cc: New. Extract from test_function_loader.cc.
+ * test/test_function_loader.cc: Remove the container tests.
+
+ * test/Makefile.in: Make it real, but do not handle deps :(
+ * test/test_olena.cc,
+ * src/config.hh.in,
+ * test/vaucanson/dyn_algorithms.cc,
+ * test/test_damien.cc: Replace SOURCE_DIR by DYNDIR.
+
+2005-11-20 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ In fact, an iterator has a copy ctor :).
+
+ * test/fixtures/my_lib/lib.hh: Remove this silly and buggy
+ specializtion.
+
+2005-11-19 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Restore the Damien patch into the new branch.
+
+ Add demangle from libiberty.
+
+ * test/test_damien.cc: a few changes.
+ * test/fixtures/my_lib/damien.hxx: Add sqr.
+ * test/fixtures/my_lib/damien.hh: Add sqr.
+ * lib/libiberty-linux.a: New. libiberty for linux.
+ * lib/libiberty-macos.a: New. libiberty for macos.
+ * src/demangle.h: New. Demangling header.
+ * src/ansidecl.h: New. Needed by demangle.h
+ * src/function_loader.hh: Add misc_compile_line for add compilation
+ line options.
+ * src/function_loader.rb: Likewise.
+ * src/data.erb.hh: Now use demangling from libiberty instead of
+ name_of.
+
+2005-11-19 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add a better support for methods.
+
+2005-11-19 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Revert the previous patch before make a branch.
+
+2005-11-18 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add type2() and simplify the function options.
+
+2005-11-18 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add a little README file.
+
+ * README: New.
+ * test/test_function_loader.cc: Add an exit message.
+
+2005-11-18 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add some operators and handle returned references.
+
+2005-11-17 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Fix some tests.
+
+ * test/fixtures/some_identifiers.yml.cc,
+ * test/test_function_loader.rb,
+ * test/test_function_loader_cxx.rb: Adapt these tests to the current
+ version.
+ * src/function_loader.rb: Improve the void detection.
+
+2005-11-16 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ After the rush...
+
+ * test/fixtures/vaucanson: New.
+ * test/fixtures/vaucanson/dyn_vaucanson_mlc_name_of.hh: New.
+ * test/fixtures/vaucanson/dyn_vaucanson_dyn_mirror.hh: New.
+ * test/vaucanson/dyn_algorithms.cc: New.
+ * test/test_damien.cc,
+ * test/fixtures/my_lib/lib.hh,
+ * test/vaucanson/Makefile.in,
+ * test/test_function_loader.cc,
+ * src/name_of.hh,
+ * src/data.erb.hxx,
+ * src/cxx_symbols.rb,
+ * src/function_loader.rb,
+ * src/data.erb.hh,
+ * bin/yaml_to_dyn_decls: Many changes.
+
+2005-11-15 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Some fixes.
+
+ * test/test_function_loader.cc: Exit.
+ * src/function_loader.rb: Fix.
+
+2005-11-15 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Make works better.
+
+ * test/fixtures/my_lib/lib.hh,
+ * test/test_function_loader.cc,
+ * configure,
+ * src/data.erb.hxx,
+ * src/function_loader.hh,
+ * src/function_loader.rb,
+ * src/data.erb.hh: Update.
+
+2005-11-15 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ A printable is not a not_printable.
+
+2005-11-15 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Less badly used references.
+
+2005-11-15 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Fix basics tests.
+
+ * test/fixtures/my_lib/damien.hxx,
+ * test/fixtures/my_lib/lib.hh,
+ * test/fixtures/my_lib/damien.hh: Use name_of not mlc.
+ * src/name_of.hh: Add std::ostream.
+ * src/function_loader.rb: Fix simple function file mangling.
+
+2005-11-15 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add the vaucanson test.
+
+ * src/name_of.hh: Error at compile time for default case of mlc_name<T>.
+ * src/function_loader.hh: Put the SOURCE_DIR in $:.
+ * src/data.erb.hh: Add some mlc_set_name().
+ * bin/mk_swig_input: Take the dir as argument.
+ * bin/yaml_to_dyn_decls: Mangle conversion operators.
+ * src/cxx_symbols.rb: New. Extract from ...
+ * src/function_loader.rb: ... here.
+
+ * test/Makefile.in: Add vaucanson.
+ * test/vaucanson: New.
+ * test/vaucanson/Makefile.in: New.
+ * configure: Update.
+ * test: Add some ignore rules.
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add 2 big trees.
+
+ * test/fixtures/tree: New.
+ * test/fixtures/tree/tree.yml: New.
+ * test/fixtures/tree/tree.swig: New.
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add some swig tools.
+
+ * bin: New.
+ * bin/mk_swig_input: New.
+ * bin/yaml_to_dyn_decls: New.
+ * bin/swig_tree_to_yaml: New.
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ post_include and unset.
+
+ * src: Ignore function.hxx.
+ * src/function_loader.hh: Handle post_include and unset macros to
+ avoid multiple defs.
+ * src/function_loader.rb: Implement post_include.
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Separation interface/implementation for function.erb.hh.
+
+
+2005-11-14 Damien Thivolle <damien(a)lrde.epita.fr>
+
+ Rename some includes and add olena test to Makefile.in.
+
+ * test/test_olena.cc: Include dyn.hh.
+ * test/Makefile.in: Add olena test.
+ * test/fixtures/oln_name.hh: New. Contains name declarations for
+ olena.
+ * src/name_of.hh: New. Old mlc.hh
+ * src/data.erb.hxx: Update mlc.hh -> name_of.hh.
+ * src/mlc.hh: Remove.
+ * src/function_loader.hh: Update mlc.hh -> name_of.hh.
+ * src/data.erb.hh: Likewise.
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ More warning flags.
+
+
+2005-11-14 Damien Thivolle <damien(a)lrde.epita.fr>
+
+ Add olena entry to Makefile.in.
+
+ * test/Makefile.in: Refer to title.
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ More examples.
+
+ * test/test_damien.cc: Test deref, get_i, get_t, and clone.
+ * test/fixtures/my_lib/damien.hxx: New. To test that it works even if
+ the code is not available during the driver compilation.
+ Add deref, get_i, get_t, change, clone.
+ * test/fixtures/my_lib/damien.hh: It's now just the minimal interface.
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Yeah it works.
+
+ * src/data.erb.hh: Setup conditional inheritance to handle printablity.
+
+ * src/data.erb.hxx, src/function.erb.hh: Fix argument number
+ compatiblity.
+
+ * test/test_damien.cc: Add test about printablity.
+ * test/fixtures/my_lib/damien.hh: Add proc change.
+ * test/test_function_loader.cc: Include dyn not function_loader.
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Minor changes.
+
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Touch data_gen.hh in configure.
+
+
+2005-11-14 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Work in progress.
+
+ * test/test_function_loader.cc: Restore the include.
+ * src/dyn.hh: Manage includes in the proper order.
+ * src/mlc.hh: Add mlc_name2 for dynamic type deductions.
+ * src/function_loader.rb: Support for method_fun2 and method_proc2.
+
+ * src/function_loader.erb.hh: Remove.
+ * src/data.erb.hxx: New.
+ * src/function_loader.hh: New.
+ * src/function.erb.hh: New.
+ * src/data.erb.hh: New.
+ * src/data.hh: Remove.
+
+ * src/ruby_stream.hh,
+ * test/test_damien.cc,
+ * test/fixtures/my_lib/damien.hh,
+ * configure: Update.
+
+2005-11-13 Damien Thivolle <damien(a)lrde.epita.fr>
+
+ Add const/non const proxy support and tests for olena.
+
+ * test/test_olena.cc: New. Tests for olena.
+ * test/fixtures/my_lib/lib.hh: Remove templates from constructor
+ names.
+ * test/test_function_loader.cc: Remove an include.
+ * src/function_loader.erb.hh: Operator() now takes directly dyn::data
+ objects as arguments.
+ * src/data.hh: Comment print methods so that we can have proxy_data
+ of std::ostream..
+ * src/mlc.hh: Add useful empty lines.
+ * src/function_loader.rb: Change pointers to references.
+
+2005-11-13 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add constructors.
+
+
+2005-11-13 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Remove \r in data.hh.
+
+
+2005-11-13 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Fix the conversion (step1).
+
+2005-11-13 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Use a SortedSet for includes and include_dirs.
+
+
+2005-11-13 Damien Thivolle <damien(a)lrde.epita.fr>
+
+ Add methods.
+
+ * .: .
+ * test/test_damien.cc: Test methods.
+ * test/fixtures/my_lib/damien.hh: Add a method that doesn't take a
+ std::ostream as argument :).
+ * src/function_loader.erb.hh: Add method_proc and method_fun.
+ * src/data.hh: Nothing worth being mentionned, mostly comments
+ that I've been too lazy to remove.
+ * src/function_loader.rb: Add method wrappers generation..
+
+2005-11-12 Damien Thivolle <damien(a)lrde.epita.fr>
+
+ Change dynamic_cast to reinterpret_case.
+
+ * src/function_loader.rb: Change dynamic_cast to reinterpret_case.
+ For some reasons, dynamic_cast doesn't work in a function
+ called via the DL API.
+
+2005-11-10 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Remove data#assign.
+
+
+2005-11-10 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ mlc_name_of: const and ref.
+
+
+2005-11-10 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add a default include handling.
+
+
+2005-11-10 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Simplify the function handling.
+
+ * test/test_damien.cc,
+ * test/test_function_loader.cc,
+ * src/function_loader.erb.hh,
+ * src/data.hh,
+ * src/function_loader.rb: Update.
+
+2005-11-08 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ More tests, more warnings, less errors.
+
+ * src/data.hh,
+ * src/dyn.hh,
+ * src/function_loader.erb.hh,
+ * src/function_loader.rb,
+ * test/test_damien.cc,
+ * test/fixtures/my_lib/lib.hh,
+ * test/test_function_loader.cc,
+ * configure: Update.
+ * src/env.hh: Remove.
+ * src/call.hh: Remove.
+
+2005-11-08 Damien Thivolle <damien(a)lrde.epita.fr>
+
+ Add procedures.
+
+ * test/test_function_loader.cc: Use procedures and functions.
+ * src/function_loader.erb.hh: Add procedures.
+
+2005-11-08 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Make call_ret works.
+
+ * test/test_function_loader.cc,
+ * src/function_loader.erb.hh,
+ * src/data.hh,
+ * src/dyn.hh,
+ * src/mlc.hh,
+ * src/function_loader.rb: Update.
+
+2005-11-08 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Improve the call convention.
+
+ * test/test_damien.cc,
+ * test/Makefile.in,
+ * test/fixtures/my_lib/lib.hh,
+ * test/fixtures/my_lib/damien.hh,
+ * test/test_function_loader.cc,
+ * test/test_function_loader_cxx.rb,
+ * configure,
+ * src/env.hh,
+ * src/data.hh,
+ * src/dyn.hh,
+ * src/call.hh,
+ * src/mlc.hh,
+ * src/function_loader.rb: Improve the call convention.
+ * src/function_loader.hh: Rename to ...
+ * src/function_loader.erb.hh: ... this.
+
+2005-11-07 Damien Thivolle <damien(a)lrde.epita.fr>
+
+ New loader c++-side interface.
+
+ * test/test_damien.cc: New. A test.
+ * test/Makefile.in: Add test_damien.cc compilation.
+ * test/fixtures/my_lib/damien.hh: New. Functions needed by the test.
+ * src/mangle.hh: Remove.
+ * src/env.hh: remove this->name_ = name.
+ * src/data.hh: Comment mangle related methods.
+ * src/dyn.hh: Remove mangle.hh inclusion.
+ * src/function_loader.hh: Add call methods.
+
+2005-11-07 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Fix a test.
+
+ * test/test_function_loader_cxx.rb: Remove a incorrect *.
+
+2005-11-07 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add from_cxx_call.
+
+ * src/function_loader.rb: Add from_cxx_call.
+ * test/fixtures/some_identifiers.yml.cc: Remove the useless type spec.
+ * test/test_function_loader_cxx.rb: New.
+
+2005-11-07 Damien Thivolle <damien(a)lrde.epita.fr>
+
+ Changes in the loader.
+
+ * src/function_loader.hh: Add call_ret().
+
+2005-11-07 Damien Thivolle <damien(a)lrde.epita.fr>
+
+ Add call() in the loader.
+
+ * src/function_loader.hh: Add call() in the loader.
+
+2005-11-07 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Use YAML instead of PStore.
+
+ * src/function_loader.rb: Because PStore segv sometimes :(.
+
+2005-11-07 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Some fixes.
+
+ * src/data.hh, src/call.hh: include cassert.
+ * src/function_loader.rb: Use Pathname#read instead of File.read.
+
+2005-11-07 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Change the argument parser.
+
+ * src/function_loader.rb: Use a little LL parser.
+ * test/fixtures/some_identifiers.yml.cc: All tests passes now.
+
+2005-11-07 Nicolas Pouillard <ertai(a)lrde.epita.fr>
+
+ Add the Vcs extension.
+
+ * vcs: New.
+ * vcs/dynamic_static_bridge_vcs.rb: New.
+
diff --git a/dynamic-use-of-static-c++/Makefile.am b/dynamic-use-of-static-c++/Makefile.am
new file mode 100644
index 0000000..61eb925
--- /dev/null
+++ b/dynamic-use-of-static-c++/Makefile.am
@@ -0,0 +1,5 @@
+SUBDIRS = libltdl bin src config data test
+
+ACLOCAL_AMFLAGS = -I config -I libltdl
+
+EXTRA_DIST = bootstrap
diff --git a/dynamic-use-of-static-c++/README b/dynamic-use-of-static-c++/README
new file mode 100644
index 0000000..112dac3
--- /dev/null
+++ b/dynamic-use-of-static-c++/README
@@ -0,0 +1,23 @@
+HOW TO USE THIS PROJECT
+
+From the repository:
+
+ # Initialize the build system
+ ./bootstrap
+
+ # Make a build dir
+ mkdir _build && cd _build
+
+ # Configure the build for your system
+ # The config.site try to use more efficient tools (g++-4.0 and ccache)
+ # it also enable the configure caching.
+ # With --prefix you can set the destination (here _install)
+ CONFIG_SITE=`pwd`/../config.site ../configure --prefix=`pwd`/../_install
+
+ # For now need to add the bin directory to your path because dyn-config is
+ # by programs compiled with our system
+ export PATH=$PATH:`pwd`/bin
+
+ make check # The test with a latest prototype of olena will fail if you
+ # don't checkout it:
+ # cd test/olena && svn co https://svn.lrde.epita.fr/svn/oln/prototypes/proto-stl-style
diff --git a/dynamic-use-of-static-c++/bin/Makefile.am b/dynamic-use-of-static-c++/bin/Makefile.am
new file mode 100644
index 0000000..41bad07
--- /dev/null
+++ b/dynamic-use-of-static-c++/bin/Makefile.am
@@ -0,0 +1,4 @@
+bin_SCRIPTS = dyn-config
+# FIXME put dyn- before these binaries
+noinst_SCRIPTS = mk_swig_input swig_tree_to_yaml yaml_to_dyn_decls
+BUILT_SOURCES = dyn-config
diff --git a/dynamic-use-of-static-c++/bin/dyn-config.in b/dynamic-use-of-static-c++/bin/dyn-config.in
new file mode 100755
index 0000000..0271082
--- /dev/null
+++ b/dynamic-use-of-static-c++/bin/dyn-config.in
@@ -0,0 +1,70 @@
+#!/usr/bin/env ruby
+require 'optparse'
+require 'pathname'
+
+def expand ( var, binding )
+ var.gsub(/\$\{(.*)\}/) { eval($1, binding) }
+end
+
+name = 'libdyn'
+version = '0.1'
+prefix = Pathname.new('@prefix@')
+includedir = expand('@includedir@', binding)
+top_builddir = Pathname.new(__FILE__).dirname.parent
+top_srcdir = expand('@top_srcdir@', binding)
+exec_prefix = expand('@exec_prefix@', binding)
+libdir = expand('@libdir@', binding)
+
+libtool_flags = '-export-dynamic'
+libdir_libdyn_la = Pathname.new("#{libdir}/libdyn.la")
+if libdir_libdyn_la.exist? # FIXME Perhaps is assertion is bad.
+ cflags = "-I#{includedir}"
+ libtool = 'libtool' # Hope that libtool is installed
+ libtool_libs = "#{libdir_libdyn_la} #{libtool_flags}"
+else
+ cflags = "-I#{top_builddir}/src -I#{top_srcdir}/src"
+ libtool_libs = "#{top_builddir}/src/libdyn.la #{libtool_flags}"
+ libtool = "#{top_builddir}/libtool"
+end
+
+o = OptionParser.new do |o|
+ o.banner { "Usage: #$0 [OPTION]" }
+
+ o.on('--prefix DIR',
+ "change #{name} prefix [default #{prefix}])") { |prefix| }
+
+ o.on('--exec-prefix DIR',
+ "change #{name} exec prefix [default #{exec_prefix}])") { |exec_prefix| }
+
+ # o.on('--libs', 'print library linking information') do
+ # end
+
+ o.on('--libtool-libs', 'print linking information for use with libtool') do
+ puts libtool_libs
+ end
+
+ o.on('--cflags', 'print pre-processor and compiler flags') do
+ puts cflags
+ end
+
+ o.on('--compile', 'compile line (add at least the input and the output)') do
+ puts "#{libtool} --mode=compile --tag=CXX ccache g++ -c #{cflags}"
+ end
+
+ o.on('--link', 'link line (add at least the input and the output)') do
+ puts "#{libtool} --mode=link --tag=CXX ccache g++ #{libtool_libs}"
+ end
+
+ o.on_tail('--help', 'display this help and exit') do
+ STDERR.puts o
+ exit
+ end
+
+ o.on_tail('--version', 'output version information') do
+ puts "#$0 #{version}"
+ end
+end
+
+puts o if ARGV.empty?
+
+o.parse!(ARGV)
diff --git a/dynamic-use-of-static-c++/bin/mk_swig_input b/dynamic-use-of-static-c++/bin/mk_swig_input
new file mode 100755
index 0000000..5efcc49
--- /dev/null
+++ b/dynamic-use-of-static-c++/bin/mk_swig_input
@@ -0,0 +1,38 @@
+#!/usr/bin/env ruby
+require 'pathname'
+load Pathname.new(__FILE__).dirname.parent + 'configure'
+includes = []
+
+# dir = ARGV.shift
+if ARGV.empty?
+ # STDERR.puts "usage #$0 <dir> <path/to/some/c++/headers.hh>*"
+ STDERR.puts "usage #$0 <dir>*"
+ exit
+end
+# patt = /\.t?h(h|xx)$/
+patt = /\.t?hh$/
+flags = '' # '-DVCSN_USE_INTERFACE_ONLY'
+File.open('all.hh', 'w') do |all|
+ ARGV.each do |root|
+ Pathname.new(root).find do |path|
+ next unless path.to_s =~ patt
+ all.puts "#include \"#{path}\""
+ end
+ end
+end
+dirs = ARGV.map {|x| '-I' + x}
+`g++ #{dirs.join ' '} -I. #{CFLAGS} -I#{DYNDIR} #{flags} -E all.hh | grep '^#.*vaucanson'`.to_a.reverse_each do |line|
+ line.chomp!
+ line.gsub!(/^.*include\/(vaucanson\/.*)".*$/, '\1')
+ next unless line =~ patt
+
+ next if line =~ /\/(static|letter|freemonoid_product(_base)?)\.hh/ # XXX hard skipping
+
+ includes << line unless includes.include? line
+end
+File.open('vcsn.i', 'w') do |vcsn_i|
+ includes.reverse_each do |include|
+ vcsn_i.puts "%include \"#{include}\""
+ end
+ vcsn_i.puts "%module vcsn"
+end
diff --git a/dynamic-use-of-static-c++/bin/swig_tree_to_yaml b/dynamic-use-of-static-c++/bin/swig_tree_to_yaml
new file mode 100755
index 0000000..eb63157
--- /dev/null
+++ b/dynamic-use-of-static-c++/bin/swig_tree_to_yaml
@@ -0,0 +1,8 @@
+#!/usr/bin/env ruby
+str = STDIN.read
+str.gsub!(/^(\s*) \+\+\+ (\w+) -+$/, '\1- \2:')
+str.gsub!(/^(\s*)\+\+\+ (\w+) -+$/, '\1\2:')
+str.gsub!(/^(\s*)\| (\S+)\s+- (.*)$/, '\1 \2: \3')
+str.gsub!(/^$(\s*) -/, "\\1contents:\n\\1 -")
+str.gsub!(/^\s*\|\s*$/, '')
+puts str
diff --git a/dynamic-use-of-static-c++/bin/yaml_to_dyn_decls b/dynamic-use-of-static-c++/bin/yaml_to_dyn_decls
new file mode 100755
index 0000000..85ad16a
--- /dev/null
+++ b/dynamic-use-of-static-c++/bin/yaml_to_dyn_decls
@@ -0,0 +1,197 @@
+#!/usr/bin/env ruby
+require 'yaml'
+require 'rubygems'
+require_gem 'ruby_ex'
+require 'ruby_ex'
+require 'r_path'
+require 'set'
+require __FILE__.to_path.dirname.parent/'src/cxx_symbols'
+tree = YAML.load STDIN.read
+raise "Tree is Empty" if tree.nil?
+class Hash
+ undef type
+ def name
+ # self['sym:name'] || super
+ super.gsub(/.*::/, '')
+ end
+ def method_missing ( meth )
+ self[meth.to_s]
+ end
+end
+class Dumper
+ def initialize
+ @namespace = []
+ @includes = []
+ @states = []
+ @all_methods = {}
+ @qualified_names = SortedSet[]
+ # @mlc_set_names = []
+ @io = STDOUT
+
+ @path_clean_re = /^.*\/include\/(.*)$/
+ end
+ def with ( io, &block )
+ oldio = @io
+ begin
+ @io = io
+ block[]
+ ensure
+ @io = oldio
+ end
+ end
+ def operator ( name )
+ mangle(name)
+ end
+ def puts ( *args )
+ @io.print ' ' * @namespace.size
+ @io.puts(*args)
+ end
+ def namespace ( name, &block )
+ puts "namespace #{name} {"
+ @namespace << name
+ @states << 'namespace'
+ block[]
+ @namespace.pop
+ @states.pop
+ puts "} // end of namespace #{name}"
+ end
+ def struct ( name, qualified_name, &block )
+ puts "// struct #{name} {"
+ @namespace << name
+ @states << 'struct'
+ block[]
+ unless @qualified_names.include? "ctor #{qualified_name}"
+ @qualified_names << "ctor #{qualified_name}"
+ puts "ctor #{name}(\"#{qualified_name}\");"
+ end
+ @namespace.pop
+ @states.pop
+ puts '// };'
+ end
+ def print_dyn ( key, tree )
+ return if tree.nil?
+ case tree
+ when Array
+ tree.each do |node|
+ print_dyn(nil, node)
+ end
+ return
+ when Hash
+ if tree.size == 1
+ print_dyn(*tree.to_a.first)
+ return
+ end
+ when String
+ return
+ end
+ key = tree.kind if key.nil? or (%w[template class].include? key)
+
+ # No struct specializations
+ return if tree.specialization == '1'
+ return if tree.partialspecialization == '1'
+
+ # No instance variables
+ return if key == 'cdecl' and not (tree.decl != '' and tree.access.nil?)
+
+ # No typdefs
+ return if tree.storage == 'typedef'
+
+ case key
+ when 'namespace'
+ namespace tree.name do
+ print_dyn nil, tree.contents
+ end
+ when 'struct', 'class'
+ name = (@namespace[1..-1] + [tree.name]).join('::')
+ unless @qualified_names.include? name
+ @qualified_names << name
+=begin
+ case n = (parms = (tree.templateparms || '').split(/\s*,\s*/)).size
+ when 0 then @mlc_set_names << "mlc_set_name(#{name});"
+ else
+ b = -1
+ builtin_type = /bool|char/
+ parms.map! { |p| (p =~ builtin_type)? "#{p} B#{b += 1}" : p }
+ parm_names = parms.map { |p| p.split(/\s+/).last }
+ name_of = parms.map do |p|
+ var = p.split(/\s+/).last
+ case p
+ when /bool/ then "((#{var})? \"true\" : \"false\")"
+ when /char/ then "\"'\" + std::string(#{var}) + \"'\""
+ else "mlc_name<#{var}>::of()"
+ end
+ end.join(" + \", \" + ")
+ @mlc_set_names <<
+ "template <#{parms.join(', ')}> struct mlc_name " +
+ "< #{name}<#{parm_names.join(', ')}> > " +
+ "{ static std::string of() { return std::string(\"#{name}\") + " +
+ "\"< \" + #{name_of} + \" >\"; } };"
+ end
+=end
+ end
+ struct tree.name, name do
+ print_dyn nil, tree.contents
+ end
+ when 'cdecl'
+ node_name = tree.name
+ if node_name =~ /operator/
+ node_name = operator(node_name)
+ end
+ name = (@namespace + [node_name]).join('::')
+ return if @qualified_names.include? name
+ @qualified_names << name
+ if @states.last == 'struct'
+ @all_methods[node_name] ||= Set.new
+ @all_methods[node_name] << @includes.last
+ else
+ puts "fun #{node_name}(\"#{name}\", \"\", \"#{(a)includes.last}\");"
+ end
+ when 'include'
+ @includes << tree.name
+ print_dyn nil, tree.contents
+ @includes.pop
+ # when 'constructor'
+ # dump "dyn::ctor(#{convert_params(tree.parms)})"
+ end
+ end
+ def print_all_methods
+ @all_methods.each { |k, v| @all_methods[k] = v.map { |x| x.gsub(@path_clean_re, '\1') } }
+ puts @all_methods.to_yaml
+ end
+=begin
+ def print_mlc_set_names
+ @mlc_set_names.each do |mlc_set_name|
+ next if mlc_set_name =~ /TiSlot|PartialExp/ # XXX constant ignoring
+ puts mlc_set_name
+ end
+ end
+=end
+end
+dumper = Dumper.new
+root = tree.rpath_find(:first, ARGV[0] || 'top/contents/include/*name/vcsn\.i')
+# puts root.to_yaml
+puts '// ------------------------------------------------ '
+puts '// dyn_vaucanson_dyn_mirror.hh'
+File.open('dyn_vaucanson_dyn_mirror.hh', 'w') do |dyn_vaucanson_dyn_mirror_hh|
+ dumper.with(dyn_vaucanson_dyn_mirror_hh) do
+ dumper.namespace 'dyn' do
+ dumper.print_dyn nil, root['contents']
+ end
+ end
+end
+puts '// ------------------------------------------------ '
+puts '// all_methods.yml'
+File.open('dyn_vaucanson_methods.yml', 'w') do |all_methods_yml|
+ dumper.with(all_methods_yml) do
+ dumper.print_all_methods
+ end
+end
+=begin
+puts '// ------------------------------------------------ '
+puts '// dyn_vaucanson_mlc_name.hh'
+File.open('dyn_vaucanson_mlc_name.hh', 'w') do |dyn_vaucanson_mlc_name_hh|
+ dumper.with(dyn_vaucanson_mlc_name_hh) do
+ dumper.print_mlc_set_names
+ end
+end
+=end
diff --git a/dynamic-use-of-static-c++/bootstrap b/dynamic-use-of-static-c++/bootstrap
new file mode 100755
index 0000000..8bd6e9e
--- /dev/null
+++ b/dynamic-use-of-static-c++/bootstrap
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Failures do matter.
+set -e
+# Tell what's going on.
+set -x
+
+mkdir -p _config
+touch _config/local-config.rb.in
+
+# Make the libtool with ltdl
+libtoolize --force --copy --automake --ltdl
+
+# Finally, install the GNU Build System.
+autoreconf -f -v -i
+
+# FIXME: autoheader does not obey --force.
+find . -name 'config.h*.in' -o -name 'local-config.*.in' | xargs touch
diff --git a/dynamic-use-of-static-c++/config.site b/dynamic-use-of-static-c++/config.site
new file mode 100644
index 0000000..760273e
--- /dev/null
+++ b/dynamic-use-of-static-c++/config.site
@@ -0,0 +1,24 @@
+# -*- shell-script -*-
+
+if test $PACKAGE_TARNAME == dyn; then
+
+# Use the cache.
+cache_file=config.cache
+
+# Use a pretty recent GCC.
+for i in -snapshot -4.0 ''
+do
+ gcc$i --help >/dev/null 2>&1 &&
+ : ${CC=ccache gcc$i}
+ g++$i --help >/dev/null 2>&1 &&
+ : ${CXX=ccache g++$i}
+done
+# Don't optimize, but do debug.
+: ${CXXFLAGS=-ggdb}
+echo CC:$CC
+echo CXX:$CXX
+echo CXXFLAGS:$CXXFLAGS
+
+else
+ echo "Loading config.site for the wrong package." >&2
+fi
diff --git a/dynamic-use-of-static-c++/config/Makefile.am b/dynamic-use-of-static-c++/config/Makefile.am
new file mode 100644
index 0000000..0b6a05c
--- /dev/null
+++ b/dynamic-use-of-static-c++/config/Makefile.am
@@ -0,0 +1 @@
+ruby.m4: rbconfig_gen.rb config/mk_local_config_rb_in.rb
diff --git a/dynamic-use-of-static-c++/config/erbx b/dynamic-use-of-static-c++/config/erbx
new file mode 100755
index 0000000..bd49f97
--- /dev/null
+++ b/dynamic-use-of-static-c++/config/erbx
@@ -0,0 +1,111 @@
+#!/usr/bin/env ruby
+
+# For this project only
+DYN_MAX_ARGUMENTS = 10
+ALL_METHODS = { 'fake_method' => ['*'] }
+# end
+
+require 'erb'
+require 'pathname'
+require 'optparse'
+require 'ostruct'
+
+opts = OpenStruct.new
+opts.input_file = '-'
+out = STDOUT
+
+OptionParser.new do |o|
+ o.on('-c', '--copy', 'Copy the input before the result') { |opts.copy| }
+ o.on('-C', '--smart-copy', 'Smart copy see the manual') { |opts.smart_copy| }
+ o.on('-e', '--one-line INPUT', 'One line of input') { |opts.input_line| }
+ o.on('-i', '--input FILE', 'Input file (stdin by default)') { |opts.input_file| }
+ o.on('-o', '--output FILE', 'Output file (stdout by default)') do |output_file|
+ out_path = Pathname.new(output_file)
+ out_path.chmod(0644) if out_path.exist?
+ out = out_path.open('w')
+ out_path.chmod(0444) if out_path.exist?
+ end
+ o.on('--chomp', 'Remove the trailing new-line at the end') { |opts.chomp| }
+ o.on_tail('-h', '--help', 'This help message') { STDERR.puts o ; exit }
+end.parse!(ARGV)
+
+case opts.input_file
+when '-'
+ input = opts.input_line || STDIN.read
+else
+ input = File.read(opts.input_file)
+end
+
+
+print input if opts.copy
+
+comment = '#erb# '
+
+=begin
+mode -C
+example:
+
+ foo: do not touch me ...
+
+ =begin
+ erb code <%= 6 * 7 %>...
+ =end
+
+ bar: ...
+
+become:
+
+ foo: do not touch me ...
+
+ #erb# =begin # Read the documentation of erbx to see how to change this part
+ #erb# erb code <%= 6 * 7 %>...
+ #erb# =end
+
+ #erb# =generated
+ erb code 42...
+ #erb# =end_generated
+
+ bar: ...
+
+and this output can be an new input where the generated part
+will be updated
+=end
+
+documentation = ' # Read the documentation of erbx to see how to change this part'
+comment_re = /^#{comment}/
+begin_re = /^(?:#{comment})?=begin[^\n]*$/
+end_re = /^(?:#{comment})?=end$/
+generated_re = /^#{comment}=generated$/
+end_generated_re = /^#{comment}=end_generated$/
+begin_t = "#{comment}=begin#{documentation}\n"
+end_t = "#{comment}=end\n"
+generated_t = "#{comment}=generated\n"
+end_generated_t = "#{comment}=end_generated\n"
+
+code = input[/#{begin_re}\n(.*)#{end_re}/m, 1]
+code = input if code.nil? or code.empty?
+code.gsub!(comment_re, '')
+
+output = ERB.new(code, $SAFE, '<-%->', '$erbout_').result
+
+if input =~ generated_re
+ input.gsub!(/\n(#{generated_re}).*(#{end_generated_re})/mx,
+ "\\1\n#{output}\\2")
+else
+ input.gsub!(/(#{end_re}\n)/, "\\1#{generated_t}#{output}#{end_generated_t}")
+end
+
+if opts.smart_copy
+ code.gsub!(/^/, comment)
+ input.gsub!(/#{begin_re}.*#{end_re}/mx,
+ "#{begin_t}#{code}#{end_t}")
+ input.chomp!
+ out.print input
+else
+ output.chomp!
+ out.print output
+end
+
+out.puts unless opts.input_line
+
+out.close
diff --git a/dynamic-use-of-static-c++/config/mk_local_config_rb_in.rb b/dynamic-use-of-static-c++/config/mk_local_config_rb_in.rb
new file mode 100644
index 0000000..985b1c3
--- /dev/null
+++ b/dynamic-use-of-static-c++/config/mk_local_config_rb_in.rb
@@ -0,0 +1,22 @@
+require 'pathname'
+# STDERR.puts "MK: #{ARGV.inspect}"
+def usage
+ STDERR.puts "Usage: #$0 <dest-file>"
+ STDERR.puts "ac_subst_vars will be read from stdin"
+ exit
+end
+usage if ARGV.size != 1
+out_path = Pathname.new ARGV.shift
+args = STDIN.read.split(/\s+/)
+out_path.chmod(0644) if out_path.exist?
+out_path.open('w') do |out|
+ out.puts "# Generated by mk_local_config_rb_in.rb"
+ out.puts "# dest-file: #{out_path}"
+ out.puts "# ac_subst_vars: #{args.join(' ')}"
+ out.puts "AC_CONFIG = {"
+ args.each do |arg|
+ out.puts " :#{arg} => '@#{arg}@',"
+ end
+ out.puts "}"
+end
+out_path.chmod(0444)
diff --git a/dynamic-use-of-static-c++/config/rbconfig_gen.rb b/dynamic-use-of-static-c++/config/rbconfig_gen.rb
new file mode 100644
index 0000000..837cf2b
--- /dev/null
+++ b/dynamic-use-of-static-c++/config/rbconfig_gen.rb
@@ -0,0 +1,19 @@
+require 'rbconfig'
+
+def gen_m4 ( config )
+ config.each_key do |k|
+ name = "RUBY_#{k}"
+ puts %Q{
+ AC_SUBST([#{name}],
+ RUBY([
+ val = Config::CONFIG[%q[#{k}]]
+ val = val.to_s.gsub(%q['], %q['"'"'])
+ %q['] + val + %q[']
+ ]))
+ AC_DEFINE([#{name}], $#{name},
+ [Contains Config::CONFIG['#{k}'] (generated by rbconfig_gen.rb)])
+ }
+ end
+end
+
+gen_m4(Config::CONFIG)
diff --git a/dynamic-use-of-static-c++/config/ruby.m4 b/dynamic-use-of-static-c++/config/ruby.m4
new file mode 100644
index 0000000..ac5cddd
--- /dev/null
+++ b/dynamic-use-of-static-c++/config/ruby.m4
@@ -0,0 +1,45 @@
+
+
+AC_DEFUN([RUBY],
+[esyscmd([ruby <<\RUBY_EOF $2 $3 $4 $5 # and so on...
+require "rbconfig"
+block = proc do
+$1
+end
+result = block.call(*ARGV)
+# STDERR.puts "RUBY: argv: #{ARGV.inspect}, result: #{result}"
+print result
+RUBY_EOF
+])])
+
+
+
+AC_DEFUN([RBCONFIG], [esyscmd([ruby config/rbconfig_gen.rb])])
+
+
+
+AC_DEFUN([MK_LOCAL_CONFIG_RB_IN], [
+ruby $srcdir/config/mk_local_config_rb_in.rb $1 <<MK_LOCAL_CONFIG_RB_IN_EOF
+$ac_subst_vars
+MK_LOCAL_CONFIG_RB_IN_EOF
+])
+
+
+
+# Examples:
+# * ERB([Hello, <%= "WORLD".downcase %>! (<%= 6 * 7 %>)])
+# => equivalent to: `Hello, world! (42)'
+#
+# * But in fact if you want that the code will be really substitute
+# During m4 instantiation you must use esyscmd:
+#
+# esyscmd(ERB([AC_SUBST([<%= 'FOO' + '_' + 'BAR' %>])]))
+# => equivalent to: `AC_SUBST([FOO_BAR])'
+AC_DEFUN([ERB], [ruby <<\RUBY_EOF
+ require 'erb'
+ code = <<RUBY_CODE
+$1
+RUBY_CODE
+ eval('ER' + 'B').new(code, $SAFE, '<-%->', '$erbout_').run
+RUBY_EOF
+])
diff --git a/dynamic-use-of-static-c++/config/warning.m4 b/dynamic-use-of-static-c++/config/warning.m4
new file mode 100644
index 0000000..2df4649
--- /dev/null
+++ b/dynamic-use-of-static-c++/config/warning.m4
@@ -0,0 +1,105 @@
+# Finding valid warning flags for the C Compiler. -*-Autoconf-*-
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA
+
+# serial 2
+
+# AC_COMPILE_STDERR_IFELSE([PROGRAM],
+# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ------------------------------------------------------------------
+# Try to compile PROGRAM, and log the result of the compiler run.
+m4_define([AC_COMPILE_STDERR_IFELSE],
+[AC_LANG_COMPILER_REQUIRE()dnl
+m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
+rm -f conftest.$ac_objext
+AS_IF([_AC_EVAL_STDERR($ac_compile) &&
+ AC_TRY_COMMAND([test -s conftest.$ac_objext])],
+ [$2],
+ [_AC_MSG_LOG_CONFTEST
+m4_ifvaln([$3],[$3])dnl])dnl
+rm -f conftest.$ac_objext m4_ifval([$1], [conftest.$ac_ext])[]dnl
+])# AC_COMPILE_STDERR_IFELSE
+
+
+# DYN_COMPILER_FLAGS_NAME
+# ----------------------
+# Return the name of the FLAGS variable for the current language.
+m4_define([DYN_COMPILER_FLAGS_NAME],
+[AC_LANG_CASE([C], [CFLAGS],
+ [C++], [CXXFLAGS])[]dnl
+])# DYN_COMPILER_FLAGS_NAME
+
+
+# DYN_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED])
+# -----------------------------------------------------------------
+# icc doesn't choke on unknown options, it will just issue warnings
+# (even with -Werror). So we grep stderr for any message that says an
+# option was ignored. For instance on "-Wall" it says:
+#
+# icc: Command line warning: ignoring option '-W'; no argument required
+#
+# And GCC sometimes follows an irregular scheme (this is 3.3):
+# g++: unrecognized option `-wd654'
+# cc1plus: warning: "-Wbad-function-cast" is valid for C/ObjC but not for C++.
+# cc1plus: warning: ignoring command line option '-Wbad-function-cast'
+#
+# Pay attention not to give grep a regexp starting with "-".
+AC_DEFUN([DYN_COMPILER_OPTION_IF],
+[AS_VAR_PUSHDEF([ac_Option],
+ [ac_cv_[]_AC_LANG_ABBREV[]_supports_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1],
+ [ac_Option],
+[ac_save_[]DYN_COMPILER_FLAGS_NAME=$DYN_COMPILER_FLAGS_NAME
+DYN_COMPILER_FLAGS_NAME="$DYN_COMPILER_FLAGS_NAME $1"
+ac_Option=no
+AC_COMPILE_STDERR_IFELSE([AC_LANG_PROGRAM],
+ [if (grep -E 'm4_do([ignoring option],
+ [|ignoring command line option .$1.],
+ [|unrecognized option .*$1],
+ [|option.*$1.*not supported],
+ [|$1.* is valid for.*but not for])' conftest.err
+ ) >/dev/null 2>&1; then :; else
+ ac_Option=yes
+ fi])
+DYN_COMPILER_FLAGS_NAME=$ac_save_[]DYN_COMPILER_FLAGS_NAME
+])
+AS_IF([test AS_VAR_GET(ac_Option) = yes], [$2], [$3])[]dnl
+AS_VAR_PUSHDEF([ac_Option])dnl
+])# DYN_COMPILER_OPTION_IF
+
+
+# DYN_CXX_WARNINGS(OPTIONS)
+# ------------------------
+# Check whether the C++ compiler support the OPTION, and if it
+# does, append it to WARNING_CXXFLAGS.
+# It is important to try the options all together, not just individually,
+# as for instance for GCC 3.2 '-Wbad-function-cast' after '-W' gives:
+#
+# cc1plus: warning: ignoring command line option '-Wbad-function-cast'
+#
+# but not when used alone. This also demonstrates the importance of the
+# order.
+AC_DEFUN([DYN_CXX_WARNINGS],
+[ac_save_compiler_flags=$DYN_COMPILER_FLAGS_NAME
+m4_foreach([AC_Option], [$1],
+ [DYN_COMPILER_OPTION_IF(AC_Option,
+ [WARNING_CXXFLAGS="$WARNING_CXXFLAGS AC_Option"
+ DYN_COMPILER_FLAGS_NAME="$ac_save_compiler_flags $WARNING_FLAGS"])])
+DYN_COMPILER_FLAGS_NAME=$ac_save_compiler_flags
+AC_SUBST([WARNING_CXXFLAGS])
+])# DYN_CXX_WARNINGS(OPTIONS)
diff --git a/dynamic-use-of-static-c++/configure.ac b/dynamic-use-of-static-c++/configure.ac
new file mode 100644
index 0000000..95952e7
--- /dev/null
+++ b/dynamic-use-of-static-c++/configure.ac
@@ -0,0 +1,154 @@
+AC_PREREQ([2.59])
+
+# Catch some macros that are not expanded.
+m4_pattern_forbid([^AC_LIBLTDL_])
+m4_pattern_forbid([^DYN_])
+m4_pattern_allow([^DYN_FIXTURES$])
+m4_pattern_forbid([^ERB$])
+m4_pattern_forbid([^RBCONFIG$])
+
+## ---------------- ##
+## Package set up. ##
+## ---------------- ##
+
+AC_INIT([LRDE C++ Static-Dynamic bridge], [0.1],
+ [nicolas.pouillard(a)lrde.epita.fr, damien.thivolle(a)lrde.epita.fr] [dyn])
+
+# Auxiliary files.
+AC_CONFIG_AUX_DIR([_config])
+
+# Automake.
+AM_INIT_AUTOMAKE([1.9 foreign check-news dist-bzip2 -Wall nostdinc])
+
+
+## --------------------- ##
+## C++ Compiler Set up. ##
+## --------------------- ##
+
+# Look for a C++ compiler.
+AC_LANG([C++])
+AC_PROG_CXX
+
+# Speed the compilation up.
+if test "$GXX" = yes; then
+ CXXFLAGS="$CXXFLAGS -pipe"
+fi
+
+# Use good warnings.
+DYN_CXX_WARNINGS([[-Wall],
+ [-W],
+ [-Wcast-align],
+ [-Wcast-qual],
+ [-Wformat],
+ [-Wmissing-prototypes],
+ [-Wstrict-prototypes],
+ [-Wwrite-strings],
+ [-Wbad-function-cast],
+ [-Wmissing-declarations],
+ [-Wnested-externs],
+ [-Werror]])
+
+## -------- ##
+## Libtool. ##
+## -------- ##
+
+# Configure libltdl
+AC_CONFIG_SUBDIRS(libltdl)
+
+AC_DISABLE_STATIC
+# Use the installable version of ltdl
+
+# AC_LIBLTDL_INSTALLABLE
+# INSTALL_LTDL
+
+AC_LIBLTDL_CONVENIENCE
+
+# Check for dlopen support
+AC_LIBTOOL_DLOPEN
+# We don't need static libraries, speed the compilation up.
+AC_DISABLE_STATIC
+# Configure libtool
+AC_PROG_LIBTOOL
+
+AC_SUBST(INCLTDL)
+AC_SUBST(LIBLTDL)
+
+dnl ## ------ ##
+dnl ## Swig. ##
+dnl ## ------ ##
+
+dnl AC_ARG_WITH([swig],
+ dnl [AC_HELP_STRING([--with-swig],
+ dnl [require Swig modules (defaults to auto)])],
+ dnl [],
+ dnl [with_swig=auto])
+
+dnl if test x$with_swig != xno; then
+ dnl has_swig=yes
+
+ dnl # Check for python and swig
+
+ dnl AC_PROG_SWIG([1.3.24])
+ dnl if (eval "$SWIG -version") >/dev/null 2>&1; then :; else
+ dnl has_swig=no
+ dnl fi
+
+ dnl case $with_swig:$has_swig in
+ dnl yes:no)
+ dnl AC_MSG_ERROR([SWIG 1.3.24 is required.
+ dnl Use `--without-swig' to disable SWIG modules.]);;
+ dnl esac
+dnl fi
+
+dnl AC_MSG_RESULT([$has_swig])
+
+my_abs_srcdir=`cd $srcdir && pwd`
+
+# FIXME: Remove me when function_loader will be pure C++
+AC_SUBST([DYNDIR], [$my_abs_srcdir/src])
+
+AC_SUBST([DYN_FIXTURES], [$my_abs_srcdir/test/fixtures])
+
+# Make the proper link to the olena-proto-stl-style in test
+AC_SUBST([OLENA_PROTO_STL_STYLE], [$my_abs_srcdir/test/olena/proto-stl-style])
+
+AC_SUBST([LIBERTYARG],
+ $my_abs_srcdir/$(ERB([lib/libiberty-<%= RUBY_PLATFORM %>.la])))
+
+
+## ------------------- ##
+## Ruby Configuration. ##
+## ------------------- ##
+
+# Make available Config::CONFIG
+# AC_DEFINE and AC_SUBST everything in this hash
+# All keys are prefixed by RUBY_.
+RBCONFIG()
+
+# ...
+echo $srcdir/config/local-config.rb.in
+MK_LOCAL_CONFIG_RB_IN([$srcdir/_config/local-config.rb.in])
+
+## --------------- ##
+## Configuration. ##
+## --------------- ##
+
+# Ask for config.h.
+AM_CONFIG_HEADER([_config/config.h])
+
+# Ask for the Makefile creations.
+AC_CONFIG_FILES([
+ Makefile
+ bin/Makefile
+ bin/dyn-config
+ src/Makefile
+ src/config.hh
+ data/Makefile
+ config/Makefile
+ _config/local-config.rb
+ test/Makefile
+ test/vaucanson/Makefile
+], [chmod +x bin/dyn-config])
+
+# Instantiate the output files.
+AC_OUTPUT
diff --git a/dynamic-use-of-static-c++/data/Makefile.am b/dynamic-use-of-static-c++/data/Makefile.am
new file mode 100644
index 0000000..61882d7
--- /dev/null
+++ b/dynamic-use-of-static-c++/data/Makefile.am
@@ -0,0 +1,33 @@
+# Do not install me
+lib_LTLIBRARIES = libdyn_function.la
+libdyn_function_la_LDFLAGS = `dyn-config --libtool-libs`
+libdyn_function_la_CXXFLAGS = `dyn-config --cflags`
+libdyn_function_la_SOURCES = function.cc
+BUILT_SOURCES = function.cc
+CLEANFILES = function.cc
+SUBDIRS =
+
+pkgdata_DATA = Makefile.template Makefile.repository
+
+Makefile.template: Makefile
+ cat $< | \
+ sed -e 's|^srcdir = .*|srcdir = '`cd $(srcdir) && pwd`'|' \
+ -e 's|^top_srcdir = .*|top_srcdir = '`cd $(top_srcdir) && pwd`'|' \
+ -e 's|^top_builddir = .*|top_builddir = '`cd $(top_builddir) && pwd`'|' \
+ -e 's|^pkgdata_DATA = .*|pkgdata_DATA = |' \
+ -e 's|^CLEANFILES = .*|CLEANFILES = |' \
+ -e 's|^Makefile: |Makefile.old: |' \
+ -e 's|^VPATH = .*|VPATH = .|' > $@
+
+Makefile.repository: Makefile
+ cat $< | \
+ sed -e 's|^srcdir = .*|srcdir = '`cd $(srcdir) && pwd`'|' \
+ -e 's|^top_srcdir = .*|top_srcdir = '`cd $(top_srcdir) && pwd`'|' \
+ -e 's|^top_builddir = .*|top_builddir = '`cd $(top_builddir) && pwd`'|' \
+ -e 's|^pkgdata_DATA = .*|pkgdata_DATA = |' \
+ -e 's|^CLEANFILES = .*|CLEANFILES = make.out|' \
+ -e 's|^lib_LTLIBRARIES = .*|lib_LTLIBRARIES = |' \
+ -e 's|^BUILT_SOURCES = .*|BUILT_SOURCES = |' \
+ -e 's/^SUBDIRS = .*/SUBDIRS = $$(shell ls | grep -v Makefile)/' \
+ -e 's|^Makefile: |Makefile.old: |' \
+ -e 's|^VPATH = .*|VPATH = .|' | grep -v '^include ' > $@
diff --git a/dynamic-use-of-static-c++/data/function.cc b/dynamic-use-of-static-c++/data/function.cc
new file mode 100644
index 0000000..e42cbed
--- /dev/null
+++ b/dynamic-use-of-static-c++/data/function.cc
@@ -0,0 +1,5 @@
+#include "dyn-light.hh"
+int foo()
+{
+ return 42;
+}
diff --git a/dynamic-use-of-static-c++/lib/.libs/libiberty-i486-linux.a b/dynamic-use-of-static-c++/lib/.libs/libiberty-i486-linux.a
new file mode 100644
index 0000000..1731b1e
Binary files /dev/null and b/dynamic-use-of-static-c++/lib/.libs/libiberty-i486-linux.a differ
diff --git a/dynamic-use-of-static-c++/lib/.libs/libiberty-powerpc-darwin.a b/dynamic-use-of-static-c++/lib/.libs/libiberty-powerpc-darwin.a
new file mode 100644
index 0000000..432b22f
Binary files /dev/null and b/dynamic-use-of-static-c++/lib/.libs/libiberty-powerpc-darwin.a differ
diff --git a/dynamic-use-of-static-c++/lib/libiberty-i486-linux.la b/dynamic-use-of-static-c++/lib/libiberty-i486-linux.la
new file mode 100644
index 0000000..6dfe41a
--- /dev/null
+++ b/dynamic-use-of-static-c++/lib/libiberty-i486-linux.la
@@ -0,0 +1,35 @@
+# libiberty.la - a libtool library file
+# Generated by ltmain.sh - GNU libtool 1.5.18 (1.1220.2.246 2005/05/16 10:00:18)
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname=''
+
+# Names of this library.
+library_names=''
+
+# The name of the static archive.
+old_library='libiberty-i486-linux.a'
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Version information for libiberty.
+current=
+age=
+revision=
+
+# Is this an already installed library?
+installed=no
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir=''
diff --git a/dynamic-use-of-static-c++/lib/libiberty-powerpc-darwin.la b/dynamic-use-of-static-c++/lib/libiberty-powerpc-darwin.la
new file mode 100644
index 0000000..b9f9449
--- /dev/null
+++ b/dynamic-use-of-static-c++/lib/libiberty-powerpc-darwin.la
@@ -0,0 +1,35 @@
+# libiberty.la - a libtool library file
+# Generated by ltmain.sh - GNU libtool 1.5.18 (1.1220.2.246 2005/05/16 10:00:18)
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname=''
+
+# Names of this library.
+library_names=''
+
+# The name of the static archive.
+old_library='libiberty-powerpc-darwin.a'
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Version information for libiberty.
+current=
+age=
+revision=
+
+# Is this an already installed library?
+installed=no
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir=''
diff --git a/dynamic-use-of-static-c++/lib/libiberty-powerpc-darwin8.3.0.la b/dynamic-use-of-static-c++/lib/libiberty-powerpc-darwin8.3.0.la
new file mode 100644
index 0000000..b9f9449
--- /dev/null
+++ b/dynamic-use-of-static-c++/lib/libiberty-powerpc-darwin8.3.0.la
@@ -0,0 +1,35 @@
+# libiberty.la - a libtool library file
+# Generated by ltmain.sh - GNU libtool 1.5.18 (1.1220.2.246 2005/05/16 10:00:18)
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname=''
+
+# Names of this library.
+library_names=''
+
+# The name of the static archive.
+old_library='libiberty-powerpc-darwin.a'
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Version information for libiberty.
+current=
+age=
+revision=
+
+# Is this an already installed library?
+installed=no
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=no
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir=''
diff --git a/dynamic-use-of-static-c++/src/Makefile.am b/dynamic-use-of-static-c++/src/Makefile.am
new file mode 100644
index 0000000..d64c2ea
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/Makefile.am
@@ -0,0 +1,79 @@
+include_HEADERS = dyn-all.hh dyn-light.hh
+lib_LTLIBRARIES = libdyn.la
+
+ERB = ruby $(top_srcdir)/config/erbx
+
+dyn_light_hh_DEPENDECIES = \
+ $(srcdir)/name_of.hh \
+ function.hh \
+ all_methods.hh \
+ data.hh \
+ $(srcdir)/policy.hh
+
+dyn_all_hh_DEPENDECIES = \
+ config.hh \
+ $(srcdir)/name_of.hh \
+ function.hh \
+ all_methods.hh \
+ data.hh \
+ $(srcdir)/data.hxx \
+ $(srcdir)/function_loader.hh \
+ $(srcdir)/dyn.hh
+
+BUILT_SOURCES = \
+ dyn-all.hh dyn-light.hh \
+ all_methods.hh all_methods.cc \
+ function.hh function.cc \
+ data.hh config.hh
+
+libdyn_la_SOURCES = \
+ dyn.hh \
+ data.hh data.hxx data.cc \
+ all_methods.hh all_methods.cc \
+ function.hh function.cc \
+ function_loader.hh function_loader.cc \
+ name_of.hh name_of.cc \
+ policy.hh policy.cc \
+ ruby_stream.hh ruby_stream.cc \
+ ansidecl.h demangle.h config.hh
+
+libdyn_la_LIBADD = @LIBERTYARG@ @RUBY_LIBRUBYARG_SHARED@ \
+ $(LIBLTDL)
+
+libdyn_la_DEPENDENCIES = $(LIBLTDL)
+
+libdyn_la_CPPFLAGS = $(LTDLINCL) \
+ -I$(top_builddir) \
+ -I$(srcdir) -I. -I@RUBY_topdir@
+
+libdyn_la_CXXFLAGS = $(WARNING_CXXFLAGS)
+
+libdyn_la_LDFLAGS = -version-info 0:1:0
+
+CLEANFILES = $(BUILT_SOURCES)
+
+
+#############
+### RULES ###
+#############
+
+cut_local_includes = grep -v '^.[\t ]*include[\t ]*".*"'
+
+dyn-all.hh: $(dyn_all_hh_DEPENDECIES)
+ rm -f $@
+ echo "// Generated: do not edit by hand!" > $@
+ echo "#define DYN_FULL_IMPLEMENTATION" >> $@
+ cat $(dyn_all_hh_DEPENDECIES) | $(cut_local_includes) >> $@
+ chmod -w $@
+
+dyn-light.hh: $(dyn_light_hh_DEPENDECIES)
+ rm -f $@
+ echo "// Generated: do not edit by hand!" > $@
+ cat $(dyn_light_hh_DEPENDECIES) | $(cut_local_includes) >> $@
+ chmod -w $@
+
+%.hh: %.erb.hh
+ $(ERB) -i $< -o $@
+
+%.cc: %.erb.cc
+ $(ERB) -i $< -o $@
diff --git a/dynamic-use-of-static-c++/src/all_methods.erb.cc b/dynamic-use-of-static-c++/src/all_methods.erb.cc
new file mode 100644
index 0000000..ae973f3
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/all_methods.erb.cc
@@ -0,0 +1,37 @@
+#ifndef DYN_ALL_METHODS_CC
+# define DYN_ALL_METHODS_CC
+
+# define DYN_FULL_IMPLEMENTATION
+# include "all_methods.hh"
+# include "data.hh"
+# include "function.hh"
+
+namespace dyn
+{
+
+<%- (DYN_MAX_ARGUMENTS - 1).times do |i| -%>
+ <%- arguments = (0 .. i - 1).map { |j| "const data& arg#{j}" } -%>
+ <%- objects = (0 .. i - 1).map { |j| "arg#{j}" } -%>
+
+ data
+ all_methods::send (<%= (['const std::string& meth_name'] + arguments).join(', ') %>) const
+ {
+ meth m(meth_name);
+ return m(<%= (['self()'] + objects).join(', ') %>);
+ }
+
+ <%- ALL_METHODS.each do |meth_name, includes| -%>
+
+ data
+ all_methods::<%= meth_name %> (<%= arguments.join(', ') %>) const
+ {
+ meth m("<%= meth_name %>", "<%= includes.join(':') %>");
+ return m(<%= (['self()'] + objects).join(', ') %>);
+ }
+
+ <%- end -%>
+<%- end -%>
+
+}
+
+#endif // !DYN_ALL_METHODS_CC
diff --git a/dynamic-use-of-static-c++/src/all_methods.erb.hh b/dynamic-use-of-static-c++/src/all_methods.erb.hh
new file mode 100644
index 0000000..8f67a80
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/all_methods.erb.hh
@@ -0,0 +1,37 @@
+#ifndef DYN_ALL_METHODS_HH
+# define DYN_ALL_METHODS_HH
+
+# include <string>
+
+namespace dyn
+{
+ struct data;
+
+ struct all_methods
+ {
+
+ virtual const data& self() const = 0;
+ virtual data& self() = 0;
+
+ virtual ~all_methods() {};
+
+# ifdef DYN_FULL_IMPLEMENTATION
+<%- (DYN_MAX_ARGUMENTS - 1).times do |i| -%>
+ <%- arguments = (0 .. i - 1).map { |j| "const data& arg#{j}" } -%>
+ <%- ALL_METHODS.each do |meth, includes| -%>
+
+ data <%= meth %>(<%= arguments.join(', ') %>) const;
+
+ <%- end -%>
+
+ data send(<%= (['const std::string& meth_name'] + arguments).join(', ') %>) const;
+
+ <%- end -%>
+
+# endif
+
+ };
+
+}
+
+#endif // !DYN_ALL_METHODS_HH
diff --git a/dynamic-use-of-static-c++/src/ansidecl.h b/dynamic-use-of-static-c++/src/ansidecl.h
new file mode 100644
index 0000000..f8f2d73
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/ansidecl.h
@@ -0,0 +1,326 @@
+/* ANSI and traditional C compatability macros
+ Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* ANSI and traditional C compatibility macros
+
+ ANSI C is assumed if __STDC__ is #defined.
+
+ Macro ANSI C definition Traditional C definition
+ ----- ---- - ---------- ----------- - ----------
+ ANSI_PROTOTYPES 1 not defined
+ PTR `void *' `char *'
+ PTRCONST `void *const' `char *'
+ LONG_DOUBLE `long double' `double'
+ const not defined `'
+ volatile not defined `'
+ signed not defined `'
+ VA_START(ap, var) va_start(ap, var) va_start(ap)
+
+ Note that it is safe to write "void foo();" indicating a function
+ with no return value, in all K+R compilers we have been able to test.
+
+ For declaring functions with prototypes, we also provide these:
+
+ PARAMS ((prototype))
+ -- for functions which take a fixed number of arguments. Use this
+ when declaring the function. When defining the function, write a
+ K+R style argument list. For example:
+
+ char *strcpy PARAMS ((char *dest, char *source));
+ ...
+ char *
+ strcpy (dest, source)
+ char *dest;
+ char *source;
+ { ... }
+
+
+ VPARAMS ((prototype, ...))
+ -- for functions which take a variable number of arguments. Use
+ PARAMS to declare the function, VPARAMS to define it. For example:
+
+ int printf PARAMS ((const char *format, ...));
+ ...
+ int
+ printf VPARAMS ((const char *format, ...))
+ {
+ ...
+ }
+
+ For writing functions which take variable numbers of arguments, we
+ also provide the VA_OPEN, VA_CLOSE, and VA_FIXEDARG macros. These
+ hide the differences between K+R <varargs.h> and C89 <stdarg.h> more
+ thoroughly than the simple VA_START() macro mentioned above.
+
+ VA_OPEN and VA_CLOSE are used *instead of* va_start and va_end.
+ Immediately after VA_OPEN, put a sequence of VA_FIXEDARG calls
+ corresponding to the list of fixed arguments. Then use va_arg
+ normally to get the variable arguments, or pass your va_list object
+ around. You do not declare the va_list yourself; VA_OPEN does it
+ for you.
+
+ Here is a complete example:
+
+ int
+ printf VPARAMS ((const char *format, ...))
+ {
+ int result;
+
+ VA_OPEN (ap, format);
+ VA_FIXEDARG (ap, const char *, format);
+
+ result = vfprintf (stdout, format, ap);
+ VA_CLOSE (ap);
+
+ return result;
+ }
+
+
+ You can declare variables either before or after the VA_OPEN,
+ VA_FIXEDARG sequence. Also, VA_OPEN and VA_CLOSE are the beginning
+ and end of a block. They must appear at the same nesting level,
+ and any variables declared after VA_OPEN go out of scope at
+ VA_CLOSE. Unfortunately, with a K+R compiler, that includes the
+ argument list. You can have multiple instances of VA_OPEN/VA_CLOSE
+ pairs in a single function in case you need to traverse the
+ argument list more than once.
+
+ For ease of writing code which uses GCC extensions but needs to be
+ portable to other compilers, we provide the GCC_VERSION macro that
+ simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various
+ wrappers around __attribute__. Also, __extension__ will be #defined
+ to nothing if it doesn't work. See below.
+
+ This header also defines a lot of obsolete macros:
+ CONST, VOLATILE, SIGNED, PROTO, EXFUN, DEFUN, DEFUN_VOID,
+ AND, DOTS, NOARGS. Don't use them. */
+
+#ifndef _ANSIDECL_H
+#define _ANSIDECL_H 1
+
+/* Every source file includes this file,
+ so they will all get the switch for lint. */
+/* LINTLIBRARY */
+
+/* Using MACRO(x,y) in cpp #if conditionals does not work with some
+ older preprocessors. Thus we can't define something like this:
+
+#define HAVE_GCC_VERSION(MAJOR, MINOR) \
+ (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR)))
+
+and then test "#if HAVE_GCC_VERSION(2,7)".
+
+So instead we use the macro below and test it against specific values. */
+
+/* This macro simplifies testing whether we are using gcc, and if it
+ is of a particular minimum version. (Both major & minor numbers are
+ significant.) This macro will evaluate to 0 if we are not using
+ gcc at all. */
+#ifndef GCC_VERSION
+#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
+#endif /* GCC_VERSION */
+
+#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) || (defined(__alpha) && defined(__cplusplus))
+/* All known AIX compilers implement these things (but don't always
+ define __STDC__). The RISC/OS MIPS compiler defines these things
+ in SVR4 mode, but does not define __STDC__. */
+/* eraxxon(a)alumni.rice.edu: The Compaq C++ compiler, unlike many other
+ C++ compilers, does not define __STDC__, though it acts as if this
+ was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */
+
+#define ANSI_PROTOTYPES 1
+#define PTR void *
+#define PTRCONST void *const
+#define LONG_DOUBLE long double
+
+#define PARAMS(ARGS) ARGS
+#define VPARAMS(ARGS) ARGS
+#define VA_START(VA_LIST, VAR) va_start(VA_LIST, VAR)
+
+/* variadic function helper macros */
+/* "struct Qdmy" swallows the semicolon after VA_OPEN/VA_FIXEDARG's
+ use without inhibiting further decls and without declaring an
+ actual variable. */
+#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP, VAR); { struct Qdmy
+#define VA_CLOSE(AP) } va_end(AP); }
+#define VA_FIXEDARG(AP, T, N) struct Qdmy
+
+#undef const
+#undef volatile
+#undef signed
+
+/* inline requires special treatment; it's in C99, and GCC >=2.7 supports
+ it too, but it's not in C89. */
+#undef inline
+#if __STDC_VERSION__ > 199901L
+/* it's a keyword */
+#else
+# if GCC_VERSION >= 2007
+# define inline __inline__ /* __inline__ prevents -pedantic warnings */
+# else
+# define inline /* nothing */
+# endif
+#endif
+
+/* These are obsolete. Do not use. */
+#ifndef IN_GCC
+#define CONST const
+#define VOLATILE volatile
+#define SIGNED signed
+
+#define PROTO(type, name, arglist) type name arglist
+#define EXFUN(name, proto) name proto
+#define DEFUN(name, arglist, args) name(args)
+#define DEFUN_VOID(name) name(void)
+#define AND ,
+#define DOTS , ...
+#define NOARGS void
+#endif /* ! IN_GCC */
+
+#else /* Not ANSI C. */
+
+#undef ANSI_PROTOTYPES
+#define PTR char *
+#define PTRCONST PTR
+#define LONG_DOUBLE double
+
+#define PARAMS(args) ()
+#define VPARAMS(args) (va_alist) va_dcl
+#define VA_START(va_list, var) va_start(va_list)
+
+#define VA_OPEN(AP, VAR) { va_list AP; va_start(AP); { struct Qdmy
+#define VA_CLOSE(AP) } va_end(AP); }
+#define VA_FIXEDARG(AP, TYPE, NAME) TYPE NAME = va_arg(AP, TYPE)
+
+/* some systems define these in header files for non-ansi mode */
+#undef const
+#undef volatile
+#undef signed
+#undef inline
+#define const
+#define volatile
+#define signed
+#define inline
+
+#ifndef IN_GCC
+#define CONST
+#define VOLATILE
+#define SIGNED
+
+#define PROTO(type, name, arglist) type name ()
+#define EXFUN(name, proto) name()
+#define DEFUN(name, arglist, args) name arglist args;
+#define DEFUN_VOID(name) name()
+#define AND ;
+#define DOTS
+#define NOARGS
+#endif /* ! IN_GCC */
+
+#endif /* ANSI C. */
+
+/* Define macros for some gcc attributes. This permits us to use the
+ macros freely, and know that they will come into play for the
+ version of gcc in which they are supported. */
+
+#if (GCC_VERSION < 2007)
+# define __attribute__(x)
+#endif
+
+/* Attribute __malloc__ on functions was valid as of gcc 2.96. */
+#ifndef ATTRIBUTE_MALLOC
+# if (GCC_VERSION >= 2096)
+# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define ATTRIBUTE_MALLOC
+# endif /* GNUC >= 2.96 */
+#endif /* ATTRIBUTE_MALLOC */
+
+/* Attributes on labels were valid as of gcc 2.93. */
+#ifndef ATTRIBUTE_UNUSED_LABEL
+# if (GCC_VERSION >= 2093)
+# define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED
+# else
+# define ATTRIBUTE_UNUSED_LABEL
+# endif /* GNUC >= 2.93 */
+#endif /* ATTRIBUTE_UNUSED_LABEL */
+
+#ifndef ATTRIBUTE_UNUSED
+#define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#endif /* ATTRIBUTE_UNUSED */
+
+#ifndef ATTRIBUTE_NORETURN
+#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#endif /* ATTRIBUTE_NORETURN */
+
+/* Attribute `nonnull' was valid as of gcc 3.3. */
+#ifndef ATTRIBUTE_NONNULL
+# if (GCC_VERSION >= 3003)
+# define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))
+# else
+# define ATTRIBUTE_NONNULL(m)
+# endif /* GNUC >= 3.3 */
+#endif /* ATTRIBUTE_NONNULL */
+
+/* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL.
+ This was the case for the `printf' format attribute by itself
+ before GCC 3.3, but as of 3.3 we need to add the `nonnull'
+ attribute to retain this behavior. */
+#ifndef ATTRIBUTE_PRINTF
+#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m)
+#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
+#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
+#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
+#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)
+#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
+#endif /* ATTRIBUTE_PRINTF */
+
+/* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL. A
+ NULL format specifier was allowed as of gcc 3.3. */
+#ifndef ATTRIBUTE_NULL_PRINTF
+# if (GCC_VERSION >= 3003)
+# define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
+# else
+# define ATTRIBUTE_NULL_PRINTF(m, n)
+# endif /* GNUC >= 3.3 */
+# define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2)
+# define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3)
+# define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4)
+# define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5)
+# define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6)
+#endif /* ATTRIBUTE_NULL_PRINTF */
+
+/* We use __extension__ in some places to suppress -pedantic warnings
+ about GCC extensions. This feature didn't work properly before
+ gcc 2.8. */
+#if GCC_VERSION < 2008
+#define __extension__
+#endif
+
+/* Bootstrap support: Adjust certain macros defined by Autoconf,
+ which are only valid for the stage1 compiler. If we detect
+ a modern version of GCC, we are probably in stage2 or beyond,
+ so unconditionally reset the values. Note that const, inline,
+ etc. have been dealt with above. */
+#if (GCC_VERSION >= 2007)
+# ifndef HAVE_LONG_DOUBLE
+# define HAVE_LONG_DOUBLE 1
+# endif
+#endif /* GCC >= 2.7 */
+
+#endif /* ansidecl.h */
diff --git a/dynamic-use-of-static-c++/src/config.hh.in b/dynamic-use-of-static-c++/src/config.hh.in
new file mode 100644
index 0000000..9165c7c
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/config.hh.in
@@ -0,0 +1,3 @@
+#define DYNDIR "@DYNDIR@"
+#define DYN_FIXTURES "@DYN_FIXTURES@"
+#define OLENA_PROTO_STL_STYLE "@OLENA_PROTO_STL_STYLE@"
diff --git a/dynamic-use-of-static-c++/src/cxx_symbols.rb b/dynamic-use-of-static-c++/src/cxx_symbols.rb
new file mode 100644
index 0000000..cdf52bd
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/cxx_symbols.rb
@@ -0,0 +1,115 @@
+class SimpleSymbol
+ attr_reader :code
+ def initialize ( code )
+ @code = code
+ end
+ def to_s
+ @code.to_s
+ end
+end # class SimpleSymbol
+
+class EncodedSymbol
+ attr_reader :name, :code, :cxx_char, :patt
+ @@codes ||= []
+ def initialize ( name, code, cxx_char=nil )
+ @name = name
+ @code = (code.is_a? Integer)? code.chr.to_sym : code
+ if cxx_char.is_a? Regexp
+ @patt = cxx_char
+ @cxx_char = " #@name "
+ else
+ @cxx_char = (cxx_char.is_a? Integer)? cxx_char.chr.to_sym : cxx_char
+ @patt = to_s.strip
+ end
+ raise if @@codes.include? @code
+ @@codes << self
+ end
+ def self.[] ( arg )
+ @@codes.find { |x| x.code == arg.to_sym }
+ end
+ def to_s
+ (@cxx_char || " #@name ").to_s
+ end
+ @@operators ||=
+ {
+ '<<' => 'push',
+ '>>' => 'pop',
+ '<<=' => 'push_assign',
+ '>>=' => 'pop_assign',
+ '=' => 'assign',
+ '==' => 'equal',
+ '!=' => 'not_equal',
+ '<=' => 'less_or_equal',
+ '<' => 'less',
+ '>=' => 'greater_or_equal',
+ '>' => 'greater',
+ '++' => 'incr',
+ '--' => 'decr',
+ '()' => 'paren',
+ '[]' => 'square_brackets',
+ '->' => 'arrow',
+ '!' => 'bang',
+ '~' => 'tilde',
+ '&' => 'ampersand',
+ '->*' => 'arrow_deref',
+ '*' => 'star',
+ '/' => 'slash',
+ '%' => 'percent',
+ '+' => 'plus',
+ '-' => 'minus',
+ '^' => 'xor',
+ '|' => 'bar',
+ '&&' => 'ampersand_ampersand',
+ '||' => 'bar_bar',
+ '+=' => 'plus_assign',
+ '-=' => 'minus_assign',
+ '*=' => 'star_assign',
+ '/=' => 'slash_assign',
+ '%=' => 'percent_assign',
+ '&=' => 'ampersand_assign',
+ '^=' => 'xor_assign',
+ '|=' => 'bar_assign',
+ ',' => 'comma'
+ }
+ def self.encode ( str )
+ result = str.gsub '_', '_U_'
+ result.gsub!(/operator\s*/, 'operator')
+ @@codes.each do |v|
+ next if v.code == :U
+ result.gsub!(v.patt, "_#{v.code}_")
+ end
+ result.gsub!(/\s*/, '')
+ result.gsub!(/operator\s*([a-zA-Z]+)/, 'operator_convert_\1')
+ result.gsub!(/\s*/, '')
+ result.gsub!(/operator\s*([a-zA-Z]+)/, 'OPERATOR_CONVERT_\1')
+ result.gsub!(/\s*/, '')
+ result.gsub!(/_+/, '_')
+ result.gsub!(/^_/, '')
+ result.gsub!(/_$/, '')
+ result
+ end
+ def self.enc ( name, code, cxx_char=nil )
+ EncodedSymbol.new(name, code, cxx_char)
+ end
+ @@operators.to_a.sort{|x,y| y.first.size <=> x.first.size}.each do |k, v|
+ enc "operator#{v}".to_sym, "operator#{v}".upcase.gsub('_', '').to_sym, "operator#{k}"
+ end
+ enc :const, :CONST, /\bconst\b/
+ enc :underscore, :U, ?_
+ enc :slash, :S, ?/
+ enc :dot, :D, ?.
+ enc :function, :F
+ enc :left, :L, '< '
+ enc :right, :R, ' >'
+ enc :ref, :REF, ?&
+ enc :ptr, :PTR, ?*
+ enc :namespace, :N, '::'
+ enc :path_sep, :P, ':'
+ enc :comma, :C, ', '
+ enc :right_sqr_bra, :RSB, ' ['
+ enc :left_sqr_bra, :LSB, ']'
+end # class EncodedSymbol
+
+def mangle ( aString )
+ EncodedSymbol.encode(aString)
+end
diff --git a/dynamic-use-of-static-c++/src/data.cc b/dynamic-use-of-static-c++/src/data.cc
new file mode 100644
index 0000000..3af1dcd
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/data.cc
@@ -0,0 +1,128 @@
+#ifndef DYN_DATA_CC
+# define DYN_DATA_CC
+
+# include "dyn.hh"
+# include "data.hh"
+
+# ifdef DYNDEBUG
+# include <iostream>
+# else
+# include <fstream>
+# endif
+
+namespace dyn {
+
+# ifdef DYNDEBUG
+ std::ostream& logger(std::cerr);
+# else
+# ifdef NDEBUG
+ std::ofstream dev_null("/dev/null");
+ std::ostream& logger(dev_null);
+# else
+ std::ofstream dyn_log("dyn.log");
+ std::ostream& logger(dyn_log);
+# endif
+# endif
+
+ const NilClass nil_object(0);
+ data_nil* nil_proxy = new data_nil(nil_object);
+ const data nil;
+
+ namespace internal {
+ op operator_push("<<");
+ op operator_pop(">>");
+ op operator_incr("++");
+ op operator_decr("--");
+ op operator_plus("+");
+ op operator_star("*");
+ op operator_equal("==");
+ op operator_not_equal("!=");
+ meth operator_square_brackets("operator[]");
+ }
+
+
+ meth data::method(const std::string& method_name)
+ {
+ meth m(method_name, "*", this);
+ return m;
+ }
+
+ const data& data::operator*() const
+ {
+ return internal::operator_star(*this).self();
+ }
+
+ data data::operator*()
+ {
+ return internal::operator_star(*this);
+ }
+
+ data data::operator[](const data& at)
+ {
+ return internal::operator_square_brackets(*this, at);
+ }
+
+ data::data(const language::var& rhs) : proxy_(0)
+ {
+ logger << "data(const language::var& rhs) [ rhs.type() = " << rhs.type() << " ]" << std::endl;
+ assign(rhs);
+ }
+
+ data::data(const language::val& rhs) : proxy_(0)
+ {
+ logger << "data(const language::val& rhs) [ rhs.type() = " << rhs.type() << " ]" << std::endl;
+ assign(rhs);
+ }
+
+ data::data(language::var& rhs) : proxy_(0)
+ {
+ logger << "data(language::var& rhs) [ rhs.type() = " << rhs.type() << " ]" << std::endl;
+ assign(rhs);
+ }
+
+ data::data(language::val& rhs) : proxy_(0)
+ {
+ logger << "data(language::val& rhs) [ rhs.type() = " << rhs.type() << " ]" << std::endl;
+ assign(rhs); // FIXME should copy it's contents not just the proxy
+ }
+}
+
+std::ostream& operator<<(std::ostream& ostr, const dyn::data& d)
+{
+ return dyn::internal::operator_push(ostr, d).get_ref_on<std::ostream>();
+}
+
+std::istream& operator>>(std::istream& istr, dyn::data& d)
+{
+ return dyn::internal::operator_pop(istr, d).get_ref_on<std::istream>();
+}
+
+dyn::data& operator++(dyn::data& d)
+{
+ dyn::internal::operator_incr(d);
+ return d;
+}
+
+dyn::data& operator--(dyn::data& d)
+{
+ dyn::internal::operator_decr(d);
+ return d;
+}
+
+bool operator!=(const dyn::data& lhs, const dyn::data& rhs)
+{
+ return dyn::internal::operator_not_equal(lhs, rhs);
+}
+
+bool operator==(const dyn::data& lhs, const dyn::data& rhs)
+{
+ return dyn::internal::operator_equal(lhs, rhs);
+}
+
+
+dyn::data operator+(const dyn::data& lhs, const dyn::data& rhs)
+{
+ return dyn::internal::operator_plus(lhs, rhs);
+}
+
+#endif
diff --git a/dynamic-use-of-static-c++/src/data.erb.hh b/dynamic-use-of-static-c++/src/data.erb.hh
new file mode 100644
index 0000000..b4c14e1
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/data.erb.hh
@@ -0,0 +1,418 @@
+#ifndef DYN_DATA_HH
+# define DYN_DATA_HH
+
+// FIXME: rename me without the .erb
+
+# include <string>
+# include <cassert>
+# include "function.hh"
+# include "name_of.hh"
+# include "all_methods.hh"
+
+namespace dyn {
+
+ extern std::ostream& logger;
+
+ namespace language
+ {
+ struct val;
+ struct var;
+ }
+
+ namespace policy
+ {
+ enum type
+ {
+ none = 0,
+ is_const = 1,
+ is_ref = 2,
+ is_ptr = 4,
+ is_pod = 8,
+ is_void = 16
+ };
+ }
+ struct proxy_tag;
+
+ // data --> abstract_data
+ // ^
+ // |
+ // data_proxy<T> --> T
+
+
+ // abstract_data
+
+ struct abstract_data
+ {
+ virtual abstract_data* clone() const = 0;
+ virtual abstract_data* const_clone() const { return clone(); }
+ virtual std::string proxy_type() const = 0;
+ virtual std::string type() const = 0;
+ virtual ~abstract_data() {}
+ };
+
+ // data_proxy<T>
+
+ template <class T>
+ struct data_proxy : public abstract_data
+ {
+# define gen_ctor \
+ data_proxy() \
+ { \
+ logger << "ctor: " << proxy_type() << std::endl; \
+ }
+
+# define gen_proxy_type \
+ virtual std::string proxy_type() const \
+ { \
+ return mlc_name_of(*this); \
+ }
+
+ gen_proxy_type
+
+ template <typename V>
+ operator V() const
+ {
+ V ret(const_ref());
+ return ret;
+ }
+
+ virtual std::string type() const
+ {
+ return mlc_name_of(const_ref());
+ }
+
+ virtual const T& const_ref() const = 0;
+ };
+
+
+ // FIXME Perhaps we can use smart pointers here.
+ template <class T>
+ struct data_proxy_by_ptr : public data_proxy<T>
+ {
+ data_proxy_by_ptr(T* obj) : p_obj_(obj) { logger << "ctor: " << proxy_type() << std::endl; }
+
+ virtual data_proxy_by_ptr<T>* clone() const
+ {
+ return new data_proxy_by_ptr<T>(p_obj_);
+ }
+
+ virtual data_proxy_by_ptr<const T>* const_clone() const
+ {
+ return new data_proxy_by_ptr<const T>(p_obj_);
+ }
+
+ gen_proxy_type
+
+ T& obj()
+ {
+ assert(p_obj_);
+ return *p_obj_;
+ }
+
+ const T& obj() const
+ {
+ assert(p_obj_);
+ return *p_obj_;
+ }
+
+ virtual const T& const_ref() const { return obj(); }
+
+ protected:
+ T* p_obj_;
+ };
+
+
+ template <class T>
+ struct data_proxy_by_ref : public data_proxy<T>
+ {
+ data_proxy_by_ref(T& obj) : obj_(obj) { logger << "ctor: " << proxy_type() << std::endl; }
+
+ virtual data_proxy_by_ref<T>* clone() const
+ {
+ return new data_proxy_by_ref<T>(obj_);
+ }
+
+ virtual data_proxy_by_ref<const T>* const_clone() const
+ {
+ return new data_proxy_by_ref<const T>(obj_);
+ }
+
+ virtual const T& const_ref() const { return obj_; }
+ const T& obj() const { return obj_; }
+ T& obj() { return obj_; }
+
+ gen_proxy_type
+
+ protected:
+ T& obj_;
+ };
+
+
+ template <class T>
+ struct data_proxy_by_cpy : public data_proxy<T>
+ {
+ data_proxy_by_cpy(const T obj) : obj_(T(obj)) { logger << "ctor: " << proxy_type() << std::endl; }
+
+ virtual data_proxy_by_cpy<T>* clone() const
+ {
+ return new data_proxy_by_cpy<T>(obj_);
+ }
+
+ virtual data_proxy_by_cpy<const T>* const_clone() const
+ {
+ return new data_proxy_by_cpy<const T>(obj_);
+ }
+
+ virtual const T& const_ref() const { return obj_; }
+ const T& obj() const { return obj_; }
+ T& obj() { return obj_; }
+
+ gen_proxy_type
+
+ protected:
+ T obj_;
+ };
+
+
+ struct NilClass
+ {
+ NilClass(int) {}
+ };
+
+ struct data_nil : public data_proxy<NilClass>
+ {
+ data_nil() : nil_object_(NilClass(0)) { logger << "ctor: " << proxy_type() << std::endl; }
+ data_nil(const NilClass& nil_object) : nil_object_(nil_object) {}
+ const NilClass& const_ref() const { return nil_object_; }
+ const NilClass& obj() const { return nil_object_; }
+ virtual data_nil* clone() const { return new data_nil; }
+ gen_proxy_type
+ const NilClass nil_object_;
+ };
+
+ extern const NilClass nil_object;
+ extern data_nil* nil_proxy;
+
+ template <typename T1, typename T2>
+ T2
+ data_cast(const T1& src)
+ {
+ T2 tmp(src);
+ return tmp;
+ }
+
+ template <typename T1, typename T2>
+ void
+ data_assign(T1& lhs, const T2& rhs)
+ {
+ lhs = rhs;
+ }
+
+ // data
+
+ struct data : public all_methods
+ {
+
+ virtual const data& self() const
+ {
+ return *this;
+ }
+
+ virtual data& self()
+ {
+ return *this;
+ }
+
+ data& assign(const data& rhs)
+ {
+ if (&rhs == this) return *this;
+ if (rhs.proxy_ == 0)
+ {
+ logger << "assign(const data& rhs) [ rhs.proxy_ == 0 ]" << std::endl;
+ proxy_ = nil_proxy;
+ }
+ else
+ {
+ assert(rhs.proxy_ != proxy_);
+ // if (proxy_ != 0)
+ // delete proxy_;
+ proxy_ = rhs.proxy_->clone();
+ }
+ return *this;
+ }
+
+ data& const_assign(const data& rhs)
+ {
+ if (&rhs == this) return *this;
+ if (rhs.proxy_ == 0)
+ {
+ logger << "const_assign(const data& rhs) [ rhs.proxy_ == 0 ]" << std::endl;
+ proxy_ = nil_proxy;
+ }
+ else
+ {
+ assert(rhs.proxy_ != proxy_);
+ // if (proxy_ != 0)
+ // delete proxy_;
+ proxy_ = rhs.proxy_->const_clone();
+ }
+ return *this;
+ }
+
+ data& operator=(const data& rhs) { return assign(rhs); }
+
+ data& operator=(data& rhs) { return assign(rhs); }
+
+
+ template <typename T>
+ data& operator=(const T& rhs);
+
+
+ template <typename T>
+ T convert_to() const;
+
+
+ template <typename T>
+ T& get_ref_on();
+
+ template <typename T>
+ const T& get_ref_on() const;
+
+ std::string& const_stripping(std::string& str) const
+ {
+ size_t pos;
+ while ((pos = str.find("const ")) != std::string::npos)
+ str.erase(pos, 6);
+ while ((pos = str.find(" const")) != std::string::npos)
+ str.erase(pos, 6);
+ return str;
+ }
+
+ template <typename T>
+ operator T() const
+ {
+ std::string src_type(proxy()->type());
+ std::string dest_type(mlc_name<T>::of());
+ if (const_stripping(src_type) == const_stripping(dest_type))
+ return get_ref_on<T>();
+ else
+ return convert_to<T>();
+ }
+
+
+ ~data()
+ {
+ if (proxy_ != nil_proxy)
+ {
+ logger << "~data [ type() = " << type() << " ]" << std::endl;
+ delete proxy_;
+ proxy_ = nil_proxy;
+ }
+ }
+
+
+ std::string type() const
+ {
+ return proxy()->proxy_type();
+ }
+
+
+ data operator[](const data&);
+ const data& operator[](const data&) const;
+ data operator*();
+ const data& operator*() const;
+
+
+ abstract_data* proxy() const
+ {
+ assert(proxy_);
+ return proxy_;
+ }
+
+ bool is_const()
+ {
+ std::string type_(type());
+ return type_.find("dyn::data_proxy_by_ref<") == 0
+ && type_.rfind("const>") == type_.length() - 6;
+ }
+
+ meth method(const std::string& method_name);
+
+ data() : proxy_(nil_proxy) {}
+
+ data(abstract_data* proxy, proxy_tag*) : all_methods(), proxy_(proxy) {}
+
+ template <class T>
+ data(T& obj) : all_methods()
+ {
+ logger << "data(T& obj) [ T = " << mlc_name<T>::of() << " ]" << std::endl;
+ proxy_ = new data_proxy_by_ref<T>(obj);
+ }
+
+ template <class T>
+ data(const T& obj) : all_methods()
+ {
+ logger << "data(const T& obj) [ T = " << mlc_name<T>::of() << " ]" << std::endl;
+ proxy_ = new data_proxy_by_ref<const T>(obj);
+ }
+
+ data(language::var& rhs);
+ data(language::val& rhs);
+ data(const language::var& rhs);
+ data(const language::val& rhs);
+
+ data(data& rhs) : all_methods(), proxy_(0)
+ {
+ logger << "data(data& rhs) [ rhs.type() = " << rhs.type() << " ]" << std::endl;
+ assign(rhs);
+ }
+
+ data(const data& rhs) : all_methods(), proxy_(0)
+ {
+ logger << "data(const data& rhs) [ rhs.type() = " << rhs.type() << " ]" << std::endl;
+ assign(rhs);
+ }
+
+ protected:
+ abstract_data* proxy_;
+ };
+
+ extern const data nil;
+
+ namespace internal {
+ extern op operator_push;
+ extern op operator_pop;
+ extern op operator_incr;
+ extern op operator_decr;
+ extern op operator_plus;
+ extern op operator_star;
+ extern op operator_equal;
+ extern op operator_not_equal;
+ extern meth operator_square_brackets;
+ }
+
+}
+
+template <typename T, dyn::policy::type policy>
+struct dyn_choose_data_proxy
+{
+ typedef dyn::data_proxy_by_cpy<T> ret;
+};
+
+template <typename T>
+struct dyn_choose_data_proxy<T, dyn::policy::is_ref>
+{
+ typedef dyn::data_proxy_by_ref<T> ret;
+};
+
+template <typename T>
+struct dyn_choose_data_proxy<T, (dyn::policy::type)(dyn::policy::is_ref + dyn::policy::is_const)>
+{
+ typedef dyn::data_proxy_by_ref<const T> ret;
+};
+
+# ifdef DYN_FULL_IMPLEMENTATION
+# include "data.hxx"
+# endif
+
+#endif
diff --git a/dynamic-use-of-static-c++/src/data.hxx b/dynamic-use-of-static-c++/src/data.hxx
new file mode 100644
index 0000000..5b993a9
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/data.hxx
@@ -0,0 +1,61 @@
+#ifndef DYN_DATA_HXX
+# define DYN_DATA_HXX
+
+# include <string>
+# include <cassert>
+# include <iostream>
+
+# include "function.hh"
+# include "name_of.hh"
+
+namespace dyn {
+
+ template <typename T>
+ T data::convert_to() const
+ {
+ static fun dyn_data_cast(std::string("data_cast< ") +
+ type() + ", " + mlc_name<T>::of() + " >");
+ return dyn_data_cast(*this);
+ }
+
+
+ template <typename T>
+ T& data::get_ref_on()
+ {
+ assert(proxy_);
+ data_proxy_by_ref<T>* reinterpret_cast_returned_pointer = reinterpret_cast<data_proxy_by_ref<T>*>(proxy_);
+ assert(reinterpret_cast_returned_pointer);
+ return reinterpret_cast_returned_pointer->obj();
+ }
+
+
+ template <typename T>
+ const T& data::get_ref_on() const
+ {
+ assert(proxy_);
+ data_proxy<T>* reinterpret_cast_returned_pointer = reinterpret_cast<data_proxy<T>*>(proxy_);
+ assert(reinterpret_cast_returned_pointer);
+ return reinterpret_cast_returned_pointer->const_ref();
+ }
+
+
+ template <typename T>
+ data& data::operator=(const T& rhs)
+ {
+ assert(proxy_);
+ static fun dyn_data_assign(std::string("data_assign<") + proxy()->type() + ", " + mlc_name<T>::of() + ">");
+ dyn_data_assign(*this, rhs);
+ return *this;
+ }
+
+}
+
+std::ostream& operator<<(std::ostream& ostr, const dyn::data& d);
+std::istream& operator>>(std::istream& istr, dyn::data& d);
+dyn::data& operator++(dyn::data& d);
+dyn::data& operator--(dyn::data& d);
+bool operator!=(const dyn::data& lhs, const dyn::data& rhs);
+bool operator==(const dyn::data& lhs, const dyn::data& rhs);
+dyn::data operator+(const dyn::data& lhs, const dyn::data& rhs);
+
+#endif
diff --git a/dynamic-use-of-static-c++/src/demangle.h b/dynamic-use-of-static-c++/src/demangle.h
new file mode 100644
index 0000000..21e9dd3
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/demangle.h
@@ -0,0 +1,163 @@
+/* Defs for interface to demanglers.
+ Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002
+ Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+
+#if !defined (DEMANGLE_H)
+#define DEMANGLE_H
+
+#include "ansidecl.h"
+
+/* Options passed to cplus_demangle (in 2nd parameter). */
+
+#define DMGL_NO_OPTS 0 /* For readability... */
+#define DMGL_PARAMS (1 << 0) /* Include function args */
+#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
+#define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */
+#define DMGL_VERBOSE (1 << 3) /* Include implementation details. */
+#define DMGL_TYPES (1 << 4) /* Also try to demangle type encodings. */
+
+#define DMGL_AUTO (1 << 8)
+#define DMGL_GNU (1 << 9)
+#define DMGL_LUCID (1 << 10)
+#define DMGL_ARM (1 << 11)
+#define DMGL_HP (1 << 12) /* For the HP aCC compiler;
+ same as ARM except for
+ template arguments, etc. */
+#define DMGL_EDG (1 << 13)
+#define DMGL_GNU_V3 (1 << 14)
+#define DMGL_GNAT (1 << 15)
+
+/* If none of these are set, use 'current_demangling_style' as the default. */
+#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT)
+
+/* Enumeration of possible demangling styles.
+
+ Lucid and ARM styles are still kept logically distinct, even though
+ they now both behave identically. The resulting style is actual the
+ union of both. I.E. either style recognizes both "__pt__" and "__rf__"
+ for operator "->", even though the first is lucid style and the second
+ is ARM style. (FIXME?) */
+
+extern enum demangling_styles
+{
+ no_demangling = -1,
+ unknown_demangling = 0,
+ auto_demangling = DMGL_AUTO,
+ gnu_demangling = DMGL_GNU,
+ lucid_demangling = DMGL_LUCID,
+ arm_demangling = DMGL_ARM,
+ hp_demangling = DMGL_HP,
+ edg_demangling = DMGL_EDG,
+ gnu_v3_demangling = DMGL_GNU_V3,
+ java_demangling = DMGL_JAVA,
+ gnat_demangling = DMGL_GNAT
+} current_demangling_style;
+
+/* Define string names for the various demangling styles. */
+
+#define NO_DEMANGLING_STYLE_STRING "none"
+#define AUTO_DEMANGLING_STYLE_STRING "auto"
+#define GNU_DEMANGLING_STYLE_STRING "gnu"
+#define LUCID_DEMANGLING_STYLE_STRING "lucid"
+#define ARM_DEMANGLING_STYLE_STRING "arm"
+#define HP_DEMANGLING_STYLE_STRING "hp"
+#define EDG_DEMANGLING_STYLE_STRING "edg"
+#define GNU_V3_DEMANGLING_STYLE_STRING "gnu-v3"
+#define JAVA_DEMANGLING_STYLE_STRING "java"
+#define GNAT_DEMANGLING_STYLE_STRING "gnat"
+
+/* Some macros to test what demangling style is active. */
+
+#define CURRENT_DEMANGLING_STYLE current_demangling_style
+#define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO)
+#define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU)
+#define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID)
+#define ARM_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_ARM)
+#define HP_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_HP)
+#define EDG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_EDG)
+#define GNU_V3_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU_V3)
+#define JAVA_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_JAVA)
+#define GNAT_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNAT)
+
+/* Provide information about the available demangle styles. This code is
+ pulled from gdb into libiberty because it is useful to binutils also. */
+
+extern const struct demangler_engine
+{
+ const char *const demangling_style_name;
+ const enum demangling_styles demangling_style;
+ const char *const demangling_style_doc;
+} libiberty_demanglers[];
+
+extern char *
+cplus_demangle PARAMS ((const char *mangled, int options));
+
+extern int
+cplus_demangle_opname PARAMS ((const char *opname, char *result, int options));
+
+extern const char *
+cplus_mangle_opname PARAMS ((const char *opname, int options));
+
+/* Note: This sets global state. FIXME if you care about multi-threading. */
+
+extern void
+set_cplus_marker_for_demangling PARAMS ((int ch));
+
+extern enum demangling_styles
+cplus_demangle_set_style PARAMS ((enum demangling_styles style));
+
+extern enum demangling_styles
+cplus_demangle_name_to_style PARAMS ((const char *name));
+
+/* V3 ABI demangling entry points, defined in cp-demangle.c. */
+extern char*
+cplus_demangle_v3 PARAMS ((const char* mangled, int options));
+
+extern char*
+java_demangle_v3 PARAMS ((const char* mangled));
+
+
+enum gnu_v3_ctor_kinds {
+ gnu_v3_complete_object_ctor = 1,
+ gnu_v3_base_object_ctor,
+ gnu_v3_complete_object_allocating_ctor
+};
+
+/* Return non-zero iff NAME is the mangled form of a constructor name
+ in the G++ V3 ABI demangling style. Specifically, return an `enum
+ gnu_v3_ctor_kinds' value indicating what kind of constructor
+ it is. */
+extern enum gnu_v3_ctor_kinds
+ is_gnu_v3_mangled_ctor PARAMS ((const char *name));
+
+
+enum gnu_v3_dtor_kinds {
+ gnu_v3_deleting_dtor = 1,
+ gnu_v3_complete_object_dtor,
+ gnu_v3_base_object_dtor
+};
+
+/* Return non-zero iff NAME is the mangled form of a destructor name
+ in the G++ V3 ABI demangling style. Specifically, return an `enum
+ gnu_v3_dtor_kinds' value, indicating what kind of destructor
+ it is. */
+extern enum gnu_v3_dtor_kinds
+ is_gnu_v3_mangled_dtor PARAMS ((const char *name));
+
+#endif /* DEMANGLE_H */
diff --git a/dynamic-use-of-static-c++/src/dyn.hh b/dynamic-use-of-static-c++/src/dyn.hh
new file mode 100644
index 0000000..f816c28
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/dyn.hh
@@ -0,0 +1,62 @@
+#ifndef DYN_HH
+# define DYN_HH
+
+# include "config.hh"
+
+# define DYN_FULL_IMPLEMENTATION
+
+# include "data.hh"
+
+# include "function.hh"
+
+namespace dyn
+{
+ namespace language
+ {
+ struct val;
+
+ struct var : public data
+ {
+ var() : data() { logger << "var()" << std::endl; }
+
+ template <class T>
+ var(const T& obj) : data((abstract_data*)new data_proxy_by_cpy<T>(obj), (proxy_tag*)0)
+ {
+ logger << "var(const T& obj) [ T = " << mlc_name<T>::of() << " ]" << std::endl;
+ }
+
+ template <class T>
+ var(T& obj) : data(obj) { logger << "var(T& obj) [ T = " << mlc_name<T>::of() << " ]" << std::endl; }
+
+ var(const data& rhs) : data(rhs) { logger << "var(const data& rhs)" << std::endl; }
+ var(const var& rhs) : data(rhs) { logger << "var(const var& rhs)" << std::endl; }
+ var(const val& rhs) : data(rhs) { logger << "var(const val& rhs)" << std::endl; }
+ var(data& rhs) : data(rhs) { logger << "var(data& rhs)" << std::endl; }
+ var(var& rhs) : data(rhs) { logger << "var(var& rhs)" << std::endl; }
+ var(val& rhs) : data(rhs) { logger << "var(val& rhs)" << std::endl; }
+ };
+
+ struct val : public data
+ {
+ template <class T>
+ val(const T& obj) : data(obj) { logger << "val(const T& obj) [ T = " << mlc_name<T>::of() << " ]" << std::endl; }
+
+ val(const data& rhs) : data(rhs) { logger << "val(const data& rhs)" << std::endl; }
+ val(const var& rhs) : data() {
+ logger << "val(const var& rhs)" << std::endl;
+ const_assign(rhs);
+ }
+ val(const val& rhs) : data(rhs) { logger << "val(const val& rhs)" << std::endl; }
+ };
+
+ typedef ::dyn::fun fun;
+ typedef ::dyn::ctor ctor;
+ typedef ::dyn::meth meth;
+ typedef ::dyn::meth method;
+ }
+}
+
+# include "function_loader.hh"
+
+#endif
+
diff --git a/dynamic-use-of-static-c++/src/function.erb.cc b/dynamic-use-of-static-c++/src/function.erb.cc
new file mode 100644
index 0000000..4624aed
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/function.erb.cc
@@ -0,0 +1,47 @@
+#ifndef FUNCTION_HXX
+#define FUNCTION_HXX
+
+# include <cassert>
+# include <string>
+# include "data.hh"
+# include <list>
+# include "function_loader.hh"
+
+namespace dyn
+{
+
+ <%- DYN_MAX_ARGUMENTS.times do |i| -%>
+
+ <%- arguments = (0 .. i - 1).map { |j| "const data& arg#{j}" }.join(', ') -%>
+ <%- objects = (0 .. i - 1).map { |j| "arg#{j}" } -%>
+
+ data
+ generic_fun::operator() (<%= arguments %>) const
+ {
+ typedef data (*func_t)(<%= (['const dyn::data&'] * i).join(', ') %>);
+ arguments_types_t arguments_types;
+
+ if (obj_ptr_)
+ arguments_types.push_back(obj_ptr_->type());
+
+ <%- i.times do |j| -%>
+ arguments_types.push_back(arg<%= j %>.type());
+ <%- end -%>
+
+ void* ptr = load_function(kind_, name_, arguments_types, header_paths_);
+ assert(ptr);
+
+ if (obj_ptr_)
+ {
+ typedef data (*func_t2)(<%= (['const dyn::data&'] * (i + 1)).join(', ') %>);
+ return ((func_t2)ptr)(<%= (['*obj_ptr_'] + objects).join(', ') %>);
+ }
+
+ return ((func_t)ptr)(<%= objects.join(', ') %>);
+ }
+
+ <%- end -%>
+
+} // end of namespace dyn
+
+#endif
diff --git a/dynamic-use-of-static-c++/src/function.erb.hh b/dynamic-use-of-static-c++/src/function.erb.hh
new file mode 100644
index 0000000..f608679
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/function.erb.hh
@@ -0,0 +1,63 @@
+#ifndef FUNCTION_HH
+#define FUNCTION_HH
+
+# include <cassert>
+# include <string>
+
+namespace dyn
+{
+
+ enum fun_kind
+ {
+ FUN,
+ OP,
+ METH,
+ CTOR
+ };
+
+ struct data;
+
+ struct generic_fun
+ {
+
+ generic_fun(fun_kind kind,
+ const std::string name,
+ const std::string header_paths,
+ const data* obj_ptr) :
+ kind_(kind), name_(name),
+ header_paths_(header_paths), obj_ptr_(obj_ptr) {}
+
+
+ <%- DYN_MAX_ARGUMENTS.times do |i| -%>
+ data
+ operator() (<%= (["const data&"] * i).join(', ') %>) const;
+ <%- end -%>
+
+ const fun_kind kind_;
+ const std::string name_;
+ const std::string header_paths_;
+ const data* obj_ptr_;
+ };
+
+ <% %w[ fun ctor meth ].each do |name| %>
+ struct <%= name %> : public generic_fun
+ {
+ <%= name %>(const std::string name,
+ const std::string header_paths="*",
+ const data* obj_ptr=0) :
+ generic_fun(<%= name.upcase %>, name, header_paths, obj_ptr) {}
+ };
+ <% end %>
+
+ struct op : public generic_fun
+ {
+ op(const std::string name,
+ const std::string header_paths="*",
+ const data* obj_ptr=0) :
+ generic_fun(OP, std::string("operator") + name,
+ header_paths, obj_ptr) {}
+ };
+
+} // end of namespace dyn
+
+#endif
diff --git a/dynamic-use-of-static-c++/src/function_loader.cc b/dynamic-use-of-static-c++/src/function_loader.cc
new file mode 100644
index 0000000..cdc0296
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/function_loader.cc
@@ -0,0 +1,359 @@
+#ifndef DYN_FUNCTION_LOADER_CC
+# define DYN_FUNCTION_LOADER_CC
+
+# include <ltdl.h>
+# include <map>
+
+// FIXME use and improve the logger to avoid use of std::cerr
+# include <iostream>
+
+# include "data.hh"
+# include "function_loader.hh"
+# include "ruby_stream.hh"
+
+
+template <typename InputIterator, typename T, typename OStream>
+OStream& join(const InputIterator& begin, const InputIterator& end, const T& elt, OStream& ostr)
+{
+ InputIterator it = begin;
+
+ if (it != end)
+ ostr << *it;
+
+ for (++it; it != end; ++it)
+ ostr << elt << *it;
+
+ return ostr;
+}
+
+
+namespace dyn {
+
+ ruby::environment ruby_environment;
+
+ struct ltstr
+ {
+ bool operator()(const char* s1, const char* s2) const
+ {
+ return strcmp(s1, s2) < 0;
+ }
+ };
+
+ std::list<std::string> includes_;
+
+ template <typename Fun>
+ void
+ foreach_path_in_paths(const std::string& header_paths, Fun& fun)
+ {
+ std::list<std::string>::const_iterator it;
+ unsigned last = 0, pos;
+ while (42)
+ {
+ pos = header_paths.find(":", last);
+ std::string sub = header_paths.substr(last, pos - last);
+ if (sub == "*")
+ {
+ for (it = includes_.begin(); it != includes_.end(); ++it)
+ fun(*it);
+ }
+ else if (sub != "")
+ fun(sub);
+ if (pos >= std::string::npos) break;
+ last = pos + 1;
+ }
+ }
+
+ template <typename OStream>
+ struct gen_cxx_path
+ {
+ gen_cxx_path(OStream& ostr_) : ostr(ostr_) {}
+ void operator() (const std::string& path)
+ {
+ ostr << "#include ";
+ if (path.find("<") == std::string::npos || path.find("\"") == std::string::npos)
+ if (path.find(".hh") == path.length() - 3)
+ ostr << "\"" << path << "\"";
+ else
+ ostr << "<" << path << ">";
+ else
+ ostr << path;
+ ostr << '\n';
+ }
+ OStream& ostr;
+ };
+
+ template <typename OStream>
+ struct gen_path
+ {
+ gen_path(OStream& ostr_) : first(true), ostr(ostr_) {}
+ void operator() (const std::string& path)
+ {
+ if (first)
+ {
+ first = false;
+ ostr << path;
+ }
+ else
+ ostr << ':' << path;
+ }
+ bool first;
+ OStream& ostr;
+ };
+
+ struct function_loader_t
+ {
+
+ function_loader_t()
+ {
+ lt_dlinit();
+ ruby << "$: << \"" << DYNDIR << "\"" << ruby::eval;
+ ruby << "require 'function_loader'" << ruby::eval;
+ ruby << "require 'md5'" << ruby::eval;
+ ruby << "Signal.trap(:SEGV, 'IGNORE')" << ruby::eval;
+ }
+
+ ~function_loader_t()
+ {
+ lt_dlexit();
+ }
+
+ template <typename OStream>
+ void
+ gen_cxx(const std::string& identifier,
+ const std::string& name,
+ const std::list<std::string>& args,
+ fun_kind kind,
+ const std::string paths,
+ OStream& ostr)
+ {
+ ruby::stream r;
+ typedef std::string str;
+ typedef std::list<str> str_list;
+ str_list call_args;
+ std::ostringstream body, call;
+ str nl("\n ");
+ bool first_type_is_ptr = false;
+ str_list::const_iterator it;
+
+ ostr << "#include \"dyn-light.hh\"\n";
+
+ gen_cxx_path<OStream> fun(ostr);
+ foreach_path_in_paths(paths, fun);
+
+ ostr << "extern \"C\" {\n"
+ << " namespace dyn {\n"
+ << " namespace generated {\n"
+ << " data\n"
+ << " dyn_" << identifier << "(";
+
+ int i = 0;
+ for (it = args.begin(); it != args.end(); ++it, ++i)
+ {
+ std::ostringstream oarg;
+ oarg << "arg" << i;
+ str arg(oarg.str());
+
+ str type(*it);
+ // remove references cause they are forbidden on lhs
+ while (*type.rbegin() == '&') type.erase(--type.end());
+
+ if ( kind == METH and i == 0 )
+ {
+ // check if the first type is a pointer to choose the good op (. or ->)
+ str stripped_type(type);
+ unsigned pos;
+ while ((pos = stripped_type.find(" ")) != str::npos) stripped_type.erase(pos, 1);
+ unsigned len = stripped_type.length();
+ first_type_is_ptr = ((stripped_type.compare(len - 7, 7, "*const>") == 0)
+ || (stripped_type.compare(len - 2, 2, "*>") == 0));
+ }
+
+ if (it != args.begin()) ostr << ", ";
+ ostr << "const data& " << arg;
+ call_args.push_back(arg + "_reinterpret_cast_ptr->obj()");
+ body << type << "* " << arg << "_reinterpret_cast_ptr = "
+ << "reinterpret_cast<" << type << "* >(" << arg << ".proxy());"
+ << nl << "assert(" << arg << "_reinterpret_cast_ptr);" << nl;
+ }
+
+ if ( kind == METH)
+ {
+ call << call_args.front() << ((first_type_is_ptr)? "->" : ".");
+ call_args.pop_front();
+ }
+
+ call << name << "(";
+ join(call_args.begin(), call_args.end(), ", ", call);
+ call << ")";
+
+ str op(name);
+
+ switch (kind)
+ {
+ case OP:
+ if ( op.compare(0, 8, "operator") == 0 )
+ op.erase(0, 8);
+ call.str(std::string());
+ switch (call_args.size())
+ {
+ case 1:
+ call << op << "(" << *call_args.begin() << ")";
+ break;
+ case 2:
+ it = call_args.begin();
+ call << "(" << *it++ << ") ";
+ call << op
+ << " (" << *it << ")";
+ break;
+ default: assert(0);
+ }
+ // no break here
+ case METH:
+ case FUN:
+ body << "policy::receiver<select_dyn_policy((" << call.str() << "))> receiver;" << nl
+ << "(receiver(), " << call.str() << ");" << nl
+ << "data ret(receiver.proxy(), (proxy_tag*)0);" << nl
+ << "return ret;\n";
+ break;
+ case CTOR:
+ body << "typedef " << name << " T;" << nl
+ << "T* ptr = new T(";
+ join(call_args.begin(), call_args.end(), ", ", body);
+ body << ");" << nl
+ << "abstract_data* proxy = new data_proxy_by_ptr<T>(ptr);" << nl
+ << "data ret(proxy, (proxy_tag*)0);" << nl
+ << "return ret;\n";
+ break;
+ default:
+ assert(!"Unknown kind");
+ }
+
+ ostr << ")\n"
+ << " {" << nl
+ << body.str()
+ << " }\n"
+ << " }\n"
+ << " }\n"
+ << "};\n";
+
+ }
+
+ void
+ include_dir(const std::string& dir)
+ {
+ cflags_.push_back(std::string("-I") + dir);
+ }
+
+ void
+ cflags(const std::string& elt)
+ {
+ cflags_.push_back(elt);
+ }
+
+ void
+ ldflags(const std::string& elt)
+ {
+ ldflags_.push_back(elt);
+ }
+
+ void*
+ load(fun_kind kind,
+ const std::string& name,
+ const arguments_types_t& arguments_types,
+ const std::string& paths)
+ {
+ std::ostringstream ostr;
+ ostr << name << '(';
+ arguments_types_t::const_iterator it(arguments_types.begin());
+ if (it != arguments_types.end())
+ {
+ ostr << *it;
+ for (++it; it != arguments_types.end(); ++it)
+ ostr << ", " << *it;
+ }
+ ostr << ')';
+ if (paths != "")
+ {
+ ostr << ", paths: ";
+ gen_path<std::ostream> fun(ostr);
+ foreach_path_in_paths(paths, fun);
+ }
+ std::string prototype = ostr.str();
+
+ ruby << "Digest::MD5.new(%q{" << prototype.c_str() << "}).to_s" << ruby::eval;
+ const char* identifier = STR2CSTR(ruby.last_value());
+
+ cache_type::iterator ptr_it = cache.find(identifier);
+
+ if ( ptr_it != cache.end() )
+ {
+ std::cerr << "\e[36mJIT: \e[32mHIT: \e[0m " << prototype << std::endl;
+ return ptr_it->second;
+ }
+
+ std::cerr << "\e[36mJIT: \e[31mMISS: compile: \e[0m " << prototype << std::endl;
+
+ ruby << "compile %q{";
+ gen_cxx(identifier, name, arguments_types, kind, paths, ruby);
+ ruby << "}, %q{" << identifier << "}, %q{" << name << "}, %q{";
+ join(cflags_.begin(), cflags_.end(), ' ', ruby);
+ ruby << "}, %q{";
+ join(ldflags_.begin(), ldflags_.end(), ' ', ruby);
+ ruby << "}" << ruby::eval;
+
+ const char* error;
+ std::string lib_path = std::string("repository/") + identifier
+ + "/libdyn_" + identifier + ".la";
+ std::string symb = std::string("dyn_") + identifier;
+
+ lt_dlhandle lib = lt_dlopen(lib_path.c_str());
+ if ((error = lt_dlerror())) std::cerr << error << std::endl;
+ void* ptr = lt_dlsym(lib, symb.c_str());
+ cache[identifier] = ptr;
+ if ((error = lt_dlerror())) std::cerr << error << std::endl;
+ return ptr;
+ }
+
+ protected:
+ typedef std::map<const char*, void*, ltstr> cache_type;
+ cache_type cache;
+ std::list<std::string> cflags_, ldflags_;
+ ruby::stream ruby;
+ };
+
+ function_loader_t function_loader;
+
+ void
+ include(const std::string& file)
+ {
+ includes_.push_back(file);
+ }
+
+ void
+ include_dir(const std::string& dir)
+ {
+ function_loader.include_dir(dir);
+ }
+
+ void cflags(const std::string& elt)
+ {
+ function_loader.cflags(elt);
+ }
+
+ void ldflags(const std::string& elt)
+ {
+ function_loader.ldflags(elt);
+ }
+
+ void*
+ load_function(fun_kind kind,
+ const std::string& name,
+ const arguments_types_t& arguments_types,
+ const std::string& header_path)
+ {
+ return function_loader.load(kind, name, arguments_types, header_path);
+ }
+
+} // end of namespace dyn
+
+#endif
diff --git a/dynamic-use-of-static-c++/src/function_loader.hh b/dynamic-use-of-static-c++/src/function_loader.hh
new file mode 100644
index 0000000..29b5197
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/function_loader.hh
@@ -0,0 +1,29 @@
+#ifndef DYN_FUNCTION_LOADER_HH
+# define DYN_FUNCTION_LOADER_HH
+
+# include <string>
+# include <list>
+
+namespace dyn {
+
+ void
+ include(const std::string& file);
+
+ void
+ include_dir(const std::string& dir);
+
+ void cflags(const std::string& elt);
+
+ void ldflags(const std::string& elt);
+
+ typedef std::list<std::string> arguments_types_t;
+
+ void*
+ load_function(fun_kind kind,
+ const std::string& name,
+ const arguments_types_t& arguments_types,
+ const std::string& header_path);
+
+} // end of namespace dyn
+
+#endif
diff --git a/dynamic-use-of-static-c++/src/function_loader.rb b/dynamic-use-of-static-c++/src/function_loader.rb
new file mode 100644
index 0000000..8ec56e6
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/function_loader.rb
@@ -0,0 +1,39 @@
+require 'pathname'
+
+DYN_DATADIR = Pathname.new(__FILE__).dirname.parent + '_build/data' # FIXME
+
+def compile ( cxx, identifier, name, cflags, ldflags )
+ repository = Pathname.new('repository')
+ unless repository.exist?
+ repository.mkpath
+ (repository + 'Makefile').make_symlink(DYN_DATADIR + 'Makefile.repository')
+ end
+ dir = repository + identifier
+ unless dir.exist?
+ dir.mkpath
+ makefile = (DYN_DATADIR + 'Makefile.template').read
+ makefile.gsub!(/libdyn_function\.la/, "libdyn_#{identifier}.la")
+ (dir + 'Makefile').open('w') { |f| f.puts makefile }
+ file = dir + "function.cc"
+ (dir + '.deps').mkpath
+ (dir + '.deps' + 'libdyn_function_la-function.Plo').open('w')
+ file.open('w') do |f|
+ f.puts cxx
+ end
+ (dir + 'Makefile').open('a') do |f|
+ f.puts "CXXFLAGS += #{cflags}"
+ f.puts "LDFLAGS += #{ldflags}"
+ end
+ end
+ out = dir + 'make.out'
+ cmd = "cd #{dir} && make > make.out 2>&1"
+ if system cmd
+ out.unlink if out.exist?
+ else
+ STDERR.puts 'JIT: Error when compiling this code'
+ STDERR.puts cxx
+ STDERR.puts cmd
+ STDERR.puts out.read
+ exit! 1
+ end
+end
diff --git a/dynamic-use-of-static-c++/src/name_of.cc b/dynamic-use-of-static-c++/src/name_of.cc
new file mode 100644
index 0000000..7b2b6da
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/name_of.cc
@@ -0,0 +1,25 @@
+#ifndef DYN_NAME_OF_CC
+# define DYN_NAME_OF_CC
+
+# include "name_of.hh"
+
+# ifndef NO_COMPILER_DEMANGLING
+
+extern "C" {
+# include "demangle.h"
+}
+
+# define DEMANGLE_OPTIONS DMGL_VERBOSE | DMGL_TYPES | DMGL_ANSI | DMGL_PARAMS
+
+std::string demangle(const char* name)
+{
+ std::string result(cplus_demangle(name, DEMANGLE_OPTIONS));
+ size_t pos;
+ if ((pos = result.find("char_traints")) != std::string::npos)
+ result.replace(pos, 12, "char_traits ");
+ return result;
+}
+
+# endif
+
+#endif // ! DYN_NAME_OF_CC
diff --git a/dynamic-use-of-static-c++/src/name_of.hh b/dynamic-use-of-static-c++/src/name_of.hh
new file mode 100644
index 0000000..04b40ad
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/name_of.hh
@@ -0,0 +1,183 @@
+#ifndef NAME_OF
+# define NAME_OF
+
+# include <string>
+# include <sstream>
+
+# ifndef NO_COMPILER_DEMANGLING
+
+std::string demangle(const char* name);
+
+template <class T>
+std::string mlc_name_of(const T&)
+{
+ return demangle(typeid(T).name());
+}
+
+template <typename T>
+struct mlc_name
+{
+ static std::string of()
+ {
+ return demangle(typeid(T).name());
+ }
+};
+
+# else
+
+# define mlc_set_name(NAME) \
+template <> struct mlc_name <NAME> { static std::string of() { return #NAME; } }
+
+# define mlc_set_name_TC(CLASS) \
+template <class C> struct mlc_name < CLASS<C> > \
+{ static std::string of() { return std::string(#CLASS) + "< " + mlc_name<C>::of() + " >"; } }
+
+# define mlc_set_name_TCC(CLASS) \
+template <class C1, class C2> struct mlc_name < CLASS<C1,C2> > \
+{ static std::string of() { return std::string(#CLASS) + "< " + mlc_name<C1>::of() + ", " + mlc_name<C2>::of() + " >"; } }
+
+# define mlc_set_name_TCc(CLASS) \
+template <class C1, class C2> struct mlc_name < CLASS<C1,C2> > \
+{ static std::string of() { return std::string(#CLASS) + "< " + mlc_name<C1>::of() + " >"; } }
+
+# define mlc_set_name_TCcc(CLASS) \
+template <class C1, class C2, class C3> struct mlc_name < CLASS<C1,C2,C3> > \
+{ static std::string of() { return std::string(#CLASS) + "< " + mlc_name<C1>::of() + " >"; } }
+
+template <typename message>
+struct mlc_error_message
+{
+ private:
+ mlc_error_message() {}
+};
+
+template <class T>
+struct mlc_name
+{
+ static std::string of()
+ {
+ struct mlc_name_of_on_an_unkown_type_please_use_mlc_set_name_on_this_T {};
+ mlc_error_message<mlc_name_of_on_an_unkown_type_please_use_mlc_set_name_on_this_T> e;
+ return "UNKNOWN!";
+ }
+};
+
+template <class T>
+struct mlc_name2
+{
+ static std::string of(const T&)
+ {
+ return mlc_name<T>::of();
+ }
+};
+
+template <class T>
+std::string mlc_name_of(const T& t)
+{
+ return mlc_name2<T>::of(t);
+}
+
+// ptr
+template <typename T>
+struct mlc_name <T*>
+{
+ static std::string of() { return mlc_name<T>::of() + "*"; }
+};
+
+template <typename T>
+struct mlc_name2 <T*>
+{
+ static std::string of(const T* const& t) { return mlc_name2<T>::of(*t) + "*"; }
+};
+
+
+// const
+template <typename T>
+struct mlc_name <const T>
+{
+ static std::string of() { return std::string("const ") + mlc_name<T>::of(); }
+};
+
+template <typename T>
+struct mlc_name2 <const T>
+{
+ static std::string of(const T& t) { return std::string("const ") + mlc_name2<T>::of(t); }
+};
+
+// ref
+template <typename T>
+struct mlc_name <T&>
+{
+ static std::string of() { return mlc_name<T>::of() + "&"; }
+};
+
+template <typename T>
+struct mlc_name2 <T&>
+{
+ static std::string of(const T& t) { return mlc_name2<T>::of(t) + "&"; }
+};
+
+// T []
+template <typename T>
+struct mlc_name <T[]>
+{
+ static std::string of() { return mlc_name<T>::of() + " []"; }
+};
+
+template <typename T>
+struct mlc_name2 <T[]>
+{
+ static std::string of(const T []) { return mlc_name<T>::of() + " []"; }
+};
+
+// T [N]
+template <typename T, unsigned int N>
+struct mlc_name <T[N]>
+{
+ static std::string of()
+ {
+ std::ostringstream ostr;
+ ostr << mlc_name<T>::of() << " [" << N << "]";
+ return ostr.str();
+ }
+};
+
+// built-in
+
+mlc_set_name(void);
+mlc_set_name(char);
+mlc_set_name(signed char);
+mlc_set_name(unsigned char);
+mlc_set_name(short);
+mlc_set_name(unsigned short);
+mlc_set_name(int);
+mlc_set_name(unsigned);
+mlc_set_name(long);
+mlc_set_name(unsigned long);
+mlc_set_name(float);
+mlc_set_name(double);
+mlc_set_name(bool);
+
+// some std
+
+#include <iosfwd>
+
+namespace std {
+ template <class _Tp, class _Alloc> class vector;
+ template <class _Key, class _Compare, class _Alloc> class set;
+ template <class _Tp, class _Alloc> class list;
+}
+mlc_set_name_TCc(std::vector);
+mlc_set_name_TCcc(std::set);
+mlc_set_name_TCc(std::list);
+mlc_set_name(std::string);
+mlc_set_name(std::istream);
+mlc_set_name(std::ostream);
+mlc_set_name_TCc(std::basic_istream);
+mlc_set_name_TCc(std::basic_ostream);
+mlc_set_name(std::istringstream);
+mlc_set_name(std::ostringstream);
+
+# endif
+
+#endif
diff --git a/dynamic-use-of-static-c++/src/policy.cc b/dynamic-use-of-static-c++/src/policy.cc
new file mode 100644
index 0000000..54b1d72
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/policy.cc
@@ -0,0 +1,18 @@
+#ifndef DYN_POLICY_CC
+# define DYN_POLICY_CC
+
+# include "policy.hh"
+
+namespace dyn
+{
+ namespace policy
+ {
+
+ id_for_pod<2> id_for_pod_2;
+
+ id_for_ptr_and_ref<2> id_for_ptr_and_ref_2;
+
+ }
+}
+
+#endif // ! DYN_POLICY_CC
diff --git a/dynamic-use-of-static-c++/src/policy.hh b/dynamic-use-of-static-c++/src/policy.hh
new file mode 100644
index 0000000..eae4201
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/policy.hh
@@ -0,0 +1,107 @@
+#ifndef DYN_POLICY_HH
+# define DYN_POLICY_HH
+
+# include "data.hh"
+
+namespace dyn
+{
+ namespace policy
+ {
+
+# define select_dyn_policy(e) \
+ (dyn::policy::type)dyn::policy::simplify< \
+ sizeof((dyn::policy::id_for_pod_2(), e, dyn::policy::id_for_pod_2())) \
+ + sizeof((dyn::policy::id_for_ptr_and_ref_2(), e, \
+ dyn::policy::id_for_ptr_and_ref_2()))>::val
+
+ template <unsigned n>
+ struct id
+ {
+ char d[n];
+ };
+
+ template <class T> struct check_is_const { enum { val = none }; };
+ template <class T> struct check_is_const <const T> { enum { val = is_const }; };
+
+ template <unsigned N>
+ struct id_for_pod : id<N>
+ {
+ id_for_pod<N>() {}
+ template <unsigned M> id_for_pod<N>(id_for_pod<M>&) {}
+ id_for_pod<N>& operator() () { return *this; }
+
+ template <typename T>
+ id_for_pod<N + is_pod> operator, (T) { assert(0); }
+ };
+ extern id_for_pod<2> id_for_pod_2;
+
+ template <unsigned N>
+ struct id_for_ptr_and_ref : id<N>
+ {
+ id_for_ptr_and_ref<N>() {}
+ template <unsigned M> id_for_ptr_and_ref<N>(id_for_ptr_and_ref<M>&) {}
+ id_for_ptr_and_ref<N>& operator() () { return *this; }
+
+ template <typename T>
+ id_for_ptr_and_ref<N + is_ref + check_is_const<T>::val> operator, (T&) { assert(0); }
+
+ template <typename T>
+ id_for_ptr_and_ref<N + is_ptr + check_is_const<T>::val> operator, (T*) { assert(0); }
+ };
+ extern id_for_ptr_and_ref<2> id_for_ptr_and_ref_2;
+
+ template <unsigned n>
+ struct simplify;
+
+# define set_simplify(x, y) \
+ template <> struct simplify<x + 20> { enum { val = y }; }
+
+ set_simplify(-16, is_void);
+ set_simplify(0, is_pod);
+ set_simplify(4, is_ref);
+ set_simplify(5, is_ref + is_const);
+ set_simplify(6, is_ptr);
+ set_simplify(7, is_ptr + is_const);
+
+ template <type policy>
+ struct receiver
+ {
+ receiver() : proxy_(0) { logger << "receiver() [ policy = " << policy << " ]" << std::endl; }
+
+ receiver& operator() ()
+ {
+ return *this;
+ }
+
+ template <typename T>
+ receiver& operator,(T& obj)
+ {
+ logger << "receiver::operator,(T&) [ T = " << mlc_name<T>::of() << " ]" << std::endl;
+ proxy_ = new typename dyn_choose_data_proxy<T, policy>::ret(obj);
+ return *this;
+ }
+
+ template <typename T>
+ receiver& operator,(const T& obj)
+ {
+ logger << "receiver::operator,(const T&) [ T = " << mlc_name<const T>::of() << " ]" << std::endl;
+ proxy_ = new typename dyn_choose_data_proxy<T, policy>::ret(obj);
+ return *this;
+ }
+
+ abstract_data* proxy()
+ {
+ if (proxy_)
+ return proxy_;
+ else
+ return new data_nil;
+ }
+
+ protected:
+ abstract_data* proxy_;
+ };
+
+ }
+}
+
+#endif // ! DYN_POLICY_HH
diff --git a/dynamic-use-of-static-c++/src/ruby_stream.cc b/dynamic-use-of-static-c++/src/ruby_stream.cc
new file mode 100644
index 0000000..2ae7ecb
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/ruby_stream.cc
@@ -0,0 +1,11 @@
+#ifndef RUBY_STREAM_CC
+# define RUBY_STREAM_CC
+
+# include "ruby_stream.hh"
+
+namespace ruby
+{
+ eval_type eval;
+}
+
+#endif
diff --git a/dynamic-use-of-static-c++/src/ruby_stream.hh b/dynamic-use-of-static-c++/src/ruby_stream.hh
new file mode 100644
index 0000000..af2ee61
--- /dev/null
+++ b/dynamic-use-of-static-c++/src/ruby_stream.hh
@@ -0,0 +1,100 @@
+#ifndef RUBY_STREAM_HH
+#define RUBY_STREAM_HH
+
+// #define DEBUG_RUBY_STREAM
+
+// Protection against already loaded config.h
+# undef PACKAGE_BUGREPORT
+# undef PACKAGE_NAME
+# undef PACKAGE_STRING
+# undef PACKAGE_TARNAME
+# undef PACKAGE_VERSION
+# undef HAVE_DLFCN_H
+
+# ifdef DEBUG_RUBY_STREAM
+# include <iostream>
+# endif
+# include <string>
+# include <sstream>
+# include <ruby.h>
+
+// Remove variables defined by the config.h of ruby
+# undef PACKAGE_BUGREPORT
+# undef PACKAGE_NAME
+# undef PACKAGE_STRING
+# undef PACKAGE_TARNAME
+# undef PACKAGE_VERSION
+# undef HAVE_DLFCN_H
+
+# include "_config/config.h"
+# include "config.hh"
+
+namespace ruby
+{
+ struct environment
+ {
+ environment()
+ {
+ ruby_init();
+ ruby_script("embeddeed ruby");
+ ruby_init_loadpath();
+ }
+
+ ~environment()
+ {
+ ruby_finalize();
+ }
+ };
+
+ struct eval_type {};
+ extern eval_type eval;
+
+ struct stream
+ {
+ stream() : last_value_(Qnil) {}
+
+ void
+ push(const eval_type&)
+ {
+ eval();
+ }
+
+ template <class T>
+ void
+ push(const T& obj)
+ {
+ contents_ << obj;
+ }
+
+ VALUE
+ eval()
+ {
+ if (contents_.str().size() != 0)
+ {
+# ifdef DEBUG_RUBY_STREAM
+ std::cerr << "Eval (" << contents_.str() << ")" << std::endl;
+# endif
+ last_value_ = rb_eval_string(contents_.str().c_str());
+ contents_.str(std::string());
+ }
+ return last_value_;
+ }
+
+ VALUE last_value() { return last_value_; }
+
+ protected:
+
+ std::ostringstream contents_;
+ VALUE last_value_;
+ };
+
+}
+
+template <class T>
+ruby::stream& operator<< (ruby::stream& stream, const T& obj)
+{
+ stream.push(obj);
+ return stream;
+}
+
+#endif
diff --git a/dynamic-use-of-static-c++/test/Makefile.am b/dynamic-use-of-static-c++/test/Makefile.am
new file mode 100644
index 0000000..68f3b34
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/Makefile.am
@@ -0,0 +1,60 @@
+AM_CPPFLAGS = -I$(srcdir)/fixtures -I$(top_srcdir)/src -I$(top_builddir)/src
+AM_CXXFLAGS = $(WARNING_CXXFLAGS)
+
+SUBDIRS = vaucanson
+
+#erb# =begin # Read the documentation of erbx to see how to change this part
+#erb# <%
+#erb# TESTS = %w[
+#erb# function_loader
+#erb# damien
+#erb# containers
+#erb# var_and_val
+#erb# methods
+#erb# olena
+#erb# ]
+#erb# %>
+#erb# check_PROGRAMS = <%= TESTS.map { |t| "#{t}.test" }.join ' ' %>
+#erb# <% TESTS.each do |name| %>
+#erb# <%= name %>_test_SOURCES = test_<%= name %>.cc
+#erb# <%= name %>_test_LDADD = $(top_builddir)/src/libdyn.la
+#erb# <%= name %>_test_DEPENDENCIES = $(top_builddir)/src/libdyn.la
+#erb# <% end %>
+#erb# =end
+
+#erb# =generated
+
+check_PROGRAMS = function_loader.test damien.test containers.test var_and_val.test methods.test olena.test
+
+function_loader_test_SOURCES = test_function_loader.cc
+function_loader_test_LDADD = $(top_builddir)/src/libdyn.la
+function_loader_test_DEPENDENCIES = $(top_builddir)/src/libdyn.la
+
+damien_test_SOURCES = test_damien.cc
+damien_test_LDADD = $(top_builddir)/src/libdyn.la
+damien_test_DEPENDENCIES = $(top_builddir)/src/libdyn.la
+
+containers_test_SOURCES = test_containers.cc
+containers_test_LDADD = $(top_builddir)/src/libdyn.la
+containers_test_DEPENDENCIES = $(top_builddir)/src/libdyn.la
+
+var_and_val_test_SOURCES = test_var_and_val.cc
+var_and_val_test_LDADD = $(top_builddir)/src/libdyn.la
+var_and_val_test_DEPENDENCIES = $(top_builddir)/src/libdyn.la
+
+methods_test_SOURCES = test_methods.cc
+methods_test_LDADD = $(top_builddir)/src/libdyn.la
+methods_test_DEPENDENCIES = $(top_builddir)/src/libdyn.la
+
+olena_test_SOURCES = test_olena.cc
+olena_test_LDADD = $(top_builddir)/src/libdyn.la
+olena_test_DEPENDENCIES = $(top_builddir)/src/libdyn.la
+
+#erb# =end_generated
+
+TESTS = $(check_PROGRAMS)
+
+tests: $(check_PROGRAMS)
+
+repository_clean: clean
+ rm -rf repository
diff --git a/dynamic-use-of-static-c++/test/fixtures/my_lib/damien.hh b/dynamic-use-of-static-c++/test/fixtures/my_lib/damien.hh
new file mode 100644
index 0000000..a045f1a
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/fixtures/my_lib/damien.hh
@@ -0,0 +1,60 @@
+#ifndef DAMIEN_HH
+#define DAMIEN_HH
+
+#include <iostream>
+
+struct up
+{
+ up(int i) : i_(i) {}
+ virtual void print(std::ostream&) const = 0;
+ virtual void print_noarg() const = 0;
+ virtual up* fake_method(const up&) const = 0;
+ virtual ~up() {};
+ virtual int get_i() const { return i_; }
+ int i_;
+};
+
+
+template <typename T>
+struct down : public up
+{
+ down(const T& t) : up(0), t_(t) {}
+
+ virtual void print(std::ostream& ostr) const
+ {
+ ostr << "down< " << t_ << " >";
+ }
+
+ virtual void print_noarg() const
+ {
+ std::cout << t_ << std::endl;
+ }
+
+ virtual up* fake_method(const up& rhs) const
+ {
+ return new down<int>(i_ + rhs.get_i());
+ }
+
+ const T* get_t() const;
+ const down<T>* clone();
+
+ const T& t_;
+
+ virtual ~down() {}
+};
+
+
+std::ostream& operator<<(std::ostream& ostr, const up& obj)
+{
+ obj.print(ostr);
+ return ostr;
+}
+
+template <typename T>
+void print(const T&);
+
+template <typename T>
+T sqr(const T&);
+
+#endif
+
diff --git a/dynamic-use-of-static-c++/test/fixtures/my_lib/damien.hxx b/dynamic-use-of-static-c++/test/fixtures/my_lib/damien.hxx
new file mode 100644
index 0000000..e7448e1
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/fixtures/my_lib/damien.hxx
@@ -0,0 +1,57 @@
+#ifndef DAMIEN_HXX
+#define DAMIEN_HXX
+
+#include <iostream>
+#include "damien.hh"
+
+template <typename T>
+const T* down<T>::get_t() const { return &t_; }
+
+template <typename T>
+const down<T>* down<T>::clone()
+{
+ return new down<T>(t_);
+}
+
+template <typename T>
+down<T>
+mk_down(const T& t)
+{
+ return t;
+}
+
+void foo(const up& a)
+{
+ std::cout << "foo(" << a << ")" << std::endl;
+}
+
+void foo(const int& i)
+{
+ std::cout << "foo(" << i << ")" << std::endl;
+}
+
+void bar(const up& a, const up& b, int c=0)
+{
+ std::cout << "bar(" << a << ", " << b << ", " << c << ")" << std::endl;
+}
+
+void change(up& a)
+{
+ a.i_++;
+}
+
+template <typename T>
+void print(const T& a)
+{
+ std::cout << a << std::endl;
+}
+
+template <typename T>
+T sqr(const T& a)
+{
+ return a * a;
+}
+
+
+#endif
+
diff --git a/dynamic-use-of-static-c++/test/fixtures/my_lib/lib.hh b/dynamic-use-of-static-c++/test/fixtures/my_lib/lib.hh
new file mode 100644
index 0000000..8088724
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/fixtures/my_lib/lib.hh
@@ -0,0 +1,105 @@
+// part of generic lib
+
+#include <cmath>
+#include <iostream>
+#include <sstream> // Warning does not work without me
+#include <vector>
+
+template <class T>
+struct u
+{
+ u(T& x) : x_(x) {}
+ T& x_;
+};
+
+template <class T, class V>
+struct t
+{
+ t<T, V>(const T& x, const V& y) : x_(x), y_(y) {}
+ const T& x_, y_;
+};
+
+template <class T>
+std::ostream& operator<< (std::ostream& ostr, const u<T>& x)
+{
+ return ostr << "u< " << x.x_ << " >";
+}
+
+template <class T>
+std::istream& operator>> (std::istream& istr, u<T>& x)
+{
+ return istr >> x.x_;
+}
+
+template <class T, class V>
+std::ostream& operator<< (std::ostream& ostr, const t<T, V>& x)
+{
+ return ostr << "t< " << x.x_ << ", " << x.y_ << " >";
+}
+
+void foo1()
+{
+ std::cout << "foo1()" << std::endl;
+}
+
+int* foo2()
+{
+ static int i = 42;
+ std::cout << "foo2() => &42" << std::endl;
+ return &i;
+}
+
+int foo2b()
+{
+ std::cout << "foo2b() => 42" << std::endl;
+ return 42;
+}
+
+template <class T>
+const T* foo3(T t1, const T t2, const T& t3)
+{
+ std::cout << "foo3(" << t1 << ", " << t2 << ", " << t3 << ")" << std::endl;
+ return &t3;
+}
+
+namespace my_lib
+{
+ namespace x
+ {
+ template <template<class, class> class T, template<class> class U >
+ U<char>*** foo4(U<float> a, T< T<char, char>, U<const int> > b)
+ {
+ std::cout << "foo4(" << a << ", " << b << ")" << std::endl;
+ }
+ } // end of x
+
+ template <class T>
+ T sqr(const T& t)
+ {
+ std::cout << "sqr(" << t << ") => " << t * t << std::endl;
+ return t * t;
+ }
+
+ template <class T>
+ float power(float f, const T& t)
+ {
+ std::cout << "power(" << f << "," << t << ")" << std::endl;
+ return std::exp(t * std::log(f));
+ }
+
+ struct boo
+ {
+ boo(std::ostream& ostr) : ostr_(ostr) {}
+ template <typename T1, typename T2>
+ void print(const T1& a, const T2& b)
+ {
+ ostr_ << "<[" << a << ", " << b << "]>" << std::endl;
+ }
+ std::ostream& ostr_;
+ };
+
+#define stl_each(c, i) for (i = c.begin(); i != c.end(); ++i)
+
+#define echo(i) std::cout << i << std::endl
+
+} // end of my_lib
diff --git a/dynamic-use-of-static-c++/test/fixtures/some_identifiers.yml.cc b/dynamic-use-of-static-c++/test/fixtures/some_identifiers.yml.cc
new file mode 100644
index 0000000..b0fdb0e
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/fixtures/some_identifiers.yml.cc
@@ -0,0 +1,8 @@
+my_U_lib_S_lib_D_hh__foo1__: void foo1() {}
+my_U_lib_S_lib_D_hh__foo2__: int* foo2() {}
+my_U_lib_S_lib_D_hh__foo3__double_C_CONST_double_C_CONST_double_REF:
+ double* foo3(double, const double, const double&) {}
+my_U_lib_S_lib_D_hh__my_U_lib_N_x_N_foo4__u_L_float_R_C_t_L_t_L_char_C_char_R_C_u_L_CONST_int_R_R:
+ u<char>*** my_lib::x::foo4(u<float>, t<t<char, char>, u<const int> >) {}
+my_U_lib_S_lib_D_hh__foo3_L_t_L_int_C_char_R_R__t_L_int_C_char_R_C_CONST_t_L_int_C_char_R_C_CONST_t_L_int_C_char_R_REF:
+ t<int, char>* foo3(t<int, char>, const t<int, char>*, const t<int, char>&) {}
diff --git a/dynamic-use-of-static-c++/test/fixtures/tree/tree.swig b/dynamic-use-of-static-c++/test/fixtures/tree/tree.swig
new file mode 100644
index 0000000..1ba2136
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/fixtures/tree/tree.swig
@@ -0,0 +1,2824 @@
++++ top ----------------------------------------
+| outfile - "vcsn_wrap.cxx"
+| name - "vcsn"
+| module - 0xb7cf9cc8
+| classes - 0xb7cd61f8
+| infile - "vcsn.i"
+| outfile_h - "vcsn_wrap.h"
+
+ +++ include ----------------------------------------
+ | name - "../../swig-1.3.27/Lib/swig.swg"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "std"
+ | name - "std"
+ | csym:nextSibling - 0xb7cec638
+ | sym:nextSibling - 0xb7cec638
+ | typescope - 0xb7cf9d38
+ | symtab - 0xb7cd4338
+ | sym:symtab - 0xb7cd02e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ typemap ----------------------------------------
+ | code - "delete [] $1;"
+ | method - "newfree"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd44c8
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n if ($1) delete [] $1;\n if ($input) {\n $1 = ($1_type) (new char[strlen($input)+1]);\n strcpy((char *) $1,$input);\n } else {\n $1 = 0;\n }\n}"
+ | method - "memberin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4618
+ |
+ +++ typemap ----------------------------------------
+ | kwargs - 0xb7cd4688
+ | code - "{\n if ($input) {\n $1 = ($1_type) (new char[strlen($input)+1]);\n strcpy((char *) $1,$input);\n } else {\n $1 = 0;\n }\n}"
+ | method - "memberin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4748
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n if ($1) delete [] $1;\n if ($input) {\n $1 = ($1_type) (new char[strlen($input)+1]);\n strcpy((char *) $1,$input);\n } else {\n $1 = 0;\n }\n}"
+ | method - "globalin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4848
+ |
+ +++ typemap ----------------------------------------
+ | kwargs - 0xb7cd48b8
+ | code - "{\n if ($input) {\n $1 = ($1_type) (new char[strlen($input)+1]);\n strcpy((char *) $1,$input);\n } else {\n $1 = 0;\n }\n}"
+ | method - "globalin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4978
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n if ($input) strncpy($1,$input,$1_dim0);\n else $1[0] = 0;\n}"
+ | method - "memberin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4a88
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n if ($input) strncpy($1,$input,$1_dim0);\n else $1[0] = 0;\n}"
+ | method - "globalin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4b98
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n if ($input) strcpy($1,$input);\n else $1[0] = 0;\n}"
+ | method - "memberin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4c88
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n if ($input) strcpy($1,$input);\n else $1[0] = 0;\n}"
+ | method - "globalin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4d78
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n size_t ii;\n $1_basetype *b = ($1_basetype *) $1;\n for (ii = 0; ii < (size_t)$1_size; ii++) b[ii] = *(($1_basetype *) $input + ii);\n}"
+ | method - "memberin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4e88
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n size_t ii;\n $1_basetype *b = ($1_basetype *) $1;\n for (ii = 0; ii < (size_t)$1_size; ii++) b[ii] = *(($1_basetype *) $input + ii);\n}"
+ | method - "globalin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd4f98
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n $basetype (*inp)[$dim1] = ($basetype (*)[$dim1])($input);\n $basetype (*dest)[$dim1] = ($basetype (*)[$dim1])($1);\n size_t ii = 0;\n for (; ii < $dim0; ++ii) {\n $basetype *ip = inp[ii];\n $basetype *dp = dest[ii];\n size_t jj = 0;\n for (; jj < $dim1; ++jj) dp[jj] = ip[jj];\n }\n}"
+ | method - "memberin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd50c8
+ |
+ +++ typemap ----------------------------------------
+ | code - "{\n $basetype (*inp)[$dim1] = ($basetype (*)[$dim1])($input);\n $basetype (*dest)[$dim1] = ($basetype (*)[$dim1])($1);\n size_t ii = 0;\n for (; ii < $dim0; ++ii) {\n $basetype *ip = inp[ii];\n $basetype *dp = dest[ii];\n size_t jj = 0;\n for (; jj < $dim1; ++jj) dp[jj] = ip[jj];\n }\n}"
+ | method - "globalin"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd51f8
+ |
+ +++ typemap ----------------------------------------
+ | kwargs - 0xb7cd5278
+ | code - ""
+ | method - "in"
+
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd5348
+ |
+ +++ typemapitem ----------------------------------------
+ | pattern - 0xb7cd53f8
+ |
+ +++ insert ----------------------------------------
+ | code - "\n#ifdef __cplusplus\ntemplate<class T> class SwigValueWrapper {\n T *tt;\npublic:\n SwigValueWrapper() : tt(0) { }\n SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { }\n SwigValueWrapper(const T& t) : tt(new T(t)) { }\n ~SwigValueWrapper() { delete tt; } \n SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; }\n operator T&() const { return *tt; }\n T *operator&() { return tt; }\nprivate:\n SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);\n};\n#endif\n"
+ | section - "runtime"
+ |
+ +++ insert ----------------------------------------
+ | code - "/***********************************************************************\n *\n * This section contains generic SWIG labels for method/variable\n * declarations/attributes, and other compiler dependent labels.\n *\n ************************************************************************/\n\n/* template workaround for compilers that cannot correctly implement the C++ standard */\n#ifndef SWIGTEMPLATEDISAMBIGUATOR\n# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)\n# define SWIGTEMPLATEDISAMBIGUATOR template\n# else\n# define SWIGTEMPLATEDISAMBIGUATOR \n# endif\n#endif\n\n/* inline attribute */\n#ifndef SWIGINLINE\n# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))\n# define SWIGINLINE inline\n# else\n# define SWIGINLINE\n# endif\n#endif\n\n/* attribute recognised by some compilers to avoid \'unused\' warnings */\n#ifndef SWIGUNUSED\n# if defined(__GNUC__) || defined(__ICC)\n# define SWIGUNUSED __attribute__ ((unused)) \n# else\n# define SWIGUNUSED \n# endif\n#endif\n\n/* internal SWIG method */\n#ifndef SWIGINTERN\n# define SWIGINTERN static SWIGUNUSED\n#endif\n\n/* internal inline SWIG method */\n#ifndef SWIGINTERNINLINE\n# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE\n#endif\n\n/* exporting methods for Windows DLLs */\n#ifndef SWIGEXPORT\n# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)\n# if defined(STATIC_LINKED)\n# define SWIGEXPORT\n# else\n# define SWIGEXPORT __declspec(dllexport)\n# endif\n# else\n# define SWIGEXPORT\n# endif\n#endif\n\n/* calling conventions for Windows */\n#ifndef SWIGSTDCALL\n# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)\n# define SWIGSTDCALL __stdcall\n# else\n# define SWIGSTDCALL\n# endif \n#endif\n\n"
+ | section - "runtime"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn.i"
+ | module - "vcsn"
+
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/config/pconf.hh"
+
+ +++ constant ----------------------------------------
+ | sym:name - "VCSN_PACKAGE_BUGREPORT"
+ | name - "VCSN_PACKAGE_BUGREPORT"
+ | rawval - "\"vaucanson-bugs(a)lrde.epita.fr\""
+ | feature:immutable - "1"
+ | value - "vaucanson-bugs(a)lrde.epita.fr"
+ | storage - "%constant"
+ | type - "p.char"
+ | sym:symtab - 0xb7cd02e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constant ----------------------------------------
+ | sym:name - "VCSN_PACKAGE_NAME"
+ | name - "VCSN_PACKAGE_NAME"
+ | rawval - "\"vaucanson\""
+ | feature:immutable - "1"
+ | value - "vaucanson"
+ | storage - "%constant"
+ | type - "p.char"
+ | sym:symtab - 0xb7cd02e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constant ----------------------------------------
+ | sym:name - "VCSN_PACKAGE_STRING"
+ | name - "VCSN_PACKAGE_STRING"
+ | rawval - "\"vaucanson 0.7.2\""
+ | feature:immutable - "1"
+ | value - "vaucanson 0.7.2"
+ | storage - "%constant"
+ | type - "p.char"
+ | sym:symtab - 0xb7cd02e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constant ----------------------------------------
+ | sym:name - "VCSN_PACKAGE_VERSION"
+ | name - "VCSN_PACKAGE_VERSION"
+ | rawval - "\"0.7.2\""
+ | feature:immutable - "1"
+ | value - "0.7.2"
+ | storage - "%constant"
+ | type - "p.char"
+ | sym:symtab - 0xb7cd02e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/config/math.hh"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/config/system.hh"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/predecls.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | csym:nextSibling - 0xb7cd8a98
+ | sym:nextSibling - 0xb7cd8a98
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+ | sym:overname - "__SWIG_0"
+
+ +++ template ----------------------------------------
+ | sym:name - "dynamic_traits"
+ | templatetype - "classforward"
+ | name - "dynamic_traits"
+ | partials - 0xb7cda4c8
+ | kind - "struct"
+ | sym:weak - "1"
+ | templateparms - typename S
+ | sym:symtab - 0xb7cd59e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | sym:name - "SyntacticDecorator"
+ | templatetype - "classforward"
+ | name - "SyntacticDecorator"
+ | kind - "struct"
+ | sym:weak - "1"
+ | templateparms - typename S,typename T
+ | sym:symtab - 0xb7cd59e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | sym:name - "MetaElement"
+ | templatetype - "classforward"
+ | name - "MetaElement"
+ | partials - 0xb7cde788
+ | kind - "struct"
+ | sym:weak - "1"
+ | templateparms - typename S,typename T
+ | sym:symtab - 0xb7cd59e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | sym:name - "Element"
+ | templatetype - "classforward"
+ | name - "Element"
+ | kind - "struct"
+ | sym:weak - "1"
+ | templateparms - typename S,typename T
+ | sym:symtab - 0xb7cd59e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ class ----------------------------------------
+ | name - "vcsn::default_slot_tag"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cd61a8
+ | allows_typedef - "1"
+ | typepass:visit - "1"
+ | allocate:visit - "1"
+ | kind - "struct"
+ | sym:name - "default_slot_tag"
+ | allocate:default_constructor - "1"
+ | allocate:default_destructor - "1"
+ | module - 0xb7cf9cc8
+ | sym:overname - "__SWIG_0"
+ | typescope - 0xb7cfa108
+ |
+ +++ template ----------------------------------------
+ | sym:name - "SetSlot"
+ | templatetype - "classforward"
+ | name - "SetSlot"
+ | kind - "struct"
+ | sym:weak - "1"
+ | templateparms - typename S,typename Tag
+ | sym:symtab - 0xb7cd59e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | sym:name - "Structure"
+ | templatetype - "classforward"
+ | name - "Structure"
+ | kind - "struct"
+ | sym:weak - "1"
+ | templateparms - typename Self
+ | sym:symtab - 0xb7cd59e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | sym:name - "virtual_types"
+ | templatetype - "classforward"
+ | name - "virtual_types"
+ | partials - 0xb7cda8d8
+ | kind - "struct"
+ | sym:weak - "1"
+ | templateparms - typename Self
+ | sym:symtab - 0xb7cd59e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ class ----------------------------------------
+ | name - "vcsn::undefined_type"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cd6728
+ | allows_typedef - "1"
+ | allocate:visit - "1"
+ | typepass:visit - "1"
+ | kind - "struct"
+ | sym:name - "undefined_type"
+ | allocate:default_constructor - "1"
+ | allocate:default_destructor - "1"
+ | module - 0xb7cf9cc8
+ | sym:overname - "__SWIG_0"
+ | typescope - 0xb7cfa328
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/misc/selectors.hh"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/misc/unique.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "utility"
+ | name - "utility"
+ | typescope - 0xb7cfa358
+ | symtab - 0xb7cd6868
+ | sym:symtab - 0xb7cd02e8
+ | sym:overname - "__SWIG_0"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "unique"
+ | name - "unique"
+ | typescope - 0xb7cfa3a8
+ | symtab - 0xb7cd7298
+ | sym:symtab - 0xb7cd6868
+ | sym:overname - "__SWIG_0"
+
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "UniqueListBase"
+ | sym:symtab - 0xb7cd6908
+ | symtab - 0xb7cd6a28
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "UniqueListBase"
+ | sym:overname - "__SWIG_0"
+ | templateparms - class T
+
+ +++ destructor ----------------------------------------
+ | sym:name - "~UniqueListBase"
+ | name - "~UniqueListBase"
+ | decl - "f()."
+ | storage - "virtual"
+ | sym:symtab - 0xb7cd6a28
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "uniquelist_base"
+ | name - "utility::unique::UniqueMap::uniquelist_base"
+ | decl - ""
+ | storage - "typedef"
+ | type - "utility::unique::UniqueListBase<(int)>"
+ | sym:symtab - 0xb7cd6908
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "uniquelist"
+ | sym:symtab - 0xb7cd6908
+ | symtab - 0xb7cd7018
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "uniquelist"
+ | privatebaselist - 0xb7cd6f18
+ | protectedbaselist - 0xb7cd6ef8
+ | baselist - 0xb7cd6ed8
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename T
+
+ +++ destructor ----------------------------------------
+ | sym:name - "~uniquelist"
+ | name - "~uniquelist"
+ | decl - "f()."
+ | sym:symtab - 0xb7cd7018
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "UniqueMap"
+ | sym:symtab - 0xb7cd6908
+ | symtab - 0xb7cd7298
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "TiSlot"
+ | sym:overname - "__SWIG_0"
+ | templateparms - class T
+
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "TiSlot"
+ | sym:symtab - 0xb7cd7298
+ | symtab - 0xb7cd73f8
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "TiSlot"
+ | sym:overname - "__SWIG_0"
+ | templateparms - class U
+
+ +++ constructor ----------------------------------------
+ | sym:name - "TiSlot"
+ | name - "TiSlot"
+ | parms - std::type_info const &
+ | decl - "f(r.q(const).std::type_info)."
+ | feature:new - "1"
+ | sym:symtab - 0xb7cd73f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "id"
+ | name - "id"
+ | decl - "r."
+ | type - "q(const).std::type_info"
+ | sym:symtab - 0xb7cd73f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "operator =="
+ | name - "operator =="
+ | decl - "q(const).f(r.q(const).TiSlot)."
+ | parms - TiSlot const &
+ | type - "bool"
+ | sym:symtab - 0xb7cd73f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "operator <"
+ | name - "operator <"
+ | decl - "q(const).f(r.q(const).TiSlot)."
+ | parms - TiSlot const &
+ | type - "bool"
+ | sym:symtab - 0xb7cd73f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "ti_slot"
+ | name - "ti_slot"
+ | decl - ""
+ | storage - "typedef"
+ | type - "TiSlot<(int)>"
+ | sym:symtab - 0xb7cd7298
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "map_t"
+ | name - "map_t"
+ | decl - ""
+ | storage - "typedef"
+ | type - "std::map<(ti_slot,p.uniquelist_base)>"
+ | sym:symtab - 0xb7cd7298
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "instance"
+ | name - "instance"
+ | decl - "f().r."
+ | storage - "static"
+ | type - "map_t"
+ | sym:symtab - 0xb7cd7298
+ | sym:overname - "__SWIG_0"
+ |
+ +++ access ----------------------------------------
+ | kind - "protected"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "map_"
+ | name - "map_"
+ | decl - ""
+ | type - "map_t"
+ | sym:symtab - 0xb7cd7298
+ | sym:overname - "__SWIG_0"
+ |
+ +++ destructor ----------------------------------------
+ | sym:name - "~UniqueMap"
+ | name - "~UniqueMap"
+ | decl - "f()."
+ | sym:symtab - 0xb7cd7298
+ | sym:overname - "__SWIG_0"
+ |
+ +++ access ----------------------------------------
+ | kind - "public"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "unique_map"
+ | name - "utility::unique::UniqueMap::unique_map"
+ | decl - ""
+ | storage - "typedef"
+ | type - "utility::unique::UniqueMap<(int)>"
+ | sym:symtab - 0xb7cd7298
+ | sym:overname - "__SWIG_0"
+ |
+ +++ class ----------------------------------------
+ | name - "utility::unique::UniqueMap::unifiable"
+ | sym:symtab - 0xb7cd7298
+ | symtab - 0xb7cd8168
+ | allows_typedef - "1"
+ | typepass:visit - "1"
+ | allocate:visit - "1"
+ | kind - "struct"
+ | sym:name - "unifiable"
+ | allocate:default_constructor - "1"
+ | allocate:has_constructor - "1"
+ | allocate:public_constructor - "1"
+ | allocate:default_destructor - "1"
+ | module - 0xb7cf9cc8
+ | sym:overname - "__SWIG_0"
+ | typescope - 0xb7cfa818
+
+ +++ constructor ----------------------------------------
+ | sym:name - "unifiable"
+ | name - "utility::unique::UniqueMap::unifiable"
+ | decl - "f()."
+ | feature:new - "1"
+ | sym:overloaded - 0xb7cd8148
+ | csym:nextSibling - 0xb7cd8268
+ | sym:nextSibling - 0xb7cd8268
+ | sym:symtab - 0xb7cd8168
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constructor ----------------------------------------
+ | sym:name - "unifiable"
+ | name - "utility::unique::UniqueMap::unifiable"
+ | parms - utility::unique::unifiable const &
+ | decl - "f(r.q(const).unifiable)."
+ | feature:new - "1"
+ | sym:overloaded - 0xb7cd8148
+ | sym:previousSibling - 0xb7cd8148
+ | sym:symtab - 0xb7cd8168
+ | sym:overname - "__SWIG_1"
+ |
+ +++ access ----------------------------------------
+ | kind - "private"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "get"
+ | sym:symtab - 0xb7cd7298
+ | sym:name - "get"
+ | csym:nextSibling - 0xb7cd8788
+ | sym:nextSibling - 0xb7cd8988
+ | decl - "f(r.q(const).T).r."
+ | parms - T const &
+ | sym:overloaded - 0xb7cd8428
+ | type - "q(const).T"
+ | sym:overname - "__SWIG_0"
+ | storage - "friend"
+ | templateparms - typename T
+ |
+ +++ cdecl ----------------------------------------
+ | name - "unique_"
+ | decl - ""
+ | access - "private"
+ | type - "bool"
+ | sym:symtab - 0xb7cd8168
+ |
+ +++ access ----------------------------------------
+ | kind - "public"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | name - "get"
+ | decl - "f(r.q(const).T).r."
+ | parms - T const &
+ | error - "vcsn/include/vaucanson/misc/unique.hh:121:Identifier \'get\' redefined (ignored),\nvcsn/include/vaucanson/misc/unique.hh:108:previous definition of \'get\'.\n"
+ | sym:typename - "1"
+ | type - "q(const).T"
+ | csym:nextSibling - 0xb7cd8988
+ | templateparms - typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "get"
+ | sym:symtab - 0xb7cd7298
+ | sym:previousSibling - 0xb7cd8428
+ | sym:name - "get"
+ | decl - "f(p.q(const).T).p."
+ | sym:overloaded - 0xb7cd8428
+ | parms - T const *
+ | type - "q(const).T"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename T
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/structure.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | sym:previousSibling - 0xb7cd5a28
+ | csym:nextSibling - 0xb7cda888
+ | sym:nextSibling - 0xb7cda888
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "Structure"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cd8c98
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "Structure"
+ | privatebaselist - 0xb7cd8c28
+ | protectedbaselist - 0xb7cd8c18
+ | baselist - 0xb7cd8c08
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S
+
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "contains"
+ | sym:symtab - 0xb7cd8c98
+ | sym:nextSibling - 0xb7cd9238
+ | csym:nextSibling - 0xb7cd9238
+ | sym:name - "contains"
+ | decl - "q(const).f(r.q(const).Element<(S,T)>)."
+ | sym:overloaded - 0xb7cd8f28
+ | parms - Element<S,T > const &
+ | type - "bool"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "contains"
+ | sym:symtab - 0xb7cd8c98
+ | csym:nextSibling - 0xb7cd9448
+ | sym:previousSibling - 0xb7cd8f28
+ | sym:name - "contains"
+ | sym:nextSibling - 0xb7cd9448
+ | decl - "q(const).f(r.q(const).Element<(OtherS,T)>)."
+ | sym:overloaded - 0xb7cd8f28
+ | parms - Element<OtherS,T > const &
+ | type - "bool"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename OtherS,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "contains"
+ | sym:symtab - 0xb7cd8c98
+ | sym:previousSibling - 0xb7cd9238
+ | sym:name - "contains"
+ | decl - "q(const).f(r.q(const).T)."
+ | sym:overloaded - 0xb7cd8f28
+ | parms - T const &
+ | type - "bool"
+ | sym:overname - "__SWIG_2"
+ | templateparms - typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:name - "choose"
+ | name - "choose"
+ | decl - "q(const).f(r.q(const).T)."
+ | parms - T const &
+ | sym:typename - "1"
+ | type - "Element<(S,T)>"
+ | templateparms - class T
+ | sym:symtab - 0xb7cd8c98
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "self_t"
+ | name - "self_t"
+ | decl - ""
+ | storage - "typedef"
+ | type - "S"
+ | sym:symtab - 0xb7cd8c98
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "self"
+ | name - "self"
+ | decl - "f().r."
+ | sym:overloaded - 0xb7cd9848
+ | type - "self_t"
+ | csym:nextSibling - 0xb7cd9918
+ | sym:nextSibling - 0xb7cd9918
+ | sym:symtab - 0xb7cd8c98
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "self"
+ | name - "self"
+ | decl - "q(const).f().r."
+ | sym:overloaded - 0xb7cd9848
+ | type - "q(const).self_t"
+ | sym:previousSibling - 0xb7cd9848
+ | sym:symtab - 0xb7cd8c98
+ | sym:overname - "__SWIG_1"
+ |
+ +++ access ----------------------------------------
+ | kind - "protected"
+ |
+ +++ constructor ----------------------------------------
+ | name - "Structure"
+ | decl - "f()."
+ | access - "protected"
+ | feature:new - "1"
+ | csym:nextSibling - 0xb7cd9af8
+ | sym:symtab - 0xb7cd8c98
+ |
+ +++ constructor ----------------------------------------
+ | name - "Structure"
+ | parms - Structure const &
+ | decl - "f(r.q(const).Structure)."
+ | access - "protected"
+ | feature:new - "1"
+ | sym:symtab - 0xb7cd8c98
+ |
+ +++ access ----------------------------------------
+ | kind - "public"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator !="
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator !="
+ | csym:nextSibling - 0xb7ce5608
+ | sym:nextSibling - 0xb7ce5608
+ | decl - "f(r.q(const).vcsn::Structure<(S)>,r.q(const).vcsn::Structure<(S)>)."
+ | parms - vcsn::Structure<S > const &,vcsn::Structure<S > const &
+ | sym:overloaded - 0xb7cd9f48
+ | type - "bool"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "dynamic_traits<(Structure<(S)>)>"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cda158
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "dynamic_traits<(Structure<(S)>)>"
+ | partialargs - "dynamic_traits<(vcsn::Structure<($1)>)>"
+ | sym:overname - "__SWIG_0"
+ | templateparms - Structure<S >
+ | partialspecialization - "1"
+
+ +++ cdecl ----------------------------------------
+ | sym:name - "ret"
+ | name - "ret"
+ | decl - ""
+ | storage - "static"
+ | value - "false"
+ | type - "q(const).bool"
+ | sym:symtab - 0xb7cda158
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "virtual_types<(Structure<(S)>)>"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cda6c8
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "virtual_types<(Structure<(S)>)>"
+ | partialargs - "virtual_types<(vcsn::Structure<($1)>)>"
+ | sym:overname - "__SWIG_0"
+ | templateparms - Structure<S >
+ | partialspecialization - "1"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/syntactic_decorator.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | sym:previousSibling - 0xb7cd8a98
+ | csym:nextSibling - 0xb7cdddc8
+ | sym:nextSibling - 0xb7cdddc8
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "SyntacticDecorator"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cdaa08
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "SyntacticDecorator"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T
+
+ +++ cdecl ----------------------------------------
+ | sym:name - "dynamic_value"
+ | name - "dynamic_value"
+ | decl - ""
+ | storage - "static"
+ | value - "true"
+ | type - "q(const).bool"
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "structure"
+ | name - "structure"
+ | decl - "q(const).f().r."
+ | type - "q(const).S"
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "value"
+ | name - "value"
+ | decl - "f().r."
+ | sym:overloaded - 0xb7cdace8
+ | type - "T"
+ | csym:nextSibling - 0xb7cdadb8
+ | sym:nextSibling - 0xb7cdadb8
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "value"
+ | name - "value"
+ | decl - "q(const).f().r."
+ | sym:overloaded - 0xb7cdace8
+ | type - "q(const).T"
+ | sym:previousSibling - 0xb7cdace8
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_1"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator +="
+ | sym:symtab - 0xb7cdaa08
+ | sym:nextSibling - 0xb7cdb3e8
+ | csym:nextSibling - 0xb7cdb3e8
+ | sym:name - "operator +="
+ | decl - "f(r.q(const).Element<(OtherS,U)>).r."
+ | sym:overloaded - 0xb7cdb128
+ | parms - Element<OtherS,U > const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename OtherS,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator +="
+ | sym:symtab - 0xb7cdaa08
+ | sym:previousSibling - 0xb7cdb128
+ | sym:name - "operator +="
+ | decl - "f(r.q(const).U).r."
+ | sym:overloaded - 0xb7cdb128
+ | parms - U const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator -="
+ | sym:symtab - 0xb7cdaa08
+ | sym:nextSibling - 0xb7cdba68
+ | csym:nextSibling - 0xb7cdba68
+ | sym:name - "operator -="
+ | decl - "f(r.q(const).Element<(OtherS,U)>).r."
+ | sym:overloaded - 0xb7cdb7a8
+ | parms - Element<OtherS,U > const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename OtherS,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator -="
+ | sym:symtab - 0xb7cdaa08
+ | sym:previousSibling - 0xb7cdb7a8
+ | sym:name - "operator -="
+ | decl - "f(r.q(const).U).r."
+ | sym:overloaded - 0xb7cdb7a8
+ | parms - U const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator /="
+ | sym:symtab - 0xb7cdaa08
+ | sym:nextSibling - 0xb7cdc0e8
+ | csym:nextSibling - 0xb7cdc0e8
+ | sym:name - "operator /="
+ | decl - "f(r.q(const).Element<(OtherS,U)>).r."
+ | sym:overloaded - 0xb7cdbe28
+ | parms - Element<OtherS,U > const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename OtherS,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator /="
+ | sym:symtab - 0xb7cdaa08
+ | sym:previousSibling - 0xb7cdbe28
+ | sym:name - "operator /="
+ | decl - "f(r.q(const).U).r."
+ | sym:overloaded - 0xb7cdbe28
+ | parms - U const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator *="
+ | sym:symtab - 0xb7cdaa08
+ | sym:nextSibling - 0xb7cdc768
+ | csym:nextSibling - 0xb7cdc768
+ | sym:name - "operator *="
+ | decl - "f(r.q(const).Element<(OtherS,U)>).r."
+ | sym:overloaded - 0xb7cdc4a8
+ | parms - Element<OtherS,U > const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename OtherS,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator *="
+ | sym:symtab - 0xb7cdaa08
+ | sym:previousSibling - 0xb7cdc4a8
+ | sym:name - "operator *="
+ | decl - "f(r.q(const).U).r."
+ | sym:overloaded - 0xb7cdc4a8
+ | parms - U const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator %="
+ | sym:symtab - 0xb7cdaa08
+ | sym:nextSibling - 0xb7cdcde8
+ | csym:nextSibling - 0xb7cdcde8
+ | sym:name - "operator %="
+ | decl - "f(r.q(const).Element<(OtherS,U)>).r."
+ | sym:overloaded - 0xb7cdcb28
+ | parms - Element<OtherS,U > const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename OtherS,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator %="
+ | sym:symtab - 0xb7cdaa08
+ | sym:previousSibling - 0xb7cdcb28
+ | sym:name - "operator %="
+ | decl - "f(r.q(const).U).r."
+ | sym:overloaded - 0xb7cdcb28
+ | parms - U const &
+ | type - "Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename U
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "operator ++"
+ | name - "operator ++"
+ | decl - "f().r."
+ | sym:overloaded - 0xb7cdcf78
+ | type - "Element<(S,T)>"
+ | csym:nextSibling - 0xb7cdd128
+ | sym:nextSibling - 0xb7cdd128
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "operator ++"
+ | name - "operator ++"
+ | decl - "f(int)."
+ | parms - int
+ | sym:overloaded - 0xb7cdcf78
+ | type - "Element<(S,T)>"
+ | sym:previousSibling - 0xb7cdcf78
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_1"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "operator --"
+ | name - "operator --"
+ | decl - "f().r."
+ | sym:overloaded - 0xb7cdd268
+ | type - "Element<(S,T)>"
+ | csym:nextSibling - 0xb7cdd418
+ | sym:nextSibling - 0xb7cdd418
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "operator --"
+ | name - "operator --"
+ | decl - "f(int)."
+ | parms - int
+ | sym:overloaded - 0xb7cdd268
+ | type - "Element<(S,T)>"
+ | sym:previousSibling - 0xb7cdd268
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_1"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:name - "swap"
+ | name - "swap"
+ | decl - "f(r.Element<(S,U)>).r."
+ | parms - Element<S,U > &
+ | sym:typename - "1"
+ | type - "Element<(S,T)>"
+ | templateparms - typename U
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "self"
+ | name - "self"
+ | decl - "f().r."
+ | sym:overloaded - 0xb7cdd898
+ | type - "Element<(S,T)>"
+ | csym:nextSibling - 0xb7cdda18
+ | sym:nextSibling - 0xb7cdda18
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "self"
+ | name - "self"
+ | decl - "q(const).f().r."
+ | sym:overloaded - 0xb7cdd898
+ | type - "q(const).Element<(S,T)>"
+ | sym:previousSibling - 0xb7cdd898
+ | sym:symtab - 0xb7cdaa08
+ | sym:overname - "__SWIG_1"
+ |
+ +++ access ----------------------------------------
+ | kind - "protected"
+ |
+ +++ constructor ----------------------------------------
+ | name - "SyntacticDecorator"
+ | decl - "f()."
+ | access - "protected"
+ | feature:new - "1"
+ | csym:nextSibling - 0xb7cddbf8
+ | sym:symtab - 0xb7cdaa08
+ |
+ +++ constructor ----------------------------------------
+ | name - "SyntacticDecorator"
+ | parms - SyntacticDecorator const &
+ | decl - "f(r.q(const).SyntacticDecorator)."
+ | access - "protected"
+ | feature:new - "1"
+ | sym:symtab - 0xb7cdaa08
+ |
+ +++ access ----------------------------------------
+ | kind - "public"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/meta_element_root.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | sym:previousSibling - 0xb7cda888
+ | csym:nextSibling - 0xb7cde7b8
+ | sym:nextSibling - 0xb7cde7b8
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "MetaElement<(Structure<(S)>,T)>"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cde208
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "MetaElement<(Structure<(S)>,T)>"
+ | privatebaselist - 0xb7cde178
+ | protectedbaselist - 0xb7cde168
+ | baselist - 0xb7cde158
+ | partialargs - "MetaElement<(vcsn::Structure<($1)>,$2)>"
+ | sym:overname - "__SWIG_0"
+ | templateparms - Structure<S >,typename T
+ | partialspecialization - "1"
+
+ +++ access ----------------------------------------
+ | kind - "protected"
+ |
+ +++ constructor ----------------------------------------
+ | name - "MetaElement"
+ | decl - "f()."
+ | access - "protected"
+ | feature:new - "1"
+ | csym:nextSibling - 0xb7cde478
+ | sym:symtab - 0xb7cde208
+ |
+ +++ constructor ----------------------------------------
+ | name - "MetaElement"
+ | parms - MetaElement const &
+ | decl - "f(r.q(const).MetaElement)."
+ | access - "protected"
+ | feature:new - "1"
+ | sym:symtab - 0xb7cde208
+ |
+ +++ access ----------------------------------------
+ | kind - "public"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/element_op_traits.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | sym:previousSibling - 0xb7cdddc8
+ | csym:nextSibling - 0xb7ce0778
+ | sym:nextSibling - 0xb7ce0778
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "op_add_traits"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cde9f8
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "op_add_traits"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S1,typename S2,typename T1,typename T2
+
+ +++ cdecl ----------------------------------------
+ | sym:name - "ret_t"
+ | name - "ret_t"
+ | decl - ""
+ | storage - "typedef"
+ | type - "Element<(S1,T1)>"
+ | sym:symtab - 0xb7cde9f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "op_sub_traits"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cdf048
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "op_sub_traits"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S1,typename S2,typename T1,typename T2
+
+ +++ cdecl ----------------------------------------
+ | sym:name - "ret_t"
+ | name - "ret_t"
+ | decl - ""
+ | storage - "typedef"
+ | type - "Element<(S1,T1)>"
+ | sym:symtab - 0xb7cdf048
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "op_mul_traits"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cdf698
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "op_mul_traits"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S1,typename S2,typename T1,typename T2
+
+ +++ cdecl ----------------------------------------
+ | sym:name - "ret_t"
+ | name - "ret_t"
+ | decl - ""
+ | storage - "typedef"
+ | type - "Element<(S1,T1)>"
+ | sym:symtab - 0xb7cdf698
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "op_div_traits"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cdfce8
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "op_div_traits"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S1,typename S2,typename T1,typename T2
+
+ +++ cdecl ----------------------------------------
+ | sym:name - "ret_t"
+ | name - "ret_t"
+ | decl - ""
+ | storage - "typedef"
+ | type - "Element<(S1,T1)>"
+ | sym:symtab - 0xb7cdfce8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "op_mod_traits"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7ce0338
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "op_mod_traits"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S1,typename S2,typename T1,typename T2
+
+ +++ cdecl ----------------------------------------
+ | sym:name - "ret_t"
+ | name - "ret_t"
+ | decl - ""
+ | storage - "typedef"
+ | type - "Element<(S1,T1)>"
+ | sym:symtab - 0xb7ce0338
+ | sym:overname - "__SWIG_0"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/element_ops.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | sym:previousSibling - 0xb7cde7b8
+ | csym:nextSibling - 0xb7ced2a8
+ | sym:nextSibling - 0xb7ced2a8
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator <"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator <"
+ | csym:nextSibling - 0xb7ce22b8
+ | sym:nextSibling - 0xb7ce22b8
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7ce0ce8
+ | type - "bool"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator >"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator >"
+ | csym:nextSibling - 0xb7ce2728
+ | sym:nextSibling - 0xb7ce2728
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7ce12a8
+ | type - "bool"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator <="
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator <="
+ | csym:nextSibling - 0xb7ce3008
+ | sym:nextSibling - 0xb7ce3008
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7ce1868
+ | type - "bool"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator >="
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator >="
+ | csym:nextSibling - 0xb7ce2b98
+ | sym:nextSibling - 0xb7ce2b98
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7ce1e28
+ | type - "bool"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator <"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce0ce8
+ | sym:name - "operator <"
+ | csym:nextSibling - 0xb7ce3478
+ | sym:nextSibling - 0xb7ce3478
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7ce0ce8
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "bool"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator >"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce12a8
+ | sym:name - "operator >"
+ | csym:nextSibling - 0xb7ce38e8
+ | sym:nextSibling - 0xb7ce38e8
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7ce12a8
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "bool"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator >="
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce1e28
+ | sym:name - "operator >="
+ | csym:nextSibling - 0xb7ce3d58
+ | sym:nextSibling - 0xb7ce3d58
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7ce1e28
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "bool"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator <="
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce1868
+ | sym:name - "operator <="
+ | csym:nextSibling - 0xb7ce41c8
+ | sym:nextSibling - 0xb7ce41c8
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7ce1868
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "bool"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator <"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce22b8
+ | sym:name - "operator <"
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce0ce8
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "bool"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator >"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce2728
+ | sym:name - "operator >"
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce12a8
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "bool"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator >="
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce2b98
+ | sym:name - "operator >="
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce1e28
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "bool"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator <="
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce3008
+ | sym:name - "operator <="
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce1868
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "bool"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator =="
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator =="
+ | csym:nextSibling - 0xb7ce4bf8
+ | sym:nextSibling - 0xb7ce4bf8
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7ce4768
+ | type - "bool"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator =="
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce4768
+ | sym:name - "operator =="
+ | csym:nextSibling - 0xb7ce5068
+ | sym:nextSibling - 0xb7ce5068
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7ce4768
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "bool"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator =="
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce4bf8
+ | sym:name - "operator =="
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce4768
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "bool"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator !="
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7cd9f48
+ | sym:name - "operator !="
+ | csym:nextSibling - 0xb7ce5a98
+ | sym:nextSibling - 0xb7ce5a98
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | sym:overloaded - 0xb7cd9f48
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | type - "bool"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator !="
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce5608
+ | sym:name - "operator !="
+ | csym:nextSibling - 0xb7ce5f08
+ | sym:nextSibling - 0xb7ce5f08
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7cd9f48
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "bool"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator !="
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce5a98
+ | sym:name - "operator !="
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7cd9f48
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "bool"
+ | sym:overname - "__SWIG_3"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator +"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator +"
+ | csym:nextSibling - 0xb7ce6b98
+ | sym:nextSibling - 0xb7ce6b98
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7ce6638
+ | type - "vcsn::op_add_traits<(S1,S2,T1,T2)>::ret_t"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator +"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce6638
+ | sym:name - "operator +"
+ | csym:nextSibling - 0xb7ce70d8
+ | sym:nextSibling - 0xb7ce70d8
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7ce6638
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator +"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce6b98
+ | sym:name - "operator +"
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce6638
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator -"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator -"
+ | csym:nextSibling - 0xb7ce7d68
+ | sym:nextSibling - 0xb7ce7d68
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7ce7808
+ | type - "vcsn::op_sub_traits<(S1,S2,T1,T2)>::ret_t"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator -"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce7808
+ | sym:name - "operator -"
+ | csym:nextSibling - 0xb7ce82a8
+ | sym:nextSibling - 0xb7ce82a8
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7ce7808
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator -"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce7d68
+ | sym:name - "operator -"
+ | csym:nextSibling - 0xb7cebc18
+ | sym:nextSibling - 0xb7cebc18
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce7808
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator *"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator *"
+ | csym:nextSibling - 0xb7ce8f38
+ | sym:nextSibling - 0xb7ce8f38
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7ce89d8
+ | type - "vcsn::op_mul_traits<(S1,S2,T1,T2)>::ret_t"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator *"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce89d8
+ | sym:name - "operator *"
+ | csym:nextSibling - 0xb7ce9478
+ | sym:nextSibling - 0xb7ce9478
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7ce89d8
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator *"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce8f38
+ | sym:name - "operator *"
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce89d8
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator /"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator /"
+ | csym:nextSibling - 0xb7cea108
+ | sym:nextSibling - 0xb7cea108
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7ce9ba8
+ | type - "vcsn::op_div_traits<(S1,S2,T1,T2)>::ret_t"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator /"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce9ba8
+ | sym:name - "operator /"
+ | csym:nextSibling - 0xb7cea648
+ | sym:nextSibling - 0xb7cea648
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7ce9ba8
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator /"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7cea108
+ | sym:name - "operator /"
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce9ba8
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator %"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator %"
+ | csym:nextSibling - 0xb7ceb2d8
+ | sym:nextSibling - 0xb7ceb2d8
+ | decl - "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ | parms - vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ | sym:overloaded - 0xb7cead78
+ | type - "vcsn::op_mod_traits<(S1,S2,T1,T2)>::ret_t"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename S1,typename T1,typename S2,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator %"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7cead78
+ | sym:name - "operator %"
+ | csym:nextSibling - 0xb7ceb818
+ | sym:nextSibling - 0xb7ceb818
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ | sym:overloaded - 0xb7cead78
+ | parms - vcsn::Element<S,T > const &,U const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_1"
+ | storage - "static"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator %"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ceb2d8
+ | sym:name - "operator %"
+ | decl - "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7cead78
+ | parms - U const &,vcsn::Element<S,T > const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_2"
+ | storage - "static"
+ | templateparms - typename U,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator -"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ce82a8
+ | sym:name - "operator -"
+ | decl - "f(r.q(const).vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ce7808
+ | parms - vcsn::Element<S,T > const &
+ | type - "vcsn::Element<(S,T)>"
+ | sym:overname - "__SWIG_3"
+ | storage - "static"
+ | templateparms - typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator <<"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator <<"
+ | decl - "f(r.St,r.q(const).vcsn::Element<(S,T)>).r."
+ | parms - St &,vcsn::Element<S,T > const &
+ | type - "St"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename St,typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator >>"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "operator >>"
+ | decl - "f(r.St,r.q(const).vcsn::Element<(S,T)>).r."
+ | parms - St &,vcsn::Element<S,T > const &
+ | type - "St"
+ | sym:overname - "__SWIG_0"
+ | storage - "static"
+ | templateparms - typename St,typename S,typename T
+ |
+ +++ namespace ----------------------------------------
+ | sym:name - "std"
+ | name - "std"
+ | sym:previousSibling - 0xb7cd4398
+ | typescope - 0xb7cf9d38
+ | symtab - 0xb7cd4338
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "swap"
+ | sym:symtab - 0xb7cd4338
+ | sym:nextSibling - 0xb7cece18
+ | csym:nextSibling - 0xb7cece18
+ | sym:name - "swap"
+ | decl - "f(r.vcsn::Element<(S,T1)>,r.vcsn::Element<(S,T2)>)."
+ | parms - vcsn::Element<S,T1 > &,vcsn::Element<S,T2 > &
+ | sym:overloaded - 0xb7ceca48
+ | type - "void"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T1,typename T2
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "swap"
+ | sym:symtab - 0xb7cd4338
+ | sym:previousSibling - 0xb7ceca48
+ | sym:name - "swap"
+ | csym:nextSibling - 0xb7ced1c8
+ | sym:nextSibling - 0xb7ced1c8
+ | decl - "f(r.vcsn::Element<(S,T)>,r.T)."
+ | sym:overloaded - 0xb7ceca48
+ | parms - vcsn::Element<S,T > &,T &
+ | type - "void"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "swap"
+ | sym:symtab - 0xb7cd4338
+ | sym:previousSibling - 0xb7cece18
+ | sym:name - "swap"
+ | decl - "f(r.T,r.vcsn::Element<(S,T)>)."
+ | sym:overloaded - 0xb7ceca48
+ | parms - T &,vcsn::Element<S,T > &
+ | type - "void"
+ | sym:overname - "__SWIG_2"
+ | templateparms - typename T,typename S
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/default_ops.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | sym:previousSibling - 0xb7ce0778
+ | csym:nextSibling - 0xb7cf4b78
+ | sym:nextSibling - 0xb7cf4b78
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:name - "op_contains"
+ | name - "op_contains"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).T)."
+ | parms - Structure<S > const &,T const &
+ | sym:typename - "1"
+ | type - "bool"
+ | templateparms - typename S,typename T
+ | sym:symtab - 0xb7cd59e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_eq"
+ | sym:symtab - 0xb7cd59e8
+ | csym:nextSibling - 0xb7cedfd8
+ | sym:name - "op_eq"
+ | sym:nextSibling - 0xb7cedfd8
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ | parms - Structure<S > const &,T const &,U const &
+ | sym:overloaded - 0xb7ceda28
+ | type - "bool"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_eq"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ceda28
+ | sym:name - "op_eq"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(V)>,r.q(const).T,r.q(const).U)."
+ | sym:overloaded - 0xb7ceda28
+ | parms - Structure<S > const &,Structure<V > const &,T const &,U const &
+ | type - "bool"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename S,typename V,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_lt"
+ | sym:symtab - 0xb7cd59e8
+ | csym:nextSibling - 0xb7ceea18
+ | sym:name - "op_lt"
+ | sym:nextSibling - 0xb7ceea18
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ | parms - Structure<S > const &,T const &,U const &
+ | sym:overloaded - 0xb7cee468
+ | type - "bool"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_lt"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7cee468
+ | sym:name - "op_lt"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(V)>,r.q(const).T,r.q(const).U)."
+ | sym:overloaded - 0xb7cee468
+ | parms - Structure<S > const &,Structure<V > const &,T const &,U const &
+ | type - "bool"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename S,typename V,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_convert"
+ | sym:symtab - 0xb7cd59e8
+ | csym:nextSibling - 0xb7cef2c8
+ | sym:name - "op_convert"
+ | sym:nextSibling - 0xb7cef2c8
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).R,r.q(const).T)."
+ | parms - Structure<S > const &,R const &,T const &
+ | sym:overloaded - 0xb7ceeeb8
+ | type - "R"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename R,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_convert"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7ceeeb8
+ | sym:name - "op_convert"
+ | csym:nextSibling - 0xb7cef7c8
+ | sym:nextSibling - 0xb7cef7c8
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).T,r.q(const).T).r."
+ | sym:overloaded - 0xb7ceeeb8
+ | parms - Structure<S > const &,T const &,T const &
+ | type - "q(const).T"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_convert"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7cef2c8
+ | sym:name - "op_convert"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).T,r.q(const).Structure<(S)>,r.q(const).T).r."
+ | sym:overloaded - 0xb7ceeeb8
+ | parms - Structure<S > const &,T const &,Structure<S > const &,T const &
+ | type - "q(const).T"
+ | sym:overname - "__SWIG_2"
+ | templateparms - typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_default"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_default"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).T)."
+ | parms - Structure<S > const &,T const &
+ | type - "T"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_swap"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_swap"
+ | decl - "f(r.q(const).Structure<(S)>,r.T,r.T)."
+ | parms - Structure<S > const &,T &,T &
+ | type - "void"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_assign"
+ | sym:symtab - 0xb7cd59e8
+ | csym:nextSibling - 0xb7cf0918
+ | sym:name - "op_assign"
+ | sym:nextSibling - 0xb7cf0918
+ | decl - "f(r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ | parms - Structure<S > const &,T &,U const &
+ | sym:overloaded - 0xb7cf0388
+ | type - "void"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_assign"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7cf0388
+ | sym:name - "op_assign"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ | sym:overloaded - 0xb7cf0388
+ | parms - Structure<S > const &,Structure<S > const &,T &,U const &
+ | type - "void"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_in_add"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_in_add"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T &,U const &
+ | type - "void"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_in_sub"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_in_sub"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T &,U const &
+ | type - "void"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_in_mul"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_in_mul"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T &,U const &
+ | type - "void"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_in_div"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_in_div"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T &,U const &
+ | type - "void"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_in_mod"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_in_mod"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T &,U const &
+ | type - "void"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_add"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_add"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T const &,U const &
+ | type - "T"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_sub"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_sub"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T const &,U const &
+ | type - "T"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_mul"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_mul"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T const &,U const &
+ | type - "T"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_div"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_div"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T const &,U const &
+ | type - "T"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_mod"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_mod"
+ | decl - "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ | parms - Structure<S > const &,Structure<S > const &,T const &,U const &
+ | type - "T"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "op_rin"
+ | sym:symtab - 0xb7cd59e8
+ | sym:name - "op_rin"
+ | decl - "f(r.q(const).Structure<(S)>,r.St,r.q(const).T).r."
+ | parms - Structure<S > const &,St &,T const &
+ | type - "St"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename St,typename T
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:name - "op_rout"
+ | name - "op_rout"
+ | decl - "f(r.q(const).Structure<(S)>,r.St,r.q(const).T).r."
+ | parms - Structure<S > const &,St &,T const &
+ | sym:typename - "1"
+ | type - "St"
+ | templateparms - typename S,typename St,typename T
+ | sym:symtab - 0xb7cd59e8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/slots.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | sym:previousSibling - 0xb7ced2a8
+ | csym:nextSibling - 0xb7cf6a18
+ | sym:nextSibling - 0xb7cf6a18
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "SetSlotAttribute"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cf4d38
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "SetSlotAttribute"
+ | partials - 0xb7cf6128
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,bool
+
+ +++ constructor ----------------------------------------
+ | sym:name - "SetSlotAttribute"
+ | name - "SetSlotAttribute"
+ | decl - "f()."
+ | feature:new - "1"
+ | sym:overloaded - 0xb7cf4e28
+ | csym:nextSibling - 0xb7cf4f48
+ | sym:nextSibling - 0xb7cf4f48
+ | sym:symtab - 0xb7cf4d38
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constructor ----------------------------------------
+ | name - "SetSlotAttribute"
+ | sym:symtab - 0xb7cf4d38
+ | sym:nextSibling - 0xb7cf5068
+ | csym:nextSibling - 0xb7cf5068
+ | sym:previousSibling - 0xb7cf4e28
+ | sym:name - "SetSlotAttribute"
+ | decl - "f(r.q(const).SetSlotAttribute)."
+ | sym:overloaded - 0xb7cf4e28
+ | parms - SetSlotAttribute const &
+ | sym:overname - "__SWIG_1"
+ | feature:new - "1"
+ |
+ +++ constructor ----------------------------------------
+ | sym:name - "SetSlotAttribute"
+ | name - "SetSlotAttribute"
+ | parms - S const &
+ | decl - "f(r.q(const).S)."
+ | feature:new - "1"
+ | sym:overloaded - 0xb7cf4e28
+ | sym:previousSibling - 0xb7cf4f48
+ | sym:symtab - 0xb7cf4d38
+ | sym:overname - "__SWIG_2"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "_structure_get"
+ | name - "_structure_get"
+ | decl - "q(const).f().r."
+ | type - "q(const).S"
+ | sym:symtab - 0xb7cf4d38
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "_structure_assign"
+ | name - "_structure_assign"
+ | decl - "f(r.q(const).SetSlotAttribute)."
+ | parms - SetSlotAttribute const &
+ | type - "void"
+ | sym:symtab - 0xb7cf4d38
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "_structure_attach"
+ | name - "_structure_attach"
+ | decl - "f(r.q(const).S)."
+ | parms - S const &
+ | type - "void"
+ | sym:symtab - 0xb7cf4d38
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "_structure_bound"
+ | name - "_structure_bound"
+ | decl - "q(const).f()."
+ | type - "bool"
+ | sym:symtab - 0xb7cf4d38
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "SetSlotAttribute<(S,true)>"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cf56f8
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "SetSlotAttribute<(S,true)>"
+ | partialargs - "SetSlotAttribute<($1,true)>"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,true
+ | partialspecialization - "1"
+
+ +++ constructor ----------------------------------------
+ | sym:name - "SetSlotAttribute"
+ | name - "SetSlotAttribute"
+ | decl - "f()."
+ | feature:new - "1"
+ | sym:overloaded - 0xb7cf57b8
+ | csym:nextSibling - 0xb7cf58d8
+ | sym:nextSibling - 0xb7cf58d8
+ | sym:symtab - 0xb7cf56f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constructor ----------------------------------------
+ | name - "SetSlotAttribute"
+ | sym:symtab - 0xb7cf56f8
+ | sym:nextSibling - 0xb7cf59f8
+ | csym:nextSibling - 0xb7cf59f8
+ | sym:previousSibling - 0xb7cf57b8
+ | sym:name - "SetSlotAttribute"
+ | decl - "f(r.q(const).SetSlotAttribute)."
+ | sym:overloaded - 0xb7cf57b8
+ | parms - SetSlotAttribute const &
+ | sym:overname - "__SWIG_1"
+ | feature:new - "1"
+ |
+ +++ constructor ----------------------------------------
+ | sym:name - "SetSlotAttribute"
+ | name - "SetSlotAttribute"
+ | parms - S const &
+ | decl - "f(r.q(const).S)."
+ | feature:new - "1"
+ | sym:overloaded - 0xb7cf57b8
+ | sym:previousSibling - 0xb7cf58d8
+ | sym:symtab - 0xb7cf56f8
+ | sym:overname - "__SWIG_2"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "_structure_get"
+ | name - "_structure_get"
+ | decl - "q(const).f().r."
+ | type - "q(const).S"
+ | sym:symtab - 0xb7cf56f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "_structure_assign"
+ | name - "_structure_assign"
+ | decl - "f(r.q(const).SetSlotAttribute)."
+ | parms - SetSlotAttribute const &
+ | type - "void"
+ | sym:symtab - 0xb7cf56f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "_structure_attach"
+ | name - "_structure_attach"
+ | decl - "f(r.q(const).S)."
+ | parms - S const &
+ | type - "void"
+ | sym:symtab - 0xb7cf56f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "_structure_bound"
+ | name - "_structure_bound"
+ | decl - "q(const).f()."
+ | type - "bool"
+ | sym:symtab - 0xb7cf56f8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ access ----------------------------------------
+ | kind - "protected"
+ |
+ +++ cdecl ----------------------------------------
+ | name - "s_"
+ | decl - "p."
+ | access - "protected"
+ | type - "q(const).S"
+ | sym:symtab - 0xb7cf56f8
+ |
+ +++ access ----------------------------------------
+ | kind - "public"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "SetSlot"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cf64a8
+ | allows_typedef - "1"
+ | kind - "struct"
+ | sym:name - "SetSlot"
+ | privatebaselist - 0xb7cf63d8
+ | protectedbaselist - 0xb7cf63c8
+ | baselist - 0xb7cf63b8
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename Tag
+
+ +++ cdecl ----------------------------------------
+ | sym:name - "tag_type"
+ | name - "tag_type"
+ | decl - ""
+ | storage - "typedef"
+ | type - "Tag"
+ | sym:symtab - 0xb7cf64a8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constructor ----------------------------------------
+ | sym:name - "SetSlot"
+ | name - "SetSlot"
+ | decl - "f()."
+ | feature:new - "1"
+ | sym:overloaded - 0xb7cf6648
+ | csym:nextSibling - 0xb7cf6768
+ | sym:nextSibling - 0xb7cf6768
+ | sym:symtab - 0xb7cf64a8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constructor ----------------------------------------
+ | name - "SetSlot"
+ | sym:symtab - 0xb7cf64a8
+ | sym:nextSibling - 0xb7cf6888
+ | csym:nextSibling - 0xb7cf6888
+ | sym:previousSibling - 0xb7cf6648
+ | sym:name - "SetSlot"
+ | decl - "f(r.q(const).SetSlot)."
+ | sym:overloaded - 0xb7cf6648
+ | parms - SetSlot const &
+ | sym:overname - "__SWIG_1"
+ | feature:new - "1"
+ |
+ +++ constructor ----------------------------------------
+ | sym:name - "SetSlot"
+ | name - "SetSlot"
+ | parms - S const &
+ | decl - "f(r.q(const).S)."
+ | feature:new - "1"
+ | sym:overloaded - 0xb7cf6648
+ | sym:previousSibling - 0xb7cf6768
+ | sym:symtab - 0xb7cf64a8
+ | sym:overname - "__SWIG_2"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/element.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | sym:previousSibling - 0xb7cf4b78
+ | csym:nextSibling - 0xb7cf9498
+ | sym:nextSibling - 0xb7cf9498
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "class"
+ | sym:typename - "1"
+ | name - "Element"
+ | sym:symtab - 0xb7cd59e8
+ | symtab - 0xb7cf6de8
+ | allows_typedef - "1"
+ | kind - "class"
+ | sym:name - "Element"
+ | privatebaselist - 0xb7cf6cb8
+ | protectedbaselist - 0xb7cf6ca8
+ | baselist - 0xb7cf6c98
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename S,typename T
+
+ +++ access ----------------------------------------
+ | kind - "public"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "set_t"
+ | name - "set_t"
+ | decl - ""
+ | storage - "typedef"
+ | type - "S"
+ | sym:symtab - 0xb7cf6de8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "value_t"
+ | name - "value_t"
+ | decl - ""
+ | storage - "typedef"
+ | type - "T"
+ | sym:symtab - 0xb7cf6de8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "dynamic"
+ | name - "dynamic"
+ | decl - ""
+ | storage - "static"
+ | value - "dynamic_traits<(S)>::ret||MetaElement<(S,T)>::dynamic_value"
+ | type - "q(const).bool"
+ | sym:symtab - 0xb7cf6de8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constructor ----------------------------------------
+ | sym:name - "Element"
+ | name - "Element"
+ | decl - "f()."
+ | feature:new - "1"
+ | sym:overloaded - 0xb7cf72a8
+ | csym:nextSibling - 0xb7cf73c8
+ | sym:nextSibling - 0xb7cf73c8
+ | sym:symtab - 0xb7cf6de8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ constructor ----------------------------------------
+ | name - "Element"
+ | sym:symtab - 0xb7cf6de8
+ | csym:nextSibling - 0xb7cf78f8
+ | sym:nextSibling - 0xb7cf7608
+ | sym:previousSibling - 0xb7cf72a8
+ | sym:name - "Element"
+ | decl - "f(r.q(const).Element)."
+ | sym:overloaded - 0xb7cf72a8
+ | parms - Element const &
+ | sym:overname - "__SWIG_1"
+ | feature:new - "1"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "constructor"
+ | sym:typename - "1"
+ | name - "Element"
+ | sym:symtab - 0xb7cf6de8
+ | sym:previousSibling - 0xb7cf73c8
+ | csym:nextSibling - 0xb7cf72a8
+ | sym:name - "Element"
+ | sym:nextSibling - 0xb7cf78f8
+ | decl - "f(r.q(const).Element<(S,U)>)."
+ | sym:overloaded - 0xb7cf72a8
+ | parms - Element<S,U > const &
+ | sym:overname - "__SWIG_2"
+ | templateparms - typename U
+ | feature:new - "1"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "constructor"
+ | sym:typename - "1"
+ | name - "Element"
+ | sym:symtab - 0xb7cf6de8
+ | csym:nextSibling - 0xb7cf7a78
+ | sym:previousSibling - 0xb7cf7608
+ | sym:name - "Element"
+ | sym:nextSibling - 0xb7cf7a78
+ | decl - "f(r.q(const).Element<(OtherS,U)>)."
+ | sym:overloaded - 0xb7cf72a8
+ | parms - Element<OtherS,U > const &
+ | sym:overname - "__SWIG_3"
+ | templateparms - typename OtherS,typename U
+ | feature:new - "1"
+ |
+ +++ constructor ----------------------------------------
+ | name - "Element"
+ | sym:symtab - 0xb7cf6de8
+ | sym:nextSibling - 0xb7cf7c08
+ | csym:nextSibling - 0xb7cf7c08
+ | sym:previousSibling - 0xb7cf78f8
+ | sym:name - "Element"
+ | decl - "f(r.q(const).T)."
+ | sym:overloaded - 0xb7cf72a8
+ | parms - T const &
+ | sym:overname - "__SWIG_4"
+ | feature:new - "1"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "constructor"
+ | sym:typename - "1"
+ | name - "Element"
+ | sym:symtab - 0xb7cf6de8
+ | csym:nextSibling - 0xb7cf7d68
+ | sym:previousSibling - 0xb7cf7a78
+ | sym:name - "Element"
+ | sym:nextSibling - 0xb7cf7d68
+ | decl - "f(r.q(const).U)."
+ | sym:overloaded - 0xb7cf72a8
+ | parms - U const &
+ | sym:overname - "__SWIG_5"
+ | templateparms - typename U
+ | feature:new - "1"
+ |
+ +++ constructor ----------------------------------------
+ | name - "Element"
+ | sym:symtab - 0xb7cf6de8
+ | sym:nextSibling - 0xb7cf7f28
+ | csym:nextSibling - 0xb7cf7f28
+ | sym:previousSibling - 0xb7cf7c08
+ | sym:name - "Element"
+ | decl - "f(r.q(const).S)."
+ | sym:overloaded - 0xb7cf72a8
+ | parms - S const &
+ | sym:overname - "__SWIG_6"
+ | feature:new - "1"
+ |
+ +++ constructor ----------------------------------------
+ | name - "Element"
+ | sym:symtab - 0xb7cf6de8
+ | sym:nextSibling - 0xb7cf8158
+ | csym:nextSibling - 0xb7cf8158
+ | sym:previousSibling - 0xb7cf7d68
+ | sym:name - "Element"
+ | decl - "f(r.q(const).S,r.q(const).T)."
+ | sym:overloaded - 0xb7cf72a8
+ | parms - S const &,T const &
+ | sym:overname - "__SWIG_7"
+ | feature:new - "1"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "constructor"
+ | sym:typename - "1"
+ | name - "Element"
+ | sym:symtab - 0xb7cf6de8
+ | csym:nextSibling - 0xb7cf84e8
+ | sym:previousSibling - 0xb7cf7f28
+ | sym:name - "Element"
+ | sym:nextSibling - 0xb7cf84e8
+ | decl - "f(r.q(const).S,r.q(const).U)."
+ | sym:overloaded - 0xb7cf72a8
+ | parms - S const &,U const &
+ | sym:overname - "__SWIG_8"
+ | templateparms - typename U
+ | feature:new - "1"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "constructor"
+ | sym:typename - "1"
+ | name - "Element"
+ | sym:symtab - 0xb7cf6de8
+ | sym:previousSibling - 0xb7cf8158
+ | sym:name - "Element"
+ | decl - "f(r.q(const).S,r.q(const).Element<(OtherS,U)>)."
+ | sym:overloaded - 0xb7cf72a8
+ | parms - S const &,Element<OtherS,U > const &
+ | sym:overname - "__SWIG_9"
+ | templateparms - typename OtherS,typename U
+ | feature:new - "1"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "operator ="
+ | name - "operator ="
+ | decl - "f(r.q(const).Element).r."
+ | parms - Element const &
+ | sym:overloaded - 0xb7cf8678
+ | type - "Element"
+ | sym:nextSibling - 0xb7cf88d8
+ | csym:nextSibling - 0xb7cf8be8
+ | sym:symtab - 0xb7cf6de8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator ="
+ | sym:symtab - 0xb7cf6de8
+ | sym:previousSibling - 0xb7cf8678
+ | csym:nextSibling - 0xb7cf8678
+ | sym:name - "operator ="
+ | sym:nextSibling - 0xb7cf8be8
+ | decl - "f(r.q(const).Element<(S,U)>).r."
+ | sym:overloaded - 0xb7cf8678
+ | parms - Element<S,U > const &
+ | type - "Element"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator ="
+ | sym:symtab - 0xb7cf6de8
+ | csym:nextSibling - 0xb7cf8df8
+ | sym:previousSibling - 0xb7cf88d8
+ | sym:name - "operator ="
+ | sym:nextSibling - 0xb7cf8df8
+ | decl - "f(r.q(const).Element<(OtherS,U)>).r."
+ | sym:overloaded - 0xb7cf8678
+ | parms - Element<OtherS,U > const &
+ | type - "Element"
+ | sym:overname - "__SWIG_2"
+ | templateparms - typename OtherS,typename U
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "operator ="
+ | sym:symtab - 0xb7cf6de8
+ | sym:previousSibling - 0xb7cf8be8
+ | sym:name - "operator ="
+ | decl - "f(r.q(const).U).r."
+ | sym:overloaded - 0xb7cf8678
+ | parms - U const &
+ | type - "Element"
+ | sym:overname - "__SWIG_3"
+ | templateparms - typename U
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "structure"
+ | name - "structure"
+ | decl - "q(const).f().r."
+ | type - "q(const).S"
+ | sym:symtab - 0xb7cf6de8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "attach"
+ | name - "attach"
+ | decl - "f(r.q(const).S)."
+ | parms - S const &
+ | type - "void"
+ | sym:symtab - 0xb7cf6de8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "value"
+ | name - "value"
+ | decl - "f().r."
+ | sym:overloaded - 0xb7cf90c8
+ | type - "T"
+ | csym:nextSibling - 0xb7cf9198
+ | sym:nextSibling - 0xb7cf9198
+ | sym:symtab - 0xb7cf6de8
+ | sym:overname - "__SWIG_0"
+ |
+ +++ cdecl ----------------------------------------
+ | sym:name - "value"
+ | name - "value"
+ | decl - "q(const).f().r."
+ | sym:overloaded - 0xb7cf90c8
+ | type - "q(const).T"
+ | sym:previousSibling - 0xb7cf90c8
+ | sym:symtab - 0xb7cf6de8
+ | sym:overname - "__SWIG_1"
+ |
+ +++ access ----------------------------------------
+ | kind - "private"
+ |
+ +++ cdecl ----------------------------------------
+ | name - "value_"
+ | decl - ""
+ | access - "private"
+ | type - "T"
+ | sym:symtab - 0xb7cf6de8
+ |
+ +++ access ----------------------------------------
+ | kind - "public"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/design_pattern/design_pattern.hh"
+ |
+ +++ include ----------------------------------------
+ | name - "vcsn/include/vaucanson/algorithms/standard_of.hh"
+
+ +++ namespace ----------------------------------------
+ | sym:name - "vcsn"
+ | name - "vcsn"
+ | sym:previousSibling - 0xb7cf6a18
+ | typescope - 0xb7cf9e58
+ | symtab - 0xb7cd59e8
+ | sym:symtab - 0xb7cd02e8
+
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "standard_of"
+ | sym:symtab - 0xb7cd59e8
+ | sym:nextSibling - 0xb7cf9c28
+ | csym:nextSibling - 0xb7cf9c28
+ | sym:name - "standard_of"
+ | decl - "f(r.Element<(A,T)>,r.q(const).Exp)."
+ | parms - Element<A,T > &,Exp const &
+ | sym:overloaded - 0xb7cf9868
+ | type - "void"
+ | sym:overname - "__SWIG_0"
+ | templateparms - typename A,typename T,typename Exp
+ |
+ +++ template ----------------------------------------
+ | templatetype - "cdecl"
+ | sym:typename - "1"
+ | name - "standard_of"
+ | sym:symtab - 0xb7cd59e8
+ | sym:previousSibling - 0xb7cf9868
+ | sym:name - "standard_of"
+ | decl - "f(r.q(const).Exp)."
+ | sym:overloaded - 0xb7cf9868
+ | parms - Exp const &
+ | type - "Element<(A,T)>"
+ | sym:overname - "__SWIG_1"
+ | templateparms - typename A,typename T,typename Exp
+ |
+ +++ module ----------------------------------------
+ | name - "vcsn"
+ |
diff --git a/dynamic-use-of-static-c++/test/fixtures/tree/tree.yml b/dynamic-use-of-static-c++/test/fixtures/tree/tree.yml
new file mode 100644
index 0000000..a79bdc3
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/fixtures/tree/tree.yml
@@ -0,0 +1,2943 @@
+top:
+ outfile: "vcsn_wrap.cxx"
+ name: "vcsn"
+ module: 0xb7cf9cc8
+ classes: 0xb7cd61f8
+ infile: "vcsn.i"
+ outfile_h: "vcsn_wrap.h"
+
+ contents:
+
+ - include:
+ name: "../../swig-1.3.27/Lib/swig.swg"
+
+ contents:
+
+ - namespace:
+ sym:name: "std"
+ name: "std"
+ csym:nextSibling: 0xb7cec638
+ sym:nextSibling: 0xb7cec638
+ typescope: 0xb7cf9d38
+ symtab: 0xb7cd4338
+ sym:symtab: 0xb7cd02e8
+ sym:overname: "__SWIG_0"
+
+ - typemap:
+ code: "delete [] $1;"
+ method: "newfree"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd44c8
+
+ - typemap:
+ code: "{\n if ($1) delete [] $1;\n if ($input) {\n $1 = ($1_type) (new char[strlen($input)+1]);\n strcpy((char *) $1,$input);\n } else {\n $1 = 0;\n }\n}"
+ method: "memberin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4618
+
+ - typemap:
+ kwargs: 0xb7cd4688
+ code: "{\n if ($input) {\n $1 = ($1_type) (new char[strlen($input)+1]);\n strcpy((char *) $1,$input);\n } else {\n $1 = 0;\n }\n}"
+ method: "memberin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4748
+
+ - typemap:
+ code: "{\n if ($1) delete [] $1;\n if ($input) {\n $1 = ($1_type) (new char[strlen($input)+1]);\n strcpy((char *) $1,$input);\n } else {\n $1 = 0;\n }\n}"
+ method: "globalin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4848
+
+ - typemap:
+ kwargs: 0xb7cd48b8
+ code: "{\n if ($input) {\n $1 = ($1_type) (new char[strlen($input)+1]);\n strcpy((char *) $1,$input);\n } else {\n $1 = 0;\n }\n}"
+ method: "globalin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4978
+
+ - typemap:
+ code: "{\n if ($input) strncpy($1,$input,$1_dim0);\n else $1[0] = 0;\n}"
+ method: "memberin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4a88
+
+ - typemap:
+ code: "{\n if ($input) strncpy($1,$input,$1_dim0);\n else $1[0] = 0;\n}"
+ method: "globalin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4b98
+
+ - typemap:
+ code: "{\n if ($input) strcpy($1,$input);\n else $1[0] = 0;\n}"
+ method: "memberin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4c88
+
+ - typemap:
+ code: "{\n if ($input) strcpy($1,$input);\n else $1[0] = 0;\n}"
+ method: "globalin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4d78
+
+ - typemap:
+ code: "{\n size_t ii;\n $1_basetype *b = ($1_basetype *) $1;\n for (ii = 0; ii < (size_t)$1_size; ii++) b[ii] = *(($1_basetype *) $input + ii);\n}"
+ method: "memberin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4e88
+
+ - typemap:
+ code: "{\n size_t ii;\n $1_basetype *b = ($1_basetype *) $1;\n for (ii = 0; ii < (size_t)$1_size; ii++) b[ii] = *(($1_basetype *) $input + ii);\n}"
+ method: "globalin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd4f98
+
+ - typemap:
+ code: "{\n $basetype (*inp)[$dim1] = ($basetype (*)[$dim1])($input);\n $basetype (*dest)[$dim1] = ($basetype (*)[$dim1])($1);\n size_t ii = 0;\n for (; ii < $dim0; ++ii) {\n $basetype *ip = inp[ii];\n $basetype *dp = dest[ii];\n size_t jj = 0;\n for (; jj < $dim1; ++jj) dp[jj] = ip[jj];\n }\n}"
+ method: "memberin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd50c8
+
+ - typemap:
+ code: "{\n $basetype (*inp)[$dim1] = ($basetype (*)[$dim1])($input);\n $basetype (*dest)[$dim1] = ($basetype (*)[$dim1])($1);\n size_t ii = 0;\n for (; ii < $dim0; ++ii) {\n $basetype *ip = inp[ii];\n $basetype *dp = dest[ii];\n size_t jj = 0;\n for (; jj < $dim1; ++jj) dp[jj] = ip[jj];\n }\n}"
+ method: "globalin"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd51f8
+
+ - typemap:
+ kwargs: 0xb7cd5278
+ code: ""
+ method: "in"
+
+ contents:
+
+ - typemapitem:
+ pattern: 0xb7cd5348
+
+ - typemapitem:
+ pattern: 0xb7cd53f8
+
+ - insert:
+ code: "\n#ifdef __cplusplus\ntemplate<class T> class SwigValueWrapper {\n T *tt;\npublic:\n SwigValueWrapper() : tt(0) { }\n SwigValueWrapper(const SwigValueWrapper<T>& rhs) : tt(new T(*rhs.tt)) { }\n SwigValueWrapper(const T& t) : tt(new T(t)) { }\n ~SwigValueWrapper() { delete tt; } \n SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; }\n operator T&() const { return *tt; }\n T *operator&() { return tt; }\nprivate:\n SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);\n};\n#endif\n"
+ section: "runtime"
+
+ - insert:
+ code: "/***********************************************************************\n *\n * This section contains generic SWIG labels for method/variable\n * declarations/attributes, and other compiler dependent labels.\n *\n ************************************************************************/\n\n/* template workaround for compilers that cannot correctly implement the C++ standard */\n#ifndef SWIGTEMPLATEDISAMBIGUATOR\n# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)\n# define SWIGTEMPLATEDISAMBIGUATOR template\n# else\n# define SWIGTEMPLATEDISAMBIGUATOR \n# endif\n#endif\n\n/* inline attribute */\n#ifndef SWIGINLINE\n# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))\n# define SWIGINLINE inline\n# else\n# define SWIGINLINE\n# endif\n#endif\n\n/* attribute recognised by some compilers to avoid \'unused\' warnings */\n#ifndef SWIGUNUSED\n# if defined(__GNUC__) || defined(__ICC)\n# define SWIGUNUSED __attribute__ ((unused)) \n# else\n# define SWIGUNUSED \n# endif\n#endif\n\n/* internal SWIG method */\n#ifndef SWIGINTERN\n# define SWIGINTERN static SWIGUNUSED\n#endif\n\n/* internal inline SWIG method */\n#ifndef SWIGINTERNINLINE\n# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE\n#endif\n\n/* exporting methods for Windows DLLs */\n#ifndef SWIGEXPORT\n# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)\n# if defined(STATIC_LINKED)\n# define SWIGEXPORT\n# else\n# define SWIGEXPORT __declspec(dllexport)\n# endif\n# else\n# define SWIGEXPORT\n# endif\n#endif\n\n/* calling conventions for Windows */\n#ifndef SWIGSTDCALL\n# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)\n# define SWIGSTDCALL __stdcall\n# else\n# define SWIGSTDCALL\n# endif \n#endif\n\n"
+ section: "runtime"
+
+ - include:
+ name: "vcsn.i"
+ module: "vcsn"
+
+ contents:
+
+ - include:
+ name: "vcsn/include/vaucanson/config/pconf.hh"
+
+ contents:
+
+ - constant:
+ sym:name: "VCSN_PACKAGE_BUGREPORT"
+ name: "VCSN_PACKAGE_BUGREPORT"
+ rawval: "\"vaucanson-bugs(a)lrde.epita.fr\""
+ feature:immutable: "1"
+ value: "vaucanson-bugs(a)lrde.epita.fr"
+ storage: "%constant"
+ type: "p.char"
+ sym:symtab: 0xb7cd02e8
+ sym:overname: "__SWIG_0"
+
+ - constant:
+ sym:name: "VCSN_PACKAGE_NAME"
+ name: "VCSN_PACKAGE_NAME"
+ rawval: "\"vaucanson\""
+ feature:immutable: "1"
+ value: "vaucanson"
+ storage: "%constant"
+ type: "p.char"
+ sym:symtab: 0xb7cd02e8
+ sym:overname: "__SWIG_0"
+
+ - constant:
+ sym:name: "VCSN_PACKAGE_STRING"
+ name: "VCSN_PACKAGE_STRING"
+ rawval: "\"vaucanson 0.7.2\""
+ feature:immutable: "1"
+ value: "vaucanson 0.7.2"
+ storage: "%constant"
+ type: "p.char"
+ sym:symtab: 0xb7cd02e8
+ sym:overname: "__SWIG_0"
+
+ - constant:
+ sym:name: "VCSN_PACKAGE_VERSION"
+ name: "VCSN_PACKAGE_VERSION"
+ rawval: "\"0.7.2\""
+ feature:immutable: "1"
+ value: "0.7.2"
+ storage: "%constant"
+ type: "p.char"
+ sym:symtab: 0xb7cd02e8
+ sym:overname: "__SWIG_0"
+
+ - include:
+ name: "vcsn/include/vaucanson/config/math.hh"
+
+ - include:
+ name: "vcsn/include/vaucanson/config/system.hh"
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/predecls.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ csym:nextSibling: 0xb7cd8a98
+ sym:nextSibling: 0xb7cd8a98
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+ sym:overname: "__SWIG_0"
+
+ contents:
+
+ - template:
+ sym:name: "dynamic_traits"
+ templatetype: "classforward"
+ name: "dynamic_traits"
+ partials: 0xb7cda4c8
+ kind: "struct"
+ sym:weak: "1"
+ templateparms: typename S
+ sym:symtab: 0xb7cd59e8
+ sym:overname: "__SWIG_0"
+
+ - template:
+ sym:name: "SyntacticDecorator"
+ templatetype: "classforward"
+ name: "SyntacticDecorator"
+ kind: "struct"
+ sym:weak: "1"
+ templateparms: typename S,typename T
+ sym:symtab: 0xb7cd59e8
+ sym:overname: "__SWIG_0"
+
+ - template:
+ sym:name: "MetaElement"
+ templatetype: "classforward"
+ name: "MetaElement"
+ partials: 0xb7cde788
+ kind: "struct"
+ sym:weak: "1"
+ templateparms: typename S,typename T
+ sym:symtab: 0xb7cd59e8
+ sym:overname: "__SWIG_0"
+
+ - template:
+ sym:name: "Element"
+ templatetype: "classforward"
+ name: "Element"
+ kind: "struct"
+ sym:weak: "1"
+ templateparms: typename S,typename T
+ sym:symtab: 0xb7cd59e8
+ sym:overname: "__SWIG_0"
+
+ - class:
+ name: "vcsn::default_slot_tag"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cd61a8
+ allows_typedef: "1"
+ typepass:visit: "1"
+ allocate:visit: "1"
+ kind: "struct"
+ sym:name: "default_slot_tag"
+ allocate:default_constructor: "1"
+ allocate:default_destructor: "1"
+ module: 0xb7cf9cc8
+ sym:overname: "__SWIG_0"
+ typescope: 0xb7cfa108
+
+ - template:
+ sym:name: "SetSlot"
+ templatetype: "classforward"
+ name: "SetSlot"
+ kind: "struct"
+ sym:weak: "1"
+ templateparms: typename S,typename Tag
+ sym:symtab: 0xb7cd59e8
+ sym:overname: "__SWIG_0"
+
+ - template:
+ sym:name: "Structure"
+ templatetype: "classforward"
+ name: "Structure"
+ kind: "struct"
+ sym:weak: "1"
+ templateparms: typename Self
+ sym:symtab: 0xb7cd59e8
+ sym:overname: "__SWIG_0"
+
+ - template:
+ sym:name: "virtual_types"
+ templatetype: "classforward"
+ name: "virtual_types"
+ partials: 0xb7cda8d8
+ kind: "struct"
+ sym:weak: "1"
+ templateparms: typename Self
+ sym:symtab: 0xb7cd59e8
+ sym:overname: "__SWIG_0"
+
+ - class:
+ name: "vcsn::undefined_type"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cd6728
+ allows_typedef: "1"
+ allocate:visit: "1"
+ typepass:visit: "1"
+ kind: "struct"
+ sym:name: "undefined_type"
+ allocate:default_constructor: "1"
+ allocate:default_destructor: "1"
+ module: 0xb7cf9cc8
+ sym:overname: "__SWIG_0"
+ typescope: 0xb7cfa328
+
+ - include:
+ name: "vcsn/include/vaucanson/misc/selectors.hh"
+
+ - include:
+ name: "vcsn/include/vaucanson/misc/unique.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "utility"
+ name: "utility"
+ typescope: 0xb7cfa358
+ symtab: 0xb7cd6868
+ sym:symtab: 0xb7cd02e8
+ sym:overname: "__SWIG_0"
+
+ contents:
+
+ - namespace:
+ sym:name: "unique"
+ name: "unique"
+ typescope: 0xb7cfa3a8
+ symtab: 0xb7cd7298
+ sym:symtab: 0xb7cd6868
+ sym:overname: "__SWIG_0"
+
+ contents:
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "UniqueListBase"
+ sym:symtab: 0xb7cd6908
+ symtab: 0xb7cd6a28
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "UniqueListBase"
+ sym:overname: "__SWIG_0"
+ templateparms: class T
+
+ contents:
+
+ - destructor:
+ sym:name: "~UniqueListBase"
+ name: "~UniqueListBase"
+ decl: "f()."
+ storage: "virtual"
+ sym:symtab: 0xb7cd6a28
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "uniquelist_base"
+ name: "utility::unique::UniqueMap::uniquelist_base"
+ decl: ""
+ storage: "typedef"
+ type: "utility::unique::UniqueListBase<(int)>"
+ sym:symtab: 0xb7cd6908
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "uniquelist"
+ sym:symtab: 0xb7cd6908
+ symtab: 0xb7cd7018
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "uniquelist"
+ privatebaselist: 0xb7cd6f18
+ protectedbaselist: 0xb7cd6ef8
+ baselist: 0xb7cd6ed8
+ sym:overname: "__SWIG_0"
+ templateparms: typename T
+
+ contents:
+
+ - destructor:
+ sym:name: "~uniquelist"
+ name: "~uniquelist"
+ decl: "f()."
+ sym:symtab: 0xb7cd7018
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "UniqueMap"
+ sym:symtab: 0xb7cd6908
+ symtab: 0xb7cd7298
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "TiSlot"
+ sym:overname: "__SWIG_0"
+ templateparms: class T
+
+ contents:
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "TiSlot"
+ sym:symtab: 0xb7cd7298
+ symtab: 0xb7cd73f8
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "TiSlot"
+ sym:overname: "__SWIG_0"
+ templateparms: class U
+
+ contents:
+
+ - constructor:
+ sym:name: "TiSlot"
+ name: "TiSlot"
+ parms: std::type_info const &
+ decl: "f(r.q(const).std::type_info)."
+ feature:new: "1"
+ sym:symtab: 0xb7cd73f8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "id"
+ name: "id"
+ decl: "r."
+ type: "q(const).std::type_info"
+ sym:symtab: 0xb7cd73f8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "operator =="
+ name: "operator =="
+ decl: "q(const).f(r.q(const).TiSlot)."
+ parms: TiSlot const &
+ type: "bool"
+ sym:symtab: 0xb7cd73f8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "operator <"
+ name: "operator <"
+ decl: "q(const).f(r.q(const).TiSlot)."
+ parms: TiSlot const &
+ type: "bool"
+ sym:symtab: 0xb7cd73f8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "ti_slot"
+ name: "ti_slot"
+ decl: ""
+ storage: "typedef"
+ type: "TiSlot<(int)>"
+ sym:symtab: 0xb7cd7298
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "map_t"
+ name: "map_t"
+ decl: ""
+ storage: "typedef"
+ type: "std::map<(ti_slot,p.uniquelist_base)>"
+ sym:symtab: 0xb7cd7298
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "instance"
+ name: "instance"
+ decl: "f().r."
+ storage: "static"
+ type: "map_t"
+ sym:symtab: 0xb7cd7298
+ sym:overname: "__SWIG_0"
+
+ - access:
+ kind: "protected"
+
+ - cdecl:
+ sym:name: "map_"
+ name: "map_"
+ decl: ""
+ type: "map_t"
+ sym:symtab: 0xb7cd7298
+ sym:overname: "__SWIG_0"
+
+ - destructor:
+ sym:name: "~UniqueMap"
+ name: "~UniqueMap"
+ decl: "f()."
+ sym:symtab: 0xb7cd7298
+ sym:overname: "__SWIG_0"
+
+ - access:
+ kind: "public"
+
+ - cdecl:
+ sym:name: "unique_map"
+ name: "utility::unique::UniqueMap::unique_map"
+ decl: ""
+ storage: "typedef"
+ type: "utility::unique::UniqueMap<(int)>"
+ sym:symtab: 0xb7cd7298
+ sym:overname: "__SWIG_0"
+
+ - class:
+ name: "utility::unique::UniqueMap::unifiable"
+ sym:symtab: 0xb7cd7298
+ symtab: 0xb7cd8168
+ allows_typedef: "1"
+ typepass:visit: "1"
+ allocate:visit: "1"
+ kind: "struct"
+ sym:name: "unifiable"
+ allocate:default_constructor: "1"
+ allocate:has_constructor: "1"
+ allocate:public_constructor: "1"
+ allocate:default_destructor: "1"
+ module: 0xb7cf9cc8
+ sym:overname: "__SWIG_0"
+ typescope: 0xb7cfa818
+
+ contents:
+
+ - constructor:
+ sym:name: "unifiable"
+ name: "utility::unique::UniqueMap::unifiable"
+ decl: "f()."
+ feature:new: "1"
+ sym:overloaded: 0xb7cd8148
+ csym:nextSibling: 0xb7cd8268
+ sym:nextSibling: 0xb7cd8268
+ sym:symtab: 0xb7cd8168
+ sym:overname: "__SWIG_0"
+
+ - constructor:
+ sym:name: "unifiable"
+ name: "utility::unique::UniqueMap::unifiable"
+ parms: utility::unique::unifiable const &
+ decl: "f(r.q(const).unifiable)."
+ feature:new: "1"
+ sym:overloaded: 0xb7cd8148
+ sym:previousSibling: 0xb7cd8148
+ sym:symtab: 0xb7cd8168
+ sym:overname: "__SWIG_1"
+
+ - access:
+ kind: "private"
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "get"
+ sym:symtab: 0xb7cd7298
+ sym:name: "get"
+ csym:nextSibling: 0xb7cd8788
+ sym:nextSibling: 0xb7cd8988
+ decl: "f(r.q(const).T).r."
+ parms: T const &
+ sym:overloaded: 0xb7cd8428
+ type: "q(const).T"
+ sym:overname: "__SWIG_0"
+ storage: "friend"
+ templateparms: typename T
+
+ - cdecl:
+ name: "unique_"
+ decl: ""
+ access: "private"
+ type: "bool"
+ sym:symtab: 0xb7cd8168
+
+ - access:
+ kind: "public"
+
+ - template:
+ templatetype: "cdecl"
+ name: "get"
+ decl: "f(r.q(const).T).r."
+ parms: T const &
+ error: "vcsn/include/vaucanson/misc/unique.hh:121:Identifier \'get\' redefined (ignored),\nvcsn/include/vaucanson/misc/unique.hh:108:previous definition of \'get\'.\n"
+ sym:typename: "1"
+ type: "q(const).T"
+ csym:nextSibling: 0xb7cd8988
+ templateparms: typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "get"
+ sym:symtab: 0xb7cd7298
+ sym:previousSibling: 0xb7cd8428
+ sym:name: "get"
+ decl: "f(p.q(const).T).p."
+ sym:overloaded: 0xb7cd8428
+ parms: T const *
+ type: "q(const).T"
+ sym:overname: "__SWIG_1"
+ templateparms: typename T
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/structure.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ sym:previousSibling: 0xb7cd5a28
+ csym:nextSibling: 0xb7cda888
+ sym:nextSibling: 0xb7cda888
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "Structure"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cd8c98
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "Structure"
+ privatebaselist: 0xb7cd8c28
+ protectedbaselist: 0xb7cd8c18
+ baselist: 0xb7cd8c08
+ sym:overname: "__SWIG_0"
+ templateparms: typename S
+
+ contents:
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "contains"
+ sym:symtab: 0xb7cd8c98
+ sym:nextSibling: 0xb7cd9238
+ csym:nextSibling: 0xb7cd9238
+ sym:name: "contains"
+ decl: "q(const).f(r.q(const).Element<(S,T)>)."
+ sym:overloaded: 0xb7cd8f28
+ parms: Element<S,T > const &
+ type: "bool"
+ sym:overname: "__SWIG_0"
+ templateparms: typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "contains"
+ sym:symtab: 0xb7cd8c98
+ csym:nextSibling: 0xb7cd9448
+ sym:previousSibling: 0xb7cd8f28
+ sym:name: "contains"
+ sym:nextSibling: 0xb7cd9448
+ decl: "q(const).f(r.q(const).Element<(OtherS,T)>)."
+ sym:overloaded: 0xb7cd8f28
+ parms: Element<OtherS,T > const &
+ type: "bool"
+ sym:overname: "__SWIG_1"
+ templateparms: typename OtherS,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "contains"
+ sym:symtab: 0xb7cd8c98
+ sym:previousSibling: 0xb7cd9238
+ sym:name: "contains"
+ decl: "q(const).f(r.q(const).T)."
+ sym:overloaded: 0xb7cd8f28
+ parms: T const &
+ type: "bool"
+ sym:overname: "__SWIG_2"
+ templateparms: typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:name: "choose"
+ name: "choose"
+ decl: "q(const).f(r.q(const).T)."
+ parms: T const &
+ sym:typename: "1"
+ type: "Element<(S,T)>"
+ templateparms: class T
+ sym:symtab: 0xb7cd8c98
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "self_t"
+ name: "self_t"
+ decl: ""
+ storage: "typedef"
+ type: "S"
+ sym:symtab: 0xb7cd8c98
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "self"
+ name: "self"
+ decl: "f().r."
+ sym:overloaded: 0xb7cd9848
+ type: "self_t"
+ csym:nextSibling: 0xb7cd9918
+ sym:nextSibling: 0xb7cd9918
+ sym:symtab: 0xb7cd8c98
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "self"
+ name: "self"
+ decl: "q(const).f().r."
+ sym:overloaded: 0xb7cd9848
+ type: "q(const).self_t"
+ sym:previousSibling: 0xb7cd9848
+ sym:symtab: 0xb7cd8c98
+ sym:overname: "__SWIG_1"
+
+ - access:
+ kind: "protected"
+
+ - constructor:
+ name: "Structure"
+ decl: "f()."
+ access: "protected"
+ feature:new: "1"
+ csym:nextSibling: 0xb7cd9af8
+ sym:symtab: 0xb7cd8c98
+
+ - constructor:
+ name: "Structure"
+ parms: Structure const &
+ decl: "f(r.q(const).Structure)."
+ access: "protected"
+ feature:new: "1"
+ sym:symtab: 0xb7cd8c98
+
+ - access:
+ kind: "public"
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator !="
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator !="
+ csym:nextSibling: 0xb7ce5608
+ sym:nextSibling: 0xb7ce5608
+ decl: "f(r.q(const).vcsn::Structure<(S)>,r.q(const).vcsn::Structure<(S)>)."
+ parms: vcsn::Structure<S > const &,vcsn::Structure<S > const &
+ sym:overloaded: 0xb7cd9f48
+ type: "bool"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "dynamic_traits<(Structure<(S)>)>"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cda158
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "dynamic_traits<(Structure<(S)>)>"
+ partialargs: "dynamic_traits<(vcsn::Structure<($1)>)>"
+ sym:overname: "__SWIG_0"
+ templateparms: Structure<S >
+ partialspecialization: "1"
+
+ contents:
+
+ - cdecl:
+ sym:name: "ret"
+ name: "ret"
+ decl: ""
+ storage: "static"
+ value: "false"
+ type: "q(const).bool"
+ sym:symtab: 0xb7cda158
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "virtual_types<(Structure<(S)>)>"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cda6c8
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "virtual_types<(Structure<(S)>)>"
+ partialargs: "virtual_types<(vcsn::Structure<($1)>)>"
+ sym:overname: "__SWIG_0"
+ templateparms: Structure<S >
+ partialspecialization: "1"
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/syntactic_decorator.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ sym:previousSibling: 0xb7cd8a98
+ csym:nextSibling: 0xb7cdddc8
+ sym:nextSibling: 0xb7cdddc8
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "SyntacticDecorator"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cdaa08
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "SyntacticDecorator"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T
+
+ contents:
+
+ - cdecl:
+ sym:name: "dynamic_value"
+ name: "dynamic_value"
+ decl: ""
+ storage: "static"
+ value: "true"
+ type: "q(const).bool"
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "structure"
+ name: "structure"
+ decl: "q(const).f().r."
+ type: "q(const).S"
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "value"
+ name: "value"
+ decl: "f().r."
+ sym:overloaded: 0xb7cdace8
+ type: "T"
+ csym:nextSibling: 0xb7cdadb8
+ sym:nextSibling: 0xb7cdadb8
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "value"
+ name: "value"
+ decl: "q(const).f().r."
+ sym:overloaded: 0xb7cdace8
+ type: "q(const).T"
+ sym:previousSibling: 0xb7cdace8
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_1"
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator +="
+ sym:symtab: 0xb7cdaa08
+ sym:nextSibling: 0xb7cdb3e8
+ csym:nextSibling: 0xb7cdb3e8
+ sym:name: "operator +="
+ decl: "f(r.q(const).Element<(OtherS,U)>).r."
+ sym:overloaded: 0xb7cdb128
+ parms: Element<OtherS,U > const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_0"
+ templateparms: typename OtherS,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator +="
+ sym:symtab: 0xb7cdaa08
+ sym:previousSibling: 0xb7cdb128
+ sym:name: "operator +="
+ decl: "f(r.q(const).U).r."
+ sym:overloaded: 0xb7cdb128
+ parms: U const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ templateparms: typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator -="
+ sym:symtab: 0xb7cdaa08
+ sym:nextSibling: 0xb7cdba68
+ csym:nextSibling: 0xb7cdba68
+ sym:name: "operator -="
+ decl: "f(r.q(const).Element<(OtherS,U)>).r."
+ sym:overloaded: 0xb7cdb7a8
+ parms: Element<OtherS,U > const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_0"
+ templateparms: typename OtherS,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator -="
+ sym:symtab: 0xb7cdaa08
+ sym:previousSibling: 0xb7cdb7a8
+ sym:name: "operator -="
+ decl: "f(r.q(const).U).r."
+ sym:overloaded: 0xb7cdb7a8
+ parms: U const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ templateparms: typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator /="
+ sym:symtab: 0xb7cdaa08
+ sym:nextSibling: 0xb7cdc0e8
+ csym:nextSibling: 0xb7cdc0e8
+ sym:name: "operator /="
+ decl: "f(r.q(const).Element<(OtherS,U)>).r."
+ sym:overloaded: 0xb7cdbe28
+ parms: Element<OtherS,U > const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_0"
+ templateparms: typename OtherS,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator /="
+ sym:symtab: 0xb7cdaa08
+ sym:previousSibling: 0xb7cdbe28
+ sym:name: "operator /="
+ decl: "f(r.q(const).U).r."
+ sym:overloaded: 0xb7cdbe28
+ parms: U const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ templateparms: typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator *="
+ sym:symtab: 0xb7cdaa08
+ sym:nextSibling: 0xb7cdc768
+ csym:nextSibling: 0xb7cdc768
+ sym:name: "operator *="
+ decl: "f(r.q(const).Element<(OtherS,U)>).r."
+ sym:overloaded: 0xb7cdc4a8
+ parms: Element<OtherS,U > const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_0"
+ templateparms: typename OtherS,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator *="
+ sym:symtab: 0xb7cdaa08
+ sym:previousSibling: 0xb7cdc4a8
+ sym:name: "operator *="
+ decl: "f(r.q(const).U).r."
+ sym:overloaded: 0xb7cdc4a8
+ parms: U const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ templateparms: typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator %="
+ sym:symtab: 0xb7cdaa08
+ sym:nextSibling: 0xb7cdcde8
+ csym:nextSibling: 0xb7cdcde8
+ sym:name: "operator %="
+ decl: "f(r.q(const).Element<(OtherS,U)>).r."
+ sym:overloaded: 0xb7cdcb28
+ parms: Element<OtherS,U > const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_0"
+ templateparms: typename OtherS,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator %="
+ sym:symtab: 0xb7cdaa08
+ sym:previousSibling: 0xb7cdcb28
+ sym:name: "operator %="
+ decl: "f(r.q(const).U).r."
+ sym:overloaded: 0xb7cdcb28
+ parms: U const &
+ type: "Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ templateparms: typename U
+
+ - cdecl:
+ sym:name: "operator ++"
+ name: "operator ++"
+ decl: "f().r."
+ sym:overloaded: 0xb7cdcf78
+ type: "Element<(S,T)>"
+ csym:nextSibling: 0xb7cdd128
+ sym:nextSibling: 0xb7cdd128
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "operator ++"
+ name: "operator ++"
+ decl: "f(int)."
+ parms: int
+ sym:overloaded: 0xb7cdcf78
+ type: "Element<(S,T)>"
+ sym:previousSibling: 0xb7cdcf78
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_1"
+
+ - cdecl:
+ sym:name: "operator --"
+ name: "operator --"
+ decl: "f().r."
+ sym:overloaded: 0xb7cdd268
+ type: "Element<(S,T)>"
+ csym:nextSibling: 0xb7cdd418
+ sym:nextSibling: 0xb7cdd418
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "operator --"
+ name: "operator --"
+ decl: "f(int)."
+ parms: int
+ sym:overloaded: 0xb7cdd268
+ type: "Element<(S,T)>"
+ sym:previousSibling: 0xb7cdd268
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_1"
+
+ - template:
+ templatetype: "cdecl"
+ sym:name: "swap"
+ name: "swap"
+ decl: "f(r.Element<(S,U)>).r."
+ parms: Element<S,U > &
+ sym:typename: "1"
+ type: "Element<(S,T)>"
+ templateparms: typename U
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "self"
+ name: "self"
+ decl: "f().r."
+ sym:overloaded: 0xb7cdd898
+ type: "Element<(S,T)>"
+ csym:nextSibling: 0xb7cdda18
+ sym:nextSibling: 0xb7cdda18
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "self"
+ name: "self"
+ decl: "q(const).f().r."
+ sym:overloaded: 0xb7cdd898
+ type: "q(const).Element<(S,T)>"
+ sym:previousSibling: 0xb7cdd898
+ sym:symtab: 0xb7cdaa08
+ sym:overname: "__SWIG_1"
+
+ - access:
+ kind: "protected"
+
+ - constructor:
+ name: "SyntacticDecorator"
+ decl: "f()."
+ access: "protected"
+ feature:new: "1"
+ csym:nextSibling: 0xb7cddbf8
+ sym:symtab: 0xb7cdaa08
+
+ - constructor:
+ name: "SyntacticDecorator"
+ parms: SyntacticDecorator const &
+ decl: "f(r.q(const).SyntacticDecorator)."
+ access: "protected"
+ feature:new: "1"
+ sym:symtab: 0xb7cdaa08
+
+ - access:
+ kind: "public"
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/meta_element_root.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ sym:previousSibling: 0xb7cda888
+ csym:nextSibling: 0xb7cde7b8
+ sym:nextSibling: 0xb7cde7b8
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "MetaElement<(Structure<(S)>,T)>"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cde208
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "MetaElement<(Structure<(S)>,T)>"
+ privatebaselist: 0xb7cde178
+ protectedbaselist: 0xb7cde168
+ baselist: 0xb7cde158
+ partialargs: "MetaElement<(vcsn::Structure<($1)>,$2)>"
+ sym:overname: "__SWIG_0"
+ templateparms: Structure<S >,typename T
+ partialspecialization: "1"
+
+ contents:
+
+ - access:
+ kind: "protected"
+
+ - constructor:
+ name: "MetaElement"
+ decl: "f()."
+ access: "protected"
+ feature:new: "1"
+ csym:nextSibling: 0xb7cde478
+ sym:symtab: 0xb7cde208
+
+ - constructor:
+ name: "MetaElement"
+ parms: MetaElement const &
+ decl: "f(r.q(const).MetaElement)."
+ access: "protected"
+ feature:new: "1"
+ sym:symtab: 0xb7cde208
+
+ - access:
+ kind: "public"
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/element_op_traits.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ sym:previousSibling: 0xb7cdddc8
+ csym:nextSibling: 0xb7ce0778
+ sym:nextSibling: 0xb7ce0778
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "op_add_traits"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cde9f8
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "op_add_traits"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S1,typename S2,typename T1,typename T2
+
+ contents:
+
+ - cdecl:
+ sym:name: "ret_t"
+ name: "ret_t"
+ decl: ""
+ storage: "typedef"
+ type: "Element<(S1,T1)>"
+ sym:symtab: 0xb7cde9f8
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "op_sub_traits"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cdf048
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "op_sub_traits"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S1,typename S2,typename T1,typename T2
+
+ contents:
+
+ - cdecl:
+ sym:name: "ret_t"
+ name: "ret_t"
+ decl: ""
+ storage: "typedef"
+ type: "Element<(S1,T1)>"
+ sym:symtab: 0xb7cdf048
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "op_mul_traits"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cdf698
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "op_mul_traits"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S1,typename S2,typename T1,typename T2
+
+ contents:
+
+ - cdecl:
+ sym:name: "ret_t"
+ name: "ret_t"
+ decl: ""
+ storage: "typedef"
+ type: "Element<(S1,T1)>"
+ sym:symtab: 0xb7cdf698
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "op_div_traits"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cdfce8
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "op_div_traits"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S1,typename S2,typename T1,typename T2
+
+ contents:
+
+ - cdecl:
+ sym:name: "ret_t"
+ name: "ret_t"
+ decl: ""
+ storage: "typedef"
+ type: "Element<(S1,T1)>"
+ sym:symtab: 0xb7cdfce8
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "op_mod_traits"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7ce0338
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "op_mod_traits"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S1,typename S2,typename T1,typename T2
+
+ contents:
+
+ - cdecl:
+ sym:name: "ret_t"
+ name: "ret_t"
+ decl: ""
+ storage: "typedef"
+ type: "Element<(S1,T1)>"
+ sym:symtab: 0xb7ce0338
+ sym:overname: "__SWIG_0"
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/element_ops.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ sym:previousSibling: 0xb7cde7b8
+ csym:nextSibling: 0xb7ced2a8
+ sym:nextSibling: 0xb7ced2a8
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator <"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator <"
+ csym:nextSibling: 0xb7ce22b8
+ sym:nextSibling: 0xb7ce22b8
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7ce0ce8
+ type: "bool"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator >"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator >"
+ csym:nextSibling: 0xb7ce2728
+ sym:nextSibling: 0xb7ce2728
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7ce12a8
+ type: "bool"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator <="
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator <="
+ csym:nextSibling: 0xb7ce3008
+ sym:nextSibling: 0xb7ce3008
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7ce1868
+ type: "bool"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator >="
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator >="
+ csym:nextSibling: 0xb7ce2b98
+ sym:nextSibling: 0xb7ce2b98
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7ce1e28
+ type: "bool"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator <"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce0ce8
+ sym:name: "operator <"
+ csym:nextSibling: 0xb7ce3478
+ sym:nextSibling: 0xb7ce3478
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7ce0ce8
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "bool"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator >"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce12a8
+ sym:name: "operator >"
+ csym:nextSibling: 0xb7ce38e8
+ sym:nextSibling: 0xb7ce38e8
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7ce12a8
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "bool"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator >="
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce1e28
+ sym:name: "operator >="
+ csym:nextSibling: 0xb7ce3d58
+ sym:nextSibling: 0xb7ce3d58
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7ce1e28
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "bool"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator <="
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce1868
+ sym:name: "operator <="
+ csym:nextSibling: 0xb7ce41c8
+ sym:nextSibling: 0xb7ce41c8
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7ce1868
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "bool"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator <"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce22b8
+ sym:name: "operator <"
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce0ce8
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "bool"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator >"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce2728
+ sym:name: "operator >"
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce12a8
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "bool"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator >="
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce2b98
+ sym:name: "operator >="
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce1e28
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "bool"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator <="
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce3008
+ sym:name: "operator <="
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce1868
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "bool"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator =="
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator =="
+ csym:nextSibling: 0xb7ce4bf8
+ sym:nextSibling: 0xb7ce4bf8
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7ce4768
+ type: "bool"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator =="
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce4768
+ sym:name: "operator =="
+ csym:nextSibling: 0xb7ce5068
+ sym:nextSibling: 0xb7ce5068
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7ce4768
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "bool"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator =="
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce4bf8
+ sym:name: "operator =="
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce4768
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "bool"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator !="
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7cd9f48
+ sym:name: "operator !="
+ csym:nextSibling: 0xb7ce5a98
+ sym:nextSibling: 0xb7ce5a98
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ sym:overloaded: 0xb7cd9f48
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ type: "bool"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator !="
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce5608
+ sym:name: "operator !="
+ csym:nextSibling: 0xb7ce5f08
+ sym:nextSibling: 0xb7ce5f08
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7cd9f48
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "bool"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator !="
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce5a98
+ sym:name: "operator !="
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7cd9f48
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "bool"
+ sym:overname: "__SWIG_3"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator +"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator +"
+ csym:nextSibling: 0xb7ce6b98
+ sym:nextSibling: 0xb7ce6b98
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7ce6638
+ type: "vcsn::op_add_traits<(S1,S2,T1,T2)>::ret_t"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator +"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce6638
+ sym:name: "operator +"
+ csym:nextSibling: 0xb7ce70d8
+ sym:nextSibling: 0xb7ce70d8
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7ce6638
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator +"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce6b98
+ sym:name: "operator +"
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce6638
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator -"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator -"
+ csym:nextSibling: 0xb7ce7d68
+ sym:nextSibling: 0xb7ce7d68
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7ce7808
+ type: "vcsn::op_sub_traits<(S1,S2,T1,T2)>::ret_t"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator -"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce7808
+ sym:name: "operator -"
+ csym:nextSibling: 0xb7ce82a8
+ sym:nextSibling: 0xb7ce82a8
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7ce7808
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator -"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce7d68
+ sym:name: "operator -"
+ csym:nextSibling: 0xb7cebc18
+ sym:nextSibling: 0xb7cebc18
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce7808
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator *"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator *"
+ csym:nextSibling: 0xb7ce8f38
+ sym:nextSibling: 0xb7ce8f38
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7ce89d8
+ type: "vcsn::op_mul_traits<(S1,S2,T1,T2)>::ret_t"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator *"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce89d8
+ sym:name: "operator *"
+ csym:nextSibling: 0xb7ce9478
+ sym:nextSibling: 0xb7ce9478
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7ce89d8
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator *"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce8f38
+ sym:name: "operator *"
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce89d8
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator /"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator /"
+ csym:nextSibling: 0xb7cea108
+ sym:nextSibling: 0xb7cea108
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7ce9ba8
+ type: "vcsn::op_div_traits<(S1,S2,T1,T2)>::ret_t"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator /"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce9ba8
+ sym:name: "operator /"
+ csym:nextSibling: 0xb7cea648
+ sym:nextSibling: 0xb7cea648
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7ce9ba8
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator /"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7cea108
+ sym:name: "operator /"
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce9ba8
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator %"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator %"
+ csym:nextSibling: 0xb7ceb2d8
+ sym:nextSibling: 0xb7ceb2d8
+ decl: "f(r.q(const).vcsn::Element<(S1,T1)>,r.q(const).vcsn::Element<(S2,T2)>)."
+ parms: vcsn::Element<S1,T1 > const &,vcsn::Element<S2,T2 > const &
+ sym:overloaded: 0xb7cead78
+ type: "vcsn::op_mod_traits<(S1,S2,T1,T2)>::ret_t"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename S1,typename T1,typename S2,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator %"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7cead78
+ sym:name: "operator %"
+ csym:nextSibling: 0xb7ceb818
+ sym:nextSibling: 0xb7ceb818
+ decl: "f(r.q(const).vcsn::Element<(S,T)>,r.q(const).U)."
+ sym:overloaded: 0xb7cead78
+ parms: vcsn::Element<S,T > const &,U const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_1"
+ storage: "static"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator %"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ceb2d8
+ sym:name: "operator %"
+ decl: "f(r.q(const).U,r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7cead78
+ parms: U const &,vcsn::Element<S,T > const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_2"
+ storage: "static"
+ templateparms: typename U,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator -"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ce82a8
+ sym:name: "operator -"
+ decl: "f(r.q(const).vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ce7808
+ parms: vcsn::Element<S,T > const &
+ type: "vcsn::Element<(S,T)>"
+ sym:overname: "__SWIG_3"
+ storage: "static"
+ templateparms: typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator <<"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator <<"
+ decl: "f(r.St,r.q(const).vcsn::Element<(S,T)>).r."
+ parms: St &,vcsn::Element<S,T > const &
+ type: "St"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename St,typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator >>"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "operator >>"
+ decl: "f(r.St,r.q(const).vcsn::Element<(S,T)>).r."
+ parms: St &,vcsn::Element<S,T > const &
+ type: "St"
+ sym:overname: "__SWIG_0"
+ storage: "static"
+ templateparms: typename St,typename S,typename T
+
+ - namespace:
+ sym:name: "std"
+ name: "std"
+ sym:previousSibling: 0xb7cd4398
+ typescope: 0xb7cf9d38
+ symtab: 0xb7cd4338
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "swap"
+ sym:symtab: 0xb7cd4338
+ sym:nextSibling: 0xb7cece18
+ csym:nextSibling: 0xb7cece18
+ sym:name: "swap"
+ decl: "f(r.vcsn::Element<(S,T1)>,r.vcsn::Element<(S,T2)>)."
+ parms: vcsn::Element<S,T1 > &,vcsn::Element<S,T2 > &
+ sym:overloaded: 0xb7ceca48
+ type: "void"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T1,typename T2
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "swap"
+ sym:symtab: 0xb7cd4338
+ sym:previousSibling: 0xb7ceca48
+ sym:name: "swap"
+ csym:nextSibling: 0xb7ced1c8
+ sym:nextSibling: 0xb7ced1c8
+ decl: "f(r.vcsn::Element<(S,T)>,r.T)."
+ sym:overloaded: 0xb7ceca48
+ parms: vcsn::Element<S,T > &,T &
+ type: "void"
+ sym:overname: "__SWIG_1"
+ templateparms: typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "swap"
+ sym:symtab: 0xb7cd4338
+ sym:previousSibling: 0xb7cece18
+ sym:name: "swap"
+ decl: "f(r.T,r.vcsn::Element<(S,T)>)."
+ sym:overloaded: 0xb7ceca48
+ parms: T &,vcsn::Element<S,T > &
+ type: "void"
+ sym:overname: "__SWIG_2"
+ templateparms: typename T,typename S
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/default_ops.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ sym:previousSibling: 0xb7ce0778
+ csym:nextSibling: 0xb7cf4b78
+ sym:nextSibling: 0xb7cf4b78
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "cdecl"
+ sym:name: "op_contains"
+ name: "op_contains"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).T)."
+ parms: Structure<S > const &,T const &
+ sym:typename: "1"
+ type: "bool"
+ templateparms: typename S,typename T
+ sym:symtab: 0xb7cd59e8
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_eq"
+ sym:symtab: 0xb7cd59e8
+ csym:nextSibling: 0xb7cedfd8
+ sym:name: "op_eq"
+ sym:nextSibling: 0xb7cedfd8
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ parms: Structure<S > const &,T const &,U const &
+ sym:overloaded: 0xb7ceda28
+ type: "bool"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_eq"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ceda28
+ sym:name: "op_eq"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(V)>,r.q(const).T,r.q(const).U)."
+ sym:overloaded: 0xb7ceda28
+ parms: Structure<S > const &,Structure<V > const &,T const &,U const &
+ type: "bool"
+ sym:overname: "__SWIG_1"
+ templateparms: typename S,typename V,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_lt"
+ sym:symtab: 0xb7cd59e8
+ csym:nextSibling: 0xb7ceea18
+ sym:name: "op_lt"
+ sym:nextSibling: 0xb7ceea18
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ parms: Structure<S > const &,T const &,U const &
+ sym:overloaded: 0xb7cee468
+ type: "bool"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_lt"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7cee468
+ sym:name: "op_lt"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(V)>,r.q(const).T,r.q(const).U)."
+ sym:overloaded: 0xb7cee468
+ parms: Structure<S > const &,Structure<V > const &,T const &,U const &
+ type: "bool"
+ sym:overname: "__SWIG_1"
+ templateparms: typename S,typename V,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_convert"
+ sym:symtab: 0xb7cd59e8
+ csym:nextSibling: 0xb7cef2c8
+ sym:name: "op_convert"
+ sym:nextSibling: 0xb7cef2c8
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).R,r.q(const).T)."
+ parms: Structure<S > const &,R const &,T const &
+ sym:overloaded: 0xb7ceeeb8
+ type: "R"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename R,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_convert"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7ceeeb8
+ sym:name: "op_convert"
+ csym:nextSibling: 0xb7cef7c8
+ sym:nextSibling: 0xb7cef7c8
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).T,r.q(const).T).r."
+ sym:overloaded: 0xb7ceeeb8
+ parms: Structure<S > const &,T const &,T const &
+ type: "q(const).T"
+ sym:overname: "__SWIG_1"
+ templateparms: typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_convert"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7cef2c8
+ sym:name: "op_convert"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).T,r.q(const).Structure<(S)>,r.q(const).T).r."
+ sym:overloaded: 0xb7ceeeb8
+ parms: Structure<S > const &,T const &,Structure<S > const &,T const &
+ type: "q(const).T"
+ sym:overname: "__SWIG_2"
+ templateparms: typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_default"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_default"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).T)."
+ parms: Structure<S > const &,T const &
+ type: "T"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_swap"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_swap"
+ decl: "f(r.q(const).Structure<(S)>,r.T,r.T)."
+ parms: Structure<S > const &,T &,T &
+ type: "void"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_assign"
+ sym:symtab: 0xb7cd59e8
+ csym:nextSibling: 0xb7cf0918
+ sym:name: "op_assign"
+ sym:nextSibling: 0xb7cf0918
+ decl: "f(r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ parms: Structure<S > const &,T &,U const &
+ sym:overloaded: 0xb7cf0388
+ type: "void"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_assign"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7cf0388
+ sym:name: "op_assign"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ sym:overloaded: 0xb7cf0388
+ parms: Structure<S > const &,Structure<S > const &,T &,U const &
+ type: "void"
+ sym:overname: "__SWIG_1"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_in_add"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_in_add"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T &,U const &
+ type: "void"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_in_sub"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_in_sub"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T &,U const &
+ type: "void"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_in_mul"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_in_mul"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T &,U const &
+ type: "void"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_in_div"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_in_div"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T &,U const &
+ type: "void"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_in_mod"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_in_mod"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T &,U const &
+ type: "void"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_add"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_add"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T const &,U const &
+ type: "T"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_sub"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_sub"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T const &,U const &
+ type: "T"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_mul"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_mul"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T const &,U const &
+ type: "T"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_div"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_div"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T const &,U const &
+ type: "T"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_mod"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_mod"
+ decl: "f(r.q(const).Structure<(S)>,r.q(const).Structure<(S)>,r.q(const).T,r.q(const).U)."
+ parms: Structure<S > const &,Structure<S > const &,T const &,U const &
+ type: "T"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "op_rin"
+ sym:symtab: 0xb7cd59e8
+ sym:name: "op_rin"
+ decl: "f(r.q(const).Structure<(S)>,r.St,r.q(const).T).r."
+ parms: Structure<S > const &,St &,T const &
+ type: "St"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename St,typename T
+
+ - template:
+ templatetype: "cdecl"
+ sym:name: "op_rout"
+ name: "op_rout"
+ decl: "f(r.q(const).Structure<(S)>,r.St,r.q(const).T).r."
+ parms: Structure<S > const &,St &,T const &
+ sym:typename: "1"
+ type: "St"
+ templateparms: typename S,typename St,typename T
+ sym:symtab: 0xb7cd59e8
+ sym:overname: "__SWIG_0"
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/slots.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ sym:previousSibling: 0xb7ced2a8
+ csym:nextSibling: 0xb7cf6a18
+ sym:nextSibling: 0xb7cf6a18
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "SetSlotAttribute"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cf4d38
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "SetSlotAttribute"
+ partials: 0xb7cf6128
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,bool
+
+ contents:
+
+ - constructor:
+ sym:name: "SetSlotAttribute"
+ name: "SetSlotAttribute"
+ decl: "f()."
+ feature:new: "1"
+ sym:overloaded: 0xb7cf4e28
+ csym:nextSibling: 0xb7cf4f48
+ sym:nextSibling: 0xb7cf4f48
+ sym:symtab: 0xb7cf4d38
+ sym:overname: "__SWIG_0"
+
+ - constructor:
+ name: "SetSlotAttribute"
+ sym:symtab: 0xb7cf4d38
+ sym:nextSibling: 0xb7cf5068
+ csym:nextSibling: 0xb7cf5068
+ sym:previousSibling: 0xb7cf4e28
+ sym:name: "SetSlotAttribute"
+ decl: "f(r.q(const).SetSlotAttribute)."
+ sym:overloaded: 0xb7cf4e28
+ parms: SetSlotAttribute const &
+ sym:overname: "__SWIG_1"
+ feature:new: "1"
+
+ - constructor:
+ sym:name: "SetSlotAttribute"
+ name: "SetSlotAttribute"
+ parms: S const &
+ decl: "f(r.q(const).S)."
+ feature:new: "1"
+ sym:overloaded: 0xb7cf4e28
+ sym:previousSibling: 0xb7cf4f48
+ sym:symtab: 0xb7cf4d38
+ sym:overname: "__SWIG_2"
+
+ - cdecl:
+ sym:name: "_structure_get"
+ name: "_structure_get"
+ decl: "q(const).f().r."
+ type: "q(const).S"
+ sym:symtab: 0xb7cf4d38
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "_structure_assign"
+ name: "_structure_assign"
+ decl: "f(r.q(const).SetSlotAttribute)."
+ parms: SetSlotAttribute const &
+ type: "void"
+ sym:symtab: 0xb7cf4d38
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "_structure_attach"
+ name: "_structure_attach"
+ decl: "f(r.q(const).S)."
+ parms: S const &
+ type: "void"
+ sym:symtab: 0xb7cf4d38
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "_structure_bound"
+ name: "_structure_bound"
+ decl: "q(const).f()."
+ type: "bool"
+ sym:symtab: 0xb7cf4d38
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "SetSlotAttribute<(S,true)>"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cf56f8
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "SetSlotAttribute<(S,true)>"
+ partialargs: "SetSlotAttribute<($1,true)>"
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,true
+ partialspecialization: "1"
+
+ contents:
+
+ - constructor:
+ sym:name: "SetSlotAttribute"
+ name: "SetSlotAttribute"
+ decl: "f()."
+ feature:new: "1"
+ sym:overloaded: 0xb7cf57b8
+ csym:nextSibling: 0xb7cf58d8
+ sym:nextSibling: 0xb7cf58d8
+ sym:symtab: 0xb7cf56f8
+ sym:overname: "__SWIG_0"
+
+ - constructor:
+ name: "SetSlotAttribute"
+ sym:symtab: 0xb7cf56f8
+ sym:nextSibling: 0xb7cf59f8
+ csym:nextSibling: 0xb7cf59f8
+ sym:previousSibling: 0xb7cf57b8
+ sym:name: "SetSlotAttribute"
+ decl: "f(r.q(const).SetSlotAttribute)."
+ sym:overloaded: 0xb7cf57b8
+ parms: SetSlotAttribute const &
+ sym:overname: "__SWIG_1"
+ feature:new: "1"
+
+ - constructor:
+ sym:name: "SetSlotAttribute"
+ name: "SetSlotAttribute"
+ parms: S const &
+ decl: "f(r.q(const).S)."
+ feature:new: "1"
+ sym:overloaded: 0xb7cf57b8
+ sym:previousSibling: 0xb7cf58d8
+ sym:symtab: 0xb7cf56f8
+ sym:overname: "__SWIG_2"
+
+ - cdecl:
+ sym:name: "_structure_get"
+ name: "_structure_get"
+ decl: "q(const).f().r."
+ type: "q(const).S"
+ sym:symtab: 0xb7cf56f8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "_structure_assign"
+ name: "_structure_assign"
+ decl: "f(r.q(const).SetSlotAttribute)."
+ parms: SetSlotAttribute const &
+ type: "void"
+ sym:symtab: 0xb7cf56f8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "_structure_attach"
+ name: "_structure_attach"
+ decl: "f(r.q(const).S)."
+ parms: S const &
+ type: "void"
+ sym:symtab: 0xb7cf56f8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "_structure_bound"
+ name: "_structure_bound"
+ decl: "q(const).f()."
+ type: "bool"
+ sym:symtab: 0xb7cf56f8
+ sym:overname: "__SWIG_0"
+
+ - access:
+ kind: "protected"
+
+ - cdecl:
+ name: "s_"
+ decl: "p."
+ access: "protected"
+ type: "q(const).S"
+ sym:symtab: 0xb7cf56f8
+
+ - access:
+ kind: "public"
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "SetSlot"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cf64a8
+ allows_typedef: "1"
+ kind: "struct"
+ sym:name: "SetSlot"
+ privatebaselist: 0xb7cf63d8
+ protectedbaselist: 0xb7cf63c8
+ baselist: 0xb7cf63b8
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename Tag
+
+ contents:
+
+ - cdecl:
+ sym:name: "tag_type"
+ name: "tag_type"
+ decl: ""
+ storage: "typedef"
+ type: "Tag"
+ sym:symtab: 0xb7cf64a8
+ sym:overname: "__SWIG_0"
+
+ - constructor:
+ sym:name: "SetSlot"
+ name: "SetSlot"
+ decl: "f()."
+ feature:new: "1"
+ sym:overloaded: 0xb7cf6648
+ csym:nextSibling: 0xb7cf6768
+ sym:nextSibling: 0xb7cf6768
+ sym:symtab: 0xb7cf64a8
+ sym:overname: "__SWIG_0"
+
+ - constructor:
+ name: "SetSlot"
+ sym:symtab: 0xb7cf64a8
+ sym:nextSibling: 0xb7cf6888
+ csym:nextSibling: 0xb7cf6888
+ sym:previousSibling: 0xb7cf6648
+ sym:name: "SetSlot"
+ decl: "f(r.q(const).SetSlot)."
+ sym:overloaded: 0xb7cf6648
+ parms: SetSlot const &
+ sym:overname: "__SWIG_1"
+ feature:new: "1"
+
+ - constructor:
+ sym:name: "SetSlot"
+ name: "SetSlot"
+ parms: S const &
+ decl: "f(r.q(const).S)."
+ feature:new: "1"
+ sym:overloaded: 0xb7cf6648
+ sym:previousSibling: 0xb7cf6768
+ sym:symtab: 0xb7cf64a8
+ sym:overname: "__SWIG_2"
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/element.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ sym:previousSibling: 0xb7cf4b78
+ csym:nextSibling: 0xb7cf9498
+ sym:nextSibling: 0xb7cf9498
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "class"
+ sym:typename: "1"
+ name: "Element"
+ sym:symtab: 0xb7cd59e8
+ symtab: 0xb7cf6de8
+ allows_typedef: "1"
+ kind: "class"
+ sym:name: "Element"
+ privatebaselist: 0xb7cf6cb8
+ protectedbaselist: 0xb7cf6ca8
+ baselist: 0xb7cf6c98
+ sym:overname: "__SWIG_0"
+ templateparms: typename S,typename T
+
+ contents:
+
+ - access:
+ kind: "public"
+
+ - cdecl:
+ sym:name: "set_t"
+ name: "set_t"
+ decl: ""
+ storage: "typedef"
+ type: "S"
+ sym:symtab: 0xb7cf6de8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "value_t"
+ name: "value_t"
+ decl: ""
+ storage: "typedef"
+ type: "T"
+ sym:symtab: 0xb7cf6de8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "dynamic"
+ name: "dynamic"
+ decl: ""
+ storage: "static"
+ value: "dynamic_traits<(S)>::ret||MetaElement<(S,T)>::dynamic_value"
+ type: "q(const).bool"
+ sym:symtab: 0xb7cf6de8
+ sym:overname: "__SWIG_0"
+
+ - constructor:
+ sym:name: "Element"
+ name: "Element"
+ decl: "f()."
+ feature:new: "1"
+ sym:overloaded: 0xb7cf72a8
+ csym:nextSibling: 0xb7cf73c8
+ sym:nextSibling: 0xb7cf73c8
+ sym:symtab: 0xb7cf6de8
+ sym:overname: "__SWIG_0"
+
+ - constructor:
+ name: "Element"
+ sym:symtab: 0xb7cf6de8
+ csym:nextSibling: 0xb7cf78f8
+ sym:nextSibling: 0xb7cf7608
+ sym:previousSibling: 0xb7cf72a8
+ sym:name: "Element"
+ decl: "f(r.q(const).Element)."
+ sym:overloaded: 0xb7cf72a8
+ parms: Element const &
+ sym:overname: "__SWIG_1"
+ feature:new: "1"
+
+ - template:
+ templatetype: "constructor"
+ sym:typename: "1"
+ name: "Element"
+ sym:symtab: 0xb7cf6de8
+ sym:previousSibling: 0xb7cf73c8
+ csym:nextSibling: 0xb7cf72a8
+ sym:name: "Element"
+ sym:nextSibling: 0xb7cf78f8
+ decl: "f(r.q(const).Element<(S,U)>)."
+ sym:overloaded: 0xb7cf72a8
+ parms: Element<S,U > const &
+ sym:overname: "__SWIG_2"
+ templateparms: typename U
+ feature:new: "1"
+
+ - template:
+ templatetype: "constructor"
+ sym:typename: "1"
+ name: "Element"
+ sym:symtab: 0xb7cf6de8
+ csym:nextSibling: 0xb7cf7a78
+ sym:previousSibling: 0xb7cf7608
+ sym:name: "Element"
+ sym:nextSibling: 0xb7cf7a78
+ decl: "f(r.q(const).Element<(OtherS,U)>)."
+ sym:overloaded: 0xb7cf72a8
+ parms: Element<OtherS,U > const &
+ sym:overname: "__SWIG_3"
+ templateparms: typename OtherS,typename U
+ feature:new: "1"
+
+ - constructor:
+ name: "Element"
+ sym:symtab: 0xb7cf6de8
+ sym:nextSibling: 0xb7cf7c08
+ csym:nextSibling: 0xb7cf7c08
+ sym:previousSibling: 0xb7cf78f8
+ sym:name: "Element"
+ decl: "f(r.q(const).T)."
+ sym:overloaded: 0xb7cf72a8
+ parms: T const &
+ sym:overname: "__SWIG_4"
+ feature:new: "1"
+
+ - template:
+ templatetype: "constructor"
+ sym:typename: "1"
+ name: "Element"
+ sym:symtab: 0xb7cf6de8
+ csym:nextSibling: 0xb7cf7d68
+ sym:previousSibling: 0xb7cf7a78
+ sym:name: "Element"
+ sym:nextSibling: 0xb7cf7d68
+ decl: "f(r.q(const).U)."
+ sym:overloaded: 0xb7cf72a8
+ parms: U const &
+ sym:overname: "__SWIG_5"
+ templateparms: typename U
+ feature:new: "1"
+
+ - constructor:
+ name: "Element"
+ sym:symtab: 0xb7cf6de8
+ sym:nextSibling: 0xb7cf7f28
+ csym:nextSibling: 0xb7cf7f28
+ sym:previousSibling: 0xb7cf7c08
+ sym:name: "Element"
+ decl: "f(r.q(const).S)."
+ sym:overloaded: 0xb7cf72a8
+ parms: S const &
+ sym:overname: "__SWIG_6"
+ feature:new: "1"
+
+ - constructor:
+ name: "Element"
+ sym:symtab: 0xb7cf6de8
+ sym:nextSibling: 0xb7cf8158
+ csym:nextSibling: 0xb7cf8158
+ sym:previousSibling: 0xb7cf7d68
+ sym:name: "Element"
+ decl: "f(r.q(const).S,r.q(const).T)."
+ sym:overloaded: 0xb7cf72a8
+ parms: S const &,T const &
+ sym:overname: "__SWIG_7"
+ feature:new: "1"
+
+ - template:
+ templatetype: "constructor"
+ sym:typename: "1"
+ name: "Element"
+ sym:symtab: 0xb7cf6de8
+ csym:nextSibling: 0xb7cf84e8
+ sym:previousSibling: 0xb7cf7f28
+ sym:name: "Element"
+ sym:nextSibling: 0xb7cf84e8
+ decl: "f(r.q(const).S,r.q(const).U)."
+ sym:overloaded: 0xb7cf72a8
+ parms: S const &,U const &
+ sym:overname: "__SWIG_8"
+ templateparms: typename U
+ feature:new: "1"
+
+ - template:
+ templatetype: "constructor"
+ sym:typename: "1"
+ name: "Element"
+ sym:symtab: 0xb7cf6de8
+ sym:previousSibling: 0xb7cf8158
+ sym:name: "Element"
+ decl: "f(r.q(const).S,r.q(const).Element<(OtherS,U)>)."
+ sym:overloaded: 0xb7cf72a8
+ parms: S const &,Element<OtherS,U > const &
+ sym:overname: "__SWIG_9"
+ templateparms: typename OtherS,typename U
+ feature:new: "1"
+
+ - cdecl:
+ sym:name: "operator ="
+ name: "operator ="
+ decl: "f(r.q(const).Element).r."
+ parms: Element const &
+ sym:overloaded: 0xb7cf8678
+ type: "Element"
+ sym:nextSibling: 0xb7cf88d8
+ csym:nextSibling: 0xb7cf8be8
+ sym:symtab: 0xb7cf6de8
+ sym:overname: "__SWIG_0"
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator ="
+ sym:symtab: 0xb7cf6de8
+ sym:previousSibling: 0xb7cf8678
+ csym:nextSibling: 0xb7cf8678
+ sym:name: "operator ="
+ sym:nextSibling: 0xb7cf8be8
+ decl: "f(r.q(const).Element<(S,U)>).r."
+ sym:overloaded: 0xb7cf8678
+ parms: Element<S,U > const &
+ type: "Element"
+ sym:overname: "__SWIG_1"
+ templateparms: typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator ="
+ sym:symtab: 0xb7cf6de8
+ csym:nextSibling: 0xb7cf8df8
+ sym:previousSibling: 0xb7cf88d8
+ sym:name: "operator ="
+ sym:nextSibling: 0xb7cf8df8
+ decl: "f(r.q(const).Element<(OtherS,U)>).r."
+ sym:overloaded: 0xb7cf8678
+ parms: Element<OtherS,U > const &
+ type: "Element"
+ sym:overname: "__SWIG_2"
+ templateparms: typename OtherS,typename U
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "operator ="
+ sym:symtab: 0xb7cf6de8
+ sym:previousSibling: 0xb7cf8be8
+ sym:name: "operator ="
+ decl: "f(r.q(const).U).r."
+ sym:overloaded: 0xb7cf8678
+ parms: U const &
+ type: "Element"
+ sym:overname: "__SWIG_3"
+ templateparms: typename U
+
+ - cdecl:
+ sym:name: "structure"
+ name: "structure"
+ decl: "q(const).f().r."
+ type: "q(const).S"
+ sym:symtab: 0xb7cf6de8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "attach"
+ name: "attach"
+ decl: "f(r.q(const).S)."
+ parms: S const &
+ type: "void"
+ sym:symtab: 0xb7cf6de8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "value"
+ name: "value"
+ decl: "f().r."
+ sym:overloaded: 0xb7cf90c8
+ type: "T"
+ csym:nextSibling: 0xb7cf9198
+ sym:nextSibling: 0xb7cf9198
+ sym:symtab: 0xb7cf6de8
+ sym:overname: "__SWIG_0"
+
+ - cdecl:
+ sym:name: "value"
+ name: "value"
+ decl: "q(const).f().r."
+ sym:overloaded: 0xb7cf90c8
+ type: "q(const).T"
+ sym:previousSibling: 0xb7cf90c8
+ sym:symtab: 0xb7cf6de8
+ sym:overname: "__SWIG_1"
+
+ - access:
+ kind: "private"
+
+ - cdecl:
+ name: "value_"
+ decl: ""
+ access: "private"
+ type: "T"
+ sym:symtab: 0xb7cf6de8
+
+ - access:
+ kind: "public"
+
+ - include:
+ name: "vcsn/include/vaucanson/design_pattern/design_pattern.hh"
+
+ - include:
+ name: "vcsn/include/vaucanson/algorithms/standard_of.hh"
+
+ contents:
+
+ - namespace:
+ sym:name: "vcsn"
+ name: "vcsn"
+ sym:previousSibling: 0xb7cf6a18
+ typescope: 0xb7cf9e58
+ symtab: 0xb7cd59e8
+ sym:symtab: 0xb7cd02e8
+
+ contents:
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "standard_of"
+ sym:symtab: 0xb7cd59e8
+ sym:nextSibling: 0xb7cf9c28
+ csym:nextSibling: 0xb7cf9c28
+ sym:name: "standard_of"
+ decl: "f(r.Element<(A,T)>,r.q(const).Exp)."
+ parms: Element<A,T > &,Exp const &
+ sym:overloaded: 0xb7cf9868
+ type: "void"
+ sym:overname: "__SWIG_0"
+ templateparms: typename A,typename T,typename Exp
+
+ - template:
+ templatetype: "cdecl"
+ sym:typename: "1"
+ name: "standard_of"
+ sym:symtab: 0xb7cd59e8
+ sym:previousSibling: 0xb7cf9868
+ sym:name: "standard_of"
+ decl: "f(r.q(const).Exp)."
+ sym:overloaded: 0xb7cf9868
+ parms: Exp const &
+ type: "Element<(A,T)>"
+ sym:overname: "__SWIG_1"
+ templateparms: typename A,typename T,typename Exp
+
+ - module:
+ name: "vcsn"
diff --git a/dynamic-use-of-static-c++/test/fixtures/vaucanson/dyn_vaucanson_dyn_mirror.hh b/dynamic-use-of-static-c++/test/fixtures/vaucanson/dyn_vaucanson_dyn_mirror.hh
new file mode 100644
index 0000000..b04ee79
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/fixtures/vaucanson/dyn_vaucanson_dyn_mirror.hh
@@ -0,0 +1,887 @@
+namespace dyn {
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ fun xml2str("dyn::vcsn::xml::xml2str", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/xml/strings.hh");
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct myDOMErrorHandler {
+ ctor myDOMErrorHandler("vcsn::xml::myDOMErrorHandler");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct xerces_parser {
+ ctor xerces_parser("vcsn::xml::xerces_parser");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace z_automaton {
+ fun automaton_t("dyn::vcsn::z_automaton::automaton_t", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/z_automaton.hh");
+ } // end of namespace z_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct TropicalSemiring {
+ ctor TropicalSemiring("vcsn::algebra::TropicalSemiring");
+ // };
+ } // end of namespace algebra
+ namespace algebra {
+ // struct TropicalMin {
+ ctor TropicalMin("vcsn::algebra::TropicalMin");
+ // };
+ // struct TropicalMax {
+ ctor TropicalMax("vcsn::algebra::TropicalMax");
+ // };
+ // struct TropicalSemiring {
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace z_max_plus_automaton {
+ fun automaton_t("dyn::vcsn::z_max_plus_automaton::automaton_t", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/z_max_plus_automaton.hh");
+ } // end of namespace z_max_plus_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace z_min_plus_automaton {
+ fun automaton_t("dyn::vcsn::z_min_plus_automaton::automaton_t", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/z_min_plus_automaton.hh");
+ } // end of namespace z_min_plus_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace r_automaton {
+ fun automaton_t("dyn::vcsn::r_automaton::automaton_t", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/r_automaton.hh");
+ } // end of namespace r_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct Transducer {
+ ctor Transducer("vcsn::Transducer");
+ // };
+ // struct input_projection_helper {
+ ctor input_projection_helper("vcsn::input_projection_helper");
+ // };
+ // struct output_projection_helper {
+ ctor output_projection_helper("vcsn::output_projection_helper");
+ // };
+ // struct identity_transducer_helper {
+ ctor identity_transducer_helper("vcsn::identity_transducer_helper");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace fmp_transducer {
+ } // end of namespace fmp_transducer
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ fun automaton_t("dyn::vcsn::VCSN_CONTEXT_NAMESPACE::automaton_t", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/contexts/transducer.thh");
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace boolean_transducer {
+ } // end of namespace boolean_transducer
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace boolean_transducer {
+ fun automaton_t("dyn::vcsn::boolean_transducer::automaton_t", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/boolean_transducer.hh");
+ } // end of namespace boolean_transducer
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ namespace tools {
+ } // end of namespace tools
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct xml_chooser_base {
+ ctor xml_chooser_base("vcsn::xml::xml_chooser_base");
+ // };
+ // struct xml_chooser {
+ ctor xml_chooser("vcsn::xml::xml_chooser");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct reference_pair {
+ ctor reference_pair("vcsn::xml::reference_pair");
+ // };
+ // struct Node {
+ ctor Node("vcsn::xml::Node");
+ // };
+ // struct automatonNode {
+ ctor automatonNode("vcsn::xml::automatonNode");
+ // };
+ // struct transducerNode {
+ ctor transducerNode("vcsn::xml::transducerNode");
+ // };
+ // struct typeNode {
+ ctor typeNode("vcsn::xml::typeNode");
+ // };
+ // struct contentNode {
+ ctor contentNode("vcsn::xml::contentNode");
+ // };
+ // struct statesNode {
+ ctor statesNode("vcsn::xml::statesNode");
+ // };
+ // struct transitionsNode {
+ ctor transitionsNode("vcsn::xml::transitionsNode");
+ // };
+ // struct stateNode {
+ ctor stateNode("vcsn::xml::stateNode");
+ // };
+ // struct transitionNode {
+ ctor transitionNode("vcsn::xml::transitionNode");
+ // };
+ // struct initialNode {
+ ctor initialNode("vcsn::xml::initialNode");
+ // };
+ // struct finalNode {
+ ctor finalNode("vcsn::xml::finalNode");
+ // };
+ // struct semiringNode {
+ ctor semiringNode("vcsn::xml::semiringNode");
+ // };
+ // struct monoidNode {
+ ctor monoidNode("vcsn::xml::monoidNode");
+ // };
+ // struct freemonoidNode {
+ ctor freemonoidNode("vcsn::xml::freemonoidNode");
+ // };
+ // struct generatorNode {
+ ctor generatorNode("vcsn::xml::generatorNode");
+ // };
+ // struct geometryNode {
+ ctor geometryNode("vcsn::xml::geometryNode");
+ // };
+ // struct drawingNode {
+ ctor drawingNode("vcsn::xml::drawingNode");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct xml_converter {
+ ctor xml_converter("vcsn::xml::xml_converter");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct XML {
+ ctor XML("vcsn::xml::XML");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct AlphabetSet {
+ ctor AlphabetSet("vcsn::algebra::AlphabetSet");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct FreeMonoid {
+ ctor FreeMonoid("vcsn::algebra::FreeMonoid");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace utility {
+ // struct generic_int_type {
+ ctor generic_int_type("utility::generic_int_type");
+ // };
+ // struct char_traits {
+ ctor char_traits("utility::char_traits");
+ // };
+ } // end of namespace utility
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct NumericalSemiring {
+ ctor NumericalSemiring("vcsn::algebra::NumericalSemiring");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ fun op_can_choose_non_starable("dyn::vcsn::op_can_choose_non_starable", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_choose_starable("dyn::vcsn::op_choose_starable", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_choose_non_starable("dyn::vcsn::op_choose_non_starable", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_mul("dyn::vcsn::op_mul", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ proc op_in_add("dyn::vcsn::op_in_add", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_add("dyn::vcsn::op_add", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun identity_value("dyn::vcsn::identity_value", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun zero_value("dyn::vcsn::zero_value", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_starable("dyn::vcsn::op_starable", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ proc op_in_star("dyn::vcsn::op_in_star", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct DefaultTransposeFun {
+ ctor DefaultTransposeFun("vcsn::algebra::DefaultTransposeFun");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace utility {
+ } // end of namespace utility
+ namespace std {
+ } // end of namespace std
+ namespace utility {
+ } // end of namespace utility
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace std {
+ } // end of namespace std
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ // struct setpm {
+ ctor setpm("vcsn::rat::setpm");
+ // };
+ fun getpm("dyn::vcsn::rat::getpm", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/series/rat/dump_visitor.hh");
+ // struct setzero {
+ ctor setzero("vcsn::rat::setzero");
+ // };
+ // struct setid {
+ ctor setid("vcsn::rat::setid");
+ // };
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct Automata {
+ ctor Automata("vcsn::Automata");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct TransducerBase {
+ ctor TransducerBase("vcsn::TransducerBase");
+ // };
+ // struct transducer_traits {
+ ctor transducer_traits("vcsn::transducer_traits");
+ // };
+ // struct extension_traits {
+ ctor extension_traits("vcsn::extension_traits");
+ // };
+ // struct projection_traits {
+ ctor projection_traits("vcsn::projection_traits");
+ // };
+ // struct output_projection_traits {
+ ctor output_projection_traits("vcsn::output_projection_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct labels_are_letters {
+ ctor labels_are_letters("vcsn::labels_are_letters");
+ // };
+ // struct labels_are_words {
+ ctor labels_are_words("vcsn::labels_are_words");
+ // };
+ // struct labels_are_series {
+ ctor labels_are_series("vcsn::labels_are_series");
+ // };
+ // struct labels_are_couples {
+ ctor labels_are_couples("vcsn::labels_are_couples");
+ // };
+ // struct LabelOf {
+ ctor LabelOf("vcsn::LabelOf");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct NoTag {
+ ctor NoTag("vcsn::NoTag");
+ // };
+ } // end of namespace vcsn
+ fun operator_equal("dyn::operator_equal", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/automata/concept/tags.hh");
+ fun operator_not_equal("dyn::operator_not_equal", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/automata/concept/tags.hh");
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct geometry {
+ ctor geometry("vcsn::geometry");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct edge_value {
+ ctor edge_value("vcsn::edge_value");
+ // };
+ // struct state_value {
+ ctor state_value("vcsn::state_value");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct generalized_traits {
+ ctor generalized_traits("vcsn::generalized_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace io {
+ // struct automaton_saver_ {
+ ctor automaton_saver_("vcsn::io::automaton_saver_");
+ // };
+ // struct string_out {
+ ctor string_out("vcsn::io::string_out");
+ // };
+ } // end of namespace io
+ namespace io {
+ // struct automaton_loader_ {
+ ctor automaton_loader_("vcsn::io::automaton_loader_");
+ // };
+ } // end of namespace io
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace io {
+ // struct dot {
+ ctor dot("vcsn::io::dot");
+ // };
+ // struct transducer_dot {
+ ctor transducer_dot("vcsn::io::transducer_dot");
+ // };
+ } // end of namespace io
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algorithm_patterns {
+ // struct Comparator {
+ ctor Comparator("vcsn::algorithm_patterns::Comparator");
+ // };
+ } // end of namespace algorithm_patterns
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct reference_type {
+ ctor reference_type("vcsn::reference_type");
+ // };
+ // struct iterator_type {
+ ctor iterator_type("vcsn::iterator_type");
+ // };
+ // struct PartialExp {
+ // struct internal_iterator {
+ ctor internal_iterator("vcsn::PartialExp::internal_iterator");
+ // };
+ ctor PartialExp("vcsn::PartialExp");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ fun aut_to_exp("dyn::vcsn::VCSN_CONTEXT_NAMESPACE::aut_to_exp", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/contexts/automaton_functions.thh");
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace boolean_automaton {
+ fun automaton_t("dyn::vcsn::boolean_automaton::automaton_t", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/boolean_automaton.hh");
+ } // end of namespace boolean_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct dynamic_traits {
+ ctor dynamic_traits("vcsn::dynamic_traits");
+ // };
+ // struct SyntacticDecorator {
+ ctor SyntacticDecorator("vcsn::SyntacticDecorator");
+ // };
+ // struct MetaElement {
+ ctor MetaElement("vcsn::MetaElement");
+ // };
+ // struct Element {
+ ctor Element("vcsn::Element");
+ // };
+ // struct default_slot_tag {
+ ctor default_slot_tag("vcsn::default_slot_tag");
+ // };
+ // struct SetSlot {
+ ctor SetSlot("vcsn::SetSlot");
+ // };
+ // struct Structure {
+ ctor Structure("vcsn::Structure");
+ // };
+ // struct virtual_types {
+ ctor virtual_types("vcsn::virtual_types");
+ // };
+ // struct undefined_type {
+ ctor undefined_type("vcsn::undefined_type");
+ // };
+ } // end of namespace vcsn
+ namespace utility {
+ namespace unique {
+ // struct UniqueListBase {
+ ctor UniqueListBase("utility::unique::UniqueListBase");
+ // };
+ // struct uniquelist {
+ ctor uniquelist("utility::unique::uniquelist");
+ // };
+ // struct UniqueMap {
+ // struct TiSlot {
+ ctor TiSlot("utility::unique::UniqueMap::TiSlot");
+ // };
+ ctor UniqueMap("utility::unique::UniqueMap");
+ // };
+ // struct unifiable {
+ ctor unifiable("utility::unique::unifiable");
+ // };
+ } // end of namespace unique
+ } // end of namespace utility
+ namespace vcsn {
+ // struct Structure {
+ // };
+ } // end of namespace vcsn
+ namespace utility {
+ namespace contract {
+ proc trap("dyn::utility::contract::trap", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/misc/contract.hh");
+ // struct fail {
+ ctor fail("utility::contract::fail");
+ // };
+ } // end of namespace contract
+ } // end of namespace utility
+ namespace vcsn {
+ // struct SyntacticDecorator {
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct op_add_traits {
+ ctor op_add_traits("vcsn::op_add_traits");
+ // };
+ // struct op_sub_traits {
+ ctor op_sub_traits("vcsn::op_sub_traits");
+ // };
+ // struct op_mul_traits {
+ ctor op_mul_traits("vcsn::op_mul_traits");
+ // };
+ // struct op_div_traits {
+ ctor op_div_traits("vcsn::op_div_traits");
+ // };
+ // struct op_mod_traits {
+ ctor op_mod_traits("vcsn::op_mod_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace std {
+ } // end of namespace std
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct SetSlotAttribute {
+ ctor SetSlotAttribute("vcsn::SetSlotAttribute");
+ // };
+ // struct SetSlot {
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct mul_kind {
+ ctor mul_kind("vcsn::algebra::mul_kind");
+ // };
+ // struct add_kind {
+ ctor add_kind("vcsn::algebra::add_kind");
+ // };
+ // struct SemigroupBase {
+ ctor SemigroupBase("vcsn::algebra::SemigroupBase");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct MonoidBase {
+ ctor MonoidBase("vcsn::algebra::MonoidBase");
+ // };
+ // struct identity_as {
+ ctor identity_as("vcsn::algebra::identity_as");
+ // };
+ // struct zero_as {
+ ctor zero_as("vcsn::algebra::zero_as");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct SemiringBase {
+ ctor SemiringBase("vcsn::algebra::SemiringBase");
+ // };
+ } // end of namespace algebra
+ // struct op_star_traits {
+ ctor op_star_traits("vcsn::op_star_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct op_begin_traits {
+ ctor op_begin_traits("vcsn::op_begin_traits");
+ // };
+ // struct op_rbegin_traits {
+ ctor op_rbegin_traits("vcsn::op_rbegin_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct static_char_interval {
+ ctor static_char_interval("vcsn::algebra::static_char_interval");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace utility {
+ // struct limits {
+ ctor limits("utility::limits");
+ // };
+ } // end of namespace utility
+ namespace vcsn {
+ namespace algebra {
+ fun operator_push("dyn::vcsn::algebra::operator_push", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/rational_number.hh");
+ fun gcd("dyn::vcsn::algebra::gcd", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/rational_number.hh");
+ fun lcm("dyn::vcsn::algebra::lcm", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/rational_number.hh");
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace std {
+ } // end of namespace std
+ namespace utility {
+ } // end of namespace utility
+ namespace utility {
+ namespace random {
+ fun generate_letter("dyn::utility::random::generate_letter", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/misc/random.hh");
+ fun generate_digit("dyn::utility::random::generate_digit", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/misc/random.hh");
+ } // end of namespace random
+ } // end of namespace utility
+ namespace vcsn {
+ namespace algebra {
+ // struct AlphabetSetBase {
+ ctor AlphabetSetBase("vcsn::algebra::AlphabetSetBase");
+ // };
+ // struct alphabet_traits {
+ ctor alphabet_traits("vcsn::algebra::alphabet_traits");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace utility {
+ // struct iomanip {
+ ctor iomanip("utility::iomanip");
+ // };
+ } // end of namespace utility
+ namespace vcsn {
+ namespace tools {
+ fun usual_escaped_characters("dyn::vcsn::tools::usual_escaped_characters", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/tools/usual_escaped_characters.hh");
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace utility {
+ // struct escaper {
+ ctor escaper("utility::escaper");
+ // };
+ // struct setesc {
+ ctor setesc("utility::setesc");
+ // };
+ fun getesc("dyn::utility::getesc", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/seminar_dynamic_static_bridge/test/vaucanson/sources/include/vaucanson/misc/escaper.hh");
+ } // end of namespace utility
+ namespace vcsn {
+ namespace algebra {
+ // struct FreeMonoidBase {
+ ctor FreeMonoidBase("vcsn::algebra::FreeMonoidBase");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct SeriesBase {
+ ctor SeriesBase("vcsn::algebra::SeriesBase");
+ // };
+ // struct series_traits {
+ ctor series_traits("vcsn::algebra::series_traits");
+ // };
+ // struct mute_series_impl {
+ ctor mute_series_impl("vcsn::algebra::mute_series_impl");
+ // };
+ // struct mute_series_traits {
+ ctor mute_series_traits("vcsn::algebra::mute_series_traits");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct semiring_slot_tag {
+ ctor semiring_slot_tag("vcsn::algebra::semiring_slot_tag");
+ // };
+ // struct monoid_slot_tag {
+ ctor monoid_slot_tag("vcsn::algebra::monoid_slot_tag");
+ // };
+ // struct Series {
+ ctor Series("vcsn::algebra::Series");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace utility {
+ // struct DeferrerDebugPart {
+ ctor DeferrerDebugPart("utility::DeferrerDebugPart");
+ // };
+ // struct Deferrer {
+ ctor Deferrer("utility::Deferrer");
+ // };
+ } // end of namespace utility
+ namespace vcsn {
+ namespace algebra {
+ // struct DispatchFunction {
+ ctor DispatchFunction("vcsn::algebra::DispatchFunction");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct BinaryOp {
+ ctor BinaryOp("vcsn::algebra::BinaryOp");
+ // };
+ // struct UnaryOp {
+ ctor UnaryOp("vcsn::algebra::UnaryOp");
+ // };
+ // struct Value {
+ ctor Value("vcsn::algebra::Value");
+ // };
+ // struct GenericMatcher {
+ ctor GenericMatcher("vcsn::algebra::GenericMatcher");
+ // };
+ // struct KRatExpMatcher {
+ ctor KRatExpMatcher("vcsn::algebra::KRatExpMatcher");
+ // };
+ // struct KRatExpIdentity {
+ ctor KRatExpIdentity("vcsn::algebra::KRatExpIdentity");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct state_h {
+ ctor state_h("vcsn::state_h");
+ // };
+ // struct edge_h {
+ ctor edge_h("vcsn::edge_h");
+ // };
+ } // end of namespace vcsn
+ namespace std {
+ } // end of namespace std
+ namespace vcsn {
+ namespace delta_kind {
+ // struct edges {
+ ctor edges("vcsn::delta_kind::edges");
+ // };
+ // struct states {
+ ctor states("vcsn::delta_kind::states");
+ // };
+ } // end of namespace delta_kind
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct AutomataBase {
+ ctor AutomataBase("vcsn::AutomataBase");
+ // };
+ // struct automaton_traits {
+ ctor automaton_traits("vcsn::automaton_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct TransposeView {
+ ctor TransposeView("vcsn::TransposeView");
+ // };
+ // struct transpose_traits {
+ ctor transpose_traits("vcsn::transpose_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+} // end of namespace dyn
diff --git a/dynamic-use-of-static-c++/test/fixtures/vaucanson/dyn_vaucanson_mlc_name_of.hh b/dynamic-use-of-static-c++/test/fixtures/vaucanson/dyn_vaucanson_mlc_name_of.hh
new file mode 100644
index 0000000..4c370ea
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/fixtures/vaucanson/dyn_vaucanson_mlc_name_of.hh
@@ -0,0 +1,126 @@
+mlc_set_name(vcsn::xml::myDOMErrorHandler);
+mlc_set_name(vcsn::xml::xerces_parser);
+template <class TropicalKind> struct mlc_name < vcsn::algebra::TropicalSemiring<TropicalKind> > { static std::string of() { return std::string("vcsn::algebra::TropicalSemiring") + "< " + mlc_name<TropicalKind>::of() + " >"; } };
+mlc_set_name(vcsn::algebra::TropicalMin);
+mlc_set_name(vcsn::algebra::TropicalMax);
+template <class Series> struct mlc_name < vcsn::Transducer<Series> > { static std::string of() { return std::string("vcsn::Transducer") + "< " + mlc_name<Series>::of() + " >"; } };
+template <class S, class T> struct mlc_name < vcsn::input_projection_helper<S, T> > { static std::string of() { return std::string("vcsn::input_projection_helper") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <class S, class T> struct mlc_name < vcsn::output_projection_helper<S, T> > { static std::string of() { return std::string("vcsn::output_projection_helper") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <class S, class T> struct mlc_name < vcsn::identity_transducer_helper<S, T> > { static std::string of() { return std::string("vcsn::identity_transducer_helper") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <class S, class T> struct mlc_name < vcsn::xml::xml_chooser_base<S, T> > { static std::string of() { return std::string("vcsn::xml::xml_chooser_base") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <class S, class T> struct mlc_name < vcsn::xml::xml_chooser<S, T> > { static std::string of() { return std::string("vcsn::xml::xml_chooser") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <class T1, class T2> struct mlc_name < vcsn::xml::reference_pair<T1, T2> > { static std::string of() { return std::string("vcsn::xml::reference_pair") + "< " + mlc_name<T1>::of() + ", " + mlc_name<T2>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::Node<T> > { static std::string of() { return std::string("vcsn::xml::Node") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::automatonNode<T> > { static std::string of() { return std::string("vcsn::xml::automatonNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::transducerNode<T> > { static std::string of() { return std::string("vcsn::xml::transducerNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::typeNode<T> > { static std::string of() { return std::string("vcsn::xml::typeNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::contentNode<T> > { static std::string of() { return std::string("vcsn::xml::contentNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::statesNode<T> > { static std::string of() { return std::string("vcsn::xml::statesNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::transitionsNode<T> > { static std::string of() { return std::string("vcsn::xml::transitionsNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::stateNode<T> > { static std::string of() { return std::string("vcsn::xml::stateNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::transitionNode<T> > { static std::string of() { return std::string("vcsn::xml::transitionNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::initialNode<T> > { static std::string of() { return std::string("vcsn::xml::initialNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::finalNode<T> > { static std::string of() { return std::string("vcsn::xml::finalNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::semiringNode<T> > { static std::string of() { return std::string("vcsn::xml::semiringNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::monoidNode<T> > { static std::string of() { return std::string("vcsn::xml::monoidNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::freemonoidNode<T> > { static std::string of() { return std::string("vcsn::xml::freemonoidNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::generatorNode<T> > { static std::string of() { return std::string("vcsn::xml::generatorNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::geometryNode<T> > { static std::string of() { return std::string("vcsn::xml::geometryNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::xml::drawingNode<T> > { static std::string of() { return std::string("vcsn::xml::drawingNode") + "< " + mlc_name<T>::of() + " >"; } };
+template <class Auto> struct mlc_name < vcsn::xml::xml_converter<Auto> > { static std::string of() { return std::string("vcsn::xml::xml_converter") + "< " + mlc_name<Auto>::of() + " >"; } };
+mlc_set_name(vcsn::xml::XML);
+template <typename L> struct mlc_name < vcsn::algebra::AlphabetSet<L> > { static std::string of() { return std::string("vcsn::algebra::AlphabetSet") + "< " + mlc_name<L>::of() + " >"; } };
+template <typename A> struct mlc_name < vcsn::algebra::FreeMonoid<A> > { static std::string of() { return std::string("vcsn::algebra::FreeMonoid") + "< " + mlc_name<A>::of() + " >"; } };
+template <class CharT> struct mlc_name < utility::generic_int_type<CharT> > { static std::string of() { return std::string("utility::generic_int_type") + "< " + mlc_name<CharT>::of() + " >"; } };
+template <typename CharT> struct mlc_name < utility::char_traits<CharT> > { static std::string of() { return std::string("utility::char_traits") + "< " + mlc_name<CharT>::of() + " >"; } };
+mlc_set_name(vcsn::algebra::NumericalSemiring);
+template <class S, class T> struct mlc_name < vcsn::algebra::DefaultTransposeFun<S, T> > { static std::string of() { return std::string("vcsn::algebra::DefaultTransposeFun") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+mlc_set_name(vcsn::rat::setpm);
+mlc_set_name(vcsn::rat::setzero);
+mlc_set_name(vcsn::rat::setid);
+template <class Series> struct mlc_name < vcsn::Automata<Series> > { static std::string of() { return std::string("vcsn::Automata") + "< " + mlc_name<Series>::of() + " >"; } };
+template <typename Self> struct mlc_name < vcsn::TransducerBase<Self> > { static std::string of() { return std::string("vcsn::TransducerBase") + "< " + mlc_name<Self>::of() + " >"; } };
+template <typename T> struct mlc_name < vcsn::transducer_traits<T> > { static std::string of() { return std::string("vcsn::transducer_traits") + "< " + mlc_name<T>::of() + " >"; } };
+template <typename T> struct mlc_name < vcsn::extension_traits<T> > { static std::string of() { return std::string("vcsn::extension_traits") + "< " + mlc_name<T>::of() + " >"; } };
+template <class S, class T> struct mlc_name < vcsn::projection_traits<S, T> > { static std::string of() { return std::string("vcsn::projection_traits") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::output_projection_traits<T> > { static std::string of() { return std::string("vcsn::output_projection_traits") + "< " + mlc_name<T>::of() + " >"; } };
+mlc_set_name(vcsn::labels_are_letters);
+mlc_set_name(vcsn::labels_are_words);
+mlc_set_name(vcsn::labels_are_series);
+mlc_set_name(vcsn::labels_are_couples);
+template <class Kind, class WordValue, class WeightValue, class SeriesValue, class Letter> struct mlc_name < vcsn::LabelOf<Kind, WordValue, WeightValue, SeriesValue, Letter> > { static std::string of() { return std::string("vcsn::LabelOf") + "< " + mlc_name<Kind>::of() + ", " + mlc_name<WordValue>::of() + ", " + mlc_name<WeightValue>::of() + ", " + mlc_name<SeriesValue>::of() + ", " + mlc_name<Letter>::of() + " >"; } };
+mlc_set_name(vcsn::NoTag);
+mlc_set_name(vcsn::geometry);
+template <typename EdgeLabel> struct mlc_name < vcsn::edge_value<EdgeLabel> > { static std::string of() { return std::string("vcsn::edge_value") + "< " + mlc_name<EdgeLabel>::of() + " >"; } };
+mlc_set_name(vcsn::state_value);
+template <class Auto_> struct mlc_name < vcsn::generalized_traits<Auto_> > { static std::string of() { return std::string("vcsn::generalized_traits") + "< " + mlc_name<Auto_>::of() + " >"; } };
+template <typename Auto, typename EdgeConverter, typename Format> struct mlc_name < vcsn::io::automaton_saver_<Auto, EdgeConverter, Format> > { static std::string of() { return std::string("vcsn::io::automaton_saver_") + "< " + mlc_name<Auto>::of() + ", " + mlc_name<EdgeConverter>::of() + ", " + mlc_name<Format>::of() + " >"; } };
+mlc_set_name(vcsn::io::string_out);
+template <typename Auto, typename EdgeConverter, typename Format> struct mlc_name < vcsn::io::automaton_loader_<Auto, EdgeConverter, Format> > { static std::string of() { return std::string("vcsn::io::automaton_loader_") + "< " + mlc_name<Auto>::of() + ", " + mlc_name<EdgeConverter>::of() + ", " + mlc_name<Format>::of() + " >"; } };
+mlc_set_name(vcsn::io::dot);
+mlc_set_name(vcsn::io::transducer_dot);
+template <typename Self, typename Etiq> struct mlc_name < vcsn::algorithm_patterns::Comparator<Self, Etiq> > { static std::string of() { return std::string("vcsn::algorithm_patterns::Comparator") + "< " + mlc_name<Self>::of() + ", " + mlc_name<Etiq>::of() + " >"; } };
+template <bool B0, typename T> struct mlc_name < vcsn::reference_type<B0, T> > { static std::string of() { return std::string("vcsn::reference_type") + "< " + ((B0)? "true" : "false") + ", " + mlc_name<T>::of() + " >"; } };
+template <bool B0, typename T> struct mlc_name < vcsn::iterator_type<B0, T> > { static std::string of() { return std::string("vcsn::iterator_type") + "< " + ((B0)? "true" : "false") + ", " + mlc_name<T>::of() + " >"; } };
+template <typename S> struct mlc_name < vcsn::dynamic_traits<S> > { static std::string of() { return std::string("vcsn::dynamic_traits") + "< " + mlc_name<S>::of() + " >"; } };
+template <typename S, typename T> struct mlc_name < vcsn::SyntacticDecorator<S, T> > { static std::string of() { return std::string("vcsn::SyntacticDecorator") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <typename S, typename T> struct mlc_name < vcsn::MetaElement<S, T> > { static std::string of() { return std::string("vcsn::MetaElement") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <typename S, typename T> struct mlc_name < vcsn::Element<S, T> > { static std::string of() { return std::string("vcsn::Element") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+mlc_set_name(vcsn::default_slot_tag);
+template <typename S, typename Tag> struct mlc_name < vcsn::SetSlot<S, Tag> > { static std::string of() { return std::string("vcsn::SetSlot") + "< " + mlc_name<S>::of() + ", " + mlc_name<Tag>::of() + " >"; } };
+template <typename Self> struct mlc_name < vcsn::Structure<Self> > { static std::string of() { return std::string("vcsn::Structure") + "< " + mlc_name<Self>::of() + " >"; } };
+template <typename Self> struct mlc_name < vcsn::virtual_types<Self> > { static std::string of() { return std::string("vcsn::virtual_types") + "< " + mlc_name<Self>::of() + " >"; } };
+mlc_set_name(vcsn::undefined_type);
+template <class T> struct mlc_name < utility::unique::UniqueListBase<T> > { static std::string of() { return std::string("utility::unique::UniqueListBase") + "< " + mlc_name<T>::of() + " >"; } };
+template <typename T> struct mlc_name < utility::unique::uniquelist<T> > { static std::string of() { return std::string("utility::unique::uniquelist") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < utility::unique::UniqueMap<T> > { static std::string of() { return std::string("utility::unique::UniqueMap") + "< " + mlc_name<T>::of() + " >"; } };
+mlc_set_name(utility::unique::unifiable);
+template <typename T> struct mlc_name < utility::contract::fail<T> > { static std::string of() { return std::string("utility::contract::fail") + "< " + mlc_name<T>::of() + " >"; } };
+template <typename S1, typename S2, typename T1, typename T2> struct mlc_name < vcsn::op_add_traits<S1, S2, T1, T2> > { static std::string of() { return std::string("vcsn::op_add_traits") + "< " + mlc_name<S1>::of() + ", " + mlc_name<S2>::of() + ", " + mlc_name<T1>::of() + ", " + mlc_name<T2>::of() + " >"; } };
+template <typename S1, typename S2, typename T1, typename T2> struct mlc_name < vcsn::op_sub_traits<S1, S2, T1, T2> > { static std::string of() { return std::string("vcsn::op_sub_traits") + "< " + mlc_name<S1>::of() + ", " + mlc_name<S2>::of() + ", " + mlc_name<T1>::of() + ", " + mlc_name<T2>::of() + " >"; } };
+template <typename S1, typename S2, typename T1, typename T2> struct mlc_name < vcsn::op_mul_traits<S1, S2, T1, T2> > { static std::string of() { return std::string("vcsn::op_mul_traits") + "< " + mlc_name<S1>::of() + ", " + mlc_name<S2>::of() + ", " + mlc_name<T1>::of() + ", " + mlc_name<T2>::of() + " >"; } };
+template <typename S1, typename S2, typename T1, typename T2> struct mlc_name < vcsn::op_div_traits<S1, S2, T1, T2> > { static std::string of() { return std::string("vcsn::op_div_traits") + "< " + mlc_name<S1>::of() + ", " + mlc_name<S2>::of() + ", " + mlc_name<T1>::of() + ", " + mlc_name<T2>::of() + " >"; } };
+template <typename S1, typename S2, typename T1, typename T2> struct mlc_name < vcsn::op_mod_traits<S1, S2, T1, T2> > { static std::string of() { return std::string("vcsn::op_mod_traits") + "< " + mlc_name<S1>::of() + ", " + mlc_name<S2>::of() + ", " + mlc_name<T1>::of() + ", " + mlc_name<T2>::of() + " >"; } };
+template <typename S, bool B0> struct mlc_name < vcsn::SetSlotAttribute<S, B0> > { static std::string of() { return std::string("vcsn::SetSlotAttribute") + "< " + mlc_name<S>::of() + ", " + ((B0)? "true" : "false") + " >"; } };
+mlc_set_name(vcsn::algebra::mul_kind);
+mlc_set_name(vcsn::algebra::add_kind);
+template <class Self> struct mlc_name < vcsn::algebra::SemigroupBase<Self> > { static std::string of() { return std::string("vcsn::algebra::SemigroupBase") + "< " + mlc_name<Self>::of() + " >"; } };
+template <class Self> struct mlc_name < vcsn::algebra::MonoidBase<Self> > { static std::string of() { return std::string("vcsn::algebra::MonoidBase") + "< " + mlc_name<Self>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::algebra::identity_as<T> > { static std::string of() { return std::string("vcsn::algebra::identity_as") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::algebra::zero_as<T> > { static std::string of() { return std::string("vcsn::algebra::zero_as") + "< " + mlc_name<T>::of() + " >"; } };
+template <class Self> struct mlc_name < vcsn::algebra::SemiringBase<Self> > { static std::string of() { return std::string("vcsn::algebra::SemiringBase") + "< " + mlc_name<Self>::of() + " >"; } };
+template <typename S, typename T> struct mlc_name < vcsn::op_star_traits<S, T> > { static std::string of() { return std::string("vcsn::op_star_traits") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <typename S, typename T> struct mlc_name < vcsn::op_begin_traits<S, T> > { static std::string of() { return std::string("vcsn::op_begin_traits") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <typename S, typename T> struct mlc_name < vcsn::op_rbegin_traits<S, T> > { static std::string of() { return std::string("vcsn::op_rbegin_traits") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <char B0, char B1> struct mlc_name < vcsn::algebra::static_char_interval<B0, B1> > { static std::string of() { return std::string("vcsn::algebra::static_char_interval") + "< " + "'" + std::string(B0) + "'" + ", " + "'" + std::string(B1) + "'" + " >"; } };
+template <typename T> struct mlc_name < utility::limits<T> > { static std::string of() { return std::string("utility::limits") + "< " + mlc_name<T>::of() + " >"; } };
+template <class S> struct mlc_name < vcsn::algebra::AlphabetSetBase<S> > { static std::string of() { return std::string("vcsn::algebra::AlphabetSetBase") + "< " + mlc_name<S>::of() + " >"; } };
+template <typename S, typename T> struct mlc_name < vcsn::algebra::alphabet_traits<S, T> > { static std::string of() { return std::string("vcsn::algebra::alphabet_traits") + "< " + mlc_name<S>::of() + ", " + mlc_name<T>::of() + " >"; } };
+template <class Self> struct mlc_name < utility::iomanip<Self> > { static std::string of() { return std::string("utility::iomanip") + "< " + mlc_name<Self>::of() + " >"; } };
+template <class T> struct mlc_name < utility::escaper<T> > { static std::string of() { return std::string("utility::escaper") + "< " + mlc_name<T>::of() + " >"; } };
+mlc_set_name(utility::setesc);
+template <class Self> struct mlc_name < vcsn::algebra::FreeMonoidBase<Self> > { static std::string of() { return std::string("vcsn::algebra::FreeMonoidBase") + "< " + mlc_name<Self>::of() + " >"; } };
+template <class Self> struct mlc_name < vcsn::algebra::SeriesBase<Self> > { static std::string of() { return std::string("vcsn::algebra::SeriesBase") + "< " + mlc_name<Self>::of() + " >"; } };
+template <typename T> struct mlc_name < vcsn::algebra::series_traits<T> > { static std::string of() { return std::string("vcsn::algebra::series_traits") + "< " + mlc_name<T>::of() + " >"; } };
+template <typename T, typename W, typename M> struct mlc_name < vcsn::algebra::mute_series_impl<T, W, M> > { static std::string of() { return std::string("vcsn::algebra::mute_series_impl") + "< " + mlc_name<T>::of() + ", " + mlc_name<W>::of() + ", " + mlc_name<M>::of() + " >"; } };
+template <typename T, typename W, typename M> struct mlc_name < vcsn::algebra::mute_series_traits<T, W, M> > { static std::string of() { return std::string("vcsn::algebra::mute_series_traits") + "< " + mlc_name<T>::of() + ", " + mlc_name<W>::of() + ", " + mlc_name<M>::of() + " >"; } };
+mlc_set_name(vcsn::algebra::semiring_slot_tag);
+mlc_set_name(vcsn::algebra::monoid_slot_tag);
+template <typename Semiring, typename Monoid> struct mlc_name < vcsn::algebra::Series<Semiring, Monoid> > { static std::string of() { return std::string("vcsn::algebra::Series") + "< " + mlc_name<Semiring>::of() + ", " + mlc_name<Monoid>::of() + " >"; } };
+template <class T, bool B0> struct mlc_name < utility::DeferrerDebugPart<T, B0> > { static std::string of() { return std::string("utility::DeferrerDebugPart") + "< " + mlc_name<T>::of() + ", " + ((B0)? "true" : "false") + " >"; } };
+template <class T, bool B0> struct mlc_name < utility::Deferrer<T, B0> > { static std::string of() { return std::string("utility::Deferrer") + "< " + mlc_name<T>::of() + ", " + ((B0)? "true" : "false") + " >"; } };
+template <class T> struct mlc_name < vcsn::algebra::DispatchFunction<T> > { static std::string of() { return std::string("vcsn::algebra::DispatchFunction") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T, class U> struct mlc_name < vcsn::algebra::BinaryOp<T, U> > { static std::string of() { return std::string("vcsn::algebra::BinaryOp") + "< " + mlc_name<T>::of() + ", " + mlc_name<U>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::algebra::UnaryOp<T> > { static std::string of() { return std::string("vcsn::algebra::UnaryOp") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::algebra::Value<T> > { static std::string of() { return std::string("vcsn::algebra::Value") + "< " + mlc_name<T>::of() + " >"; } };
+template <class Self, class T, class U, class F> struct mlc_name < vcsn::algebra::GenericMatcher<Self, T, U, F> > { static std::string of() { return std::string("vcsn::algebra::GenericMatcher") + "< " + mlc_name<Self>::of() + ", " + mlc_name<T>::of() + ", " + mlc_name<U>::of() + ", " + mlc_name<F>::of() + " >"; } };
+template <class Self, class T, class U, class F> struct mlc_name < vcsn::algebra::KRatExpMatcher<Self, T, U, F> > { static std::string of() { return std::string("vcsn::algebra::KRatExpMatcher") + "< " + mlc_name<Self>::of() + ", " + mlc_name<T>::of() + ", " + mlc_name<U>::of() + ", " + mlc_name<F>::of() + " >"; } };
+template <class Self, class Series, class T, class Dispatch> struct mlc_name < vcsn::algebra::KRatExpIdentity<Self, Series, T, Dispatch> > { static std::string of() { return std::string("vcsn::algebra::KRatExpIdentity") + "< " + mlc_name<Self>::of() + ", " + mlc_name<Series>::of() + ", " + mlc_name<T>::of() + ", " + mlc_name<Dispatch>::of() + " >"; } };
+mlc_set_name(vcsn::state_h);
+mlc_set_name(vcsn::edge_h);
+mlc_set_name(vcsn::delta_kind::edges);
+mlc_set_name(vcsn::delta_kind::states);
+template <typename Self> struct mlc_name < vcsn::AutomataBase<Self> > { static std::string of() { return std::string("vcsn::AutomataBase") + "< " + mlc_name<Self>::of() + " >"; } };
+template <typename T> struct mlc_name < vcsn::automaton_traits<T> > { static std::string of() { return std::string("vcsn::automaton_traits") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::TransposeView<T> > { static std::string of() { return std::string("vcsn::TransposeView") + "< " + mlc_name<T>::of() + " >"; } };
+template <class T> struct mlc_name < vcsn::transpose_traits<T> > { static std::string of() { return std::string("vcsn::transpose_traits") + "< " + mlc_name<T>::of() + " >"; } };
diff --git a/dynamic-use-of-static-c++/test/test_containers.cc b/dynamic-use-of-static-c++/test/test_containers.cc
new file mode 100644
index 0000000..2413b30
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/test_containers.cc
@@ -0,0 +1,89 @@
+#include <algorithm>
+
+#include "my_lib/lib.hh"
+
+#include "dyn-all.hh"
+using namespace dyn::language;
+
+int main()
+{
+ dyn::include_dir(DYN_FIXTURES);
+ dyn::include("my_lib/lib.hh");
+
+ echo("Test containers");
+ std::vector<int> v(4);
+ std::generate(v.begin(), v.end(), rand);
+ std::vector<int>::iterator it;
+ stl_each(v, it)
+ echo(*it);
+ it = v.begin();
+
+ meth begin("begin");
+ meth end("end");
+ var dv = v;
+ var dit = it;
+ echo(dv[2]);
+ v[2] = 51;
+ echo(v[2]);
+ echo(dv[2]);
+ dv[2] = 42;
+ int dv_2 = dv[2];
+ echo(dv_2);
+ assert(dv_2 == 42);
+ std::cout << "v[0] => " << *dit << std::endl;
+ var my_begin = *begin(dv);
+ int my_begin_i = *begin(dv);
+ int my_begin_i2 = my_begin;
+ int ref_begin_i = *v.begin();
+ int ref_begin_i2 = v[0];
+ echo("my_begin: " << my_begin);
+ echo("my_begin_i: " << my_begin_i);
+ echo("my_begin_i2: " << my_begin_i2);
+ echo("ref_begin_i: " << ref_begin_i);
+ echo("ref_begin_i2: " << ref_begin_i2);
+ assert(my_begin_i == ref_begin_i);
+ const std::vector<int>::iterator& tmp1b(begin(dv));
+ const std::vector<int>::iterator& tmp2b(v.begin());
+ const std::vector<int>::iterator& tmp3b(v.begin());
+ var tmp4b = v.begin();
+ assert((bool)(tmp3b == tmp2b));
+ echo("a: " << dv[4]);
+ echo("b: " << *begin(dv));
+ echo("c: " << *begin(v));
+ echo("e: " << *tmp1b);
+ echo("f: " << *tmp2b);
+ assert((bool)(*tmp1b == *tmp2b));
+ assert((bool)(tmp1b == tmp2b));
+ assert((bool)(begin(dv) == v.begin()));
+ assert((bool)(ref_begin_i2 == my_begin_i2));
+
+ // end
+ int my_end_i = *end(dv);
+ int ref_end_i = *v.end();
+ echo(my_end_i);
+ echo(ref_end_i);
+ assert(my_end_i == ref_end_i);
+ const std::vector<int>::iterator& tmp1(end(dv));
+ const std::vector<int>::iterator& tmp2(v.end());
+ const std::vector<int>::iterator& tmp3(v.end());
+ var tmp4 = v.end();
+ assert((bool)(tmp3 == tmp2));
+
+ echo("a: " << dv[4]);
+ echo("b: " << *end(dv));
+ echo("c: " << *end(v));
+ echo("e: " << *tmp1);
+ echo("f: " << *tmp2);
+ assert((bool)(*tmp1 == *tmp2));
+ assert((bool)(tmp1 == tmp2));
+ assert((bool)(end(dv) == v.end()));
+ int i = 0;
+ // stl_each(v, i)
+ for (dit = begin(dv); v.end() != dit && i < 20; ++dit, ++i)
+ std::cout << i << ": " << *dit << std::endl;
+
+ assert(i == 4);
+
+ echo("exiting");
+ return 0;
+}
diff --git a/dynamic-use-of-static-c++/test/test_damien.cc b/dynamic-use-of-static-c++/test/test_damien.cc
new file mode 100644
index 0000000..4b30fbd
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/test_damien.cc
@@ -0,0 +1,96 @@
+#include "my_lib/damien.hh"
+
+#include "dyn-all.hh"
+using namespace dyn::language;
+
+namespace dyn
+{
+ fun down("mk_down");
+
+ template <typename T>
+ data mk_down(const T& t)
+ {
+ fun ctor(std::string("down< ") + mlc_name_of(t) + " >");
+ return ctor(t);
+ }
+}
+
+int main()
+{
+ dyn::include_dir(DYN_FIXTURES);
+ dyn::include("my_lib/damien.hxx");
+
+ down<char> a('x');
+ down<int> b(10);
+ std::string bar("bar");
+ down<std::string> c(bar); // c("bar"); // it's worst
+ down<down<std::string> > d(c);
+ down<int> e(20);
+
+ var d2 = d;
+
+ std::cout << d2 << std::endl;
+
+ fun dyn_foo("foo");
+ fun dyn_change("change");
+ ctor mk_down_char("down<char>");
+ ctor mk_down_int("down<int>");
+ meth dyn_print_noarg("print_noarg");
+ meth dyn_get_i("get_i");
+ meth dyn_get_t("get_t");
+ method dyn_clone("clone"); // Same as meth
+
+ var f = mk_down_char('x');
+
+ std::cout << mlc_name_of(f) << std::endl;
+
+ var g = mk_down_int(44);
+ var h = dyn::mk_down(e);
+
+ var j = dyn::down(46);
+
+ meth j_print_noarg = j.method("print_noarg");
+
+ // std::cout is not printable
+ // but a data containing std::cout yes
+ var dyn_std_cout = std::cout;
+ std::cout << dyn_std_cout << std::endl;
+
+ for ( int i = 0; i < 5; ++i )
+ {
+ std::cout << "*** Turn " << i << " ***" << std::endl;
+ dyn_print_noarg(a);
+
+ dyn_foo(a);
+
+ dyn_foo(b);
+ dyn_foo(c);
+ dyn_foo(d);
+ dyn_foo(e);
+ dyn_foo(42);
+
+ dyn_print_noarg(f);
+
+ dyn_foo(g);
+
+ dyn_change(c);
+
+ var x1 = dyn_get_i(b);
+ std::cout << "dyn_get_i(b) => " << x1 << std::endl;
+ var x2 = *dyn_get_t(d);
+ std::cout << "dyn_get_t(d) => " << x2 << std::endl;
+
+ var x3 = *dyn_clone(a);
+ std::cout << "*clone(a) => " << x3 << std::endl;
+
+ j.send("print_noarg");
+
+ j.fake_method(a).send("print_noarg");
+ h.fake_method(a).send("print_noarg");
+
+ j_print_noarg();
+ }
+
+ std::cout << "exiting" << std::endl;
+ return 0;
+}
diff --git a/dynamic-use-of-static-c++/test/test_function_loader.cc b/dynamic-use-of-static-c++/test/test_function_loader.cc
new file mode 100644
index 0000000..50ee9d4
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/test_function_loader.cc
@@ -0,0 +1,75 @@
+#include <sstream>
+
+#include "my_lib/lib.hh"
+
+#include "dyn-all.hh"
+
+using namespace dyn::language;
+
+int main()
+{
+ dyn::include_dir(DYN_FIXTURES);
+
+ dyn::fun dfoo1("foo1", "my_lib/lib.hh"); // With the include
+
+ dyn::include("my_lib/lib.hh"); // setup a default include
+
+ dyn::fun dfoo2("foo2"); // use the default includes
+ dyn::fun dfoo2b("foo2b");
+ dyn::fun dfoo3("foo3");
+ dyn::fun dfoo4("foo4");
+ dyn::fun dsqr("my_lib::sqr");
+ dyn::fun dpower("my_lib::power");
+
+ dfoo1();
+ dfoo1();
+
+ int* x1 = dfoo3(1, 2, 3);
+ std::cout << x1 << std::endl;
+
+ t<int, int> t12(1, 2);
+
+ t<int, int>* x2 = dfoo3(t12, t<int, int>(3, 4), t<int, int>(5, 6));
+ std::cout << x2 << std::endl;
+ // var x2b = dfoo3(t12, t<int, int>(3, 4), t<int, int>(5, 6));
+
+ var x4c = dfoo2b();
+ std::cout << x4c << std::endl;
+ int x4b = 2;
+ x4b = dfoo2b();
+ std::cout << x4b << std::endl;
+ int* x4 = dfoo2();
+ std::cout << *x4 << std::endl;
+ var x4d = dfoo2();
+ int* x4e = x4d;
+ std::cout << x4d << std::endl;
+ std::cout << *x4e << std::endl;
+
+ float f2a = dsqr(3.4);
+ std::cout << "f2a: " << f2a << std::endl;
+ double f2b = dsqr(3.4);
+ std::cout << "f2b: " << f2b << std::endl;
+ assert(fabs(f2a - f2b) < 0.00001);
+ var f2c = dsqr(3.4);
+ std::cout << f2c << std::endl;
+ int i1 = dsqr(3);
+ std::cout << i1 << std::endl;
+
+ echo("Test istreams");
+ std::istringstream istr("32");
+ int uii = 4;
+ u<int> ui(uii);
+ var dui = ui;
+ std::cout << dui << std::endl;
+ istr >> dui;
+ std::cout << dui << std::endl;
+
+ echo("Test affectations");
+ var count = 0;
+ ++count;
+ echo(count);
+ assert(count == 1);
+
+ echo("exiting");
+ return 0;
+}
diff --git a/dynamic-use-of-static-c++/test/test_function_loader.rb b/dynamic-use-of-static-c++/test/test_function_loader.rb
new file mode 100644
index 0000000..ee2c4ed
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/test_function_loader.rb
@@ -0,0 +1,23 @@
+require 'pathname'
+require 'yaml'
+test = Pathname.new(__FILE__).dirname
+root = test.parent
+fixtures = test + 'fixtures'
+src = root + 'src'
+$: << src
+require 'function_loader'
+
+FunctionLoader.include_dir fixtures
+FunctionLoader.include_dir src
+
+Pathname.glob(fixtures + '*.yml.cc').each do |file|
+ YAML.load(file.read).each do |identifier, ref|
+ fun = FunctionLoader.new identifier
+ puts fun
+ puts ref
+ puts fun.to_cxx
+ fun_ptr = fun.get_function
+ puts fun_ptr
+ puts '-' * 79
+ end
+end
diff --git a/dynamic-use-of-static-c++/test/test_function_loader_cxx.rb b/dynamic-use-of-static-c++/test/test_function_loader_cxx.rb
new file mode 100644
index 0000000..ddbb118
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/test_function_loader_cxx.rb
@@ -0,0 +1,26 @@
+require 'pathname'
+require 'yaml'
+test = Pathname.new(__FILE__).dirname
+root = test.parent
+fixtures = test + 'fixtures'
+src = root + 'src'
+$: << src
+require 'function_loader'
+
+FunctionLoader.include_dir fixtures
+FunctionLoader.include_dir src
+
+funs = []
+
+funs << FunctionLoader.call(:proc, 'foo1', [], 'my_lib/lib.hh')
+funs << FunctionLoader.call(:fun, 'foo2', [], 'my_lib/lib.hh')
+funs << FunctionLoader.call(:fun, 'foo3',
+ ['double', 'const double', 'const double&'],
+ 'my_lib/lib.hh')
+funs << FunctionLoader.call(:fun, 'my_lib::x::foo4',
+ ['u<float>', 't<t<char, char>, u<const int> >'],
+ 'my_lib/lib.hh')
+funs << FunctionLoader.call(:fun, 'foo3', ['t<int, char>',
+ 'const t<int, char>', 'const t<int, char>&'],
+ 'my_lib/lib.hh')
+
diff --git a/dynamic-use-of-static-c++/test/test_methods.cc b/dynamic-use-of-static-c++/test/test_methods.cc
new file mode 100644
index 0000000..079e49e
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/test_methods.cc
@@ -0,0 +1,26 @@
+#include "dyn-all.hh"
+using namespace dyn::language;
+#include <iostream>
+
+int main()
+{
+ dyn::include_dir(DYN_FIXTURES);
+
+ std::cout << "Test methods" << std::endl;
+ ctor mk_down_int("down<int>", "my_lib/damien.hh");
+ ctor mk_boo("my_lib::boo", "my_lib/lib.hh");
+ meth print("print", "my_lib/lib.hh:my_lib/damien.hh");
+
+ var v1 = mk_down_int(42);
+ print(v1, std::cout);
+ std::cout << std::endl;
+
+ val v2 = mk_boo(std::cout);
+ print(v2, 42, "foo");
+ print(v2, "bar", 51);
+ print(v2, 16, 64);
+ print(v2, 2, "21");
+
+ std::cout << "exiting" << std::endl;
+ return 0;
+}
diff --git a/dynamic-use-of-static-c++/test/test_olena.cc b/dynamic-use-of-static-c++/test/test_olena.cc
new file mode 100644
index 0000000..d814767
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/test_olena.cc
@@ -0,0 +1,21 @@
+#include "dyn-all.hh"
+using namespace dyn::language;
+
+int main()
+{
+ dyn::include_dir(OLENA_PROTO_STL_STYLE); // FIXME: Move it into fixtures/olean-proto-stl-style
+ // FIXME: Add
+ dyn::include("all.hh");
+
+ fun iota("iota");
+ fun println_2d("println_2d");
+ ctor mk_image2d_int("image2d<int>");
+
+ var ima = mk_image2d_int(3, 3);
+
+ println_2d(std::cout, "ima_before=", ima);
+ iota(ima);
+ println_2d(std::cout, "ima-after=", ima);
+
+ std::cout << "exiting" << std::endl;
+}
diff --git a/dynamic-use-of-static-c++/test/test_var_and_val.cc b/dynamic-use-of-static-c++/test/test_var_and_val.cc
new file mode 100644
index 0000000..e890e18
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/test_var_and_val.cc
@@ -0,0 +1,95 @@
+#include "my_lib/lib.hh"
+
+#include "dyn-all.hh"
+using namespace dyn::language;
+
+int main()
+{
+ dyn::include_dir(DYN_FIXTURES);
+ dyn::include("my_lib/lib.hh");
+
+ echo("Test vars and vals");
+ val i = 4;
+ val j = 3 + i;
+ var k1(i);
+ var k2 = i;
+ // var l1 = "foo";
+ // var l2("foo");
+ echo("i: " << i);
+ echo("j: " << j);
+ echo("k: " << k1 << ", " << k2);
+
+ std::string str(" youhou");
+ const std::string cst_str(" const youhou");
+
+ echo("var_str1");
+ var var_str1(str);
+ assert(not var_str1.is_const());
+ var_str1[0] = 'a';
+ assert(var_str1 == "a youhou");
+ assert(str == "a youhou");
+
+ echo("var_str2");
+ var var_str2(cst_str);
+ assert(not var_str2.is_const());
+ var_str2[0] = 'a';
+ assert(var_str2 == "a const youhou");
+ assert(cst_str == " const youhou");
+
+ echo("var_str3");
+ var var_str3(var_str1);
+ assert(not var_str3.is_const());
+ var_str3[0] = 'b';
+ assert(var_str3 == "b youhou");
+ assert(var_str1 == "b youhou");
+ assert(str == "b youhou");
+
+ echo("var_str4");
+ var var_str4(var_str2);
+ assert(not var_str4.is_const());
+ var_str4[0] = 'b';
+ assert(var_str4 == "b const youhou");
+ assert(var_str2 == "a const youhou"); // here we see that we have another copy
+ assert(cst_str == " const youhou");
+
+ echo("val_str1");
+ val val_str1(str);
+ assert(val_str1.is_const());
+ // val_str1[0] = 'a'; // Does not compile
+ assert(val_str1 == "b youhou");
+
+ echo("val_str2");
+ val val_str2(cst_str);
+ assert(val_str2.is_const());
+ // val_str2[0] = 'a'; // Does not compile
+ assert(val_str2 == " const youhou");
+
+ echo("val_str3");
+ val val_str3(val_str1);
+ assert(val_str3.is_const());
+ // val_str3[0] = 'b'; // Does not compile
+ assert(val_str3 == "b youhou");
+
+ echo("val_str4");
+ val val_str4(val_str2);
+ assert(val_str4.is_const());
+ // val_str4[0] = 'b'; // Does not compile
+ assert(val_str4 == " const youhou");
+
+ echo("val_str5");
+ val val_str5(var_str1);
+ assert(val_str5.is_const());
+ // val_str5[0] = 'b'; // Does not compile
+ assert(val_str5 == "b youhou");
+
+ echo("var_str6");
+ var var_str6(val_str1);
+ assert(var_str6.is_const()); // FIXME should be not const
+ // var_str6[0] = 'c'; // FIXME should compile
+ // assert(var_str6 == "c youhou");
+ assert(var_str1 == "b youhou");
+ assert(str == "b youhou");
+
+ echo("exiting");
+ return 0;
+}
diff --git a/dynamic-use-of-static-c++/test/vaucanson/Makefile.am b/dynamic-use-of-static-c++/test/vaucanson/Makefile.am
new file mode 100644
index 0000000..12719b1
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/vaucanson/Makefile.am
@@ -0,0 +1,18 @@
+# FIXME: Clean me!
+
+check-local_DISABLE: tree.yml
+ @@BIN@@/yaml_to_dyn_decls < $<
+ cp dyn_vaucanson_dyn_mirror.hh @@VCSN@@/src/demos/function_library
+ wc tree.swig tree.yml dyn_vaucanson_dyn_mirror.hh dyn_vaucanson_methods.yml
+
+vcsn.i: @@BIN@@/mk_swig_input
+ @@BIN@@/mk_swig_input @@VCSN@@/include
+
+tree.swig: vcsn.i
+ -@@SWIG@@ @@SWIGINCLUDES@@ -I@@VCSN@@/include -c++ -tree-dumper $< > $@
+
+tree.yml: tree.swig
+ @@BIN@@/swig_tree_to_yaml < $< > $@
+
+clean-local:
+ rm -f tree.swig tree.yml vcsn.i dyn_vaucanson_methods.hh dyn_vaucanson_dyn_mirror.hh
diff --git a/dynamic-use-of-static-c++/test/vaucanson/dyn_algorithms.cc b/dynamic-use-of-static-c++/test/vaucanson/dyn_algorithms.cc
new file mode 100644
index 0000000..6270a74
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/vaucanson/dyn_algorithms.cc
@@ -0,0 +1,464 @@
+// algorithms.cc: this file is part of the Vaucanson project.
+//
+// Vaucanson, a generic library for finite state machines.
+//
+// Copyright (C) 2004, 2005 The Vaucanson Group.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// The complete GNU General Public Licence Notice can be found as the
+// `COPYING' file in the root directory.
+//
+// The Vaucanson Group consists of people listed in the `AUTHORS' file.
+//
+#include <fstream>
+// #include <sstream>
+// #include <cstdlib>
+// #include <list>
+
+#include "dyn.hh"
+#include "dyn_vaucanson_dyn_mirror.hh"
+#include "vaucanson_tools_dyn.hh"
+#include "vaucanson_tools_dyn_xml.hh"
+
+using namespace dyn::vcsn::io;
+using dyn::vcsn::xml::XML;
+using namespace dyn::language;
+using namespace dyn::vcsn::tools;
+
+// static
+// void
+// usage(int, char** argv)
+// {
+ // std::cerr << "Usage: " << std::endl
+ // << "\t" << argv[0] << " <algorithm> <args...>" << std::endl;
+ // exit(1);
+// }
+
+// static
+// var
+// alphabet()
+// {
+ // var a = dyn::alphabet('a');
+ // a.insert('a');
+ // a.insert('b');
+ // return a;
+// }
+
+// static
+// var
+// get_exp(std::string s)
+// {
+ // return new_rat_exp(alphabet(), s);
+// }
+
+static
+var
+get_aut(std::string s)
+{
+ std::istream* is (s == "-" ? &std::cin : new std::ifstream (s.c_str()));
+ if (not is->fail())
+ {
+ var automaton = dyn::vcsn::tools::xml::load_from_xml(*is);
+ // var loader = dyn::automaton_loader(context_automaton, string_out (), XML ());
+ // *is >> loader;
+
+ if (s != "-")
+ delete is;
+ return automaton;
+ }
+ else
+ {
+ std::cerr << "FATAL: Could not load automaton." << std::endl;
+ exit(1);
+ }
+}
+
+#if 0
+static
+void
+derived_term_automaton_command(int argc, char** argv)
+{
+ if (argc != 3)
+ usage(argc, argv);
+
+ rat_exp_t e = get_exp(argv[2]);
+ automaton_t a = new_automaton(alphabet());
+ derived_term_automaton(a, e);
+ std::cout << automaton_saver(a, string_out (), XML ());
+}
+
+static
+void
+aut_to_exp_command(int argc, char** argv)
+{
+ if (argc < 3)
+ usage(argc, argv);
+ else if (argc == 3)
+ std::cout << aut_to_exp(get_aut(argv[2]), DMChooser()) << std::endl;
+ else
+ {
+ automaton_t a = get_aut(argv[2]);
+ if (a.states().size() != unsigned (argc - 3))
+ {
+ std::cerr << "ERROR: Invalid state list." << std::endl;
+ exit(2);
+ }
+
+ std::list<hstate_t> l;
+ for (int i = 3; i < argc; ++i)
+ {
+ std::istringstream is (argv[i]);
+ int s;
+
+ is >> s;
+ if (s < 0 or unsigned (s) >= a.states().size())
+ {
+ std::cerr << "ERROR: " << s << " is not a valid state."
+ << std::endl;
+ exit(2);
+ }
+ l.push_back(s);
+ }
+
+ std::cout << aut_to_exp(a, ListChooser (l)) << std::endl;
+ }
+}
+
+static
+void
+product_command(int argc, char** argv)
+{
+ if (argc != 4)
+ usage(argc, argv);
+
+ std::cout << automaton_saver(product(get_aut(argv[2]), get_aut(argv[3])),
+ string_out (),
+ XML ());
+}
+
+
+static
+void
+are_isomorphic_command(int argc, char** argv)
+{
+ if (argc != 4)
+ usage(argc, argv);
+
+ std::cout << are_isomorphic(get_aut(argv[2]), get_aut(argv[3])) << std::endl;
+}
+
+
+void
+eval_command(int argc, char** argv)
+{
+ if (argc != 4)
+ usage(argc, argv);
+
+ std::cout << eval(realtime(get_aut(argv[2])), std::string (argv[3]))
+ << std::endl;
+}
+
+void
+is_empty_command(int argc, char** argv)
+{
+ if (argc != 3)
+ usage(argc, argv);
+
+ automaton_t a = coaccessible(accessible(get_aut(argv[2])));
+
+ if (a.states().size() > 0)
+ std::cout << false << std::endl;
+ else
+ std::cout << true << std::endl;
+}
+
+
+void
+power_command(int argc, char** argv)
+{
+ if (argc != 4)
+ usage(argc, argv);
+
+ int n = atoi(argv[3]);
+
+ automaton_t a = get_aut(argv[2]);
+ automaton_t p(a);
+
+ for (int i = 1; i < n; ++i)
+ p = product(p, a);
+
+ std::cout << automaton_saver(p, string_out (), XML ());
+}
+
+static
+void
+display_command(int argc, char** argv)
+{
+ if (argc != 3)
+ usage(argc, argv);
+
+ vcsn::tools::dot_display(get_aut(argv[2]), "A", true);
+}
+
+static
+void
+info_command(int argc, char** argv)
+{
+ if (argc != 3)
+ usage(argc, argv);
+
+ automaton_t a = get_aut(argv[2]);
+
+ std::cout << "States: " << a.states().size() << std::endl;
+ std::cout << "Transitions: " << a.edges().size() << std::endl;
+ std::cout << "Initial states: " << a.initial().size() << std::endl;
+ std::cout << "Final states: " << a.final().size() << std::endl;
+}
+
+static
+void
+expand_command(int argc, char** argv)
+{
+ if (argc != 3)
+ usage(argc, argv);
+
+ std::cout << expand(get_exp(argv[2])) << std::endl;
+}
+
+static
+void
+minimize_command(int argc, char** argv)
+{
+ if (argc < 3)
+ usage(argc, argv);
+ else if (argc == 3)
+ std::cout << automaton_saver(minimization_hopcroft(get_aut(argv[2])),
+ string_out (), XML ())
+ << std::endl;
+ else
+ {
+ std::string arg (argv[3]);
+ automaton_t a = get_aut(argv[2]);
+
+ if (arg == "-m")
+ std::cout << automaton_saver(minimization_moore(get_aut(argv[2])),
+ string_out (), XML ())
+ << std::endl;
+
+ else if (arg == "-h")
+ std::cout << automaton_saver(minimization_hopcroft(get_aut(argv[2])),
+ string_out (), XML ())
+ << std::endl;
+ }
+}
+
+static
+void
+concatenate_command(int argc, char** argv)
+{
+ if (argc != 4)
+ usage(argc, argv);
+
+ std::cout << automaton_saver(concatenate(get_aut(argv[2]), get_aut(argv[3])),
+ string_out (), XML ())
+ << std::endl;
+}
+
+static
+void
+sum_command(int argc, char** argv)
+{
+ if (argc != 4)
+ usage(argc, argv);
+
+ std::cout << automaton_saver(sum(get_aut(argv[2]), get_aut(argv[3])),
+ string_out (), XML ())
+ << std::endl;
+}
+
+static
+void
+closure_command(int argc, char** argv)
+{
+ if (argc != 3)
+ usage(argc, argv);
+
+ std::cout << automaton_saver(accessible(closure(get_aut(argv[2]))),
+ string_out (), XML ())
+ << std::endl;
+}
+
+static
+void
+determinize_command(int argc, char** argv)
+{
+ if (argc != 3)
+ usage(argc, argv);
+
+ std::cout << automaton_saver(determinize(realtime(get_aut(argv[2]))),
+ string_out (), XML ())
+ << std::endl;
+}
+
+static
+void
+quotient_command(int argc, char** argv)
+{
+ if (argc != 3)
+ usage(argc, argv);
+
+ std::cout << automaton_saver(quotient(realtime(get_aut(argv[2]))),
+ string_out (), XML ())
+ << std::endl;
+}
+
+static
+void
+standardize_command(int argc, char** argv)
+{
+ if (argc != 3)
+ usage(argc, argv);
+
+ automaton_t a = get_aut(argv[2]);
+ standardize(a);
+
+ std::cout << automaton_saver(a, string_out (), XML ()) << std::endl;
+}
+#endif
+
+#define ONE_ARG_COMMAND(GetArg, Algo) one_arg_command_ ## Algo ## _ ## GetArg
+
+#define DEFINE_ONE_ARG_COMMAND(GetArg, Algo) \
+static \
+void \
+ONE_ARG_COMMAND(GetArg, Algo)(int argc, char** argv) \
+{ \
+ if (argc != 3) \
+ usage(argc, argv); \
+ std::cout << dyn::automaton_saver(dyn::Algo(GetArg(argv[2])), \
+ string_out (), \
+ XML ()); \
+}
+
+// DEFINE_ONE_ARG_COMMAND(get_exp, standard_of)
+// DEFINE_ONE_ARG_COMMAND(get_exp, thompson_of)
+// DEFINE_ONE_ARG_COMMAND(get_aut, trim)
+// DEFINE_ONE_ARG_COMMAND(get_aut, transpose)
+// DEFINE_ONE_ARG_COMMAND(get_aut, realtime)
+// DEFINE_ONE_ARG_COMMAND(get_aut, coaccessible)
+// DEFINE_ONE_ARG_COMMAND(get_aut, accessible)
+// DEFINE_ONE_ARG_COMMAND(get_aut, normalize)
+
+#undef DEFINE_ONE_ARG_COMMAND
+
+// const struct
+// {
+ // char* name;
+ // void (*command)(int, char**);
+// }
+// command_map[] =
+ // {
+ // { "expand", expand_command },
+ // { "standard_of", ONE_ARG_COMMAND(get_exp, standard_of) },
+ // { "thompson_of", ONE_ARG_COMMAND(get_exp, thompson_of) },
+ // { "derived_terms", derived_term_automaton_command },
+ // { "aut_to_exp", aut_to_exp_command },
+ // { "quotient", quotient_command },
+ // { "product", product_command },
+ // { "closure", closure_command },
+ // { "is-empty", is_empty_command },
+ // { "are-isomorphic", are_isomorphic_command },
+ // { "closure", closure_command },
+ // { "determinize", determinize_command },
+ // { "minimize", minimize_command },
+ // { "trim", ONE_ARG_COMMAND(get_aut, trim) },
+ // { "transpose", ONE_ARG_COMMAND(get_aut, transpose) },
+ // { "accessible", ONE_ARG_COMMAND(get_aut, coaccessible) },
+ // { "coaccessible", ONE_ARG_COMMAND(get_aut, accessible) },
+ // { "sum", sum_command },
+ // { "concatenate", concatenate_command },
+ // { "realtime", ONE_ARG_COMMAND(get_aut, realtime) },
+ // { "eval", eval_command },
+ // { "power", power_command },
+ // { "normalize", ONE_ARG_COMMAND(get_aut, normalize) },
+ // { "standardize", standardize_command },
+ // { "display", display_command },
+ // { "info", info_command },
+ // { 0, 0 }
+ // };
+
+#undef ONE_ARG_COMMAND
+
+int
+main(int argc, char** argv)
+{
+ argc = 0;
+ // if (argc < 2)
+ // usage(argc, argv);
+
+ dyn::include_dir(DYNDIR);
+ dyn::include_dir("../../../include");
+ dyn::include_dir(".");
+ dyn::include("vaucanson/xml/XML.hh");
+
+ std::cout << "context" << std::endl;
+ // algebraic_context context(argv[1], argv[2]);
+
+ // dyn::proc insert("insert", "method");
+
+ // var context_automaton = context.mk_automaton();
+
+ var automaton = get_aut(argv[4]);
+
+ std::cout << dyn::vcsn::automaton_saver(automaton, string_out(), XML());
+
+ std::string algorithms("vaucanson/algorithms/");
+ dyn::fun algo(argv[3], algorithms + argv[3] + ".hh");
+
+ std::cout << dyn::vcsn::automaton_saver(algo(automaton), string_out(), XML());
+
+ // std::string cmd (argv[1]);
+ // int i;
+
+ // for (i = 0; command_map[i].name != 0; ++i)
+ // if (cmd == command_map[i].name)
+ // {
+ // command_map[i].command(argc, argv);
+ // break ;
+ // }
+ // if (command_map[i].name == 0)
+ // {
+ // std::cerr << "Available algorithms:" << std::endl;
+ // std::cerr << " * is-empty" << std::endl;
+ // std::cerr << " * are-isomorphic" << std::endl;
+ // std::cerr << " * accessible" << std::endl;
+ // std::cerr << " * coaccessible" << std::endl;
+ // std::cerr << " * realtime" << std::endl;
+ // std::cerr << " * trim" << std::endl;
+ // std::cerr << " * transpose" << std::endl;
+ // std::cerr << " * aut_to_exp" << std::endl;
+ // std::cerr << " * expand" << std::endl;
+ // std::cerr << " * standard_of" << std::endl;
+ // std::cerr << " * thompson_of" << std::endl;
+ // std::cerr << " * derived_terms" << std::endl;
+ // std::cerr << " * product" << std::endl;
+ // std::cerr << " * power" << std::endl;
+ // std::cerr << " * determinize" << std::endl;
+ // std::cerr << " * minimize" << std::endl;
+ // std::cerr << " * quotient" << std::endl;
+ // std::cerr << " * closure" << std::endl;
+ // std::cerr << " * eval" << std::endl;
+ // std::cerr << " * display" << std::endl;
+ // std::cerr << " * info" << std::endl;
+ // exit(1);
+ // }
+
+ std::cout << "Exiting, segv in approch..." << std::endl;
+
+}
+
+
diff --git a/dynamic-use-of-static-c++/test/vaucanson/dyn_vaucanson_dyn_mirror.hh b/dynamic-use-of-static-c++/test/vaucanson/dyn_vaucanson_dyn_mirror.hh
new file mode 100644
index 0000000..58e68ed
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/vaucanson/dyn_vaucanson_dyn_mirror.hh
@@ -0,0 +1,1277 @@
+namespace dyn {
+ namespace vcsn {
+ namespace z_transducer {
+ } // end of namespace z_transducer
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace z_transducer {
+ fun automaton_t("dyn::vcsn::z_transducer::automaton_t", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/z_transducer.hh");
+ } // end of namespace z_transducer
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace z_fmp_transducer {
+ } // end of namespace z_fmp_transducer
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct xerces_parser {
+ ctor xerces_parser("vcsn::xml::xerces_parser");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace z_max_plus_automaton {
+ fun automaton_t("dyn::vcsn::z_max_plus_automaton::automaton_t", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/z_max_plus_automaton.hh");
+ } // end of namespace z_max_plus_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace z_min_plus_automaton {
+ fun automaton_t("dyn::vcsn::z_min_plus_automaton::automaton_t", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/z_min_plus_automaton.hh");
+ } // end of namespace z_min_plus_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ fun automaton_t("dyn::vcsn::VCSN_CONTEXT_NAMESPACE::automaton_t", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/contexts/automaton.thh");
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ fun aut_to_exp("dyn::vcsn::VCSN_CONTEXT_NAMESPACE::aut_to_exp", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/contexts/automaton_functions.thh");
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace fmp_transducer {
+ } // end of namespace fmp_transducer
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace VCSN_CONTEXT_NAMESPACE {
+ } // end of namespace VCSN_CONTEXT_NAMESPACE
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ fun xml2str("dyn::vcsn::xml::xml2str", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/xml/strings.hh");
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct xml_session {
+ ctor xml_session("vcsn::xml::xml_session");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct BinCxxInputStream {
+ ctor BinCxxInputStream("vcsn::xml::BinCxxInputStream");
+ // };
+ // struct CxxInputSource {
+ ctor CxxInputSource("vcsn::xml::CxxInputSource");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct xml_converter {
+ ctor xml_converter("vcsn::xml::xml_converter");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ namespace tools {
+ } // end of namespace tools
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct reference_pair {
+ ctor reference_pair("vcsn::xml::reference_pair");
+ // };
+ // struct Node {
+ ctor Node("vcsn::xml::Node");
+ // };
+ // struct automatonNode {
+ ctor automatonNode("vcsn::xml::automatonNode");
+ // };
+ // struct transducerNode {
+ ctor transducerNode("vcsn::xml::transducerNode");
+ // };
+ // struct typeNode {
+ ctor typeNode("vcsn::xml::typeNode");
+ // };
+ // struct contentNode {
+ ctor contentNode("vcsn::xml::contentNode");
+ // };
+ // struct statesNode {
+ ctor statesNode("vcsn::xml::statesNode");
+ // };
+ // struct transitionsNode {
+ ctor transitionsNode("vcsn::xml::transitionsNode");
+ // };
+ // struct stateNode {
+ ctor stateNode("vcsn::xml::stateNode");
+ // };
+ // struct transitionNode {
+ ctor transitionNode("vcsn::xml::transitionNode");
+ // };
+ // struct initialNode {
+ ctor initialNode("vcsn::xml::initialNode");
+ // };
+ // struct finalNode {
+ ctor finalNode("vcsn::xml::finalNode");
+ // };
+ // struct semiringNode {
+ ctor semiringNode("vcsn::xml::semiringNode");
+ // };
+ // struct monoidNode {
+ ctor monoidNode("vcsn::xml::monoidNode");
+ // };
+ // struct freemonoidNode {
+ ctor freemonoidNode("vcsn::xml::freemonoidNode");
+ // };
+ // struct generatorNode {
+ ctor generatorNode("vcsn::xml::generatorNode");
+ // };
+ // struct geometryNode {
+ ctor geometryNode("vcsn::xml::geometryNode");
+ // };
+ // struct drawingNode {
+ ctor drawingNode("vcsn::xml::drawingNode");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct xml_chooser_base {
+ ctor xml_chooser_base("vcsn::xml::xml_chooser_base");
+ // };
+ // struct xml_chooser {
+ ctor xml_chooser("vcsn::xml::xml_chooser");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct myDOMErrorHandler {
+ ctor myDOMErrorHandler("vcsn::xml::myDOMErrorHandler");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace r_automaton {
+ fun automaton_t("dyn::vcsn::r_automaton::automaton_t", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/r_automaton.hh");
+ } // end of namespace r_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace z_automaton {
+ fun automaton_t("dyn::vcsn::z_automaton::automaton_t", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/z_automaton.hh");
+ } // end of namespace z_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace boolean_automaton {
+ fun automaton_t("dyn::vcsn::boolean_automaton::automaton_t", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/boolean_automaton.hh");
+ } // end of namespace boolean_automaton
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace boolean_transducer {
+ } // end of namespace boolean_transducer
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace boolean_transducer {
+ fun automaton_t("dyn::vcsn::boolean_transducer::automaton_t", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/boolean_transducer.hh");
+ } // end of namespace boolean_transducer
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace xml {
+ // struct XML {
+ ctor XML("vcsn::xml::XML");
+ // };
+ } // end of namespace xml
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ fun xml_argv("dyn::vcsn::tools::xml_argv", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/tools/xml_display.hh");
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace io {
+ // struct usual_converter_exp {
+ ctor usual_converter_exp("vcsn::io::usual_converter_exp");
+ // };
+ // struct usual_converter_poly {
+ ctor usual_converter_poly("vcsn::io::usual_converter_poly");
+ // };
+ } // end of namespace io
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace io {
+ // struct simple {
+ ctor simple("vcsn::io::simple");
+ // };
+ } // end of namespace io
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace io {
+ // struct automaton_saver_ {
+ ctor automaton_saver_("vcsn::io::automaton_saver_");
+ // };
+ // struct string_out {
+ ctor string_out("vcsn::io::string_out");
+ // };
+ } // end of namespace io
+ namespace io {
+ // struct automaton_loader_ {
+ ctor automaton_loader_("vcsn::io::automaton_loader_");
+ // };
+ } // end of namespace io
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct GenRandomAutomataSet {
+ ctor GenRandomAutomataSet("vcsn::GenRandomAutomataSet");
+ // };
+ // struct GenRandomAutomata {
+ ctor GenRandomAutomata("vcsn::GenRandomAutomata");
+ // };
+ fun alea("dyn::vcsn::alea", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/tools/gen_random.hh");
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace io {
+ // struct dot {
+ ctor dot("vcsn::io::dot");
+ // };
+ // struct transducer_dot {
+ ctor transducer_dot("vcsn::io::transducer_dot");
+ // };
+ } // end of namespace io
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ fun dotty_argv("dyn::vcsn::tools::dotty_argv", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/tools/dot_display.hh");
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct op_begin_traits {
+ ctor op_begin_traits("vcsn::op_begin_traits");
+ // };
+ // struct op_rbegin_traits {
+ ctor op_rbegin_traits("vcsn::op_rbegin_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace tools {
+ fun usual_escaped_characters("dyn::vcsn::tools::usual_escaped_characters", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/tools/usual_escaped_characters.hh");
+ } // end of namespace tools
+ } // end of namespace vcsn
+ namespace utility {
+ // struct pair {
+ ctor pair("utility::pair");
+ // };
+ // struct discrepancy {
+ ctor discrepancy("utility::discrepancy");
+ // };
+ } // end of namespace utility
+ namespace utility {
+ // struct iomanip {
+ ctor iomanip("utility::iomanip");
+ // };
+ } // end of namespace utility
+ namespace utility {
+ // struct escaper {
+ ctor escaper("utility::escaper");
+ // };
+ // struct setesc {
+ ctor setesc("utility::setesc");
+ // };
+ fun getesc("dyn::utility::getesc", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/misc/escaper.hh");
+ } // end of namespace utility
+ namespace utility {
+ // struct Window {
+ ctor Window("utility::Window");
+ // };
+ } // end of namespace utility
+ namespace utility {
+ } // end of namespace utility
+ namespace utility {
+ namespace unique {
+ // struct UniqueListBase {
+ ctor UniqueListBase("utility::unique::UniqueListBase");
+ // };
+ // struct uniquelist {
+ ctor uniquelist("utility::unique::uniquelist");
+ // };
+ // struct UniqueMap {
+ // struct TiSlot {
+ ctor TiSlot("utility::unique::UniqueMap::TiSlot");
+ // };
+ ctor UniqueMap("utility::unique::UniqueMap");
+ // };
+ // struct unifiable {
+ ctor unifiable("utility::unique::unifiable");
+ // };
+ } // end of namespace unique
+ } // end of namespace utility
+ namespace utility {
+ // struct Support {
+ ctor Support("utility::Support");
+ // };
+ // struct SupportIterator {
+ ctor SupportIterator("utility::SupportIterator");
+ // };
+ // struct SparseIterator {
+ ctor SparseIterator("utility::SparseIterator");
+ // };
+ } // end of namespace utility
+ namespace std {
+ } // end of namespace std
+ namespace utility {
+ // struct SparseInterval {
+ ctor SparseInterval("utility::SparseInterval");
+ // };
+ // struct SelfIterator {
+ ctor SelfIterator("utility::SelfIterator");
+ // };
+ } // end of namespace utility
+ namespace utility {
+ namespace random {
+ fun generate_letter("dyn::utility::random::generate_letter", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/misc/random.hh");
+ fun generate_digit("dyn::utility::random::generate_digit", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/misc/random.hh");
+ } // end of namespace random
+ } // end of namespace utility
+ namespace utility {
+ // struct limits {
+ ctor limits("utility::limits");
+ // };
+ } // end of namespace utility
+ namespace utility {
+ // struct DeferrerDebugPart {
+ ctor DeferrerDebugPart("utility::DeferrerDebugPart");
+ // };
+ // struct Deferrer {
+ ctor Deferrer("utility::Deferrer");
+ // };
+ } // end of namespace utility
+ namespace utility {
+ namespace contract {
+ fun trap("dyn::utility::contract::trap", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/misc/contract.hh");
+ // struct fail {
+ ctor fail("utility::contract::fail");
+ // };
+ } // end of namespace contract
+ } // end of namespace utility
+ namespace utility {
+ namespace concepts {
+ } // end of namespace concepts
+ } // end of namespace utility
+ namespace std {
+ } // end of namespace std
+ namespace utility {
+ // struct Bitset {
+ // struct BitActionCount {
+ ctor BitActionCount("utility::Bitset::BitActionCount");
+ // };
+ ctor Bitset("utility::Bitset");
+ // };
+ fun OPERATORPUSH("dyn::utility::OPERATORPUSH", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/misc/bitset.hh");
+ } // end of namespace utility
+ namespace std {
+ } // end of namespace std
+ namespace utility {
+ // struct generic_int_type {
+ ctor generic_int_type("utility::generic_int_type");
+ // };
+ // struct char_traits {
+ ctor char_traits("utility::char_traits");
+ // };
+ } // end of namespace utility
+ namespace vcsn {
+ // struct DefaultFactoryError {
+ ctor DefaultFactoryError("vcsn::DefaultFactoryError");
+ // };
+ // struct Factory {
+ ctor Factory("vcsn::Factory");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct SyntacticDecorator {
+ ctor SyntacticDecorator("vcsn::SyntacticDecorator");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct Structure {
+ ctor Structure("vcsn::Structure");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct dynamic_traits {
+ ctor dynamic_traits("vcsn::dynamic_traits");
+ // };
+ // struct SyntacticDecorator {
+ // };
+ // struct MetaElement {
+ ctor MetaElement("vcsn::MetaElement");
+ // };
+ // struct Element {
+ ctor Element("vcsn::Element");
+ // };
+ // struct default_slot_tag {
+ ctor default_slot_tag("vcsn::default_slot_tag");
+ // };
+ // struct SetSlot {
+ ctor SetSlot("vcsn::SetSlot");
+ // };
+ // struct Structure {
+ // };
+ // struct virtual_types {
+ ctor virtual_types("vcsn::virtual_types");
+ // };
+ // struct undefined_type {
+ ctor undefined_type("vcsn::undefined_type");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct SetSlotAttribute {
+ ctor SetSlotAttribute("vcsn::SetSlotAttribute");
+ // };
+ // struct SetSlot {
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace std {
+ } // end of namespace std
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct Element {
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct op_add_traits {
+ ctor op_add_traits("vcsn::op_add_traits");
+ // };
+ // struct op_sub_traits {
+ ctor op_sub_traits("vcsn::op_sub_traits");
+ // };
+ // struct op_mul_traits {
+ ctor op_mul_traits("vcsn::op_mul_traits");
+ // };
+ // struct op_div_traits {
+ ctor op_div_traits("vcsn::op_div_traits");
+ // };
+ // struct op_mod_traits {
+ ctor op_mod_traits("vcsn::op_mod_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct geometry {
+ ctor geometry("vcsn::geometry");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct TransposeView {
+ ctor TransposeView("vcsn::TransposeView");
+ // };
+ // struct transpose_traits {
+ ctor transpose_traits("vcsn::transpose_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct generalized_traits {
+ ctor generalized_traits("vcsn::generalized_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct IdentityView {
+ ctor IdentityView("vcsn::IdentityView");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct edge_value {
+ ctor edge_value("vcsn::edge_value");
+ // };
+ // struct state_value {
+ ctor state_value("vcsn::state_value");
+ // };
+ // struct Graph {
+ ctor Graph("vcsn::Graph");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct TransducerBase {
+ ctor TransducerBase("vcsn::TransducerBase");
+ // };
+ // struct transducer_traits {
+ ctor transducer_traits("vcsn::transducer_traits");
+ // };
+ // struct extension_traits {
+ ctor extension_traits("vcsn::extension_traits");
+ // };
+ // struct projection_traits {
+ ctor projection_traits("vcsn::projection_traits");
+ // };
+ // struct output_projection_traits {
+ ctor output_projection_traits("vcsn::output_projection_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct Transducer {
+ ctor Transducer("vcsn::Transducer");
+ // };
+ // struct Transducer {
+ // };
+ // struct input_projection_helper {
+ ctor input_projection_helper("vcsn::input_projection_helper");
+ // };
+ // struct output_projection_helper {
+ ctor output_projection_helper("vcsn::output_projection_helper");
+ // };
+ // struct identity_transducer_helper {
+ ctor identity_transducer_helper("vcsn::identity_transducer_helper");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct NoTag {
+ ctor NoTag("vcsn::NoTag");
+ // };
+ } // end of namespace vcsn
+ fun OPERATOREQUAL("dyn::OPERATOREQUAL", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/automata/concept/tags.hh");
+ fun OPERATORNOTEQUAL("dyn::OPERATORNOTEQUAL", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/automata/concept/tags.hh");
+ namespace vcsn {
+ // struct AutoKind {
+ ctor AutoKind("vcsn::AutoKind");
+ // };
+ namespace delta_kind {
+ // struct edges {
+ ctor edges("vcsn::delta_kind::edges");
+ // };
+ // struct states {
+ ctor states("vcsn::delta_kind::states");
+ // };
+ } // end of namespace delta_kind
+ // struct labels_are_series {
+ ctor labels_are_series("vcsn::labels_are_series");
+ // };
+ // struct ls_delta_letter_query {
+ ctor ls_delta_letter_query("vcsn::ls_delta_letter_query");
+ // };
+ // struct labels_are_couples {
+ ctor labels_are_couples("vcsn::labels_are_couples");
+ // };
+ // struct lc_delta_letter_query {
+ ctor lc_delta_letter_query("vcsn::lc_delta_letter_query");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace history {
+ // struct Event {
+ ctor Event("vcsn::history::Event");
+ // };
+ // struct BinaryEvent {
+ ctor BinaryEvent("vcsn::history::BinaryEvent");
+ // };
+ // struct UnaryEvent {
+ ctor UnaryEvent("vcsn::history::UnaryEvent");
+ // };
+ // struct AutomatonHistory {
+ ctor AutomatonHistory("vcsn::history::AutomatonHistory");
+ // };
+ } // end of namespace history
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct state_h {
+ ctor state_h("vcsn::state_h");
+ // };
+ // struct edge_h {
+ ctor edge_h("vcsn::edge_h");
+ // };
+ // struct handler {
+ ctor handler("vcsn::handler");
+ // };
+ } // end of namespace vcsn
+ namespace std {
+ } // end of namespace std
+ namespace vcsn {
+ namespace delta_kind {
+ // struct edges {
+ // };
+ // struct states {
+ // };
+ } // end of namespace delta_kind
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct labels_are_letters {
+ ctor labels_are_letters("vcsn::labels_are_letters");
+ // };
+ // struct labels_are_words {
+ ctor labels_are_words("vcsn::labels_are_words");
+ // };
+ // struct labels_are_series {
+ // };
+ // struct labels_are_couples {
+ // };
+ // struct LabelOf {
+ ctor LabelOf("vcsn::LabelOf");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct Automata {
+ ctor Automata("vcsn::Automata");
+ // };
+ // struct Automata {
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct AutomataBase {
+ ctor AutomataBase("vcsn::AutomataBase");
+ // };
+ // struct automaton_traits {
+ ctor automaton_traits("vcsn::automaton_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct FindBestSearch {
+ ctor FindBestSearch("vcsn::FindBestSearch");
+ // };
+ // struct WindowedBackSearch {
+ ctor WindowedBackSearch("vcsn::WindowedBackSearch");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct linearize_element {
+ ctor linearize_element("vcsn::linearize_element");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct Skeleton {
+ ctor Skeleton("vcsn::Skeleton");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ // struct reference_type {
+ ctor reference_type("vcsn::reference_type");
+ // };
+ // struct iterator_type {
+ ctor iterator_type("vcsn::iterator_type");
+ // };
+ // struct PartialExp {
+ // struct internal_iterator {
+ ctor internal_iterator("vcsn::PartialExp::internal_iterator");
+ // };
+ ctor PartialExp("vcsn::PartialExp");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algorithm_patterns {
+ // struct Comparator {
+ ctor Comparator("vcsn::algorithm_patterns::Comparator");
+ // };
+ // struct IncAutomataConstructor {
+ ctor IncAutomataConstructor("vcsn::algorithm_patterns::IncAutomataConstructor");
+ // };
+ // struct MathAutomataConstructor {
+ ctor MathAutomataConstructor("vcsn::algorithm_patterns::MathAutomataConstructor");
+ // };
+ } // end of namespace algorithm_patterns
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct DefaultTransposeFun {
+ ctor DefaultTransposeFun("vcsn::algebra::DefaultTransposeFun");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct semiring_slot_tag {
+ ctor semiring_slot_tag("vcsn::algebra::semiring_slot_tag");
+ // };
+ // struct monoid_slot_tag {
+ ctor monoid_slot_tag("vcsn::algebra::monoid_slot_tag");
+ // };
+ // struct Series {
+ ctor Series("vcsn::algebra::Series");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct polynom {
+ ctor polynom("vcsn::algebra::polynom");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace std {
+ } // end of namespace std
+ namespace vcsn {
+ namespace algebra {
+ // struct BinaryOp {
+ ctor BinaryOp("vcsn::algebra::BinaryOp");
+ // };
+ // struct UnaryOp {
+ ctor UnaryOp("vcsn::algebra::UnaryOp");
+ // };
+ // struct Value {
+ ctor Value("vcsn::algebra::Value");
+ // };
+ // struct GenericMatcher {
+ ctor GenericMatcher("vcsn::algebra::GenericMatcher");
+ // };
+ // struct KRatExpMatcher {
+ ctor KRatExpMatcher("vcsn::algebra::KRatExpMatcher");
+ // };
+ // struct KRatExpIdentity {
+ ctor KRatExpIdentity("vcsn::algebra::KRatExpIdentity");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct ExpConvertVisitor {
+ ctor ExpConvertVisitor("vcsn::algebra::ExpConvertVisitor");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ // struct StarHeightVisitor {
+ ctor StarHeightVisitor("vcsn::rat::StarHeightVisitor");
+ // };
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ // struct LengthVisitor {
+ ctor LengthVisitor("vcsn::rat::LengthVisitor");
+ // };
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ // struct ReverseVisitor {
+ ctor ReverseVisitor("vcsn::rat::ReverseVisitor");
+ // };
+ } // end of namespace rat
+ namespace algebra {
+ // struct DefaultTransposeFun {
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ // struct RandomVisitor {
+ ctor RandomVisitor("vcsn::rat::RandomVisitor");
+ // };
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ // struct Node {
+ ctor Node("vcsn::rat::Node");
+ // };
+ // struct ConstNodeVisitor {
+ ctor ConstNodeVisitor("vcsn::rat::ConstNodeVisitor");
+ // };
+ // struct DefaultMutableNodeVisitor {
+ ctor DefaultMutableNodeVisitor("vcsn::rat::DefaultMutableNodeVisitor");
+ // };
+ // struct Node {
+ // };
+ // struct Zero {
+ ctor Zero("vcsn::rat::Zero");
+ // };
+ // struct One {
+ ctor One("vcsn::rat::One");
+ // };
+ // struct Constant {
+ ctor Constant("vcsn::rat::Constant");
+ // };
+ // struct LeftWeighted {
+ ctor LeftWeighted("vcsn::rat::LeftWeighted");
+ // };
+ // struct RightWeighted {
+ ctor RightWeighted("vcsn::rat::RightWeighted");
+ // };
+ // struct Star {
+ ctor Star("vcsn::rat::Star");
+ // };
+ // struct Product {
+ ctor Product("vcsn::rat::Product");
+ // };
+ // struct Sum {
+ ctor Sum("vcsn::rat::Sum");
+ // };
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ // struct exp {
+ ctor exp("vcsn::rat::exp");
+ // };
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ // struct setpm {
+ ctor setpm("vcsn::rat::setpm");
+ // };
+ fun getpm("dyn::vcsn::rat::getpm", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/series/rat/dump_visitor.hh");
+ // struct setzero {
+ ctor setzero("vcsn::rat::setzero");
+ // };
+ // struct setid {
+ ctor setid("vcsn::rat::setid");
+ // };
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct DispatchVisitor {
+ ctor DispatchVisitor("vcsn::algebra::DispatchVisitor");
+ // };
+ // struct DispatchFunction {
+ ctor DispatchFunction("vcsn::algebra::DispatchFunction");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace rat {
+ // struct DepthVisitor {
+ ctor DepthVisitor("vcsn::rat::DepthVisitor");
+ // };
+ } // end of namespace rat
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct RationalNumber {
+ ctor RationalNumber("vcsn::algebra::RationalNumber");
+ // };
+ fun OPERATORPUSH("dyn::vcsn::algebra::OPERATORPUSH", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/rational_number.hh");
+ fun gcd("dyn::vcsn::algebra::gcd", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/rational_number.hh");
+ fun lcm("dyn::vcsn::algebra::lcm", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/rational_number.hh");
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace std {
+ } // end of namespace std
+ namespace utility {
+ } // end of namespace utility
+ namespace vcsn {
+ fun op_can_choose_non_starable("dyn::vcsn::op_can_choose_non_starable", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_choose_starable("dyn::vcsn::op_choose_starable", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_choose_non_starable("dyn::vcsn::op_choose_non_starable", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_mul("dyn::vcsn::op_mul", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_in_add("dyn::vcsn::op_in_add", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_add("dyn::vcsn::op_add", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun identity_value("dyn::vcsn::identity_value", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun zero_value("dyn::vcsn::zero_value", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_starable("dyn::vcsn::op_starable", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ fun op_in_star("dyn::vcsn::op_in_star", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/semiring/numerical_semiring.hh");
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct static_ranged {
+ ctor static_ranged("vcsn::algebra::static_ranged");
+ // };
+ // struct static_char_interval {
+ ctor static_char_interval("vcsn::algebra::static_char_interval");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace std {
+ fun OPERATORPUSH("dyn::std::OPERATORPUSH", "", "/home/lrde/lrde-2006/pouill_n/w/oln/prototypes/dynamic-use-of-static-c++/trunk/test/vaucanson/sources/include/vaucanson/algebra/implementation/letter/int_letter.hh");
+ } // end of namespace std
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace utility {
+ } // end of namespace utility
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct FreeMonoid {
+ ctor FreeMonoid("vcsn::algebra::FreeMonoid");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct list_or_string {
+ ctor list_or_string("vcsn::algebra::list_or_string");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ namespace small_alpha_letter {
+ } // end of namespace small_alpha_letter
+ namespace char_letter {
+ } // end of namespace char_letter
+ namespace char_pair {
+ } // end of namespace char_pair
+ namespace weighted_letter {
+ } // end of namespace weighted_letter
+ namespace int_letter {
+ } // end of namespace int_letter
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct AlphabetDecorator {
+ ctor AlphabetDecorator("vcsn::algebra::AlphabetDecorator");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ namespace small_alpha_letter {
+ } // end of namespace small_alpha_letter
+ namespace char_letter {
+ } // end of namespace char_letter
+ namespace char_pair {
+ } // end of namespace char_pair
+ namespace weighted_letter {
+ } // end of namespace weighted_letter
+ namespace int_letter {
+ } // end of namespace int_letter
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct AlphabetSet {
+ ctor AlphabetSet("vcsn::algebra::AlphabetSet");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct TropicalSemiring {
+ ctor TropicalSemiring("vcsn::algebra::TropicalSemiring");
+ // };
+ } // end of namespace algebra
+ namespace algebra {
+ // struct TropicalMin {
+ ctor TropicalMin("vcsn::algebra::TropicalMin");
+ // };
+ // struct TropicalMax {
+ ctor TropicalMax("vcsn::algebra::TropicalMax");
+ // };
+ // struct TropicalSemiring {
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct SeriesBase {
+ ctor SeriesBase("vcsn::algebra::SeriesBase");
+ // };
+ // struct series_traits {
+ ctor series_traits("vcsn::algebra::series_traits");
+ // };
+ // struct mute_series_impl {
+ ctor mute_series_impl("vcsn::algebra::mute_series_impl");
+ // };
+ // struct mute_series_traits {
+ ctor mute_series_traits("vcsn::algebra::mute_series_traits");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct SemiringBase {
+ ctor SemiringBase("vcsn::algebra::SemiringBase");
+ // };
+ } // end of namespace algebra
+ // struct op_star_traits {
+ ctor op_star_traits("vcsn::op_star_traits");
+ // };
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct mul_kind {
+ ctor mul_kind("vcsn::algebra::mul_kind");
+ // };
+ // struct add_kind {
+ ctor add_kind("vcsn::algebra::add_kind");
+ // };
+ // struct SemigroupBase {
+ ctor SemigroupBase("vcsn::algebra::SemigroupBase");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct MonoidBase {
+ ctor MonoidBase("vcsn::algebra::MonoidBase");
+ // };
+ // struct identity_as {
+ ctor identity_as("vcsn::algebra::identity_as");
+ // };
+ // struct zero_as {
+ ctor zero_as("vcsn::algebra::zero_as");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct FreeMonoidBase {
+ ctor FreeMonoidBase("vcsn::algebra::FreeMonoidBase");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct AlphabetSetBase {
+ ctor AlphabetSetBase("vcsn::algebra::AlphabetSetBase");
+ // };
+ // struct alphabet_traits {
+ ctor alphabet_traits("vcsn::algebra::alphabet_traits");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+ namespace vcsn {
+ namespace algebra {
+ // struct NumericalSemiring {
+ ctor NumericalSemiring("vcsn::algebra::NumericalSemiring");
+ // };
+ } // end of namespace algebra
+ } // end of namespace vcsn
+} // end of namespace dyn
diff --git a/dynamic-use-of-static-c++/test/vaucanson/test-loader.cc b/dynamic-use-of-static-c++/test/vaucanson/test-loader.cc
new file mode 100644
index 0000000..64fac50
--- /dev/null
+++ b/dynamic-use-of-static-c++/test/vaucanson/test-loader.cc
@@ -0,0 +1,39 @@
+#include "dyn.hh"
+using namespace dyn::language;
+
+#include <vaucanson/xml/XML.hh>
+// #include <dyn_vaucanson_mlc_name.hh>
+ // dyn::post_include("dyn_vaucanson_mlc_name.hh");
+// #include <vaucanson/xml/xml_converter.hh>
+using namespace vcsn;
+using namespace vcsn::io;
+// using dyn::vcsn::xml::XML;
+using namespace vcsn::xml;
+using namespace xercesc;
+
+int main(int, char**argv)
+{
+ std::string s = argv[1];
+ std::cout << "load(" << s << ")" << std::endl;
+ std::istream* is (s == "-" ? &std::cin : new std::ifstream (s.c_str()));
+ if (not is->fail())
+ {
+ xercesc::XMLPlatformUtils::Initialize();
+
+ xercesc::DOMElement* root_ = xerces_parser::stream_parser(*is);
+
+ typedef Node<var> node_t;
+ Factory<node_t, std::string> f;
+ register_all_factory(f, var);
+ node_t::map_t str2state;
+
+ node_t* node = factory_create(f, xml2str(root_->getNodeName()));
+ node->process(root_, var(), str2state, f);
+ // xercesc::DOMNodeList* nodelist;
+
+ // nodelist = doc->getElementsByTagName(STR2XML("type"));
+ // std::cout << nodelist->getLength() << std::endl;
+
+ xercesc::XMLPlatformUtils::Terminate();
+ }
+}
diff --git a/dynamic-use-of-static-c++/vcs/dynamic_static_bridge_vcs.rb b/dynamic-use-of-static-c++/vcs/dynamic_static_bridge_vcs.rb
new file mode 100644
index 0000000..7457fe5
--- /dev/null
+++ b/dynamic-use-of-static-c++/vcs/dynamic_static_bridge_vcs.rb
@@ -0,0 +1,19 @@
+class Vcs
+ # See http://rubyforge.org/projects/vcs
+ # and http://vcs.rubyforge.org
+
+ protocol_version '0.1'
+
+ def dynamic_static_bridge_commit! ( *args )
+
+ common_commit!("[DynamicStaticBridge]: <%= rev %>: <%= title %>", *args) do |subject|
+
+ mail! :to => ["damien.thivolle(a)gmail.com", "nicolas.pouillard(a)gmail.com"], :subject => subject
+
+ end
+
+ end
+ alias_command :dystci, :dynamic_static_bridge_commit
+ default_commit :dynamic_static_bridge_commit
+
+end # class Vcs
--
1.6.5
1
31

26 Oct '09
---
scribo/ChangeLog | 4 ++++
scribo/headers.mk | 7 +++++--
scribo/tests/unit_test/unit-tests.mk | 6 ++----
3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/scribo/ChangeLog b/scribo/ChangeLog
index fb6e06d..f397523 100644
--- a/scribo/ChangeLog
+++ b/scribo/ChangeLog
@@ -1,3 +1,7 @@
+2009-10-12 Roland Levillain <roland(a)lrde.epita.fr>
+
+ * headers.mk, tests/unit_test/unit-tests.mk: Regen.
+
2009-10-05 Roland Levillain <roland(a)lrde.epita.fr>
Add a main() to src/debug/show_objects_thin.cc to have it link.
diff --git a/scribo/headers.mk b/scribo/headers.mk
index 15d9b2a..6c8d0cf 100644
--- a/scribo/headers.mk
+++ b/scribo/headers.mk
@@ -24,9 +24,8 @@ nobase_scribo_HEADERS = \
./draw/bounding_boxes.hh \
./estim/object_groups_v_thickness.hh \
./filter/all.hh \
-./filter/common/object_groups_photo.hh \
-./filter/common/object_links_photo.hh \
./filter/common/objects_photo.hh \
+./filter/object_groups_size_ratio.hh \
./filter/object_groups_small.hh \
./filter/object_groups_v_thickness.hh \
./filter/object_links_bbox_h_ratio.hh \
@@ -38,10 +37,13 @@ nobase_scribo_HEADERS = \
./filter/object_links_non_aligned_simple.hh \
./filter/object_links_non_h_aligned.hh \
./filter/object_links_non_v_aligned.hh \
+./filter/objects_h_thin.hh \
./filter/objects_large.hh \
+./filter/objects_size_ratio.hh \
./filter/objects_small.hh \
./filter/objects_thick.hh \
./filter/objects_thin.hh \
+./filter/objects_v_thin.hh \
./fun/v2b/objects_small_filter.hh \
./make/all.hh \
./make/debug_filename.hh \
@@ -80,6 +82,7 @@ nobase_scribo_HEADERS = \
./primitive/internal/find_root.hh \
./primitive/internal/have_link_valid.hh \
./primitive/internal/init_link_array.hh \
+./primitive/internal/is_invalid_link.hh \
./primitive/internal/is_link_valid.hh \
./primitive/internal/update_graph_link.hh \
./primitive/internal/update_link_array.hh \
diff --git a/scribo/tests/unit_test/unit-tests.mk b/scribo/tests/unit_test/unit-tests.mk
index 953f02a..63998b0 100644
--- a/scribo/tests/unit_test/unit-tests.mk
+++ b/scribo/tests/unit_test/unit-tests.mk
@@ -23,8 +23,6 @@ scribo_draw_bounding_box_links \
scribo_draw_bounding_boxes \
scribo_estim_object_groups_v_thickness \
scribo_filter_all \
-scribo_filter_common_object_groups_photo \
-scribo_filter_common_object_links_photo \
scribo_filter_common_objects_photo \
scribo_filter_object_groups_size_ratio \
scribo_filter_object_groups_small \
@@ -83,6 +81,7 @@ scribo_primitive_internal_find_right_link \
scribo_primitive_internal_find_root \
scribo_primitive_internal_have_link_valid \
scribo_primitive_internal_init_link_array \
+scribo_primitive_internal_is_invalid_link \
scribo_primitive_internal_is_link_valid \
scribo_primitive_internal_update_graph_link \
scribo_primitive_internal_update_link_array \
@@ -137,8 +136,6 @@ scribo_draw_bounding_box_links_SOURCES = scribo_draw_bounding_box_links.cc
scribo_draw_bounding_boxes_SOURCES = scribo_draw_bounding_boxes.cc
scribo_estim_object_groups_v_thickness_SOURCES = scribo_estim_object_groups_v_thickness.cc
scribo_filter_all_SOURCES = scribo_filter_all.cc
-scribo_filter_common_object_groups_photo_SOURCES = scribo_filter_common_object_groups_photo.cc
-scribo_filter_common_object_links_photo_SOURCES = scribo_filter_common_object_links_photo.cc
scribo_filter_common_objects_photo_SOURCES = scribo_filter_common_objects_photo.cc
scribo_filter_object_groups_size_ratio_SOURCES = scribo_filter_object_groups_size_ratio.cc
scribo_filter_object_groups_small_SOURCES = scribo_filter_object_groups_small.cc
@@ -197,6 +194,7 @@ scribo_primitive_internal_find_right_link_SOURCES = scribo_primitive_internal_fi
scribo_primitive_internal_find_root_SOURCES = scribo_primitive_internal_find_root.cc
scribo_primitive_internal_have_link_valid_SOURCES = scribo_primitive_internal_have_link_valid.cc
scribo_primitive_internal_init_link_array_SOURCES = scribo_primitive_internal_init_link_array.cc
+scribo_primitive_internal_is_invalid_link_SOURCES = scribo_primitive_internal_is_invalid_link.cc
scribo_primitive_internal_is_link_valid_SOURCES = scribo_primitive_internal_is_link_valid.cc
scribo_primitive_internal_update_graph_link_SOURCES = scribo_primitive_internal_update_graph_link.cc
scribo_primitive_internal_update_link_array_SOURCES = scribo_primitive_internal_update_link_array.cc
--
1.6.5.1
1
0
* doc/examples/examples.mk,
* headers.mk,
* tests/unit_test/unit-tests.mk:
Regen.
---
milena/ChangeLog | 9 ++++++++
milena/doc/examples/examples.mk | 3 ++
milena/headers.mk | 18 +++++++++++++++++
milena/tests/unit_test/unit-tests.mk | 36 ++++++++++++++++++++++++++++++++++
4 files changed, 66 insertions(+), 0 deletions(-)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 71d1547..371f6d3 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,3 +1,12 @@
+2009-10-26 Roland Levillain <roland(a)lrde.epita.fr>
+
+ Regen Makefile helpers.
+
+ * doc/examples/examples.mk,
+ * headers.mk,
+ * tests/unit_test/unit-tests.mk:
+ Regen.
+
2009-10-16 Edwin Carlinet <carlinet(a)lrde.epita.fr>
Add AVS field file support.
diff --git a/milena/doc/examples/examples.mk b/milena/doc/examples/examples.mk
index c0b75be..1feed0f 100644
--- a/milena/doc/examples/examples.mk
+++ b/milena/doc/examples/examples.mk
@@ -2,6 +2,9 @@
EXTRA_DIST += \
examples/accu-wrong-instanciation.cc.raw \
+examples/devel/dispatch.cc.raw \
+examples/devel/facade.cc.raw \
+examples/devel/impl.cc.raw \
examples/fill-proto.cc.raw \
examples/ima2d-restricted-1.cc.raw \
examples/ima2d-restricted-2.cc.raw \
diff --git a/milena/headers.mk b/milena/headers.mk
index 76c9755..eb27c99 100644
--- a/milena/headers.mk
+++ b/milena/headers.mk
@@ -314,6 +314,7 @@ mln/core/internal/check/image_all.hh \
mln/core/internal/check/image_fastest.hh \
mln/core/internal/classical_window_base.hh \
mln/core/internal/complex_neighborhood_base.hh \
+mln/core/internal/complex_window_base.hh \
mln/core/internal/complex_window_p_base.hh \
mln/core/internal/coord_impl.hh \
mln/core/internal/data.hh \
@@ -607,6 +608,7 @@ mln/geom/seeds2tiling_roundness.hh \
mln/geom/size1d.hh \
mln/geom/size2d.hh \
mln/geom/size3d.hh \
+mln/geom/translate.hh \
mln/graph/all.hh \
mln/graph/attribute/card.hh \
mln/graph/attribute/representative.hh \
@@ -634,6 +636,13 @@ mln/io/dump/save.hh \
mln/io/essential.hh \
mln/io/fits/all.hh \
mln/io/fits/load.hh \
+mln/io/fld/all.hh \
+mln/io/fld/header.hh \
+mln/io/fld/load.hh \
+mln/io/fld/load_header.hh \
+mln/io/fld/max_components.hh \
+mln/io/fld/save.hh \
+mln/io/fld/write_header.hh \
mln/io/magick/all.hh \
mln/io/magick/load.hh \
mln/io/magick/save.hh \
@@ -909,15 +918,19 @@ mln/morpho/thin_fit.hh \
mln/morpho/thinning.hh \
mln/morpho/top_hat.hh \
mln/morpho/tree/all.hh \
+mln/morpho/tree/component_tree.hh \
mln/morpho/tree/compute_attribute_image.hh \
mln/morpho/tree/compute_parent.hh \
mln/morpho/tree/data.hh \
+mln/morpho/tree/dual_input_tree.hh \
mln/morpho/tree/filter/all.hh \
mln/morpho/tree/filter/direct.hh \
mln/morpho/tree/filter/filter.hh \
mln/morpho/tree/filter/max.hh \
mln/morpho/tree/filter/min.hh \
mln/morpho/tree/filter/subtractive.hh \
+mln/morpho/tree/impl/dual_hqueue.hh \
+mln/morpho/tree/impl/dual_union_find.hh \
mln/morpho/tree/max.hh \
mln/morpho/tree/propagate_if.hh \
mln/morpho/tree/propagate_node.hh \
@@ -926,6 +939,7 @@ mln/morpho/tree/utils.hh \
mln/morpho/watershed/all.hh \
mln/morpho/watershed/flooding.hh \
mln/morpho/watershed/superpose.hh \
+mln/morpho/watershed/topological.hh \
mln/norm/all.hh \
mln/norm/essential.hh \
mln/norm/l1.hh \
@@ -1078,6 +1092,8 @@ mln/transform/internal/all.hh \
mln/transform/internal/closest_point_functor.hh \
mln/transform/internal/distance_functor.hh \
mln/transform/internal/influence_zone_functor.hh \
+mln/upscaling/art/scale2x.hh \
+mln/upscaling/art/scale3x.hh \
mln/util/adjacency_matrix.hh \
mln/util/all.hh \
mln/util/array.hh \
@@ -1093,6 +1109,7 @@ mln/util/graph.hh \
mln/util/graph_ids.hh \
mln/util/greater_point.hh \
mln/util/greater_psite.hh \
+mln/util/hqueues.hh \
mln/util/ignore.hh \
mln/util/index.hh \
mln/util/internal/edge_impl.hh \
@@ -1194,6 +1211,7 @@ mln/value/scalar.hh \
mln/value/set.hh \
mln/value/sign.hh \
mln/value/super_value.hh \
+mln/value/value_array.hh \
mln/value/viter.hh \
mln/win/all.hh \
mln/win/backdiag2d.hh \
diff --git a/milena/tests/unit_test/unit-tests.mk b/milena/tests/unit_test/unit-tests.mk
index 0475d0c..d9d29aa 100644
--- a/milena/tests/unit_test/unit-tests.mk
+++ b/milena/tests/unit_test/unit-tests.mk
@@ -295,6 +295,7 @@ mln_core_internal_check_image_all \
mln_core_internal_check_image_fastest \
mln_core_internal_classical_window_base \
mln_core_internal_complex_neighborhood_base \
+mln_core_internal_complex_window_base \
mln_core_internal_complex_window_p_base \
mln_core_internal_coord_impl \
mln_core_internal_data \
@@ -633,6 +634,7 @@ mln_geom_seeds2tiling_roundness \
mln_geom_size1d \
mln_geom_size2d \
mln_geom_size3d \
+mln_geom_translate \
mln_graph_all \
mln_graph_attribute_card \
mln_graph_attribute_representative \
@@ -655,6 +657,13 @@ mln_io_dump_all \
mln_io_dump_load \
mln_io_dump_save \
mln_io_essential \
+mln_io_fld_all \
+mln_io_fld_header \
+mln_io_fld_load \
+mln_io_fld_load_header \
+mln_io_fld_max_components \
+mln_io_fld_save \
+mln_io_fld_write_header \
mln_io_off_all \
mln_io_off_load \
mln_io_off_save \
@@ -928,15 +937,19 @@ mln_morpho_thin_fit \
mln_morpho_thinning \
mln_morpho_top_hat \
mln_morpho_tree_all \
+mln_morpho_tree_component_tree \
mln_morpho_tree_compute_attribute_image \
mln_morpho_tree_compute_parent \
mln_morpho_tree_data \
+mln_morpho_tree_dual_input_tree \
mln_morpho_tree_filter_all \
mln_morpho_tree_filter_direct \
mln_morpho_tree_filter_filter \
mln_morpho_tree_filter_max \
mln_morpho_tree_filter_min \
mln_morpho_tree_filter_subtractive \
+mln_morpho_tree_impl_dual_hqueue \
+mln_morpho_tree_impl_dual_union_find \
mln_morpho_tree_max \
mln_morpho_tree_propagate_if \
mln_morpho_tree_propagate_node \
@@ -945,6 +958,7 @@ mln_morpho_tree_utils \
mln_morpho_watershed_all \
mln_morpho_watershed_flooding \
mln_morpho_watershed_superpose \
+mln_morpho_watershed_topological \
mln_norm_all \
mln_norm_essential \
mln_norm_l1 \
@@ -1113,6 +1127,8 @@ mln_transform_internal_all \
mln_transform_internal_closest_point_functor \
mln_transform_internal_distance_functor \
mln_transform_internal_influence_zone_functor \
+mln_upscaling_art_scale2x \
+mln_upscaling_art_scale3x \
mln_util_adjacency_matrix \
mln_util_all \
mln_util_array \
@@ -1128,6 +1144,7 @@ mln_util_graph \
mln_util_graph_ids \
mln_util_greater_point \
mln_util_greater_psite \
+mln_util_hqueues \
mln_util_ignore \
mln_util_index \
mln_util_internal_edge_impl \
@@ -1233,6 +1250,7 @@ mln_value_shell \
mln_value_sign \
mln_value_stack \
mln_value_super_value \
+mln_value_value_array \
mln_value_viter \
mln_win_all \
mln_win_backdiag2d \
@@ -1570,6 +1588,7 @@ mln_core_internal_check_image_all_SOURCES = mln_core_internal_check_image_all.cc
mln_core_internal_check_image_fastest_SOURCES = mln_core_internal_check_image_fastest.cc
mln_core_internal_classical_window_base_SOURCES = mln_core_internal_classical_window_base.cc
mln_core_internal_complex_neighborhood_base_SOURCES = mln_core_internal_complex_neighborhood_base.cc
+mln_core_internal_complex_window_base_SOURCES = mln_core_internal_complex_window_base.cc
mln_core_internal_complex_window_p_base_SOURCES = mln_core_internal_complex_window_p_base.cc
mln_core_internal_coord_impl_SOURCES = mln_core_internal_coord_impl.cc
mln_core_internal_data_SOURCES = mln_core_internal_data.cc
@@ -1908,6 +1927,7 @@ mln_geom_seeds2tiling_roundness_SOURCES = mln_geom_seeds2tiling_roundness.cc
mln_geom_size1d_SOURCES = mln_geom_size1d.cc
mln_geom_size2d_SOURCES = mln_geom_size2d.cc
mln_geom_size3d_SOURCES = mln_geom_size3d.cc
+mln_geom_translate_SOURCES = mln_geom_translate.cc
mln_graph_all_SOURCES = mln_graph_all.cc
mln_graph_attribute_card_SOURCES = mln_graph_attribute_card.cc
mln_graph_attribute_representative_SOURCES = mln_graph_attribute_representative.cc
@@ -1930,6 +1950,13 @@ mln_io_dump_all_SOURCES = mln_io_dump_all.cc
mln_io_dump_load_SOURCES = mln_io_dump_load.cc
mln_io_dump_save_SOURCES = mln_io_dump_save.cc
mln_io_essential_SOURCES = mln_io_essential.cc
+mln_io_fld_all_SOURCES = mln_io_fld_all.cc
+mln_io_fld_header_SOURCES = mln_io_fld_header.cc
+mln_io_fld_load_SOURCES = mln_io_fld_load.cc
+mln_io_fld_load_header_SOURCES = mln_io_fld_load_header.cc
+mln_io_fld_max_components_SOURCES = mln_io_fld_max_components.cc
+mln_io_fld_save_SOURCES = mln_io_fld_save.cc
+mln_io_fld_write_header_SOURCES = mln_io_fld_write_header.cc
mln_io_off_all_SOURCES = mln_io_off_all.cc
mln_io_off_load_SOURCES = mln_io_off_load.cc
mln_io_off_save_SOURCES = mln_io_off_save.cc
@@ -2203,15 +2230,19 @@ mln_morpho_thin_fit_SOURCES = mln_morpho_thin_fit.cc
mln_morpho_thinning_SOURCES = mln_morpho_thinning.cc
mln_morpho_top_hat_SOURCES = mln_morpho_top_hat.cc
mln_morpho_tree_all_SOURCES = mln_morpho_tree_all.cc
+mln_morpho_tree_component_tree_SOURCES = mln_morpho_tree_component_tree.cc
mln_morpho_tree_compute_attribute_image_SOURCES = mln_morpho_tree_compute_attribute_image.cc
mln_morpho_tree_compute_parent_SOURCES = mln_morpho_tree_compute_parent.cc
mln_morpho_tree_data_SOURCES = mln_morpho_tree_data.cc
+mln_morpho_tree_dual_input_tree_SOURCES = mln_morpho_tree_dual_input_tree.cc
mln_morpho_tree_filter_all_SOURCES = mln_morpho_tree_filter_all.cc
mln_morpho_tree_filter_direct_SOURCES = mln_morpho_tree_filter_direct.cc
mln_morpho_tree_filter_filter_SOURCES = mln_morpho_tree_filter_filter.cc
mln_morpho_tree_filter_max_SOURCES = mln_morpho_tree_filter_max.cc
mln_morpho_tree_filter_min_SOURCES = mln_morpho_tree_filter_min.cc
mln_morpho_tree_filter_subtractive_SOURCES = mln_morpho_tree_filter_subtractive.cc
+mln_morpho_tree_impl_dual_hqueue_SOURCES = mln_morpho_tree_impl_dual_hqueue.cc
+mln_morpho_tree_impl_dual_union_find_SOURCES = mln_morpho_tree_impl_dual_union_find.cc
mln_morpho_tree_max_SOURCES = mln_morpho_tree_max.cc
mln_morpho_tree_propagate_if_SOURCES = mln_morpho_tree_propagate_if.cc
mln_morpho_tree_propagate_node_SOURCES = mln_morpho_tree_propagate_node.cc
@@ -2220,6 +2251,7 @@ mln_morpho_tree_utils_SOURCES = mln_morpho_tree_utils.cc
mln_morpho_watershed_all_SOURCES = mln_morpho_watershed_all.cc
mln_morpho_watershed_flooding_SOURCES = mln_morpho_watershed_flooding.cc
mln_morpho_watershed_superpose_SOURCES = mln_morpho_watershed_superpose.cc
+mln_morpho_watershed_topological_SOURCES = mln_morpho_watershed_topological.cc
mln_norm_all_SOURCES = mln_norm_all.cc
mln_norm_essential_SOURCES = mln_norm_essential.cc
mln_norm_l1_SOURCES = mln_norm_l1.cc
@@ -2388,6 +2420,8 @@ mln_transform_internal_all_SOURCES = mln_transform_internal_all.cc
mln_transform_internal_closest_point_functor_SOURCES = mln_transform_internal_closest_point_functor.cc
mln_transform_internal_distance_functor_SOURCES = mln_transform_internal_distance_functor.cc
mln_transform_internal_influence_zone_functor_SOURCES = mln_transform_internal_influence_zone_functor.cc
+mln_upscaling_art_scale2x_SOURCES = mln_upscaling_art_scale2x.cc
+mln_upscaling_art_scale3x_SOURCES = mln_upscaling_art_scale3x.cc
mln_util_adjacency_matrix_SOURCES = mln_util_adjacency_matrix.cc
mln_util_all_SOURCES = mln_util_all.cc
mln_util_array_SOURCES = mln_util_array.cc
@@ -2403,6 +2437,7 @@ mln_util_graph_SOURCES = mln_util_graph.cc
mln_util_graph_ids_SOURCES = mln_util_graph_ids.cc
mln_util_greater_point_SOURCES = mln_util_greater_point.cc
mln_util_greater_psite_SOURCES = mln_util_greater_psite.cc
+mln_util_hqueues_SOURCES = mln_util_hqueues.cc
mln_util_ignore_SOURCES = mln_util_ignore.cc
mln_util_index_SOURCES = mln_util_index.cc
mln_util_internal_edge_impl_SOURCES = mln_util_internal_edge_impl.cc
@@ -2508,6 +2543,7 @@ mln_value_shell_SOURCES = mln_value_shell.cc
mln_value_sign_SOURCES = mln_value_sign.cc
mln_value_stack_SOURCES = mln_value_stack.cc
mln_value_super_value_SOURCES = mln_value_super_value.cc
+mln_value_value_array_SOURCES = mln_value_value_array.cc
mln_value_viter_SOURCES = mln_value_viter.cc
mln_win_all_SOURCES = mln_win_all.cc
mln_win_backdiag2d_SOURCES = mln_win_backdiag2d.cc
--
1.6.5.1
1
0
https://svn.lrde.epita.fr/svn/oln/trunk/milena/sandbox
Index: ChangeLog
from Thierry Geraud <thierry.geraud(a)lrde.epita.fr>
Add new morphological operators.
* theo/mln/morpho/reconstruction: New directory.
* theo/mln/morpho/reconstruction/by_dilation.cc: New.
* theo/mln/morpho/reconstruction/by_dilation_tiny.cc: New.
* theo/mln/morpho/reconstruction/by_dilation.hh: New.
* theo/mln/morpho/geodesic/dilation.hh: Fix layout.
Fix typo in postconditions.
* theo/mln/morpho/geodesic/dilation_permissive.hh (todo): New.
(nota): New.
(FIXME): New.
* theo/mln/morpho/max.hh: New.
* theo/mln/morpho/conditional: New directory.
* theo/mln/morpho/conditional/dilation.hh: New.
* theo/mln/morpho/conditional/dilation.cc: New.
conditional/dilation.cc | 29 +
conditional/dilation.hh | 111 +++++
geodesic/dilation.hh | 4
geodesic/dilation_permissive.hh | 17
max.hh | 59 +-
reconstruction/by_dilation.cc | 68 +++
reconstruction/by_dilation.hh | 778 +++++++++++++++++++++++++++++++++++++
reconstruction/by_dilation_tiny.cc | 71 +++
8 files changed, 1106 insertions(+), 31 deletions(-)
Index: theo/mln/morpho/reconstruction/by_dilation.cc
--- theo/mln/morpho/reconstruction/by_dilation.cc (revision 0)
+++ theo/mln/morpho/reconstruction/by_dilation.cc (revision 0)
@@ -0,0 +1,68 @@
+#include <mln/core/image/image2d.hh>
+#include <mln/core/alias/neighb2d.hh>
+#include <mln/debug/println.hh>
+#include <mln/io/pbm/load.hh>
+#include <mln/io/pbm/save.hh>
+# include <mln/util/timer.hh>
+
+#include "by_dilation.hh"
+
+
+int main()
+{
+ using namespace mln;
+
+ image2d<bool> f, g, o;
+ neighb2d nbh = c4();
+
+ io::pbm::load(f, "f_and_g.pbm");
+ io::pbm::load(g, "g.pbm");
+
+ float t_tufa, t_tufa_alt, t_tufa_fast, t_hybrid, t_hybrid_2, t_hybrid_fast;
+ util::timer t;
+
+ {
+ t.start();
+ o = morpho::reconstruction::impl::by_dilation_tufa_on_set(f, g, nbh);
+ t_tufa = t.stop();
+ }
+
+ {
+ t.start();
+ o = morpho::reconstruction::impl::by_dilation_tufa_on_set_alt(f, g, nbh);
+ t_tufa_alt = t.stop();
+ }
+
+ {
+ t.start();
+ o = morpho::reconstruction::impl::by_dilation_hybrid_on_set(f, g, nbh);
+ t_hybrid = t.stop();
+ }
+
+ {
+ t.start();
+ o = morpho::reconstruction::impl::by_dilation_hybrid_on_set__two_loops(f, g, nbh);
+ t_hybrid_2 = t.stop();
+ }
+
+ {
+ t.start();
+ o = morpho::reconstruction::impl::by_dilation_tufa_on_set_fastest(f, g, nbh);
+ t_tufa_fast = t.stop();
+ }
+
+ {
+ t.start();
+ o = morpho::reconstruction::impl::by_dilation_hybrid_on_set_fastest(f, g, nbh);
+ t_hybrid_fast = t.stop();
+ }
+
+ std::cout << "tufa " << t_tufa << std::endl
+ << "tufa_alt " << t_tufa_alt << std::endl
+ << "hybrid " << t_hybrid << std::endl
+ << "hybrid two loops " << t_hybrid_2 << std::endl
+ << "tufa_fast " << t_tufa_fast << std::endl
+ << "hybrid_fast " << t_hybrid_fast << std::endl;
+
+ io::pbm::save(o, "o.pbm");
+}
Index: theo/mln/morpho/reconstruction/by_dilation_tiny.cc
--- theo/mln/morpho/reconstruction/by_dilation_tiny.cc (revision 0)
+++ theo/mln/morpho/reconstruction/by_dilation_tiny.cc (revision 0)
@@ -0,0 +1,71 @@
+#include <mln/core/image/image2d.hh>
+#include <mln/core/alias/neighb2d.hh>
+#include <mln/debug/println.hh>
+#include <mln/io/pbm/load.hh>
+#include <mln/io/pbm/save.hh>
+
+#include "by_dilation.hh"
+
+
+int main()
+{
+ using namespace mln;
+
+ image2d<bool> f, g, o;
+ neighb2d nbh = c4();
+
+ bool gvals[9][5] = { { 0, 1, 1, 1, 0 },
+ { 0, 0, 0, 1, 0 },
+ { 0, 1, 1, 1, 0 },
+ { 0, 1, 0, 0, 0 },
+ { 0, 1, 1, 1, 0 },
+ { 0, 0, 0, 1, 0 },
+ { 0, 1, 1, 1, 0 },
+ { 0, 1, 0, 0, 0 },
+ { 0, 1, 1, 1, 0 } };
+ g = make::image(gvals);
+ debug::println("g", g);
+
+ bool fvals[9][5] = { { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 1, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 } };
+ f = make::image(fvals);
+ debug::println("f", f);
+
+ o = morpho::reconstruction::impl::by_dilation_hybrid_on_set_fastest(f, g, nbh);
+}
+
+
+
+
+/*
+ bool gvals[9][5] = { { 0, 0, 0, 0, 0 },
+ { 0, 1, 1, 0, 0 },
+ { 0, 1, 0, 0, 0 },
+ { 0, 1, 1, 1, 0 },
+ { 0, 0, 0, 1, 0 },
+ { 0, 1, 1, 1, 0 },
+ { 0, 1, 0, 0, 0 },
+ { 0, 1, 1, 1, 0 },
+ { 0, 0, 0, 0, 0 } };
+ g = make::image(gvals);
+ debug::println("g", g);
+
+ bool fvals[9][5] = { { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 1, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0 } };
+ f = make::image(fvals);
+ debug::println("f", f);
+*/
Index: theo/mln/morpho/reconstruction/by_dilation.hh
--- theo/mln/morpho/reconstruction/by_dilation.hh (revision 0)
+++ theo/mln/morpho/reconstruction/by_dilation.hh (revision 0)
@@ -0,0 +1,778 @@
+// Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of Olena.
+//
+// Olena is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation, version 2 of the License.
+//
+// Olena is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Olena. If not, see <http://www.gnu.org/licenses/>.
+//
+// As a special exception, you may use this file as part of a free
+// software project without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to produce
+// an executable, this file does not by itself cause the resulting
+// executable to be covered by the GNU General Public License. This
+// exception does not however invalidate any other reasons why the
+// executable file might be covered by the GNU General Public License.
+
+#ifndef MLN_MORPHO_RECONSTRUCTION_BY_DILATION_HH
+# define MLN_MORPHO_RECONSTRUCTION_BY_DILATION_HH
+
+# include <mln/core/concept/image.hh>
+# include <mln/core/concept/neighborhood.hh>
+# include <mln/data/fill.hh>
+# include <mln/data/compare.hh>
+# include <mln/border/equalize.hh>
+# include <mln/border/fill.hh>
+
+# include <mln/core/site_set/p_queue.hh>
+# include <mln/debug/println.hh>
+
+
+
+namespace mln
+{
+
+ namespace morpho
+ {
+
+ namespace reconstruction
+ {
+
+ template <typename I, typename J, typename N>
+ mln_concrete(I)
+ by_dilation(const Image<I>& f, const Image<J>& g,
+ const Neighborhood<N>& nbh);
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+
+ // Tests.
+
+ namespace internal
+ {
+
+ template <typename I, typename J, typename N>
+ inline
+ void
+ by_dilation_tests(const Image<I>& f_, const Image<J>& g_,
+ const Neighborhood<N>& nbh_)
+ {
+ const I& f = exact(f_);
+ const J& g = exact(g_);
+ const N& nbh = exact(nbh_);
+
+ mln_precondition(f.is_valid());
+ mln_precondition(g.is_valid());
+ mln_precondition(nbh.is_valid());
+
+ mln_precondition(f.domain() == g.domain()); // FIXME: Relax?
+ mln_precondition(f <= g);
+
+ // mlc_equal(mln_value(I), mln_value(J))::check(); // FIXME: Too strong!
+ // FIXME: Also check that we have a total ordering for values.
+
+ (void) f;
+ (void) g;
+ (void) nbh;
+ }
+
+
+
+ template <typename Par>
+ inline
+ mln_site(Par) find_root(Par& parent, mln_site(Par) x)
+ {
+ if (parent(x) == x)
+ return x;
+ else
+ return parent(x) = find_root(parent, parent(x));
+ }
+
+ template <typename Par>
+ inline
+ unsigned find_root_fastest(Par& parent, unsigned x)
+ {
+ if (parent.element(x) == x)
+ return x;
+ else
+ return parent.element(x) = find_root_fastest(parent, parent.element(x));
+ }
+
+ } // end of namespace mln::morpho::reconstruction::internal
+
+
+
+ // Implementations.
+
+ namespace impl
+ {
+
+
+ template <typename I, typename J, typename N>
+ inline
+ mln_concrete(I)
+ by_dilation_tufa_on_set(const Image<I>& f_, const Image<J>& g_,
+ const Neighborhood<N>& nbh_)
+ {
+ trace::entering("morpho::reconstruction::impl::by_dilation_tufa_on_set");
+
+ const I& f = exact(f_);
+ const J& g = exact(g_);
+ const N& nbh = exact(nbh_);
+
+ internal::by_dilation_tests(f, g, nbh);
+
+ typedef mln_site(I) P;
+ typedef mln_value(I) V;
+
+ // Auxiliary data.
+ mln_ch_value(I, bool) deja_vu;
+ mln_ch_value(I, P) parent;
+ mln_concrete(I) output;
+
+ // Initialization.
+ {
+ initialize(parent, f);
+ initialize(deja_vu, f);
+ initialize(output, f);
+
+ data::fill(deja_vu, false);
+ data::fill(output, false);
+ }
+
+ // First pass.
+ {
+ mln_fwd_piter(I) p(f.domain());
+ mln_niter(N) n(nbh, p);
+ for_all(p)
+ if (g(p)) // <- D'
+ {
+ // Make-Set.
+ parent(p) = p;
+ output(p) = f(p); // <-- INIT
+
+ for_all(n) if (f.domain().has(n))
+ {
+ if (g(n) // <- D'
+ && deja_vu(n))
+ {
+ // Do-Union.
+ P r = internal::find_root(parent, n);
+ if (r != p)
+ {
+ // set_parent, i.e., union
+ parent(r) = p;
+ output(p) = output(p) || output(r); // <-- MERGE
+ }
+ }
+ else
+ ; // <-- BORDER
+ }
+ deja_vu(p) = true;
+ }
+ }
+
+ // Second pass.
+ {
+ mln_bkd_piter(I) p(f.domain());
+ for_all(p)
+ if (g(p)) // <- D'
+ if (parent(p) != p)
+ output(p) = output(parent(p));
+ }
+
+ mln_postcondition(output >= f);
+ mln_postcondition(output <= g);
+
+ trace::exiting("morpho::reconstruction::impl::by_dilation_tufa_on_set");
+ return output;
+ }
+
+
+ template <typename I, typename J, typename N>
+ inline
+ mln_concrete(I)
+ by_dilation_tufa_on_set_fastest(const Image<I>& f_, const Image<J>& g_,
+ const Neighborhood<N>& nbh_)
+ {
+ trace::entering("morpho::reconstruction::impl::by_dilation_tufa_on_set_fastest");
+
+ const I& f = exact(f_);
+ const J& g = exact(g_);
+ const N& nbh = exact(nbh_);
+
+ internal::by_dilation_tests(f, g, nbh);
+
+ typedef mln_site(I) P;
+ typedef mln_value(I) V;
+
+ // Auxiliary data.
+ mln_ch_value(I, bool) deja_vu;
+ mln_ch_value(I, unsigned) parent;
+ mln_concrete(I) output;
+
+ // Initialization.
+ {
+ border::equalize(f, g, nbh.delta());
+ border::fill(g, false);
+ initialize(parent, f);
+ initialize(output, f);
+
+ data::fill(output, false);
+ }
+
+ util::array<int> dp = negative_offsets_wrt(f, nbh);
+ const unsigned n_nbhs = dp.nelements();
+
+ // First pass.
+ {
+ mln_fwd_pixter(const I) pxl(f);
+ for_all(pxl)
+ {
+ unsigned p = pxl.offset();
+ if (g.element(p)) // <- D'
+ {
+ // Make-Set.
+ parent.element(p) = p;
+ output.element(p) = f.element(p); // <-- INIT
+
+ for (unsigned j = 0; j < n_nbhs; ++j)
+ {
+ unsigned n = p + dp[j];
+ if (g.element(n)) // <- D'
+ {
+ // Do-Union.
+ unsigned r = internal::find_root_fastest(parent, n);
+ if (r != p)
+ {
+ // set_parent, i.e., union
+ parent.element(r) = p;
+ output.element(p) = output.element(p) || output.element(r); // <-- MERGE
+ }
+ }
+ else
+ ; // <-- BORDER
+ }
+ }
+ }
+ }
+
+ // Second pass.
+ {
+ mln_bkd_pixter(const I) pxl(f);
+ for_all(pxl)
+ {
+ unsigned p = pxl.offset();
+ if (g.element(p)) // <- D'
+ if (parent.element(p) != p)
+ output.element(p) = output.element(parent.element(p));
+ }
+ }
+
+ mln_postcondition(output >= f);
+ mln_postcondition(output <= g);
+
+ trace::exiting("morpho::reconstruction::impl::by_dilation_tufa_on_set_fastest");
+ return output;
+ }
+
+
+
+
+ template <typename I, typename J, typename N>
+ inline
+ mln_concrete(I)
+ by_dilation_tufa_on_set_alt(const Image<I>& f_, const Image<J>& g_,
+ const Neighborhood<N>& nbh_)
+ {
+ trace::entering("morpho::reconstruction::impl::by_dilation_tufa_on_set_alt");
+
+ const I& f = exact(f_);
+ const J& g = exact(g_);
+ const N& nbh = exact(nbh_);
+
+ internal::by_dilation_tests(f, g, nbh);
+
+ typedef mln_site(I) P;
+ typedef mln_value(I) V;
+
+ // Auxiliary data.
+ mln_ch_value(I, bool) deja_vu;
+ mln_ch_value(I, P) parent;
+ mln_concrete(I) output;
+
+ // Initialization.
+ {
+ initialize(parent, f);
+ initialize(deja_vu, f);
+ initialize(output, f);
+
+ data::fill(deja_vu, false);
+ data::fill(output, f);
+ }
+
+ // First pass.
+ {
+ mln_fwd_piter(I) p(f.domain());
+ mln_niter(N) n(nbh, p);
+ for_all(p)
+ if (g(p) && ! f(p)) // <- D'
+ {
+ // Make-Set.
+ parent(p) = p;
+ output(p) = false; // <-- INIT
+
+ for_all(n) if (f.domain().has(n))
+ {
+ if (g(n) && ! f(n) // <- D'
+ && deja_vu(n))
+ {
+ // Do-Union.
+ P r = internal::find_root(parent, n);
+ if (r != p)
+ {
+ // set_parent, i.e., union
+ parent(r) = p;
+ output(p) = output(p) || output(r); // <-- MERGE
+ }
+ }
+ else
+ if (f(n))
+ output(p) = true; // <-- BORDER
+ }
+ deja_vu(p) = true;
+ }
+ }
+
+ // Second pass.
+ {
+ mln_bkd_piter(I) p(f.domain());
+ for_all(p)
+ if (g(p) && ! f(p)) // <- D'
+ if (parent(p) != p)
+ output(p) = output(parent(p));
+ }
+
+ mln_postcondition(output >= f);
+ mln_postcondition(output <= g);
+
+ trace::exiting("morpho::reconstruction::impl::by_dilation_tufa_on_set_alt");
+ return output;
+ }
+
+
+
+
+ template <typename I, typename J, typename N>
+ inline
+ mln_concrete(I)
+ by_dilation_hybrid_on_set(const Image<I>& f_, const Image<J>& g_,
+ const Neighborhood<N>& nbh_)
+ {
+ trace::entering("morpho::reconstruction::impl::by_dilation_hybrid_on_set");
+
+ // Both loops (just below) are merged into a single one
+ // in the implementation below. This merge results in
+ // -10% at run-time.
+
+ // // Sequence---Forth.
+ // {
+ // data::fill(deja_vu, false);
+ // mln_fwd_piter(I) p(f.domain());
+ // mln_niter(N) n(nbh, p);
+ // for_all(p)
+ // {
+ // if (g(p) && ! output(p))
+ // {
+ // for_all(n)
+ // if (f.domain().has(n) && deja_vu(n) // N+
+ // && g(n) && output(n))
+ // {
+ // output(p) = true;
+ // break;
+ // }
+ // }
+ // if (output(p))
+ // {
+ // for_all(n)
+ // if (f.domain().has(n) && deja_vu(n) // N+
+ // && output(n) == false && g(n) == true)
+ // {
+ // q.push(p);
+ // break;
+ // }
+ // }
+ // }
+ // }
+
+ const I& f = exact(f_);
+ const J& g = exact(g_);
+ const N& nbh = exact(nbh_);
+
+ internal::by_dilation_tests(f, g, nbh);
+
+ typedef mln_value(I) V;
+ typedef mln_psite(I) P;
+ p_queue<P> q;
+
+ // Initialisation.
+ mln_concrete(I) output = duplicate(f);
+ mln_ch_value(I, bool) deja_vu;
+ initialize(deja_vu, f);
+
+ // Sequence---Back.
+ {
+ data::fill(deja_vu, false);
+ mln_bkd_piter(I) p(f.domain());
+ mln_niter(N) n(nbh, p);
+ for_all(p)
+ {
+ if (g(p) && ! output(p))
+ {
+ for_all(n)
+ if (f.domain().has(n) && deja_vu(n) // N-
+ && g(n) && output(n))
+ {
+ output(p) = true;
+ break;
+ }
+ }
+ deja_vu(p) = true;
+ }
+ }
+
+ // Sequence---Forth.
+ {
+ data::fill(deja_vu, false);
+ mln_fwd_piter(I) p(f.domain());
+ mln_niter(N) n(nbh, p);
+ for_all(p)
+ {
+ if (g(p) && ! output(p))
+ {
+ bool queueable = false;
+ for_all(n)
+ if (f.domain().has(n) && deja_vu(n) // N+
+ && g(n))
+ {
+ if (output(n))
+ output(p) = true;
+ else
+ queueable = true;
+ }
+ if (output(p) && queueable)
+ q.push(p); // Need for propagation from p.
+ }
+
+ deja_vu(p) = true;
+ }
+ }
+
+ // Propagation.
+ {
+ P p;
+ mln_niter(N) n(nbh, p);
+ while (! q.is_empty())
+ {
+ p = q.pop_front();
+ mln_invariant(output(p) == true);
+ for_all(n)
+ if (f.domain().has(n)
+ && output(n) == false && g(n) == true)
+ {
+ output(n) = true;
+ q.push(n);
+ }
+ }
+ }
+
+ trace::exiting("morpho::reconstruction::impl::by_dilation_hybrid_on_set");
+ return output;
+ }
+
+
+ template <typename I, typename J, typename N>
+ inline
+ mln_concrete(I)
+ by_dilation_hybrid_on_set_fastest(const Image<I>& f_, const Image<J>& g_,
+ const Neighborhood<N>& nbh_)
+ {
+ trace::entering("morpho::reconstruction::impl::by_dilation_hybrid_on_set_fastest");
+
+ const I& f = exact(f_);
+ const J& g = exact(g_);
+ const N& nbh = exact(nbh_);
+
+ internal::by_dilation_tests(f, g, nbh);
+
+ typedef mln_value(I) V;
+ typedef mln_psite(I) P;
+ p_queue<unsigned> q;
+
+ // Initialisation.
+ border::equalize(f, g, nbh.delta());
+ mln_concrete(I) output = duplicate(f);
+
+ util::array<int> dp = negative_offsets_wrt(f, nbh);
+ unsigned n_nbhs = dp.nelements();
+
+ // Sequence---Back.
+ {
+ mln_bkd_pixter(const I) pxl(f);
+ for_all(pxl)
+ {
+ unsigned p = pxl.offset();
+ if (g.element(p) && ! output.element(p))
+ {
+ for (unsigned j = 0; j < n_nbhs; ++j)
+ {
+ unsigned n = p - dp[j]; // n in N-
+ if (g.element(n) && output.element(n))
+ {
+ output.element(p) = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // debug::println("output (back)", output);
+
+ // Sequence---Forth.
+ {
+ mln_fwd_pixter(const I) pxl(f);
+ for_all(pxl)
+ {
+ unsigned p = pxl.offset();
+ if (g.element(p) && ! output.element(p))
+ {
+ bool queueable = false;
+ for (unsigned j = 0; j < n_nbhs; ++j)
+ {
+ unsigned n = p + dp[j]; // n in N+
+ if (g.element(n))
+ {
+ if (output.element(n))
+ output.element(p) = true;
+ else
+ queueable = true;
+ }
+ }
+ if (output.element(p) && queueable)
+ q.push(p); // Need for propagation from p.
+ }
+ }
+ }
+
+ // debug::println("output (forth)", output);
+ // std::cout << q << std::endl;
+
+ // Propagation.
+ {
+ dp = offsets_wrt(f, nbh);
+ n_nbhs = dp.nelements();
+
+ unsigned p;
+ while (! q.is_empty())
+ {
+ p = q.pop_front();
+ mln_invariant(output.element(p) == true);
+ for (unsigned j = 0; j < n_nbhs; ++j)
+ {
+ unsigned n = p + dp[j]; // n in N
+ if (output.element(n) == false && g.element(n) == true)
+ {
+ output.element(n) = true;
+ q.push(n);
+ }
+ }
+ }
+ }
+
+ // debug::println("output (propag)", output);
+
+ trace::exiting("morpho::reconstruction::impl::by_dilation_hybrid_on_set_fastest");
+ return output;
+ }
+
+
+
+
+
+
+
+ template <typename I, typename J, typename N>
+ inline
+ mln_concrete(I)
+ by_dilation_hybrid_on_set__two_loops(const Image<I>& f_, const Image<J>& g_,
+ const Neighborhood<N>& nbh_)
+ {
+ trace::entering("morpho::reconstruction::impl::by_dilation_hybrid_on_set__two_loops");
+
+ const I& f = exact(f_);
+ const J& g = exact(g_);
+ const N& nbh = exact(nbh_);
+
+ internal::by_dilation_tests(f, g, nbh);
+
+ typedef mln_value(I) V;
+ typedef mln_psite(I) P;
+ p_queue<P> q;
+
+ // Initialisation.
+ mln_concrete(I) output = duplicate(f);
+ mln_ch_value(I, bool) deja_vu;
+ initialize(deja_vu, f);
+
+ // Sequence---Back.
+ {
+ data::fill(deja_vu, false);
+ mln_bkd_piter(I) p(f.domain());
+ mln_niter(N) n(nbh, p);
+ for_all(p)
+ {
+ if (g(p) && ! output(p))
+ {
+ for_all(n)
+ if (f.domain().has(n) && deja_vu(n) // N-
+ && g(n) && output(n))
+ {
+ output(p) = true;
+ break;
+ }
+ }
+ deja_vu(p) = true;
+ }
+ }
+
+
+ // Sequence---Forth.
+ {
+ data::fill(deja_vu, false);
+ mln_fwd_piter(I) p(f.domain());
+ mln_niter(N) n(nbh, p);
+ for_all(p)
+ {
+ if (g(p) && ! output(p))
+ {
+ for_all(n)
+ if (f.domain().has(n) && deja_vu(n) // N+
+ && g(n) && output(n))
+ {
+ output(p) = true;
+ break;
+ }
+ }
+ if (output(p))
+ {
+ for_all(n)
+ if (f.domain().has(n) && deja_vu(n) // N+
+ && output(n) == false && g(n) == true)
+ {
+ q.push(p);
+ break;
+ }
+ }
+ }
+ }
+
+
+ // Propagation.
+ {
+ P p;
+ mln_niter(N) n(nbh, p);
+ while (! q.is_empty())
+ {
+ p = q.pop_front();
+ mln_invariant(output(p) == true);
+ for_all(n)
+ if (f.domain().has(n)
+ && output(n) == false && g(n) == true)
+ {
+ output(n) = true;
+ q.push(n);
+ }
+ }
+ }
+
+ trace::exiting("morpho::reconstruction::impl::by_dilation_hybrid_on_set__two_loops");
+ return output;
+ }
+
+
+
+
+
+
+ } // end of namespace mln::morpho::reconstruction::impl
+
+
+
+ // Dispatch.
+
+ namespace internal
+ {
+
+ template <typename I, typename J, typename N>
+ inline
+ mln_concrete(I)
+ by_dilation_dispatch(trait::image::kind::logic,
+ const Image<I>& f, const Image<J>& g,
+ const Neighborhood<N>& nbh)
+ {
+ return impl::by_dilation_tufa_on_set(f, g, nbh); // FIXME
+ }
+
+ template <typename I, typename J, typename N>
+ inline
+ mln_concrete(I)
+ by_dilation_dispatch(const Image<I>& f, const Image<J>& g,
+ const Neighborhood<N>& nbh)
+ {
+ return by_dilation_dispatch(mln_trait_image_kind(I)(),
+ f, g, nbh);
+ }
+
+ } // end of namespace mln::morpho::reconstruction::internal
+
+
+ // Facade.
+
+ template <typename I, typename J, typename N>
+ inline
+ mln_concrete(I)
+ by_dilation(const Image<I>& f, const Image<J>& g,
+ const Neighborhood<N>& nbh)
+ {
+ trace::entering("morpho::reconstruction::by_dilation");
+
+ internal::by_dilation_tests(f, g, nbh);
+
+ mln_concrete(I) output;
+ output = internal::by_dilation_dispatch(f, g, nbh);
+
+ trace::exiting("morpho::reconstruction::by_dilation");
+ return output;
+ }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::morpho::reconstruction
+
+ } // end of namespace mln::morpho
+
+} // end of namespace mln
+
+
+#endif // ! MLN_MORPHO_RECONSTRUCTION_BY_DILATION_HH
Index: theo/mln/morpho/geodesic/dilation.hh
--- theo/mln/morpho/geodesic/dilation.hh (revision 4638)
+++ theo/mln/morpho/geodesic/dilation.hh (working copy)
@@ -69,8 +69,8 @@
mln_concrete(I) output;
output = internal::dilation_permissive_dispatch(f, g, nbh, n);
- mln_precondition(output >= f);
- mln_precondition(output <= g);
+ mln_postcondition(output >= f);
+ mln_postcondition(output <= g);
trace::exiting("morpho::geodesic::dilation");
return output;
Index: theo/mln/morpho/geodesic/dilation_permissive.hh
--- theo/mln/morpho/geodesic/dilation_permissive.hh (revision 4638)
+++ theo/mln/morpho/geodesic/dilation_permissive.hh (working copy)
@@ -29,6 +29,13 @@
/// \file
///
/// Morphological geodesic dilation; permissive version.
+///
+/// \todo We should add some other implementations for size n > 1. We
+/// have the iterative version (dilation_permissive_n); we should also
+/// have at least the front-base version...
+///
+/// \todo We should use a point-wise morpho::sup instead of
+/// fun::vv2v::max.
# include <mln/morpho/includes.hh>
# include <mln/morpho/elementary/dilation.hh>
@@ -54,6 +61,9 @@
const Neighborhood<N>& nbh,
unsigned n = 1);
+ // Nota bene : We have
+ // dilation permissive (f, g) = dilation strict (f inter g, g) union (f and not g).
+
# ifndef MLN_INCLUDE_ONLY
@@ -429,6 +439,13 @@
mln_concrete(I) output;
output = internal::dilation_permissive_dispatch(f, g, nbh, n);
+ mln_postcondition(output >= f);
+
+ // FIXME: Is the post-condition bellow correct and sufficient?
+ // mln_postcondition(morpho::minus(output, f) <= g);
+ // FIXME: What about this other one below?
+ // mln_postcondition(output <= morpho::max(f, g));
+
trace::exiting("morpho::geodesic::dilation_permissive");
return output;
}
Index: theo/mln/morpho/max.hh
--- theo/mln/morpho/max.hh (revision 4636)
+++ theo/mln/morpho/max.hh (working copy)
@@ -23,19 +23,20 @@
// exception does not however invalidate any other reasons why the
// executable file might be covered by the GNU General Public License.
-#ifndef MLN_MORPHO_MIN_HH
-# define MLN_MORPHO_MIN_HH
+#ifndef MLN_MORPHO_MAX_HH
+# define MLN_MORPHO_MAX_HH
/*!
* \file
*
- * \brief Definition of a function that make a min
- * (logical and or arithmetical min) of an image.
+ * \brief Definition of a function that performs a point-wise operator
+ * on a couple of images: a logical 'or' in the case of binary images
+ * (sets), a 'max' otherwise (functions).
*/
# include <mln/data/compare.hh>
-# include <mln/logical/and.hh>
-# include <mln/arith/min.hh>
+# include <mln/logical/or.hh>
+# include <mln/arith/max.hh>
namespace mln
@@ -44,20 +45,20 @@
namespace morpho
{
- /*! Morphological min: either a logical "and" (if morpho on sets)
- * or an arithmetical min (if morpho on functions).
+ /*! Morphological max: either a logical "or" (if morpho on sets)
+ * or an arithmetical max (if morpho on functions).
*/
template <typename I, typename J>
mln_concrete(I)
- min(const Image<I>& lhs, const Image<J>& rhs);
+ max(const Image<I>& lhs, const Image<J>& rhs);
- /*! Morphological min, inplace version: either a logical "and" (if
- * morpho on sets) or an arithmetical min (if morpho on
+ /*! Morphological max, inplace version: either a logical "or" (if
+ * morpho on sets) or an arithmetical max (if morpho on
* functions).
*/
template <typename I, typename J>
- void min_inplace(Image<I>& lhs, const Image<J>& rhs);
+ void max_inplace(Image<I>& lhs, const Image<J>& rhs);
# ifndef MLN_INCLUDE_ONLY
@@ -69,36 +70,36 @@
template <typename I, typename J, typename O>
inline
- mln_concrete(I) min_(trait::image::kind::logic,
+ mln_concrete(I) max_(trait::image::kind::logic,
const I& lhs, const J& rhs)
{
- return logical::and_(lhs, rhs);
+ return logical::or_(lhs, rhs);
}
template <typename I, typename J>
inline
- void min_inplace_(trait::image::kind::logic,
+ void max_inplace_(trait::image::kind::logic,
I& lhs, const J& rhs)
{
- logical::and_inplace(lhs, rhs);
+ logical::or_inplace(lhs, rhs);
}
// Otherwise => morphology on functions.
template <typename I, typename J>
inline
- mln_concrete(I) min_(trait::image::kind::any,
+ mln_concrete(I) max_(trait::image::kind::any,
const I& lhs, const J& rhs)
{
- return arith::min(lhs, rhs);
+ return arith::max(lhs, rhs);
}
template <typename I, typename J>
inline
- void min_inplace_(trait::image::kind::any,
+ void max_inplace_(trait::image::kind::any,
I& lhs, const J& rhs)
{
- arith::min_inplace(lhs, rhs);
+ arith::max_inplace(lhs, rhs);
}
} // end of namespace mln::morpho::impl
@@ -109,27 +110,27 @@
template <typename I, typename J>
inline
mln_concrete(I)
- min(const Image<I>& lhs, const Image<J>& rhs)
+ max(const Image<I>& lhs, const Image<J>& rhs)
{
- trace::entering("morpho::min");
+ trace::entering("morpho::max");
mln_precondition(exact(rhs).domain() == exact(lhs).domain());
- mln_concrete(I) output = impl::min_(mln_trait_image_kind(I)(), exact(lhs), exact(rhs));
+ mln_concrete(I) output = impl::max_(mln_trait_image_kind(I)(), exact(lhs), exact(rhs));
- trace::exiting("morpho::min");
+ trace::exiting("morpho::max");
return output;
}
template <typename I, typename J>
inline
- void min_inplace(Image<I>& lhs, const Image<J>& rhs)
+ void max_inplace(Image<I>& lhs, const Image<J>& rhs)
{
- trace::entering("morpho::min_inplace");
+ trace::entering("morpho::max_inplace");
mln_precondition(exact(rhs).domain() == exact(lhs).domain());
- impl::min_inplace_(mln_trait_image_kind(I)(), exact(lhs), exact(rhs));
+ impl::max_inplace_(mln_trait_image_kind(I)(), exact(lhs), exact(rhs));
- trace::exiting("morpho::min_inplace_");
+ trace::exiting("morpho::max_inplace_");
}
# endif // ! MLN_INCLUDE_ONLY
@@ -139,4 +140,4 @@
} // end of namespace mln
-#endif // ! MLN_MORPHO_MIN_HH
+#endif // ! MLN_MORPHO_MAX_HH
Property changes on: theo/mln/morpho/max.hh
___________________________________________________________________
Added: svn:mergeinfo
Index: theo/mln/morpho/conditional/dilation.hh
--- theo/mln/morpho/conditional/dilation.hh (revision 0)
+++ theo/mln/morpho/conditional/dilation.hh (revision 0)
@@ -0,0 +1,111 @@
+// Copyright (C) 2009 EPITA Research and Development Laboratory (LRDE)
+//
+// This file is part of Olena.
+//
+// Olena is free software: you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation, version 2 of the License.
+//
+// Olena is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Olena. If not, see <http://www.gnu.org/licenses/>.
+//
+// As a special exception, you may use this file as part of a free
+// software project without restriction. Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to produce
+// an executable, this file does not by itself cause the resulting
+// executable to be covered by the GNU General Public License. This
+// exception does not however invalidate any other reasons why the
+// executable file might be covered by the GNU General Public License.
+
+#ifndef MLN_MORPHO_CONDITIONAL_DILATION_HH
+# define MLN_MORPHO_CONDITIONAL_DILATION_HH
+
+/// \file
+///
+/// Morphological conditional dilation.
+///
+/// \todo Write a version with (f, g, nbh, n) instead of (f, g, win).
+
+# include <mln/morpho/includes.hh>
+
+
+namespace mln
+{
+
+ namespace morpho
+ {
+
+ namespace conditional
+ {
+
+ /// Morphological conditional dilation.
+ template <typename I, typename J, typename W>
+ mln_concrete(I)
+ dilation(const Image<I>& f, const Image<J>& g,
+ const Window<W>& win);
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+
+ // Tests.
+
+ namespace internal
+ {
+
+ template <typename I, typename J, typename W>
+ inline
+ void
+ dilation_tests(const Image<I>& f_, const Image<J>& g_,
+ const Window<W>& win_)
+ {
+ const I& f = exact(f_);
+ const J& g = exact(g_);
+ const W& win = exact(win_);
+
+ mln_precondition(f.is_valid());
+ mln_precondition(g.is_valid());
+ mln_precondition(win.is_valid());
+
+ mln_precondition(f.domain() == g.domain());
+
+ (void) f;
+ (void) g;
+ (void) win;
+ }
+
+ } // end of namespace morpho::conditional::internal
+
+
+ template <typename I, typename J, typename W>
+ inline
+ mln_concrete(I)
+ dilation(const Image<I>& f, const Image<J>& g,
+ const Window<W>& win)
+ {
+ trace::entering("morpho::conditional::dilation");
+
+ internal::dilation_tests(f, g, win);
+
+ mln_concrete(I) output = morpho::min(morpho::dilation(f, win), g);
+
+ trace::exiting("morpho::conditional::dilation");
+ return output;
+ }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::conditional
+
+ } // end of namespace mln::morpho
+
+} // end of namespace mln
+
+
+#endif // ! MLN_MORPHO_CONDITIONAL_DILATION_HH
Index: theo/mln/morpho/conditional/dilation.cc
--- theo/mln/morpho/conditional/dilation.cc (revision 0)
+++ theo/mln/morpho/conditional/dilation.cc (revision 0)
@@ -0,0 +1,29 @@
+#include <mln/core/image/image2d.hh>
+#include <mln/core/alias/neighb2d.hh>
+#include <mln/logical/and.hh>
+
+#include "dilation.hh"
+
+
+int main()
+{
+ using namespace mln;
+
+ image2d<bool> f, g, o;
+
+ bool gvals[] = { 1, 1, 0, 0, 1,
+ 1, 1, 1, 1, 0,
+ 0, 1, 1, 1, 0,
+ 0, 1, 1, 1, 0,
+ 0, 1, 0, 0, 0 };
+ g = make::image2d(gvals);
+
+ bool fvals[] = { 0, 0, 0, 0, 0,
+ 0, 0, 1, 1, 1,
+ 1, 1, 1, 1, 0,
+ 1, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0 };
+ f = make::image2d(fvals);
+
+ o = morpho::conditional::dilation(f, g, c4().win());
+}
1
0

19 Oct '09
* apps/constrained-connectivity/constrained-connectivity.cc (main):
s/input.pbm/input.pgm/.
---
milena/ChangeLog | 7 +++++++
.../constrained-connectivity.cc | 2 +-
2 files changed, 8 insertions(+), 1 deletions(-)
diff --git a/milena/ChangeLog b/milena/ChangeLog
index acca698..239c5b0 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,12 @@
2009-09-24 Roland Levillain <roland(a)lrde.epita.fr>
+ Fix usage message of apps/constrained-connectivity.
+
+ * apps/constrained-connectivity/constrained-connectivity.cc (main):
+ s/input.pbm/input.pgm/.
+
+2009-09-24 Roland Levillain <roland(a)lrde.epita.fr>
+
Re-enable the test on constrained connectivity.
* apps/constrained-connectivity/test-constrained-connectivity.in:
diff --git a/milena/apps/constrained-connectivity/constrained-connectivity.cc b/milena/apps/constrained-connectivity/constrained-connectivity.cc
index 59009b7..3dab1dc 100644
--- a/milena/apps/constrained-connectivity/constrained-connectivity.cc
+++ b/milena/apps/constrained-connectivity/constrained-connectivity.cc
@@ -92,7 +92,7 @@ int main(int argc, char* argv[])
{
if (argc != 2)
{
- std::cerr << "Usage: " << argv[0] << " input.pbm" << std::endl;
+ std::cerr << "Usage: " << argv[0] << " input.pgm" << std::endl;
std::exit(1);
}
--
1.6.4.4
1
0

19 Oct '09
* roland/constrained-connectivity.cc (main): s/e2c/e2v/.
---
milena/sandbox/ChangeLog | 6 ++++++
milena/sandbox/roland/constrained-connectivity.cc | 2 +-
2 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/milena/sandbox/ChangeLog b/milena/sandbox/ChangeLog
index 52e6334..d087c07 100644
--- a/milena/sandbox/ChangeLog
+++ b/milena/sandbox/ChangeLog
@@ -1,5 +1,11 @@
2009-09-24 Roland Levillain <roland(a)lrde.epita.fr>
+ Catch up with new 2D inter-pixel neighborhoods names.
+
+ * roland/constrained-connectivity.cc (main): s/e2c/e2v/.
+
+2009-09-24 Roland Levillain <roland(a)lrde.epita.fr>
+
Stop using cplx2d.hh in the constrained connectivity prototype.
* roland/constrained-connectivity.cc: Here.
diff --git a/milena/sandbox/roland/constrained-connectivity.cc b/milena/sandbox/roland/constrained-connectivity.cc
index fb14d2c..7dee1d6 100644
--- a/milena/sandbox/roland/constrained-connectivity.cc
+++ b/milena/sandbox/roland/constrained-connectivity.cc
@@ -184,7 +184,7 @@ int main(int argc, char* argv[])
equivalent in F's domain to get the values on vertices. */
mln_piter_(w_t) e(w.domain());
mln_niter_(world::inter_pixel::dbl_neighb2d)
- v_g(world::inter_pixel::e2c(), e);
+ v_g(world::inter_pixel::e2v(), e);
for_all(e)
for_all(v_g)
{
--
1.6.4.4
1
0

19 Oct '09
* apps/constrained-connectivity/test-constrained-connectivity.in:
New.
* apps/constrained-connectivity/Makefile.am (TESTS): New.
Add test-constrained-connectivity.
---
milena/ChangeLog | 9 +++++++++
milena/apps/constrained-connectivity/Makefile.am | 2 ++
.../test-constrained-connectivity.in | 7 +++++++
3 files changed, 18 insertions(+), 0 deletions(-)
create mode 100644 milena/apps/constrained-connectivity/test-constrained-connectivity.in
diff --git a/milena/ChangeLog b/milena/ChangeLog
index 17cd2c7..acca698 100644
--- a/milena/ChangeLog
+++ b/milena/ChangeLog
@@ -1,5 +1,14 @@
2009-09-24 Roland Levillain <roland(a)lrde.epita.fr>
+ Re-enable the test on constrained connectivity.
+
+ * apps/constrained-connectivity/test-constrained-connectivity.in:
+ New.
+ * apps/constrained-connectivity/Makefile.am (TESTS): New.
+ Add test-constrained-connectivity.
+
+2009-09-24 Roland Levillain <roland(a)lrde.epita.fr>
+
Move the experiment on constrained connectivity out of my sandbox.
* apps/constrained-connectivity/: New directory.
diff --git a/milena/apps/constrained-connectivity/Makefile.am b/milena/apps/constrained-connectivity/Makefile.am
index e27a18e..84a6ed2 100644
--- a/milena/apps/constrained-connectivity/Makefile.am
+++ b/milena/apps/constrained-connectivity/Makefile.am
@@ -23,5 +23,7 @@ AM_CXXFLAGS = $(APPS_CXXFLAGS)
noinst_PROGRAMS = constrained-connectivity
constrained_connectivity_SOURCES = constrained-connectivity.cc
+TESTS = test-constrained-connectivity
+
# The sample image form Pierre Soille's PAMI 2008 article.
EXTRA_DIST = soille.pgm
diff --git a/milena/apps/constrained-connectivity/test-constrained-connectivity.in b/milena/apps/constrained-connectivity/test-constrained-connectivity.in
new file mode 100644
index 0000000..5d8d89c
--- /dev/null
+++ b/milena/apps/constrained-connectivity/test-constrained-connectivity.in
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+set -ex
+
+srcdir="@top_srcdir@/milena/apps/constrained-connectivity"
+
+time ./constrained-connectivity "$srcdir/soille.pgm"
--
1.6.4.4
1
0