LRE
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
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
List overview
Download
Olena-patches
October 2009
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
olena-patches@lrde.epita.fr
7 participants
111 discussions
Start a n
N
ew thread
4676: Small fixes.
by Guillaume Lazzara
* 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
15 years, 1 month
1
0
0
0
4675: lazzara/fonctionnalites_milena.ods: Add a document listing Milena's features.
by Guillaume Lazzara
--- 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
15 years, 1 month
1
0
0
0
4674: Send dyn patches to the olena-patches mailing list.
by Roland Levillain
* 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
15 years, 1 month
1
0
0
0
[PATCH 01/32] Import dynamic-use-of-static-c++.
by Roland Levillain
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
15 years, 1 month
1
31
0
0
[PATCH 2/2] headers.mk, tests/unit_test/unit-tests.mk: Regen.
by Roland Levillain
--- 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
15 years, 1 month
1
0
0
0
[PATCH 1/2] Regen Makefile helpers.
by Roland Levillain
* 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
15 years, 1 month
1
0
0
0
4639: Add new morphological operators.
by Thierry Geraud
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()); +}
15 years, 2 months
1
0
0
0
[PATCH 6/6] Fix usage message of apps/constrained-connectivity.
by Roland Levillain
* 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
15 years, 2 months
1
0
0
0
[PATCH 6/7] Catch up with new 2D inter-pixel neighborhoods names.
by Roland Levillain
* 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
15 years, 2 months
1
0
0
0
[PATCH 4/6] Re-enable the test on constrained connectivity.
by Roland Levillain
* 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
15 years, 2 months
1
0
0
0
← Newer
1
2
3
4
5
6
7
8
9
...
12
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
Results per page:
10
25
50
100
200