Boost logo

Boost-Commit :

From: daniel_james_at_[hidden]
Date: 2008-01-21 15:16:26


Author: danieljames
Date: 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
New Revision: 42905
URL: http://svn.boost.org/trac/boost/changeset/42905

Log:
Merge.
Added:
   branches/fix-links/boost/accumulators/
      - copied from r42899, /trunk/boost/accumulators/
   branches/fix-links/boost/accumulators/accumulators.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/accumulators.hpp
   branches/fix-links/boost/accumulators/accumulators_fwd.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/accumulators_fwd.hpp
   branches/fix-links/boost/accumulators/framework/
      - copied from r42899, /trunk/boost/accumulators/framework/
   branches/fix-links/boost/accumulators/framework/accumulator_base.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/accumulator_base.hpp
   branches/fix-links/boost/accumulators/framework/accumulator_concept.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/accumulator_concept.hpp
   branches/fix-links/boost/accumulators/framework/accumulator_set.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/accumulator_set.hpp
   branches/fix-links/boost/accumulators/framework/accumulators/
      - copied from r42899, /trunk/boost/accumulators/framework/accumulators/
   branches/fix-links/boost/accumulators/framework/accumulators/droppable_accumulator.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/accumulators/droppable_accumulator.hpp
   branches/fix-links/boost/accumulators/framework/accumulators/external_accumulator.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/accumulators/external_accumulator.hpp
   branches/fix-links/boost/accumulators/framework/accumulators/reference_accumulator.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/accumulators/reference_accumulator.hpp
   branches/fix-links/boost/accumulators/framework/accumulators/value_accumulator.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/accumulators/value_accumulator.hpp
   branches/fix-links/boost/accumulators/framework/depends_on.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/depends_on.hpp
   branches/fix-links/boost/accumulators/framework/external.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/external.hpp
   branches/fix-links/boost/accumulators/framework/extractor.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/extractor.hpp
   branches/fix-links/boost/accumulators/framework/features.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/features.hpp
   branches/fix-links/boost/accumulators/framework/parameters/
      - copied from r42899, /trunk/boost/accumulators/framework/parameters/
   branches/fix-links/boost/accumulators/framework/parameters/accumulator.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/parameters/accumulator.hpp
   branches/fix-links/boost/accumulators/framework/parameters/sample.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/parameters/sample.hpp
   branches/fix-links/boost/accumulators/framework/parameters/weight.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/parameters/weight.hpp
   branches/fix-links/boost/accumulators/framework/parameters/weights.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/framework/parameters/weights.hpp
   branches/fix-links/boost/accumulators/numeric/
      - copied from r42899, /trunk/boost/accumulators/numeric/
   branches/fix-links/boost/accumulators/numeric/detail/
      - copied from r42899, /trunk/boost/accumulators/numeric/detail/
   branches/fix-links/boost/accumulators/numeric/detail/function1.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/detail/function1.hpp
   branches/fix-links/boost/accumulators/numeric/detail/function2.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/detail/function2.hpp
   branches/fix-links/boost/accumulators/numeric/detail/function3.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/detail/function3.hpp
   branches/fix-links/boost/accumulators/numeric/detail/function4.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/detail/function4.hpp
   branches/fix-links/boost/accumulators/numeric/detail/function_n.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/detail/function_n.hpp
   branches/fix-links/boost/accumulators/numeric/detail/pod_singleton.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/detail/pod_singleton.hpp
   branches/fix-links/boost/accumulators/numeric/functional/
      - copied from r42899, /trunk/boost/accumulators/numeric/functional/
   branches/fix-links/boost/accumulators/numeric/functional.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/functional.hpp
   branches/fix-links/boost/accumulators/numeric/functional/complex.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/functional/complex.hpp
   branches/fix-links/boost/accumulators/numeric/functional/valarray.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/functional/valarray.hpp
   branches/fix-links/boost/accumulators/numeric/functional/vector.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/functional/vector.hpp
   branches/fix-links/boost/accumulators/numeric/functional_fwd.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/numeric/functional_fwd.hpp
   branches/fix-links/boost/accumulators/statistics/
      - copied from r42899, /trunk/boost/accumulators/statistics/
   branches/fix-links/boost/accumulators/statistics.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics.hpp
   branches/fix-links/boost/accumulators/statistics/count.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/count.hpp
   branches/fix-links/boost/accumulators/statistics/covariance.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/covariance.hpp
   branches/fix-links/boost/accumulators/statistics/density.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/density.hpp
   branches/fix-links/boost/accumulators/statistics/error_of.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/error_of.hpp
   branches/fix-links/boost/accumulators/statistics/error_of_mean.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/error_of_mean.hpp
   branches/fix-links/boost/accumulators/statistics/extended_p_square.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/extended_p_square.hpp
   branches/fix-links/boost/accumulators/statistics/extended_p_square_quantile.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/extended_p_square_quantile.hpp
   branches/fix-links/boost/accumulators/statistics/kurtosis.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/kurtosis.hpp
   branches/fix-links/boost/accumulators/statistics/max.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/max.hpp
   branches/fix-links/boost/accumulators/statistics/mean.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/mean.hpp
   branches/fix-links/boost/accumulators/statistics/median.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/median.hpp
   branches/fix-links/boost/accumulators/statistics/min.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/min.hpp
   branches/fix-links/boost/accumulators/statistics/moment.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/moment.hpp
   branches/fix-links/boost/accumulators/statistics/p_square_cumulative_distribution.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/p_square_cumulative_distribution.hpp
   branches/fix-links/boost/accumulators/statistics/p_square_quantile.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/p_square_quantile.hpp
   branches/fix-links/boost/accumulators/statistics/parameters/
      - copied from r42899, /trunk/boost/accumulators/statistics/parameters/
   branches/fix-links/boost/accumulators/statistics/parameters/quantile_probability.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/parameters/quantile_probability.hpp
   branches/fix-links/boost/accumulators/statistics/peaks_over_threshold.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/peaks_over_threshold.hpp
   branches/fix-links/boost/accumulators/statistics/pot_quantile.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/pot_quantile.hpp
   branches/fix-links/boost/accumulators/statistics/pot_tail_mean.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/pot_tail_mean.hpp
   branches/fix-links/boost/accumulators/statistics/skewness.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/skewness.hpp
   branches/fix-links/boost/accumulators/statistics/stats.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/stats.hpp
   branches/fix-links/boost/accumulators/statistics/sum.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/sum.hpp
   branches/fix-links/boost/accumulators/statistics/tail.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/tail.hpp
   branches/fix-links/boost/accumulators/statistics/tail_mean.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/tail_mean.hpp
   branches/fix-links/boost/accumulators/statistics/tail_quantile.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/tail_quantile.hpp
   branches/fix-links/boost/accumulators/statistics/tail_variate.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/tail_variate.hpp
   branches/fix-links/boost/accumulators/statistics/tail_variate_means.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/tail_variate_means.hpp
   branches/fix-links/boost/accumulators/statistics/times2_iterator.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/times2_iterator.hpp
   branches/fix-links/boost/accumulators/statistics/variance.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/variance.hpp
   branches/fix-links/boost/accumulators/statistics/variates/
      - copied from r42899, /trunk/boost/accumulators/statistics/variates/
   branches/fix-links/boost/accumulators/statistics/variates/covariate.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/variates/covariate.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_covariance.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_covariance.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_density.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_density.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_extended_p_square.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_extended_p_square.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_kurtosis.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_kurtosis.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_mean.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_mean.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_median.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_median.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_moment.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_moment.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_p_square_quantile.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_p_square_quantile.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_peaks_over_threshold.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_skewness.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_skewness.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_sum.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_sum.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_tail_mean.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_tail_mean.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_tail_quantile.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_tail_quantile.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_tail_variate_means.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_tail_variate_means.hpp
   branches/fix-links/boost/accumulators/statistics/weighted_variance.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/weighted_variance.hpp
   branches/fix-links/boost/accumulators/statistics/with_error.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics/with_error.hpp
   branches/fix-links/boost/accumulators/statistics_fwd.hpp
      - copied unchanged from r42899, /trunk/boost/accumulators/statistics_fwd.hpp
   branches/fix-links/boost/interprocess/allocators/detail/allocator_common.hpp
      - copied unchanged from r42899, /trunk/boost/interprocess/allocators/detail/allocator_common.hpp
   branches/fix-links/boost/intrusive/linear_slist_algorithms.hpp
      - copied unchanged from r42899, /trunk/boost/intrusive/linear_slist_algorithms.hpp
   branches/fix-links/boost/iostreams/detail/config/fpos.hpp
      - copied unchanged from r42899, /trunk/boost/iostreams/detail/config/fpos.hpp
   branches/fix-links/boost/iostreams/detail/config/rtl.hpp
      - copied unchanged from r42899, /trunk/boost/iostreams/detail/config/rtl.hpp
   branches/fix-links/boost/iostreams/detail/restrict_impl.hpp
      - copied unchanged from r42899, /trunk/boost/iostreams/detail/restrict_impl.hpp
   branches/fix-links/boost/iostreams/slice.hpp
      - copied unchanged from r42899, /trunk/boost/iostreams/slice.hpp
   branches/fix-links/boost/mpi/detail/binary_buffer_iprimitive.hpp
      - copied unchanged from r42899, /trunk/boost/mpi/detail/binary_buffer_iprimitive.hpp
   branches/fix-links/boost/mpi/detail/binary_buffer_oprimitive.hpp
      - copied unchanged from r42899, /trunk/boost/mpi/detail/binary_buffer_oprimitive.hpp
   branches/fix-links/boost/statechart/detail/reaction_dispatcher.hpp
      - copied unchanged from r42899, /trunk/boost/statechart/detail/reaction_dispatcher.hpp
   branches/fix-links/boost/unordered/
      - copied from r42899, /trunk/boost/unordered/
   branches/fix-links/boost/unordered/detail/
      - copied from r42899, /trunk/boost/unordered/detail/
   branches/fix-links/boost/unordered/detail/allocator.hpp
      - copied unchanged from r42899, /trunk/boost/unordered/detail/allocator.hpp
   branches/fix-links/boost/unordered/detail/hash_table.hpp
      - copied unchanged from r42899, /trunk/boost/unordered/detail/hash_table.hpp
   branches/fix-links/boost/unordered/detail/hash_table_impl.hpp
      - copied unchanged from r42899, /trunk/boost/unordered/detail/hash_table_impl.hpp
   branches/fix-links/boost/unordered_map.hpp
      - copied unchanged from r42899, /trunk/boost/unordered_map.hpp
   branches/fix-links/boost/unordered_set.hpp
      - copied unchanged from r42899, /trunk/boost/unordered_set.hpp
   branches/fix-links/boost/xpressive/proto/detail/as_lvalue.hpp
      - copied unchanged from r42899, /trunk/boost/xpressive/proto/detail/as_lvalue.hpp
   branches/fix-links/boost/xpressive/proto/detail/dont_care.hpp
      - copied unchanged from r42899, /trunk/boost/xpressive/proto/detail/dont_care.hpp
   branches/fix-links/boost/xpressive/proto/transform/bind.hpp
      - copied unchanged from r42899, /trunk/boost/xpressive/proto/transform/bind.hpp
   branches/fix-links/boost/xpressive/proto/transform/call.hpp
      - copied unchanged from r42899, /trunk/boost/xpressive/proto/transform/call.hpp
   branches/fix-links/boost/xpressive/proto/transform/make.hpp
      - copied unchanged from r42899, /trunk/boost/xpressive/proto/transform/make.hpp
   branches/fix-links/boost/xpressive/proto/transform/when.hpp
      - copied unchanged from r42899, /trunk/boost/xpressive/proto/transform/when.hpp
   branches/fix-links/doc/html/unordered.html
      - copied unchanged from r42899, /trunk/doc/html/unordered.html
   branches/fix-links/libs/accumulators/
      - copied from r42899, /trunk/libs/accumulators/
   branches/fix-links/libs/accumulators/doc/
      - copied from r42899, /trunk/libs/accumulators/doc/
   branches/fix-links/libs/accumulators/doc/Jamfile.v2
      - copied unchanged from r42899, /trunk/libs/accumulators/doc/Jamfile.v2
   branches/fix-links/libs/accumulators/doc/accumulators.qbk
      - copied unchanged from r42899, /trunk/libs/accumulators/doc/accumulators.qbk
   branches/fix-links/libs/accumulators/example/
      - copied from r42899, /trunk/libs/accumulators/example/
   branches/fix-links/libs/accumulators/example/Jamfile.v2
      - copied unchanged from r42899, /trunk/libs/accumulators/example/Jamfile.v2
   branches/fix-links/libs/accumulators/example/example.vcproj
      - copied unchanged from r42899, /trunk/libs/accumulators/example/example.vcproj
   branches/fix-links/libs/accumulators/example/main.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/example/main.cpp
   branches/fix-links/libs/accumulators/index.html
      - copied unchanged from r42899, /trunk/libs/accumulators/index.html
   branches/fix-links/libs/accumulators/test/
      - copied from r42899, /trunk/libs/accumulators/test/
   branches/fix-links/libs/accumulators/test/Jamfile.v2
      - copied unchanged from r42899, /trunk/libs/accumulators/test/Jamfile.v2
   branches/fix-links/libs/accumulators/test/count.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/count.cpp
   branches/fix-links/libs/accumulators/test/covariance.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/covariance.cpp
   branches/fix-links/libs/accumulators/test/droppable.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/droppable.cpp
   branches/fix-links/libs/accumulators/test/error_of.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/error_of.cpp
   branches/fix-links/libs/accumulators/test/extended_p_square.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/extended_p_square.cpp
   branches/fix-links/libs/accumulators/test/extended_p_square_quantile.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/extended_p_square_quantile.cpp
   branches/fix-links/libs/accumulators/test/external_accumulator.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/external_accumulator.cpp
   branches/fix-links/libs/accumulators/test/external_weights.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/external_weights.cpp
   branches/fix-links/libs/accumulators/test/kurtosis.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/kurtosis.cpp
   branches/fix-links/libs/accumulators/test/max.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/max.cpp
   branches/fix-links/libs/accumulators/test/mean.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/mean.cpp
   branches/fix-links/libs/accumulators/test/median.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/median.cpp
   branches/fix-links/libs/accumulators/test/min.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/min.cpp
   branches/fix-links/libs/accumulators/test/moment.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/moment.cpp
   branches/fix-links/libs/accumulators/test/p_square_cumulative_distribution.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/p_square_cumulative_distribution.cpp
   branches/fix-links/libs/accumulators/test/p_square_quantile.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/p_square_quantile.cpp
   branches/fix-links/libs/accumulators/test/p_square_quantile_extended.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/p_square_quantile_extended.cpp
   branches/fix-links/libs/accumulators/test/pot_quantile.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/pot_quantile.cpp
   branches/fix-links/libs/accumulators/test/reference.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/reference.cpp
   branches/fix-links/libs/accumulators/test/skewness.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/skewness.cpp
   branches/fix-links/libs/accumulators/test/sum.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/sum.cpp
   branches/fix-links/libs/accumulators/test/tail.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/tail.cpp
   branches/fix-links/libs/accumulators/test/tail_mean.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/tail_mean.cpp
   branches/fix-links/libs/accumulators/test/tail_quantile.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/tail_quantile.cpp
   branches/fix-links/libs/accumulators/test/tail_variate_means.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/tail_variate_means.cpp
   branches/fix-links/libs/accumulators/test/valarray.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/valarray.cpp
   branches/fix-links/libs/accumulators/test/value.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/value.cpp
   branches/fix-links/libs/accumulators/test/variance.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/variance.cpp
   branches/fix-links/libs/accumulators/test/vector.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/vector.cpp
   branches/fix-links/libs/accumulators/test/weighted_covariance.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_covariance.cpp
   branches/fix-links/libs/accumulators/test/weighted_extended_p_square.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_extended_p_square.cpp
   branches/fix-links/libs/accumulators/test/weighted_kurtosis.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_kurtosis.cpp
   branches/fix-links/libs/accumulators/test/weighted_mean.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_mean.cpp
   branches/fix-links/libs/accumulators/test/weighted_median.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_median.cpp
   branches/fix-links/libs/accumulators/test/weighted_moment.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_moment.cpp
   branches/fix-links/libs/accumulators/test/weighted_p_square_cum_dist.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_p_square_cum_dist.cpp
   branches/fix-links/libs/accumulators/test/weighted_p_square_quantile.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_p_square_quantile.cpp
   branches/fix-links/libs/accumulators/test/weighted_pot_quantile.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_pot_quantile.cpp
   branches/fix-links/libs/accumulators/test/weighted_skewness.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_skewness.cpp
   branches/fix-links/libs/accumulators/test/weighted_sum.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_sum.cpp
   branches/fix-links/libs/accumulators/test/weighted_tail_mean.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_tail_mean.cpp
   branches/fix-links/libs/accumulators/test/weighted_tail_quantile.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_tail_quantile.cpp
   branches/fix-links/libs/accumulators/test/weighted_tail_variate_means.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_tail_variate_means.cpp
   branches/fix-links/libs/accumulators/test/weighted_variance.cpp
      - copied unchanged from r42899, /trunk/libs/accumulators/test/weighted_variance.cpp
   branches/fix-links/libs/interprocess/test/vector_test.hpp
      - copied unchanged from r42899, /trunk/libs/interprocess/test/vector_test.hpp
   branches/fix-links/libs/iostreams/test/combine_test.cpp
      - copied unchanged from r42899, /trunk/libs/iostreams/test/combine_test.cpp
   branches/fix-links/libs/iostreams/test/large_file_test.cpp
      - copied unchanged from r42899, /trunk/libs/iostreams/test/large_file_test.cpp
   branches/fix-links/libs/iostreams/test/slice_test.cpp
      - copied unchanged from r42899, /trunk/libs/iostreams/test/slice_test.cpp
   branches/fix-links/libs/unordered/
      - copied from r42899, /trunk/libs/unordered/
   branches/fix-links/libs/unordered/doc/
      - copied from r42899, /trunk/libs/unordered/doc/
   branches/fix-links/libs/unordered/doc/Jamfile.v2
      - copied unchanged from r42899, /trunk/libs/unordered/doc/Jamfile.v2
   branches/fix-links/libs/unordered/doc/buckets.qbk
      - copied unchanged from r42899, /trunk/libs/unordered/doc/buckets.qbk
   branches/fix-links/libs/unordered/doc/comparison.qbk
      - copied unchanged from r42899, /trunk/libs/unordered/doc/comparison.qbk
   branches/fix-links/libs/unordered/doc/diagrams/
      - copied from r42899, /trunk/libs/unordered/doc/diagrams/
   branches/fix-links/libs/unordered/doc/diagrams/buckets.dia
      - copied unchanged from r42899, /trunk/libs/unordered/doc/diagrams/buckets.dia
   branches/fix-links/libs/unordered/doc/diagrams/buckets.png
      - copied unchanged from r42899, /trunk/libs/unordered/doc/diagrams/buckets.png
   branches/fix-links/libs/unordered/doc/hash_equality.qbk
      - copied unchanged from r42899, /trunk/libs/unordered/doc/hash_equality.qbk
   branches/fix-links/libs/unordered/doc/intro.qbk
      - copied unchanged from r42899, /trunk/libs/unordered/doc/intro.qbk
   branches/fix-links/libs/unordered/doc/rationale.qbk
      - copied unchanged from r42899, /trunk/libs/unordered/doc/rationale.qbk
   branches/fix-links/libs/unordered/doc/ref.xml
      - copied unchanged from r42899, /trunk/libs/unordered/doc/ref.xml
   branches/fix-links/libs/unordered/doc/src_code/
      - copied from r42899, /trunk/libs/unordered/doc/src_code/
   branches/fix-links/libs/unordered/doc/src_code/insensitive.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/doc/src_code/insensitive.cpp
   branches/fix-links/libs/unordered/doc/src_code/point1.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/doc/src_code/point1.cpp
   branches/fix-links/libs/unordered/doc/src_code/point2.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/doc/src_code/point2.cpp
   branches/fix-links/libs/unordered/doc/unordered.qbk
      - copied unchanged from r42899, /trunk/libs/unordered/doc/unordered.qbk
   branches/fix-links/libs/unordered/examples/
      - copied from r42899, /trunk/libs/unordered/examples/
   branches/fix-links/libs/unordered/examples/case_insensitive.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/examples/case_insensitive.hpp
   branches/fix-links/libs/unordered/examples/case_insensitive_test.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/examples/case_insensitive_test.cpp
   branches/fix-links/libs/unordered/examples/hash_functions/
      - copied from r42899, /trunk/libs/unordered/examples/hash_functions/
   branches/fix-links/libs/unordered/examples/hash_functions/fnv-1.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/examples/hash_functions/fnv-1.hpp
   branches/fix-links/libs/unordered/index.html
      - copied unchanged from r42899, /trunk/libs/unordered/index.html
   branches/fix-links/libs/unordered/test/
      - copied from r42899, /trunk/libs/unordered/test/
   branches/fix-links/libs/unordered/test/Jamfile.v2
      - copied unchanged from r42899, /trunk/libs/unordered/test/Jamfile.v2
   branches/fix-links/libs/unordered/test/exception/
      - copied from r42899, /trunk/libs/unordered/test/exception/
   branches/fix-links/libs/unordered/test/exception/Jamfile.v2
      - copied unchanged from r42899, /trunk/libs/unordered/test/exception/Jamfile.v2
   branches/fix-links/libs/unordered/test/exception/assign_exception_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/exception/assign_exception_tests.cpp
   branches/fix-links/libs/unordered/test/exception/constructor_exception_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/exception/constructor_exception_tests.cpp
   branches/fix-links/libs/unordered/test/exception/containers.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/exception/containers.hpp
   branches/fix-links/libs/unordered/test/exception/copy_exception_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/exception/copy_exception_tests.cpp
   branches/fix-links/libs/unordered/test/exception/erase_exception_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/exception/erase_exception_tests.cpp
   branches/fix-links/libs/unordered/test/exception/insert_exception_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/exception/insert_exception_tests.cpp
   branches/fix-links/libs/unordered/test/exception/rehash_exception_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/exception/rehash_exception_tests.cpp
   branches/fix-links/libs/unordered/test/exception/swap_exception_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/exception/swap_exception_tests.cpp
   branches/fix-links/libs/unordered/test/helpers/
      - copied from r42899, /trunk/libs/unordered/test/helpers/
   branches/fix-links/libs/unordered/test/helpers/allocator.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/allocator.hpp
   branches/fix-links/libs/unordered/test/helpers/check_return_type.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/check_return_type.hpp
   branches/fix-links/libs/unordered/test/helpers/equivalent.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/equivalent.hpp
   branches/fix-links/libs/unordered/test/helpers/exception_test.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/exception_test.hpp
   branches/fix-links/libs/unordered/test/helpers/fwd.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/fwd.hpp
   branches/fix-links/libs/unordered/test/helpers/generators.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/generators.hpp
   branches/fix-links/libs/unordered/test/helpers/helpers.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/helpers.hpp
   branches/fix-links/libs/unordered/test/helpers/input_iterator.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/input_iterator.hpp
   branches/fix-links/libs/unordered/test/helpers/invariants.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/invariants.hpp
   branches/fix-links/libs/unordered/test/helpers/metafunctions.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/metafunctions.hpp
   branches/fix-links/libs/unordered/test/helpers/random_values.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/random_values.hpp
   branches/fix-links/libs/unordered/test/helpers/strong.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/strong.hpp
   branches/fix-links/libs/unordered/test/helpers/test.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/test.hpp
   branches/fix-links/libs/unordered/test/helpers/tracker.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/helpers/tracker.hpp
   branches/fix-links/libs/unordered/test/objects/
      - copied from r42899, /trunk/libs/unordered/test/objects/
   branches/fix-links/libs/unordered/test/objects/exception.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/objects/exception.hpp
   branches/fix-links/libs/unordered/test/objects/fwd.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/objects/fwd.hpp
   branches/fix-links/libs/unordered/test/objects/memory.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/objects/memory.hpp
   branches/fix-links/libs/unordered/test/objects/minimal.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/objects/minimal.hpp
   branches/fix-links/libs/unordered/test/objects/test.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/objects/test.hpp
   branches/fix-links/libs/unordered/test/unordered/
      - copied from r42899, /trunk/libs/unordered/test/unordered/
   branches/fix-links/libs/unordered/test/unordered/Jamfile.v2
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/Jamfile.v2
   branches/fix-links/libs/unordered/test/unordered/assign_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/assign_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/at_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/at_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/bucket_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/bucket_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/compile_map.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/compile_map.cpp
   branches/fix-links/libs/unordered/test/unordered/compile_set.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/compile_set.cpp
   branches/fix-links/libs/unordered/test/unordered/compile_tests.hpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/compile_tests.hpp
   branches/fix-links/libs/unordered/test/unordered/constructor_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/constructor_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/copy_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/copy_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/equivalent_keys_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/equivalent_keys_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/erase_equiv_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/erase_equiv_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/erase_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/erase_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/find_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/find_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/insert_stable_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/insert_stable_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/insert_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/insert_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/link_test_1.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/link_test_1.cpp
   branches/fix-links/libs/unordered/test/unordered/link_test_2.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/link_test_2.cpp
   branches/fix-links/libs/unordered/test/unordered/load_factor_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/load_factor_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/rehash_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/rehash_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/simple_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/simple_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/swap_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/swap_tests.cpp
   branches/fix-links/libs/unordered/test/unordered/unnecessary_copy_tests.cpp
      - copied unchanged from r42899, /trunk/libs/unordered/test/unordered/unnecessary_copy_tests.cpp
   branches/fix-links/libs/xpressive/test/test_skip.cpp
      - copied unchanged from r42899, /trunk/libs/xpressive/test/test_skip.cpp
   branches/fix-links/tools/build/v2/test/conditionals_multiple.py
      - copied unchanged from r42899, /trunk/tools/build/v2/test/conditionals_multiple.py
   branches/fix-links/tools/build/v2/test/configuration.py
      - copied unchanged from r42899, /trunk/tools/build/v2/test/configuration.py
   branches/fix-links/tools/build/v2/test/default_toolset.py
      - copied unchanged from r42899, /trunk/tools/build/v2/test/default_toolset.py
Removed:
   branches/fix-links/boost/asio/detail/win_iocp_operation.hpp
   branches/fix-links/boost/xpressive/proto/transform/apply.hpp
   branches/fix-links/boost/xpressive/proto/transform/branch.hpp
   branches/fix-links/boost/xpressive/proto/transform/compose.hpp
   branches/fix-links/boost/xpressive/proto/transform/construct.hpp
   branches/fix-links/boost/xpressive/proto/transform/function.hpp
   branches/fix-links/boost/xpressive/proto/transform/list.hpp
   branches/fix-links/libs/iostreams/build/bzip2.jam
   branches/fix-links/libs/iostreams/build/zlib.jam
Properties modified:
   branches/fix-links/ (props changed)
Binary files modified:
   branches/fix-links/libs/statechart/doc/reference.pdf
Text files modified:
   branches/fix-links/boost/asio/detail/epoll_reactor.hpp | 14
   branches/fix-links/boost/asio/detail/kqueue_reactor.hpp | 14
   branches/fix-links/boost/asio/detail/push_options.hpp | 6
   branches/fix-links/boost/asio/detail/socket_ops.hpp | 8
   branches/fix-links/boost/asio/detail/socket_types.hpp | 2
   branches/fix-links/boost/asio/detail/win_iocp_io_service.hpp | 104 ++
   branches/fix-links/boost/asio/detail/win_iocp_socket_service.hpp | 49
   branches/fix-links/boost/asio/error.hpp | 5
   branches/fix-links/boost/asio/ssl/detail/openssl_init.hpp | 16
   branches/fix-links/boost/asio/ssl/detail/openssl_operation.hpp | 43
   branches/fix-links/boost/asio/ssl/detail/openssl_stream_service.hpp | 53 +
   branches/fix-links/boost/config/compiler/intel.hpp | 15
   branches/fix-links/boost/config/compiler/vacpp.hpp | 2
   branches/fix-links/boost/config/platform/hpux.hpp | 3
   branches/fix-links/boost/function_types/components.hpp | 122 +-
   branches/fix-links/boost/function_types/detail/cv_traits.hpp | 4
   branches/fix-links/boost/functional/detail/hash_float.hpp | 31
   branches/fix-links/boost/gil/color_base.hpp | 10
   branches/fix-links/boost/gil/extension/io/png_io_private.hpp | 4
   branches/fix-links/boost/interprocess/allocators/adaptive_pool.hpp | 476 ++++++++----
   branches/fix-links/boost/interprocess/allocators/allocation_type.hpp | 2
   branches/fix-links/boost/interprocess/allocators/allocator.hpp | 93 +-
   branches/fix-links/boost/interprocess/allocators/cached_adaptive_pool.hpp | 515 ++++++-------
   branches/fix-links/boost/interprocess/allocators/cached_node_allocator.hpp | 474 +++++-------
   branches/fix-links/boost/interprocess/allocators/detail/adaptive_node_pool.hpp | 701 +++++++++---------
   branches/fix-links/boost/interprocess/allocators/detail/node_pool.hpp | 342 +++-----
   branches/fix-links/boost/interprocess/allocators/detail/node_tools.hpp | 5
   branches/fix-links/boost/interprocess/allocators/node_allocator.hpp | 481 ++++++++----
   branches/fix-links/boost/interprocess/allocators/private_adaptive_pool.hpp | 417 +++++++++--
   branches/fix-links/boost/interprocess/allocators/private_node_allocator.hpp | 456 ++++++++++++
   branches/fix-links/boost/interprocess/containers/detail/flat_tree.hpp | 2
   branches/fix-links/boost/interprocess/containers/detail/node_alloc_holder.hpp | 46
   branches/fix-links/boost/interprocess/containers/detail/tree.hpp | 8
   branches/fix-links/boost/interprocess/containers/flat_map.hpp | 2
   branches/fix-links/boost/interprocess/containers/flat_set.hpp | 2
   branches/fix-links/boost/interprocess/containers/list.hpp | 9
   branches/fix-links/boost/interprocess/containers/map.hpp | 2
   branches/fix-links/boost/interprocess/containers/set.hpp | 2
   branches/fix-links/boost/interprocess/containers/slist.hpp | 4
   branches/fix-links/boost/interprocess/containers/string.hpp | 4
   branches/fix-links/boost/interprocess/containers/vector.hpp | 29
   branches/fix-links/boost/interprocess/creation_tags.hpp | 2
   branches/fix-links/boost/interprocess/detail/algorithms.hpp | 2
   branches/fix-links/boost/interprocess/detail/atomic.hpp | 2
   branches/fix-links/boost/interprocess/detail/cast_tags.hpp | 2
   branches/fix-links/boost/interprocess/detail/config_begin.hpp | 1
   branches/fix-links/boost/interprocess/detail/in_place_interface.hpp | 2
   branches/fix-links/boost/interprocess/detail/interprocess_tester.hpp | 2
   branches/fix-links/boost/interprocess/detail/iterators.hpp | 8
   branches/fix-links/boost/interprocess/detail/managed_memory_impl.hpp | 2
   branches/fix-links/boost/interprocess/detail/math_functions.hpp | 2
   branches/fix-links/boost/interprocess/detail/min_max.hpp | 2
   branches/fix-links/boost/interprocess/detail/mpl.hpp | 2
   branches/fix-links/boost/interprocess/detail/named_proxy.hpp | 2
   branches/fix-links/boost/interprocess/detail/os_file_functions.hpp | 2
   branches/fix-links/boost/interprocess/detail/os_thread_functions.hpp | 2
   branches/fix-links/boost/interprocess/detail/pointer_type.hpp | 2
   branches/fix-links/boost/interprocess/detail/posix_time_types_wrk.hpp | 2
   branches/fix-links/boost/interprocess/detail/segment_manager_helper.hpp | 2
   branches/fix-links/boost/interprocess/detail/tmp_dir_helpers.hpp | 2
   branches/fix-links/boost/interprocess/detail/type_traits.hpp | 2
   branches/fix-links/boost/interprocess/detail/utilities.hpp | 145 +++
   branches/fix-links/boost/interprocess/detail/version_type.hpp | 2
   branches/fix-links/boost/interprocess/detail/win32_api.hpp | 2
   branches/fix-links/boost/interprocess/detail/workaround.hpp | 6
   branches/fix-links/boost/interprocess/errors.hpp | 2
   branches/fix-links/boost/interprocess/exceptions.hpp | 2
   branches/fix-links/boost/interprocess/file_mapping.hpp | 2
   branches/fix-links/boost/interprocess/indexes/flat_map_index.hpp | 2
   branches/fix-links/boost/interprocess/indexes/iset_index.hpp | 2
   branches/fix-links/boost/interprocess/indexes/iunordered_set_index.hpp | 2
   branches/fix-links/boost/interprocess/indexes/map_index.hpp | 2
   branches/fix-links/boost/interprocess/indexes/null_index.hpp | 2
   branches/fix-links/boost/interprocess/indexes/unordered_map_index.hpp | 2
   branches/fix-links/boost/interprocess/interprocess_fwd.hpp | 18
   branches/fix-links/boost/interprocess/ipc/message_queue.hpp | 2
   branches/fix-links/boost/interprocess/managed_external_buffer.hpp | 7
   branches/fix-links/boost/interprocess/managed_heap_memory.hpp | 2
   branches/fix-links/boost/interprocess/managed_mapped_file.hpp | 2
   branches/fix-links/boost/interprocess/managed_shared_memory.hpp | 2
   branches/fix-links/boost/interprocess/managed_windows_shared_memory.hpp | 2
   branches/fix-links/boost/interprocess/mapped_region.hpp | 2
   branches/fix-links/boost/interprocess/mem_algo/detail/mem_algo_common.hpp | 214 +++++
   branches/fix-links/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp | 60 +
   branches/fix-links/boost/interprocess/mem_algo/rbtree_best_fit.hpp | 613 ++++++++++------
   branches/fix-links/boost/interprocess/mem_algo/simple_seq_fit.hpp | 2
   branches/fix-links/boost/interprocess/offset_ptr.hpp | 6
   branches/fix-links/boost/interprocess/segment_manager.hpp | 27
   branches/fix-links/boost/interprocess/shared_memory_object.hpp | 2
   branches/fix-links/boost/interprocess/smart_ptr/deleter.hpp | 2
   branches/fix-links/boost/interprocess/smart_ptr/detail/shared_count.hpp | 2
   branches/fix-links/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp | 2
   branches/fix-links/boost/interprocess/smart_ptr/shared_ptr.hpp | 2
   branches/fix-links/boost/interprocess/smart_ptr/weak_ptr.hpp | 2
   branches/fix-links/boost/interprocess/streams/bufferstream.hpp | 2
   branches/fix-links/boost/interprocess/streams/vectorstream.hpp | 2
   branches/fix-links/boost/interprocess/sync/emulation/interprocess_condition.hpp | 2
   branches/fix-links/boost/interprocess/sync/emulation/interprocess_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/emulation/interprocess_recursive_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/emulation/interprocess_semaphore.hpp | 2
   branches/fix-links/boost/interprocess/sync/emulation/named_creation_functor.hpp | 2
   branches/fix-links/boost/interprocess/sync/file_lock.hpp | 2
   branches/fix-links/boost/interprocess/sync/interprocess_barrier.hpp | 2
   branches/fix-links/boost/interprocess/sync/interprocess_condition.hpp | 2
   branches/fix-links/boost/interprocess/sync/interprocess_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/interprocess_recursive_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/interprocess_semaphore.hpp | 2
   branches/fix-links/boost/interprocess/sync/interprocess_upgradable_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/lock_options.hpp | 2
   branches/fix-links/boost/interprocess/sync/mutex_family.hpp | 2
   branches/fix-links/boost/interprocess/sync/named_condition.hpp | 2
   branches/fix-links/boost/interprocess/sync/named_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/named_recursive_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/named_semaphore.hpp | 2
   branches/fix-links/boost/interprocess/sync/named_upgradable_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/null_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/posix/interprocess_condition.hpp | 2
   branches/fix-links/boost/interprocess/sync/posix/interprocess_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/posix/interprocess_recursive_mutex.hpp | 2
   branches/fix-links/boost/interprocess/sync/posix/interprocess_semaphore.hpp | 2
   branches/fix-links/boost/interprocess/sync/posix/pthread_helpers.hpp | 2
   branches/fix-links/boost/interprocess/sync/posix/ptime_to_timespec.hpp | 2
   branches/fix-links/boost/interprocess/sync/posix/semaphore_wrapper.hpp | 2
   branches/fix-links/boost/interprocess/sync/scoped_lock.hpp | 2
   branches/fix-links/boost/interprocess/sync/sharable_lock.hpp | 2
   branches/fix-links/boost/interprocess/sync/upgradable_lock.hpp | 2
   branches/fix-links/boost/interprocess/windows_shared_memory.hpp | 2
   branches/fix-links/boost/intrusive/circular_list_algorithms.hpp | 109 ++
   branches/fix-links/boost/intrusive/circular_slist_algorithms.hpp | 165 ++++
   branches/fix-links/boost/intrusive/detail/tree_algorithms.hpp | 4
   branches/fix-links/boost/intrusive/detail/utilities.hpp | 4
   branches/fix-links/boost/intrusive/intrusive_fwd.hpp | 1
   branches/fix-links/boost/intrusive/list.hpp | 51 -
   branches/fix-links/boost/intrusive/options.hpp | 27
   branches/fix-links/boost/intrusive/slist.hpp | 236 ++---
   branches/fix-links/boost/intrusive/slist_hook.hpp | 2
   branches/fix-links/boost/iostreams/code_converter.hpp | 40
   branches/fix-links/boost/iostreams/combine.hpp | 21
   branches/fix-links/boost/iostreams/compose.hpp | 90 ++
   branches/fix-links/boost/iostreams/copy.hpp | 23
   branches/fix-links/boost/iostreams/detail/adapter/direct_adapter.hpp | 23
   branches/fix-links/boost/iostreams/detail/adapter/range_adapter.hpp | 6
   branches/fix-links/boost/iostreams/detail/buffer.hpp | 10
   branches/fix-links/boost/iostreams/detail/config/codecvt.hpp | 5
   branches/fix-links/boost/iostreams/detail/config/disable_warnings.hpp | 1
   branches/fix-links/boost/iostreams/detail/config/enable_warnings.hpp | 2
   branches/fix-links/boost/iostreams/detail/execute.hpp | 18
   branches/fix-links/boost/iostreams/detail/streambuf/direct_streambuf.hpp | 5
   branches/fix-links/boost/iostreams/detail/streambuf/indirect_streambuf.hpp | 31
   branches/fix-links/boost/iostreams/detail/streambuf/linked_streambuf.hpp | 2
   branches/fix-links/boost/iostreams/device/file_descriptor.hpp | 73 +
   branches/fix-links/boost/iostreams/device/mapped_file.hpp | 8
   branches/fix-links/boost/iostreams/filter/aggregate.hpp | 13
   branches/fix-links/boost/iostreams/filter/gzip.hpp | 16
   branches/fix-links/boost/iostreams/filter/line.hpp | 8
   branches/fix-links/boost/iostreams/filter/newline.hpp | 38
   branches/fix-links/boost/iostreams/filter/symmetric.hpp | 20
   branches/fix-links/boost/iostreams/input_sequence.hpp | 1
   branches/fix-links/boost/iostreams/invert.hpp | 5
   branches/fix-links/boost/iostreams/output_sequence.hpp | 1
   branches/fix-links/boost/iostreams/positioning.hpp | 96 +-
   branches/fix-links/boost/iostreams/restrict.hpp | 454 ------------
   branches/fix-links/boost/math/distributions/poisson.hpp | 17
   branches/fix-links/boost/math/tools/test_data.hpp | 1
   branches/fix-links/boost/mpi/config.hpp | 5
   branches/fix-links/boost/mpi/datatype.hpp | 32
   branches/fix-links/boost/mpi/datatype_fwd.hpp | 2
   branches/fix-links/boost/mpi/detail/packed_iprimitive.hpp | 15
   branches/fix-links/boost/mpi/packed_iarchive.hpp | 45 +
   branches/fix-links/boost/mpi/packed_oarchive.hpp | 36
   branches/fix-links/boost/mpi/status.hpp | 2
   branches/fix-links/boost/parameter/aux_/arg_list.hpp | 1
   branches/fix-links/boost/parameter/aux_/cast.hpp | 2
   branches/fix-links/boost/parameter/aux_/default.hpp | 14
   branches/fix-links/boost/parameter/aux_/python/invoker.hpp | 1
   branches/fix-links/boost/parameter/aux_/set.hpp | 2
   branches/fix-links/boost/parameter/macros.hpp | 1
   branches/fix-links/boost/parameter/preprocessor.hpp | 3
   branches/fix-links/boost/range/as_literal.hpp | 6
   branches/fix-links/boost/regex/concepts.hpp | 8
   branches/fix-links/boost/regex/v4/basic_regex_parser.hpp | 11
   branches/fix-links/boost/serialization/complex.hpp | 1
   branches/fix-links/boost/serialization/utility.hpp | 6
   branches/fix-links/boost/spirit/core/primitives/primitives.hpp | 2
   branches/fix-links/boost/statechart/detail/rtti_policy.hpp | 11
   branches/fix-links/boost/statechart/detail/state_base.hpp | 11
   branches/fix-links/boost/statechart/event.hpp | 2
   branches/fix-links/boost/statechart/event_processor.hpp | 5
   branches/fix-links/boost/statechart/fifo_worker.hpp | 14
   branches/fix-links/boost/statechart/in_state_reaction.hpp | 52
   branches/fix-links/boost/statechart/processor_container.hpp | 5
   branches/fix-links/boost/statechart/simple_state.hpp | 5
   branches/fix-links/boost/statechart/state_machine.hpp | 33
   branches/fix-links/boost/statechart/transition.hpp | 102 --
   branches/fix-links/boost/test/impl/debug.ipp | 3
   branches/fix-links/boost/test/impl/execution_monitor.ipp | 3
   branches/fix-links/boost/test/test_tools.hpp | 10
   branches/fix-links/boost/thread/win32/once.hpp | 4
   branches/fix-links/boost/thread/win32/shared_mutex.hpp | 6
   branches/fix-links/boost/thread/win32/thread_primitives.hpp | 4
   branches/fix-links/boost/tr1/detail/config.hpp | 25
   branches/fix-links/boost/type_traits/make_signed.hpp | 4
   branches/fix-links/boost/type_traits/make_unsigned.hpp | 4
   branches/fix-links/boost/utility/value_init.hpp | 40
   branches/fix-links/boost/wave.hpp | 2
   branches/fix-links/boost/wave/cpp_context.hpp | 4
   branches/fix-links/boost/wave/cpp_exceptions.hpp | 2
   branches/fix-links/boost/wave/cpp_iteration_context.hpp | 2
   branches/fix-links/boost/wave/cpp_throw.hpp | 2
   branches/fix-links/boost/wave/cpplexer/convert_trigraphs.hpp | 2
   branches/fix-links/boost/wave/cpplexer/cpp_lex_interface.hpp | 2
   branches/fix-links/boost/wave/cpplexer/cpp_lex_interface_generator.hpp | 2
   branches/fix-links/boost/wave/cpplexer/cpp_lex_iterator.hpp | 2
   branches/fix-links/boost/wave/cpplexer/cpp_lex_token.hpp | 2
   branches/fix-links/boost/wave/cpplexer/cpplexer_exceptions.hpp | 2
   branches/fix-links/boost/wave/cpplexer/detect_include_guards.hpp | 2
   branches/fix-links/boost/wave/cpplexer/re2clex/aq.hpp | 2
   branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re.hpp | 2
   branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp | 2
   branches/fix-links/boost/wave/cpplexer/re2clex/scanner.hpp | 2
   branches/fix-links/boost/wave/cpplexer/token_cache.hpp | 2
   branches/fix-links/boost/wave/cpplexer/validate_universal_char.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_chlit_grammar.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_defined_grammar.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_defined_grammar_gen.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_expression_grammar.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_expression_grammar_gen.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_expression_value.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_grammar.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_grammar_gen.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_intlit_grammar.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_literal_grammar_gen.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_predef_macros_gen.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_predef_macros_grammar.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_value_error.hpp | 2
   branches/fix-links/boost/wave/language_support.hpp | 2
   branches/fix-links/boost/wave/preprocessing_hooks.hpp | 2
   branches/fix-links/boost/wave/token_ids.hpp | 229 +++---
   branches/fix-links/boost/wave/util/cpp_ifblock.hpp | 2
   branches/fix-links/boost/wave/util/cpp_include_paths.hpp | 2
   branches/fix-links/boost/wave/util/cpp_iterator.hpp | 2
   branches/fix-links/boost/wave/util/cpp_macromap.hpp | 2
   branches/fix-links/boost/wave/util/cpp_macromap_predef.hpp | 2
   branches/fix-links/boost/wave/util/cpp_macromap_utils.hpp | 2
   branches/fix-links/boost/wave/util/file_position.hpp | 2
   branches/fix-links/boost/wave/util/functor_input.hpp | 2
   branches/fix-links/boost/wave/util/insert_whitespace_detection.hpp | 2
   branches/fix-links/boost/wave/util/interpret_pragma.hpp | 2
   branches/fix-links/boost/wave/util/iteration_context.hpp | 2
   branches/fix-links/boost/wave/util/macro_definition.hpp | 2
   branches/fix-links/boost/wave/util/macro_helpers.hpp | 2
   branches/fix-links/boost/wave/util/pattern_parser.hpp | 2
   branches/fix-links/boost/wave/util/symbol_table.hpp | 2
   branches/fix-links/boost/wave/util/time_conversion_helper.hpp | 2
   branches/fix-links/boost/wave/util/transform_iterator.hpp | 2
   branches/fix-links/boost/wave/util/unput_queue_iterator.hpp | 2
   branches/fix-links/boost/wave/wave_config.hpp | 2
   branches/fix-links/boost/wave/wave_config_constant.hpp | 2
   branches/fix-links/boost/wave/wave_version.hpp | 2
   branches/fix-links/boost/wave/whitespace_handling.hpp | 2
   branches/fix-links/boost/xpressive/detail/core/linker.hpp | 8
   branches/fix-links/boost/xpressive/detail/core/matcher/action_matcher.hpp | 109 +-
   branches/fix-links/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp | 6
   branches/fix-links/boost/xpressive/detail/core/matcher/attr_matcher.hpp | 6
   branches/fix-links/boost/xpressive/detail/core/matcher/charset_matcher.hpp | 4
   branches/fix-links/boost/xpressive/detail/core/matcher/literal_matcher.hpp | 13
   branches/fix-links/boost/xpressive/detail/core/matcher/mark_matcher.hpp | 4
   branches/fix-links/boost/xpressive/detail/core/matcher/optional_matcher.hpp | 8
   branches/fix-links/boost/xpressive/detail/core/matcher/range_matcher.hpp | 4
   branches/fix-links/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp | 4
   branches/fix-links/boost/xpressive/detail/core/matcher/set_matcher.hpp | 8
   branches/fix-links/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp | 4
   branches/fix-links/boost/xpressive/detail/core/matcher/string_matcher.hpp | 4
   branches/fix-links/boost/xpressive/detail/core/peeker.hpp | 34
   branches/fix-links/boost/xpressive/detail/core/results_cache.hpp | 1
   branches/fix-links/boost/xpressive/detail/detail_fwd.hpp | 64 +
   branches/fix-links/boost/xpressive/detail/dynamic/dynamic.hpp | 16
   branches/fix-links/boost/xpressive/detail/dynamic/parser.hpp | 24
   branches/fix-links/boost/xpressive/detail/static/compile.hpp | 2
   branches/fix-links/boost/xpressive/detail/static/grammar.hpp | 214 +++--
   branches/fix-links/boost/xpressive/detail/static/transforms/as_action.hpp | 257 +++---
   branches/fix-links/boost/xpressive/detail/static/transforms/as_alternate.hpp | 198 ++--
   branches/fix-links/boost/xpressive/detail/static/transforms/as_independent.hpp | 80 +
   branches/fix-links/boost/xpressive/detail/static/transforms/as_inverse.hpp | 59
   branches/fix-links/boost/xpressive/detail/static/transforms/as_marker.hpp | 63 -
   branches/fix-links/boost/xpressive/detail/static/transforms/as_matcher.hpp | 30
   branches/fix-links/boost/xpressive/detail/static/transforms/as_modifier.hpp | 51
   branches/fix-links/boost/xpressive/detail/static/transforms/as_quantifier.hpp | 271 +++---
   branches/fix-links/boost/xpressive/detail/static/transforms/as_sequence.hpp | 33
   branches/fix-links/boost/xpressive/detail/static/transforms/as_set.hpp | 246 ++----
   branches/fix-links/boost/xpressive/detail/static/transmogrify.hpp | 10
   branches/fix-links/boost/xpressive/detail/utility/symbols.hpp | 1
   branches/fix-links/boost/xpressive/detail/utility/tracking_ptr.hpp | 1
   branches/fix-links/boost/xpressive/match_results.hpp | 2
   branches/fix-links/boost/xpressive/proto/context/default.hpp | 143 +--
   branches/fix-links/boost/xpressive/proto/debug.hpp | 6
   branches/fix-links/boost/xpressive/proto/deep_copy.hpp | 6
   branches/fix-links/boost/xpressive/proto/detail/funop.hpp | 2
   branches/fix-links/boost/xpressive/proto/expr.hpp | 42
   branches/fix-links/boost/xpressive/proto/fusion.hpp | 411 ++++------
   branches/fix-links/boost/xpressive/proto/generate.hpp | 8
   branches/fix-links/boost/xpressive/proto/make_expr.hpp | 54 +
   branches/fix-links/boost/xpressive/proto/matches.hpp | 239 ++++--
   branches/fix-links/boost/xpressive/proto/operators.hpp | 28
   branches/fix-links/boost/xpressive/proto/proto_fwd.hpp | 403 ++++++++--
   branches/fix-links/boost/xpressive/proto/ref.hpp | 4
   branches/fix-links/boost/xpressive/proto/traits.hpp | 135 ++-
   branches/fix-links/boost/xpressive/proto/transform.hpp | 10
   branches/fix-links/boost/xpressive/proto/transform/arg.hpp | 222 ++---
   branches/fix-links/boost/xpressive/proto/transform/fold.hpp | 291 +++++---
   branches/fix-links/boost/xpressive/proto/transform/fold_tree.hpp | 149 ++-
   branches/fix-links/boost/xpressive/proto/transform/pass_through.hpp | 59 -
   branches/fix-links/boost/xpressive/regex_actions.hpp | 33
   branches/fix-links/boost/xpressive/regex_compiler.hpp | 4
   branches/fix-links/boost/xpressive/regex_primitives.hpp | 184 ++++
   branches/fix-links/boost/xpressive/traits/c_regex_traits.hpp | 1
   branches/fix-links/boost/xpressive/traits/cpp_regex_traits.hpp | 2
   branches/fix-links/boost/xpressive/xpressive_typeof.hpp | 26
   branches/fix-links/doc/Jamfile.v2 | 7
   branches/fix-links/doc/src/boost.xml | 4
   branches/fix-links/libs/asio/example/buffers/reference_counted.cpp | 2
   branches/fix-links/libs/bind/test/bind_lookup_problem_test.cpp | 2
   branches/fix-links/libs/function_types/example/fast_mem_fn_example.cpp | 4
   branches/fix-links/libs/function_types/example/interface_example.cpp | 1
   branches/fix-links/libs/function_types/example/interpreter.hpp | 2
   branches/fix-links/libs/functional/hash/doc/intro.qbk | 9
   branches/fix-links/libs/interprocess/doc/Jamfile.v2 | 2
   branches/fix-links/libs/interprocess/doc/interprocess.qbk | 2
   branches/fix-links/libs/interprocess/proj/vc7ide/interprocesslib.vcproj | 6
   branches/fix-links/libs/interprocess/test/adaptive_node_pool_test.cpp | 2
   branches/fix-links/libs/interprocess/test/adaptive_pool_test.cpp | 24
   branches/fix-links/libs/interprocess/test/cached_adaptive_pool_test.cpp | 24
   branches/fix-links/libs/interprocess/test/cached_node_allocator_test.cpp | 23
   branches/fix-links/libs/interprocess/test/file_mapping_test.cpp | 1
   branches/fix-links/libs/interprocess/test/map_test.hpp | 2
   branches/fix-links/libs/interprocess/test/memory_algorithm_test.cpp | 96 +-
   branches/fix-links/libs/interprocess/test/memory_algorithm_test_template.hpp | 110 ++
   branches/fix-links/libs/interprocess/test/node_allocator_test.cpp | 19
   branches/fix-links/libs/interprocess/test/node_pool_test.hpp | 8
   branches/fix-links/libs/interprocess/test/private_adaptive_pool_test.cpp | 19
   branches/fix-links/libs/interprocess/test/private_node_allocator_test.cpp | 21
   branches/fix-links/libs/interprocess/test/set_test.hpp | 2
   branches/fix-links/libs/interprocess/test/vector_test.cpp | 235 ------
   branches/fix-links/libs/intrusive/example/doc_list_algorithms.cpp | 2
   branches/fix-links/libs/intrusive/example/doc_slist_algorithms.cpp | 2
   branches/fix-links/libs/intrusive/proj/vc7ide/_intrusivelib/_intrusivelib.vcproj | 3
   branches/fix-links/libs/intrusive/test/list_test.cpp | 67 +
   branches/fix-links/libs/intrusive/test/slist_test.cpp | 169 +++-
   branches/fix-links/libs/iostreams/doc/acknowledgments.html | 2
   branches/fix-links/libs/iostreams/example/container_device.hpp | 16
   branches/fix-links/libs/iostreams/example/dictionary_filter.hpp | 7
   branches/fix-links/libs/iostreams/src/file_descriptor.cpp | 190 ++--
   branches/fix-links/libs/iostreams/src/mapped_file.cpp | 12
   branches/fix-links/libs/iostreams/test/Jamfile.v2 | 69 +
   branches/fix-links/libs/iostreams/test/close_test.cpp | 923 -------------------------
   branches/fix-links/libs/iostreams/test/compose_test.cpp | 397 ++++++++++
   branches/fix-links/libs/iostreams/test/copy_test.cpp | 28
   branches/fix-links/libs/iostreams/test/detail/utf8_codecvt_facet.cpp | 3
   branches/fix-links/libs/iostreams/test/detail/utf8_codecvt_facet.hpp | 1
   branches/fix-links/libs/iostreams/test/detail/verification.hpp | 2
   branches/fix-links/libs/iostreams/test/invert_test.cpp | 32
   branches/fix-links/libs/iostreams/test/operation_sequence_test.cpp | 5
   branches/fix-links/libs/iostreams/test/restrict_test.cpp | 235 +++++-
   branches/fix-links/libs/iostreams/test/stream_offset_64bit_test.cpp | 25
   branches/fix-links/libs/iostreams/test/symmetric_filter_test.cpp | 43 +
   branches/fix-links/libs/iostreams/test/tee_test.cpp | 228 ++++++
   branches/fix-links/libs/libraries.htm | 9
   branches/fix-links/libs/maintainers.txt | 2
   branches/fix-links/libs/mpl/doc/src/refmanual/map.rst | 4
   branches/fix-links/libs/numeric/ublas/doc/overview.htm | 2
   branches/fix-links/libs/python/src/object/stl_iterator.cpp | 6
   branches/fix-links/libs/python/test/stl_iterator.py | 10
   branches/fix-links/libs/range/doc/boost_range.html | 2
   branches/fix-links/libs/range/doc/history_ack.html | 8
   branches/fix-links/libs/range/doc/intro.html | 3
   branches/fix-links/libs/range/doc/portability.html | 2
   branches/fix-links/libs/range/doc/utility_class.html | 9
   branches/fix-links/libs/regex/doc/html/boost_regex/background_information/examples.html | 6
   branches/fix-links/libs/regex/doc/html/boost_regex/background_information/history.html | 10
   branches/fix-links/libs/regex/doc/html/boost_regex/background_information/locale.html | 8
   branches/fix-links/libs/regex/doc/html/boost_regex/background_information/standards.html | 10
   branches/fix-links/libs/regex/doc/html/boost_regex/captures.html | 6
   branches/fix-links/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html | 8
   branches/fix-links/libs/regex/doc/html/boost_regex/install.html | 16
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/bad_expression.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/basic_regex.html | 18
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/concepts/traits_concept.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html | 2
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/error_type.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/match_flag_type.html | 6
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/match_results.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html | 6
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html | 10
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/posix.html | 8
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_iterator.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_match.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_replace.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_search.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_token_iterator.html | 4
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_traits.html | 2
   branches/fix-links/libs/regex/doc/html/boost_regex/ref/sub_match.html | 8
   branches/fix-links/libs/regex/doc/html/boost_regex/syntax/basic_extended.html | 66
   branches/fix-links/libs/regex/doc/html/boost_regex/syntax/basic_syntax.html | 44
   branches/fix-links/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html | 84 +-
   branches/fix-links/libs/regex/doc/html/boost_regex/unicode.html | 4
   branches/fix-links/libs/regex/doc/html/index.html | 4
   branches/fix-links/libs/regex/doc/match_flag_type.qbk | 4
   branches/fix-links/libs/regex/test/regress/test_perl_ex.cpp | 11
   branches/fix-links/libs/serialization/doc/acknowledgments.html | 2
   branches/fix-links/libs/signals/doc/faq.xml | 30
   branches/fix-links/libs/statechart/Statechart.sln | 635 +++++++++--------
   branches/fix-links/libs/statechart/doc/acknowledgments.html | 22
   branches/fix-links/libs/statechart/doc/configuration.html | 27
   branches/fix-links/libs/statechart/doc/faq.html | 47 +
   branches/fix-links/libs/statechart/doc/future_and_history.html | 31
   branches/fix-links/libs/statechart/doc/reference.html | 590 ++++++++-------
   branches/fix-links/libs/statechart/example/BitMachine/BitMachine.vcproj | 512 ++++++++-----
   branches/fix-links/libs/statechart/example/Camera/Camera.vcproj | 574 +++++++++------
   branches/fix-links/libs/statechart/example/Handcrafted/Handcrafted.vcproj | 345 +++++---
   branches/fix-links/libs/statechart/example/Keyboard/Keyboard.vcproj | 485 +++++++-----
   branches/fix-links/libs/statechart/example/Performance/Performance.cpp | 29
   branches/fix-links/libs/statechart/example/Performance/Performance.vcproj | 486 +++++++-----
   branches/fix-links/libs/statechart/example/PingPong/PingPong.cpp | 31
   branches/fix-links/libs/statechart/example/PingPong/PingPong.vcproj | 486 +++++++-----
   branches/fix-links/libs/statechart/example/StopWatch/StopWatch.vcproj | 480 +++++++-----
   branches/fix-links/libs/statechart/test/CustomReactionTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/DeferralTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/FifoSchedulerTest.cpp | 11
   branches/fix-links/libs/statechart/test/FifoSchedulerTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/HistoryTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/InStateReactionTest.cpp | 39
   branches/fix-links/libs/statechart/test/InStateReactionTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/InconsistentHistoryTest1.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InconsistentHistoryTest2.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InconsistentHistoryTest3.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InconsistentHistoryTest4.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InconsistentHistoryTest5.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InconsistentHistoryTest6.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InconsistentHistoryTest7.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InconsistentHistoryTest8.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InvalidChartTest1.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InvalidChartTest2.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InvalidChartTest3.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InvalidResultAssignTest.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InvalidResultCopyTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/InvalidResultDefCtorTest.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InvalidTransitionTest1.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/InvalidTransitionTest2.vcproj | 336 +++++---
   branches/fix-links/libs/statechart/test/StateCastTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/StateIterationTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/TerminationTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/TransitionTest.vcproj | 365 ++++++----
   branches/fix-links/libs/statechart/test/TuTest.cpp | 2
   branches/fix-links/libs/statechart/test/TuTest.hpp | 11
   branches/fix-links/libs/statechart/test/TuTest.vcproj | 365 ++++++----
   branches/fix-links/libs/statechart/test/TypeInfoTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/UnconsumedResultTest.vcproj | 340 +++++---
   branches/fix-links/libs/statechart/test/UnsuppDeepHistoryTest.vcproj | 336 +++++---
   branches/fix-links/libs/system/test/Jamfile.v2 | 17
   branches/fix-links/libs/thread/src/tss_null.cpp | 2
   branches/fix-links/libs/tr1/test/test_random.cpp | 1
   branches/fix-links/libs/type_traits/test/is_convertible_test.cpp | 6
   branches/fix-links/libs/type_traits/test/make_signed_test.cpp | 16
   branches/fix-links/libs/type_traits/test/make_unsigned_test.cpp | 16
   branches/fix-links/libs/utility/value_init.htm | 213 +++++
   branches/fix-links/libs/utility/value_init_test.cpp | 37
   branches/fix-links/libs/wave/ChangeLog | 5
   branches/fix-links/libs/wave/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/doc/acknowledgements.html | 2
   branches/fix-links/libs/wave/doc/class_ref_ctxpolicy_depr.html | 2
   branches/fix-links/libs/wave/doc/class_reference_context.html | 2
   branches/fix-links/libs/wave/doc/class_reference_ctxpolicy.html | 2
   branches/fix-links/libs/wave/doc/class_reference_filepos.html | 2
   branches/fix-links/libs/wave/doc/class_reference_inptpolcy.html | 2
   branches/fix-links/libs/wave/doc/class_reference_lexer.html | 2
   branches/fix-links/libs/wave/doc/class_reference_tokentype.html | 2
   branches/fix-links/libs/wave/doc/compiletime_config.html | 2
   branches/fix-links/libs/wave/doc/introduction.html | 2
   branches/fix-links/libs/wave/doc/macro_expansion_process.html | 2
   branches/fix-links/libs/wave/doc/predefined_macros.html | 2
   branches/fix-links/libs/wave/doc/preface.html | 2
   branches/fix-links/libs/wave/doc/quickstart.html | 2
   branches/fix-links/libs/wave/doc/references.html | 2
   branches/fix-links/libs/wave/doc/samples.html | 2
   branches/fix-links/libs/wave/doc/supported_pragmas.html | 2
   branches/fix-links/libs/wave/doc/token_ids.html | 9
   branches/fix-links/libs/wave/doc/tracing_facility.html | 2
   branches/fix-links/libs/wave/doc/wave_driver.html | 2
   branches/fix-links/libs/wave/index.html | 2
   branches/fix-links/libs/wave/samples/advanced_hooks/advanced_hooks.cpp | 2
   branches/fix-links/libs/wave/samples/advanced_hooks/advanced_hooks.hpp | 2
   branches/fix-links/libs/wave/samples/advanced_hooks/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens.cpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens.hpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens_config.hpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_exprgrammar.cpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_literalgrs.cpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_defined_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_slex_lexer.cpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/slex/cpp_slex_lexer.hpp | 3
   branches/fix-links/libs/wave/samples/cpp_tokens/slex/lexer.hpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/slex_interface.hpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/slex_iterator.hpp | 2
   branches/fix-links/libs/wave/samples/cpp_tokens/slex_token.hpp | 2
   branches/fix-links/libs/wave/samples/hannibal/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/samples/hannibal/hannibal.cpp | 2
   branches/fix-links/libs/wave/samples/hannibal/translation_unit_parser.h | 2
   branches/fix-links/libs/wave/samples/hannibal/translation_unit_skipper.h | 2
   branches/fix-links/libs/wave/samples/lexed_tokens/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/samples/lexed_tokens/lexed_tokens.cpp | 2
   branches/fix-links/libs/wave/samples/list_includes/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_exprgrammar.cpp | 2
   branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_literalgrs.cpp | 2
   branches/fix-links/libs/wave/samples/list_includes/instantiate_defined_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/list_includes/instantiate_lexertl_lexer.cpp | 2
   branches/fix-links/libs/wave/samples/list_includes/lexertl/lexertl_lexer.hpp | 2
   branches/fix-links/libs/wave/samples/list_includes/lexertl/wave_lexertl_config.hpp | 2
   branches/fix-links/libs/wave/samples/list_includes/lexertl/wave_lexertl_tables.hpp | 2
   branches/fix-links/libs/wave/samples/list_includes/lexertl_interface.hpp | 2
   branches/fix-links/libs/wave/samples/list_includes/lexertl_iterator.hpp | 2
   branches/fix-links/libs/wave/samples/list_includes/list_includes.cpp | 2
   branches/fix-links/libs/wave/samples/list_includes/list_includes.hpp | 2
   branches/fix-links/libs/wave/samples/list_includes/list_includes_config.hpp | 2
   branches/fix-links/libs/wave/samples/list_includes/list_includes_version.hpp | 2
   branches/fix-links/libs/wave/samples/quick_start/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/samples/quick_start/quick_start.cpp | 2
   branches/fix-links/libs/wave/samples/real_positions/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/samples/real_positions/correct_token_positions.hpp | 2
   branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_exprgrammar.cpp | 2
   branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_literalgrs.cpp | 2
   branches/fix-links/libs/wave/samples/real_positions/instantiate_defined_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/real_positions/instantiate_re2c_lexer.cpp | 2
   branches/fix-links/libs/wave/samples/real_positions/instantiate_re2c_lexer_str.cpp | 2
   branches/fix-links/libs/wave/samples/real_positions/real_position_token.hpp | 2
   branches/fix-links/libs/wave/samples/real_positions/real_positions.cpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/samples/token_statistics/collect_token_statistics.hpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/instantiate_cpp_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/instantiate_defined_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/instantiate_xlex_lexer.cpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/token_statistics.cpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/token_statistics.hpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/token_statistics_version.hpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/xlex/xlex_lexer.hpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/xlex/xpressive_lexer.hpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/xlex_interface.hpp | 2
   branches/fix-links/libs/wave/samples/token_statistics/xlex_iterator.hpp | 2
   branches/fix-links/libs/wave/samples/waveidl/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/samples/waveidl/idl.cpp | 4
   branches/fix-links/libs/wave/samples/waveidl/idl.hpp | 2
   branches/fix-links/libs/wave/samples/waveidl/idl_config.hpp | 2
   branches/fix-links/libs/wave/samples/waveidl/idl_version.hpp | 2
   branches/fix-links/libs/wave/samples/waveidl/idllexer/idl.re | 2
   branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_lex_interface.hpp | 2
   branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_lex_iterator.hpp | 2
   branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re.cpp | 2
   branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re.hpp | 2
   branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re2c_lexer.hpp | 2
   branches/fix-links/libs/wave/samples/waveidl/instantiate_cpp_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/waveidl/instantiate_defined_grammar.cpp | 2
   branches/fix-links/libs/wave/samples/waveidl/instantiate_predef_macros.cpp | 2
   branches/fix-links/libs/wave/samples/waveidl/instantiate_re2c_lexer.cpp | 2
   branches/fix-links/libs/wave/samples/waveidl/instantiate_re2c_lexer_str.cpp | 2
   branches/fix-links/libs/wave/src/cpplexer/re2clex/aq.cpp | 2
   branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp.re | 2
   branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp_re.cpp | 2
   branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp_re.inc | 2
   branches/fix-links/libs/wave/src/cpplexer/re2clex/strict_cpp.re | 2
   branches/fix-links/libs/wave/src/cpplexer/re2clex/strict_cpp_re.inc | 2
   branches/fix-links/libs/wave/src/instantiate_cpp_exprgrammar.cpp | 2
   branches/fix-links/libs/wave/src/instantiate_cpp_grammar.cpp | 2
   branches/fix-links/libs/wave/src/instantiate_cpp_literalgrs.cpp | 2
   branches/fix-links/libs/wave/src/instantiate_defined_grammar.cpp | 2
   branches/fix-links/libs/wave/src/instantiate_predef_macros.cpp | 2
   branches/fix-links/libs/wave/src/instantiate_re2c_lexer.cpp | 2
   branches/fix-links/libs/wave/src/instantiate_re2c_lexer_str.cpp | 2
   branches/fix-links/libs/wave/src/token_ids.cpp | 414 +++++-----
   branches/fix-links/libs/wave/src/wave_config_constant.cpp | 2
   branches/fix-links/libs/wave/test/build/Jamfile.v2 | 2
   branches/fix-links/libs/wave/test/testlexers/cpp_tokens.hpp | 2
   branches/fix-links/libs/wave/test/testlexers/test_lexertl_lexer.cpp | 2
   branches/fix-links/libs/wave/test/testlexers/test_re2c_lexer.cpp | 2
   branches/fix-links/libs/wave/test/testlexers/test_slex_lexer.cpp | 2
   branches/fix-links/libs/wave/test/testlexers/test_xlex_lexer.cpp | 2
   branches/fix-links/libs/wave/test/testwave/cmd_line_utils.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_001.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_002.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_003.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_004.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_005.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_006.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_007.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_008.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_009.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_010.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_011.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_012.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_013.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_014.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_015.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_016.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_017.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_018.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_019.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_020.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_021.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_022.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_023.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_024.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_025.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_026.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_027.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_028.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_029.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_030.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_031.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_032.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_033.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_034.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_035.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_036.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_1_037.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_001.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_002.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_003.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_004.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_005.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_006.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_007.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_008.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_009.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_010.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_011.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_012.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_013.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_014.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_015.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_016.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_2_017.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_3_001.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_3_002.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_3_003.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_3_004.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_4_001.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_4_002.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_4_003.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_4_004.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_001.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_002.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_003.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_004.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_005.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_006.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_007.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_007.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_008.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_009.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_010.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_011.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_012.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_013.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_014.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_015.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_016.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_017.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_018.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_019.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_020.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_021.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_022.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_023.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_024.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_025.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_026.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_027.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_028.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_029.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_030.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_031.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_031.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_032.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_033.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_034.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_01.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_02.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_03.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_04.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_05.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_06.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_07.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_08.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_09.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_10.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_11.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_12.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_13.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_14.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_15.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_001.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_002.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_003.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_004.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_005.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_006.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_007.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_008.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_009.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_010.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_011.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_012.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_013.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_014.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_015.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_016.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_017.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_018.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_019.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_020.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_021.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_022.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_023.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_024.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_025.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_026.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_027.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_028.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_029.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_029.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_030.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_030.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_031.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_032.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_033.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_034.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_035.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_036.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_037.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_038.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_039.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_040.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_041.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_042.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_043.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_044.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_045.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_046.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_047.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_048.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_049.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_050.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_051.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_052.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_053.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_054.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_055.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_056.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_057.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_058.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_059.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_060.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_061.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_062.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_063.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_063.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_064.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_065.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_066.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_066.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_067.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_067.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_068.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_6_069.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_001.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_002.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_003.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_004.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_005.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_006.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_007.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_008.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_009.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_010.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_011.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_012.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_013.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_014.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_015.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_016.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_016.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_017.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testfiles/t_9_018.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testwave.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testwave_app.cpp | 4
   branches/fix-links/libs/wave/test/testwave/testwave_app.hpp | 2
   branches/fix-links/libs/wave/test/testwave/testwave_app_dll.cpp | 2
   branches/fix-links/libs/wave/test/testwave/testwave_dll.cpp | 2
   branches/fix-links/libs/xpressive/doc/acknowledgements.qbk | 2
   branches/fix-links/libs/xpressive/doc/actions.qbk | 2
   branches/fix-links/libs/xpressive/doc/concepts.qbk | 2
   branches/fix-links/libs/xpressive/doc/dynamic_regexes.qbk | 2
   branches/fix-links/libs/xpressive/doc/examples.qbk | 2
   branches/fix-links/libs/xpressive/doc/grammars.qbk | 2
   branches/fix-links/libs/xpressive/doc/history.qbk | 2
   branches/fix-links/libs/xpressive/doc/installation.qbk | 2
   branches/fix-links/libs/xpressive/doc/introduction.qbk | 2
   branches/fix-links/libs/xpressive/doc/matching.qbk | 2
   branches/fix-links/libs/xpressive/doc/nyi.qbk | 2
   branches/fix-links/libs/xpressive/doc/perf.qbk | 2
   branches/fix-links/libs/xpressive/doc/preface.qbk | 2
   branches/fix-links/libs/xpressive/doc/quick_start.qbk | 2
   branches/fix-links/libs/xpressive/doc/regexpp_diffs.qbk | 2
   branches/fix-links/libs/xpressive/doc/results.qbk | 2
   branches/fix-links/libs/xpressive/doc/static_regexes.qbk | 2
   branches/fix-links/libs/xpressive/doc/substitutions.qbk | 2
   branches/fix-links/libs/xpressive/doc/tips_n_tricks.qbk | 2
   branches/fix-links/libs/xpressive/doc/tokenization.qbk | 2
   branches/fix-links/libs/xpressive/doc/traits.qbk | 2
   branches/fix-links/libs/xpressive/doc/xpressive.qbk | 2
   branches/fix-links/libs/xpressive/proto/doc/Jamfile.v2 | 16
   branches/fix-links/libs/xpressive/proto/doc/acknowledgements.qbk | 2
   branches/fix-links/libs/xpressive/proto/doc/calculator.qbk | 4
   branches/fix-links/libs/xpressive/proto/doc/examples.qbk | 2
   branches/fix-links/libs/xpressive/proto/doc/extensibility.qbk | 2
   branches/fix-links/libs/xpressive/proto/doc/grammars.qbk | 30
   branches/fix-links/libs/xpressive/proto/doc/history.qbk | 7
   branches/fix-links/libs/xpressive/proto/doc/implementation.qbk | 2
   branches/fix-links/libs/xpressive/proto/doc/installation.qbk | 12
   branches/fix-links/libs/xpressive/proto/doc/preface.qbk | 5
   branches/fix-links/libs/xpressive/proto/doc/proto.qbk | 5
   branches/fix-links/libs/xpressive/proto/doc/protodoc.xml | 1224 +++++++++++++++++----------------
   branches/fix-links/libs/xpressive/proto/doc/quick_start.qbk | 2
   branches/fix-links/libs/xpressive/proto/doc/rationale.qbk | 2
   branches/fix-links/libs/xpressive/proto/doc/transforms.qbk | 1445 ++++++++++++++++++++++++---------------
   branches/fix-links/libs/xpressive/proto/example/calc1.cpp | 4
   branches/fix-links/libs/xpressive/proto/example/calc2.cpp | 22
   branches/fix-links/libs/xpressive/proto/example/calc3.cpp | 117 --
   branches/fix-links/libs/xpressive/proto/example/hello.cpp | 2
   branches/fix-links/libs/xpressive/proto/example/lazy_vector.cpp | 10
   branches/fix-links/libs/xpressive/proto/example/mixed.cpp | 97 +-
   branches/fix-links/libs/xpressive/proto/example/rgb.cpp | 72 +
   branches/fix-links/libs/xpressive/proto/example/tarray.cpp | 24
   branches/fix-links/libs/xpressive/proto/example/vec3.cpp | 50
   branches/fix-links/libs/xpressive/proto/example/vector.cpp | 8
   branches/fix-links/libs/xpressive/proto/test/calculator.cpp | 14
   branches/fix-links/libs/xpressive/proto/test/examples.cpp | 373 ++++++---
   branches/fix-links/libs/xpressive/proto/test/lambda.cpp | 92 +-
   branches/fix-links/libs/xpressive/proto/test/matches.cpp | 30
   branches/fix-links/libs/xpressive/proto/test/proto_fusion.cpp | 20
   branches/fix-links/libs/xpressive/proto/test/proto_fusion_s.cpp | 38
   branches/fix-links/libs/xpressive/proto/test/toy_spirit.cpp | 104 +-
   branches/fix-links/libs/xpressive/proto/test/toy_spirit2.cpp | 365 +++------
   branches/fix-links/libs/xpressive/test/Jamfile.v2 | 2
   branches/fix-links/status/Jamfile.v2 | 3
   branches/fix-links/status/explicit-failures-markup.xml | 223 ++++--
   branches/fix-links/tools/bcp/add_path.cpp | 7
   branches/fix-links/tools/boostbook/doc/reference.dtdxml | 2
   branches/fix-links/tools/boostbook/doc/reference.xml | 2
   branches/fix-links/tools/boostbook/dtd/boostbook.dtd | 2
   branches/fix-links/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl | 28
   branches/fix-links/tools/boostbook/xsl/type.xsl | 8
   branches/fix-links/tools/build/v2/build-system.jam | 1251 +++++++++++++++++++---------------
   branches/fix-links/tools/build/v2/build/alias.jam | 52
   branches/fix-links/tools/build/v2/build/build-request.jam | 185 ++--
   branches/fix-links/tools/build/v2/build/feature.jam | 869 +++++++++++------------
   branches/fix-links/tools/build/v2/build/generators.jam | 902 ++++++++++++------------
   branches/fix-links/tools/build/v2/build/modifiers.jam | 16
   branches/fix-links/tools/build/v2/build/project.jam | 799 +++++++++++-----------
   branches/fix-links/tools/build/v2/build/property-set.jam | 296 +++----
   branches/fix-links/tools/build/v2/build/property.jam | 424 +++++------
   branches/fix-links/tools/build/v2/build/targets.jam | 1262 ++++++++++++++++------------------
   branches/fix-links/tools/build/v2/build/toolset.jam | 374 +++++-----
   branches/fix-links/tools/build/v2/build/type.jam | 299 ++++---
   branches/fix-links/tools/build/v2/build/version.jam | 8
   branches/fix-links/tools/build/v2/build/virtual-target.jam | 879 ++++++++++++------------
   branches/fix-links/tools/build/v2/doc/src/architecture.xml | 2
   branches/fix-links/tools/build/v2/doc/src/extending.xml | 106 +-
   branches/fix-links/tools/build/v2/doc/src/faq.xml | 10
   branches/fix-links/tools/build/v2/doc/src/reference.xml | 8
   branches/fix-links/tools/build/v2/doc/src/tutorial.xml | 11
   branches/fix-links/tools/build/v2/hacking.txt | 80 +-
   branches/fix-links/tools/build/v2/kernel/bootstrap.jam | 3
   branches/fix-links/tools/build/v2/kernel/errors.jam | 134 +-
   branches/fix-links/tools/build/v2/kernel/modules.jam | 265 +++---
   branches/fix-links/tools/build/v2/notes/build_dir_option.txt | 49
   branches/fix-links/tools/build/v2/options/help.jam | 11
   branches/fix-links/tools/build/v2/roll.sh | 5
   branches/fix-links/tools/build/v2/test/BoostBuild.py | 443 ++++++-----
   branches/fix-links/tools/build/v2/test/abs_workdir.py | 29
   branches/fix-links/tools/build/v2/test/alias.py | 122 ++-
   branches/fix-links/tools/build/v2/test/conditionals.py | 58
   branches/fix-links/tools/build/v2/test/conditionals2.py | 33
   branches/fix-links/tools/build/v2/test/conditionals3.py | 21
   branches/fix-links/tools/build/v2/test/double_loading.py | 39
   branches/fix-links/tools/build/v2/test/library_property.py | 2
   branches/fix-links/tools/build/v2/test/module-actions/bootstrap.jam | 46
   branches/fix-links/tools/build/v2/test/module_actions.py | 35
   branches/fix-links/tools/build/v2/test/project_test3.py | 2
   branches/fix-links/tools/build/v2/test/tag.py | 148 ++-
   branches/fix-links/tools/build/v2/test/test_all.py | 9
   branches/fix-links/tools/build/v2/test/timedata.py | 31
   branches/fix-links/tools/build/v2/tools/builtin.jam | 941 ++++++++++++-------------
   branches/fix-links/tools/build/v2/tools/cast.jam | 54
   branches/fix-links/tools/build/v2/tools/common.jam | 455 ++++++------
   branches/fix-links/tools/build/v2/tools/doxygen.jam | 2
   branches/fix-links/tools/build/v2/tools/generate.jam | 74 -
   branches/fix-links/tools/build/v2/tools/gettext.jam | 96 +-
   branches/fix-links/tools/build/v2/tools/intel-win.jam | 4
   branches/fix-links/tools/build/v2/tools/intel.jam | 1
   branches/fix-links/tools/build/v2/tools/msvc.jam | 451 ++++++------
   branches/fix-links/tools/build/v2/tools/notfile.jam | 46
   branches/fix-links/tools/build/v2/tools/package.jam | 2
   branches/fix-links/tools/build/v2/tools/pch.jam | 56
   branches/fix-links/tools/build/v2/tools/python.jam | 58
   branches/fix-links/tools/build/v2/tools/qt4.jam | 48
   branches/fix-links/tools/build/v2/tools/stage.jam | 359 +++++----
   branches/fix-links/tools/build/v2/tools/testing.jam | 419 +++++-----
   branches/fix-links/tools/build/v2/util/doc.jam | 96 +-
   branches/fix-links/tools/build/v2/util/indirect.jam | 65
   branches/fix-links/tools/build/v2/util/order.jam | 130 +-
   branches/fix-links/tools/build/v2/util/os.jam | 78 +
   branches/fix-links/tools/build/v2/util/path.jam | 118 +-
   branches/fix-links/tools/jam/doc/bjam.qbk | 2
   branches/fix-links/tools/jam/src/build.bat | 2
   branches/fix-links/tools/jam/src/builtins.c | 23
   branches/fix-links/tools/jam/src/make1.c | 2
   branches/fix-links/tools/jam/src/modules/property-set.c | 33
   branches/fix-links/tools/jam/src/native.c | 10
   branches/fix-links/tools/quickbook/detail/actions.cpp | 30
   branches/fix-links/tools/quickbook/detail/actions.hpp | 12
   branches/fix-links/tools/quickbook/detail/actions_class.cpp | 3
   branches/fix-links/tools/quickbook/detail/actions_class.hpp | 4
   branches/fix-links/tools/quickbook/doc_info.hpp | 9
   branches/fix-links/tools/regression/src/process_jam_log.cpp | 3
   branches/fix-links/tools/wave/build/Jamfile.v2 | 2
   branches/fix-links/tools/wave/cpp.cpp | 4
   branches/fix-links/tools/wave/cpp.hpp | 2
   branches/fix-links/tools/wave/cpp_config.hpp | 2
   branches/fix-links/tools/wave/cpp_version.hpp | 2
   branches/fix-links/tools/wave/stop_watch.hpp | 2
   branches/fix-links/tools/wave/trace_macro_expansion.hpp | 2
   948 files changed, 27657 insertions(+), 22183 deletions(-)

Modified: branches/fix-links/boost/asio/detail/epoll_reactor.hpp
==============================================================================
--- branches/fix-links/boost/asio/detail/epoll_reactor.hpp (original)
+++ branches/fix-links/boost/asio/detail/epoll_reactor.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -67,7 +67,8 @@
       pending_cancellations_(),
       stop_thread_(false),
       thread_(0),
- shutdown_(false)
+ shutdown_(false),
+ need_epoll_wait_(true)
   {
     // Start the reactor's internal thread only if needed.
     if (Own_Thread)
@@ -388,7 +389,9 @@
 
     // Block on the epoll descriptor.
     epoll_event events[128];
- int num_events = epoll_wait(epoll_fd_, events, 128, timeout);
+ int num_events = (block || need_epoll_wait_)
+ ? epoll_wait(epoll_fd_, events, 128, timeout)
+ : 0;
 
     lock.lock();
     wait_in_progress_ = false;
@@ -479,6 +482,10 @@
       cancel_ops_unlocked(pending_cancellations_[i]);
     pending_cancellations_.clear();
 
+ // Determine whether epoll_wait should be called when the reactor next runs.
+ need_epoll_wait_ = !read_op_queue_.empty()
+ || !write_op_queue_.empty() || !except_op_queue_.empty();
+
     cleanup_operations_and_timers(lock);
   }
 
@@ -633,6 +640,9 @@
 
   // Whether the service has been shut down.
   bool shutdown_;
+
+ // Whether we need to call epoll_wait the next time the reactor is run.
+ bool need_epoll_wait_;
 };
 
 } // namespace detail

Modified: branches/fix-links/boost/asio/detail/kqueue_reactor.hpp
==============================================================================
--- branches/fix-links/boost/asio/detail/kqueue_reactor.hpp (original)
+++ branches/fix-links/boost/asio/detail/kqueue_reactor.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -75,7 +75,8 @@
       pending_cancellations_(),
       stop_thread_(false),
       thread_(0),
- shutdown_(false)
+ shutdown_(false),
+ need_kqueue_wait_(true)
   {
     // Start the reactor's internal thread only if needed.
     if (Own_Thread)
@@ -374,7 +375,9 @@
 
     // Block on the kqueue descriptor.
     struct kevent events[128];
- int num_events = kevent(kqueue_fd_, 0, 0, events, 128, timeout);
+ int num_events = (block || need_kqueue_wait_)
+ ? kevent(kqueue_fd_, 0, 0, events, 128, timeout)
+ : 0;
 
     lock.lock();
     wait_in_progress_ = false;
@@ -479,6 +482,10 @@
       cancel_ops_unlocked(pending_cancellations_[i]);
     pending_cancellations_.clear();
 
+ // Determine whether kqueue needs to be called next time the reactor is run.
+ need_kqueue_wait_ = !read_op_queue_.empty()
+ || !write_op_queue_.empty() || !except_op_queue_.empty();
+
     cleanup_operations_and_timers(lock);
   }
 
@@ -631,6 +638,9 @@
 
   // Whether the service has been shut down.
   bool shutdown_;
+
+ // Whether we need to call kqueue the next time the reactor is run.
+ bool need_kqueue_wait_;
 };
 
 } // namespace detail

Modified: branches/fix-links/boost/asio/detail/push_options.hpp
==============================================================================
--- branches/fix-links/boost/asio/detail/push_options.hpp (original)
+++ branches/fix-links/boost/asio/detail/push_options.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -90,6 +90,12 @@
 # pragma warning (disable:4244)
 # pragma warning (disable:4355)
 # pragma warning (disable:4675)
+# if defined(_M_IX86) && defined(_Wp64)
+// The /Wp64 option is broken. If you want to check 64 bit portability, use a
+// 64 bit compiler!
+# pragma warning (disable:4311)
+# pragma warning (disable:4312)
+# endif // defined(_M_IX86) && defined(_Wp64)
 # pragma pack (push, 8)
 // Note that if the /Og optimisation flag is enabled with MSVC6, the compiler
 // has a tendency to incorrectly optimise away some calls to member template

Modified: branches/fix-links/boost/asio/detail/socket_ops.hpp
==============================================================================
--- branches/fix-links/boost/asio/detail/socket_ops.hpp (original)
+++ branches/fix-links/boost/asio/detail/socket_ops.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1812,19 +1812,21 @@
 # if defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501) || defined(UNDER_CE)
   // Building for Windows XP, Windows Server 2003, or later.
   clear_error(ec);
- int error = ::getnameinfo(addr, addrlen, host, static_cast<DWORD>(hostlen),
+ int error = ::getnameinfo(addr, static_cast<socklen_t>(addrlen),
+ host, static_cast<DWORD>(hostlen),
       serv, static_cast<DWORD>(servlen), flags);
   return ec = translate_addrinfo_error(error);
 # else
   // Building for Windows 2000 or earlier.
   typedef int (WSAAPI *gni_t)(const socket_addr_type*,
- int, char*, std::size_t, char*, std::size_t, int);
+ int, char*, DWORD, char*, DWORD, int);
   if (HMODULE winsock_module = ::GetModuleHandleA("ws2_32"))
   {
     if (gni_t gni = (gni_t)::GetProcAddress(winsock_module, "getnameinfo"))
     {
       clear_error(ec);
- int error = gni(addr, addrlen, host, hostlen, serv, servlen, flags);
+ int error = gni(addr, addrlen, host, static_cast<DWORD>(hostlen),
+ serv, static_cast<DWORD>(servlen), flags);
       return ec = translate_addrinfo_error(error);
     }
   }

Modified: branches/fix-links/boost/asio/detail/socket_types.hpp
==============================================================================
--- branches/fix-links/boost/asio/detail/socket_types.hpp (original)
+++ branches/fix-links/boost/asio/detail/socket_types.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -92,7 +92,7 @@
 # include <sys/ioctl.h>
 # include <sys/poll.h>
 # include <sys/types.h>
-# if defined(__hpux)
+# if defined(__hpux) && !defined(__HP_aCC)
 # include <sys/time.h>
 # else
 # include <sys/select.h>

Modified: branches/fix-links/boost/asio/detail/win_iocp_io_service.hpp
==============================================================================
--- branches/fix-links/boost/asio/detail/win_iocp_io_service.hpp (original)
+++ branches/fix-links/boost/asio/detail/win_iocp_io_service.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -34,7 +34,6 @@
 #include <boost/asio/detail/service_base.hpp>
 #include <boost/asio/detail/socket_types.hpp>
 #include <boost/asio/detail/timer_queue.hpp>
-#include <boost/asio/detail/win_iocp_operation.hpp>
 #include <boost/asio/detail/mutex.hpp>
 
 namespace boost {
@@ -45,14 +44,64 @@
   : public boost::asio::detail::service_base<win_iocp_io_service>
 {
 public:
- // Base class for all operations.
- typedef win_iocp_operation operation;
+ // Base class for all operations. A function pointer is used instead of
+ // virtual functions to avoid the associated overhead.
+ //
+ // This class inherits from OVERLAPPED so that we can downcast to get back to
+ // the operation pointer from the LPOVERLAPPED out parameter of
+ // GetQueuedCompletionStatus.
+ class operation
+ : public OVERLAPPED
+ {
+ public:
+ typedef void (*invoke_func_type)(operation*, DWORD, size_t);
+ typedef void (*destroy_func_type)(operation*);
+
+ operation(win_iocp_io_service& iocp_service,
+ invoke_func_type invoke_func, destroy_func_type destroy_func)
+ : outstanding_operations_(&iocp_service.outstanding_operations_),
+ invoke_func_(invoke_func),
+ destroy_func_(destroy_func)
+ {
+ Internal = 0;
+ InternalHigh = 0;
+ Offset = 0;
+ OffsetHigh = 0;
+ hEvent = 0;
+
+ ::InterlockedIncrement(outstanding_operations_);
+ }
+
+ void do_completion(DWORD last_error, size_t bytes_transferred)
+ {
+ invoke_func_(this, last_error, bytes_transferred);
+ }
+
+ void destroy()
+ {
+ destroy_func_(this);
+ }
+
+ protected:
+ // Prevent deletion through this type.
+ ~operation()
+ {
+ ::InterlockedDecrement(outstanding_operations_);
+ }
+
+ private:
+ long* outstanding_operations_;
+ invoke_func_type invoke_func_;
+ destroy_func_type destroy_func_;
+ };
+
 
   // Constructor.
   win_iocp_io_service(boost::asio::io_service& io_service)
     : boost::asio::detail::service_base<win_iocp_io_service>(io_service),
       iocp_(),
       outstanding_work_(0),
+ outstanding_operations_(0),
       stopped_(0),
       shutdown_(0),
       timer_thread_(0),
@@ -80,7 +129,7 @@
   {
     ::InterlockedExchange(&shutdown_, 1);
 
- for (;;)
+ while (::InterlockedExchangeAdd(&outstanding_operations_, 0) > 0)
     {
       DWORD bytes_transferred = 0;
 #if (WINVER < 0x0500)
@@ -89,12 +138,8 @@
       DWORD_PTR completion_key = 0;
 #endif
       LPOVERLAPPED overlapped = 0;
- ::SetLastError(0);
- BOOL ok = ::GetQueuedCompletionStatus(iocp_.handle,
- &bytes_transferred, &completion_key, &overlapped, 0);
- DWORD last_error = ::GetLastError();
- if (!ok && overlapped == 0 && last_error == WAIT_TIMEOUT)
- break;
+ ::GetQueuedCompletionStatus(iocp_.handle, &bytes_transferred,
+ &completion_key, &overlapped, INFINITE);
       if (overlapped)
         static_cast<operation*>(overlapped)->destroy();
     }
@@ -250,7 +295,7 @@
   }
 
   // Request invocation of the given OVERLAPPED-derived operation.
- void post_completion(win_iocp_operation* op, DWORD op_last_error,
+ void post_completion(operation* op, DWORD op_last_error,
       DWORD bytes_transferred)
   {
     // Enqueue the operation on the I/O completion port.
@@ -348,7 +393,7 @@
             &timer_thread_, this_thread_id, 0) == 0);
 
       // Calculate timeout for GetQueuedCompletionStatus call.
- DWORD timeout = max_timeout;
+ DWORD timeout = INFINITE;
       if (dispatching_timers)
       {
         boost::asio::detail::mutex::scoped_lock lock(timer_mutex_);
@@ -372,13 +417,28 @@
       // Dispatch any pending timers.
       if (dispatching_timers)
       {
- boost::asio::detail::mutex::scoped_lock lock(timer_mutex_);
- timer_queues_copy_ = timer_queues_;
- for (std::size_t i = 0; i < timer_queues_.size(); ++i)
+ try
         {
- timer_queues_[i]->dispatch_timers();
- timer_queues_[i]->dispatch_cancellations();
- timer_queues_[i]->cleanup_timers();
+ boost::asio::detail::mutex::scoped_lock lock(timer_mutex_);
+ timer_queues_copy_ = timer_queues_;
+ for (std::size_t i = 0; i < timer_queues_.size(); ++i)
+ {
+ timer_queues_[i]->dispatch_timers();
+ timer_queues_[i]->dispatch_cancellations();
+ timer_queues_[i]->cleanup_timers();
+ }
+ }
+ catch (...)
+ {
+ // Transfer responsibility for dispatching timers to another thread.
+ if (::InterlockedCompareExchange(&timer_thread_,
+ 0, this_thread_id) == this_thread_id)
+ {
+ ::PostQueuedCompletionStatus(iocp_.handle,
+ 0, transfer_timer_dispatching, 0);
+ }
+
+ throw;
         }
       }
 
@@ -533,7 +593,7 @@
   {
     handler_operation(win_iocp_io_service& io_service,
         Handler handler)
- : operation(&handler_operation<Handler>::do_completion_impl,
+ : operation(io_service, &handler_operation<Handler>::do_completion_impl,
           &handler_operation<Handler>::destroy_impl),
         io_service_(io_service),
         handler_(handler)
@@ -594,6 +654,10 @@
   // The count of unfinished work.
   long outstanding_work_;
 
+ // The count of unfinished operations.
+ long outstanding_operations_;
+ friend class operation;
+
   // Flag to indicate whether the event loop has been stopped.
   long stopped_;
 
@@ -603,7 +667,7 @@
   enum
   {
     // Maximum GetQueuedCompletionStatus timeout, in milliseconds.
- max_timeout = 1000,
+ max_timeout = 500,
 
     // Completion key value to indicate that responsibility for dispatching
     // timers is being cooperatively transferred from one thread to another.

Deleted: branches/fix-links/boost/asio/detail/win_iocp_operation.hpp
==============================================================================
--- branches/fix-links/boost/asio/detail/win_iocp_operation.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
+++ (empty file)
@@ -1,83 +0,0 @@
-//
-// win_iocp_operation.hpp
-// ~~~~~~~~~~~~~~~~~~~~~~
-//
-// Copyright (c) 2003-2007 Christopher M. Kohlhoff (chris at kohlhoff dot com)
-//
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-//
-
-#ifndef BOOST_ASIO_DETAIL_WIN_IOCP_OPERATION_HPP
-#define BOOST_ASIO_DETAIL_WIN_IOCP_OPERATION_HPP
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1200)
-# pragma once
-#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
-
-#include <boost/asio/detail/push_options.hpp>
-
-#include <boost/asio/detail/win_iocp_io_service_fwd.hpp>
-
-#if defined(BOOST_ASIO_HAS_IOCP)
-
-#include <boost/asio/detail/socket_types.hpp>
-
-namespace boost {
-namespace asio {
-namespace detail {
-
-// Base class for all IOCP operations. A function pointer is used instead of
-// virtual functions to avoid the associated overhead.
-//
-// This class inherits from OVERLAPPED so that we can downcast to get back to
-// the win_iocp_operation pointer from the LPOVERLAPPED out parameter of
-// GetQueuedCompletionStatus.
-struct win_iocp_operation
- : public OVERLAPPED
-{
- typedef void (*invoke_func_type)(win_iocp_operation*, DWORD, size_t);
- typedef void (*destroy_func_type)(win_iocp_operation*);
-
- win_iocp_operation(invoke_func_type invoke_func,
- destroy_func_type destroy_func)
- : invoke_func_(invoke_func),
- destroy_func_(destroy_func)
- {
- Internal = 0;
- InternalHigh = 0;
- Offset = 0;
- OffsetHigh = 0;
- hEvent = 0;
- }
-
- void do_completion(DWORD last_error, size_t bytes_transferred)
- {
- invoke_func_(this, last_error, bytes_transferred);
- }
-
- void destroy()
- {
- destroy_func_(this);
- }
-
-protected:
- // Prevent deletion through this type.
- ~win_iocp_operation()
- {
- }
-
-private:
- invoke_func_type invoke_func_;
- destroy_func_type destroy_func_;
-};
-
-} // namespace detail
-} // namespace asio
-} // namespace boost
-
-#endif // defined(BOOST_ASIO_HAS_IOCP)
-
-#include <boost/asio/detail/pop_options.hpp>
-
-#endif // BOOST_ASIO_DETAIL_WIN_IOCP_OPERATION_HPP

Modified: branches/fix-links/boost/asio/detail/win_iocp_socket_service.hpp
==============================================================================
--- branches/fix-links/boost/asio/detail/win_iocp_socket_service.hpp (original)
+++ branches/fix-links/boost/asio/detail/win_iocp_socket_service.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -57,7 +57,7 @@
   typedef typename Protocol::endpoint endpoint_type;
 
   // Base class for all operations.
- typedef win_iocp_operation operation;
+ typedef win_iocp_io_service::operation operation;
 
   struct noop_deleter { void operator()(void*) {} };
   typedef boost::shared_ptr<void> shared_cancel_token_type;
@@ -681,13 +681,13 @@
     : public operation
   {
   public:
- send_operation(boost::asio::io_service& io_service,
+ send_operation(win_iocp_io_service& io_service,
         weak_cancel_token_type cancel_token,
         const ConstBufferSequence& buffers, Handler handler)
- : operation(
+ : operation(io_service,
           &send_operation<ConstBufferSequence, Handler>::do_completion_impl,
           &send_operation<ConstBufferSequence, Handler>::destroy_impl),
- work_(io_service),
+ work_(io_service.get_io_service()),
         cancel_token_(cancel_token),
         buffers_(buffers),
         handler_(handler)
@@ -783,8 +783,8 @@
     typedef send_operation<ConstBufferSequence, Handler> value_type;
     typedef handler_alloc_traits<Handler, value_type> alloc_traits;
     raw_handler_ptr<alloc_traits> raw_ptr(handler);
- handler_ptr<alloc_traits> ptr(raw_ptr,
- this->get_io_service(), impl.cancel_token_, buffers, handler);
+ handler_ptr<alloc_traits> ptr(raw_ptr, iocp_service_,
+ impl.cancel_token_, buffers, handler);
 
     // Copy buffers into WSABUF array.
     ::WSABUF bufs[max_buffers];
@@ -861,7 +861,7 @@
     // Send the data.
     DWORD bytes_transferred = 0;
     int result = ::WSASendTo(impl.socket_, bufs, i, &bytes_transferred,
- flags, destination.data(), destination.size(), 0, 0);
+ flags, destination.data(), static_cast<int>(destination.size()), 0, 0);
     if (result != 0)
     {
       DWORD last_error = ::WSAGetLastError();
@@ -881,12 +881,12 @@
     : public operation
   {
   public:
- send_to_operation(boost::asio::io_service& io_service,
+ send_to_operation(win_iocp_io_service& io_service,
         const ConstBufferSequence& buffers, Handler handler)
- : operation(
+ : operation(io_service,
           &send_to_operation<ConstBufferSequence, Handler>::do_completion_impl,
           &send_to_operation<ConstBufferSequence, Handler>::destroy_impl),
- work_(io_service),
+ work_(io_service.get_io_service()),
         buffers_(buffers),
         handler_(handler)
     {
@@ -974,8 +974,7 @@
     typedef send_to_operation<ConstBufferSequence, Handler> value_type;
     typedef handler_alloc_traits<Handler, value_type> alloc_traits;
     raw_handler_ptr<alloc_traits> raw_ptr(handler);
- handler_ptr<alloc_traits> ptr(raw_ptr,
- this->get_io_service(), buffers, handler);
+ handler_ptr<alloc_traits> ptr(raw_ptr, iocp_service_, buffers, handler);
 
     // Copy buffers into WSABUF array.
     ::WSABUF bufs[max_buffers];
@@ -992,8 +991,8 @@
 
     // Send the data.
     DWORD bytes_transferred = 0;
- int result = ::WSASendTo(impl.socket_, bufs, i, &bytes_transferred,
- flags, destination.data(), destination.size(), ptr.get(), 0);
+ int result = ::WSASendTo(impl.socket_, bufs, i, &bytes_transferred, flags,
+ destination.data(), static_cast<int>(destination.size()), ptr.get(), 0);
     DWORD last_error = ::WSAGetLastError();
 
     // Check if the operation completed immediately.
@@ -1075,15 +1074,15 @@
     : public operation
   {
   public:
- receive_operation(boost::asio::io_service& io_service,
+ receive_operation(win_iocp_io_service& io_service,
         weak_cancel_token_type cancel_token,
         const MutableBufferSequence& buffers, Handler handler)
- : operation(
+ : operation(io_service,
           &receive_operation<
             MutableBufferSequence, Handler>::do_completion_impl,
           &receive_operation<
             MutableBufferSequence, Handler>::destroy_impl),
- work_(io_service),
+ work_(io_service.get_io_service()),
         cancel_token_(cancel_token),
         buffers_(buffers),
         handler_(handler)
@@ -1186,8 +1185,8 @@
     typedef receive_operation<MutableBufferSequence, Handler> value_type;
     typedef handler_alloc_traits<Handler, value_type> alloc_traits;
     raw_handler_ptr<alloc_traits> raw_ptr(handler);
- handler_ptr<alloc_traits> ptr(raw_ptr,
- this->get_io_service(), impl.cancel_token_, buffers, handler);
+ handler_ptr<alloc_traits> ptr(raw_ptr, iocp_service_,
+ impl.cancel_token_, buffers, handler);
 
     // Copy buffers into WSABUF array.
     ::WSABUF bufs[max_buffers];
@@ -1291,17 +1290,17 @@
     : public operation
   {
   public:
- receive_from_operation(boost::asio::io_service& io_service,
+ receive_from_operation(win_iocp_io_service& io_service,
         endpoint_type& endpoint, const MutableBufferSequence& buffers,
         Handler handler)
- : operation(
+ : operation(io_service,
           &receive_from_operation<
             MutableBufferSequence, Handler>::do_completion_impl,
           &receive_from_operation<
             MutableBufferSequence, Handler>::destroy_impl),
         endpoint_(endpoint),
         endpoint_size_(static_cast<int>(endpoint.capacity())),
- work_(io_service),
+ work_(io_service.get_io_service()),
         buffers_(buffers),
         handler_(handler)
     {
@@ -1406,8 +1405,8 @@
     typedef receive_from_operation<MutableBufferSequence, Handler> value_type;
     typedef handler_alloc_traits<Handler, value_type> alloc_traits;
     raw_handler_ptr<alloc_traits> raw_ptr(handler);
- handler_ptr<alloc_traits> ptr(raw_ptr,
- this->get_io_service(), sender_endp, buffers, handler);
+ handler_ptr<alloc_traits> ptr(raw_ptr, iocp_service_,
+ sender_endp, buffers, handler);
 
     // Copy buffers into WSABUF array.
     ::WSABUF bufs[max_buffers];
@@ -1509,7 +1508,7 @@
         socket_type socket, socket_type new_socket, Socket& peer,
         const protocol_type& protocol, endpoint_type* peer_endpoint,
         bool enable_connection_aborted, Handler handler)
- : operation(
+ : operation(io_service,
           &accept_operation<Socket, Handler>::do_completion_impl,
           &accept_operation<Socket, Handler>::destroy_impl),
         io_service_(io_service),

Modified: branches/fix-links/boost/asio/error.hpp
==============================================================================
--- branches/fix-links/boost/asio/error.hpp (original)
+++ branches/fix-links/boost/asio/error.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -71,6 +71,11 @@
   /// Operation already in progress.
   already_started = BOOST_ASIO_SOCKET_ERROR(EALREADY),
 
+ /// Broken pipe.
+ broken_pipe = BOOST_ASIO_WIN_OR_POSIX(
+ BOOST_ASIO_NATIVE_ERROR(ERROR_BROKEN_PIPE),
+ BOOST_ASIO_NATIVE_ERROR(EPIPE)),
+
   /// A connection has been aborted.
   connection_aborted = BOOST_ASIO_SOCKET_ERROR(ECONNABORTED),
 

Modified: branches/fix-links/boost/asio/ssl/detail/openssl_init.hpp
==============================================================================
--- branches/fix-links/boost/asio/ssl/detail/openssl_init.hpp (original)
+++ branches/fix-links/boost/asio/ssl/detail/openssl_init.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -20,10 +20,12 @@
 
 #include <boost/asio/detail/push_options.hpp>
 #include <vector>
+#include <boost/assert.hpp>
 #include <boost/shared_ptr.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
 #include <boost/asio/detail/mutex.hpp>
+#include <boost/asio/detail/tss_ptr.hpp>
 #include <boost/asio/ssl/detail/openssl_types.hpp>
 
 namespace boost {
@@ -52,6 +54,7 @@
         for (size_t i = 0; i < mutexes_.size(); ++i)
           mutexes_[i].reset(new boost::asio::detail::mutex);
         ::CRYPTO_set_locking_callback(&do_init::openssl_locking_func);
+ ::CRYPTO_set_id_callback(&do_init::openssl_id_func);
       }
     }
 
@@ -59,6 +62,7 @@
     {
       if (Do_Init)
       {
+ ::CRYPTO_set_id_callback(0);
         ::CRYPTO_set_locking_callback(0);
         ::ERR_free_strings();
         ::ERR_remove_state(0);
@@ -81,6 +85,15 @@
     }
 
   private:
+ static unsigned long openssl_id_func()
+ {
+ void* id = instance()->thread_id_;
+ if (id == 0)
+ instance()->thread_id_ = id = &id; // Ugh.
+ BOOST_ASSERT(sizeof(unsigned long) >= sizeof(void*));
+ return reinterpret_cast<unsigned long>(id);
+ }
+
     static void openssl_locking_func(int mode, int n,
       const char *file, int line)
     {
@@ -92,6 +105,9 @@
 
     // Mutexes to be used in locking callbacks.
     std::vector<boost::shared_ptr<boost::asio::detail::mutex> > mutexes_;
+
+ // The thread identifiers to be used by openssl.
+ boost::asio::detail::tss_ptr<void> thread_id_;
   };
 
 public:

Modified: branches/fix-links/boost/asio/ssl/detail/openssl_operation.hpp
==============================================================================
--- branches/fix-links/boost/asio/ssl/detail/openssl_operation.hpp (original)
+++ branches/fix-links/boost/asio/ssl/detail/openssl_operation.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -19,6 +19,7 @@
 
 #include <boost/asio/detail/push_options.hpp>
 #include <boost/function.hpp>
+#include <boost/assert.hpp>
 #include <boost/bind.hpp>
 #include <boost/asio/detail/pop_options.hpp>
 
@@ -88,10 +89,12 @@
                     net_buffer& recv_buf,
                     SSL* session,
                     BIO* ssl_bio,
- user_handler_func handler
+ user_handler_func handler,
+ boost::asio::io_service::strand& strand
                     )
     : primitive_(primitive)
     , user_handler_(handler)
+ , strand_(&strand)
     , recv_buf_(recv_buf)
     , socket_(socket)
     , ssl_bio_(ssl_bio)
@@ -118,6 +121,7 @@
                     SSL* session,
                     BIO* ssl_bio)
     : primitive_(primitive)
+ , strand_(0)
     , recv_buf_(recv_buf)
     , socket_(socket)
     , ssl_bio_(ssl_bio)
@@ -241,6 +245,7 @@
 
   ssl_primitive_func primitive_;
   user_handler_func user_handler_;
+ boost::asio::io_service::strand* strand_;
   write_func write_;
   read_func read_;
   int_handler_func handler_;
@@ -304,19 +309,23 @@
       {
         unsigned char *data_start = send_buf_.get_unused_start();
         send_buf_.data_added(len);
-
+
+ BOOST_ASSERT(strand_);
         boost::asio::async_write
         (
           socket_,
           boost::asio::buffer(data_start, len),
- boost::bind
+ strand_->wrap
           (
- &openssl_operation::async_write_handler,
- this,
- is_operation_done,
- rc,
- boost::asio::placeholders::error,
- boost::asio::placeholders::bytes_transferred
+ boost::bind
+ (
+ &openssl_operation::async_write_handler,
+ this,
+ is_operation_done,
+ rc,
+ boost::asio::placeholders::error,
+ boost::asio::placeholders::bytes_transferred
+ )
           )
         );
                   
@@ -366,17 +375,21 @@
   int do_async_read()
   {
     // Wait for new data
+ BOOST_ASSERT(strand_);
     socket_.async_read_some
     (
       boost::asio::buffer(recv_buf_.get_unused_start(),
         recv_buf_.get_unused_len()),
- boost::bind
+ strand_->wrap
       (
- &openssl_operation::async_read_handler,
- this,
- boost::asio::placeholders::error,
- boost::asio::placeholders::bytes_transferred
- )
+ boost::bind
+ (
+ &openssl_operation::async_read_handler,
+ this,
+ boost::asio::placeholders::error,
+ boost::asio::placeholders::bytes_transferred
+ )
+ )
     );
     return 0;
   }

Modified: branches/fix-links/boost/asio/ssl/detail/openssl_stream_service.hpp
==============================================================================
--- branches/fix-links/boost/asio/ssl/detail/openssl_stream_service.hpp (original)
+++ branches/fix-links/boost/asio/ssl/detail/openssl_stream_service.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -20,6 +20,7 @@
 
 #include <boost/asio/detail/push_options.hpp>
 #include <cstddef>
+#include <climits>
 #include <boost/config.hpp>
 #include <boost/noncopyable.hpp>
 #include <boost/function.hpp>
@@ -28,6 +29,7 @@
 
 #include <boost/asio/error.hpp>
 #include <boost/asio/io_service.hpp>
+#include <boost/asio/strand.hpp>
 #include <boost/asio/detail/service_base.hpp>
 #include <boost/asio/ssl/basic_context.hpp>
 #include <boost/asio/ssl/stream_base.hpp>
@@ -43,6 +45,8 @@
   : public boost::asio::detail::service_base<openssl_stream_service>
 {
 private:
+ enum { max_buffer_size = INT_MAX };
+
   //Base handler for asyncrhonous operations
   template <typename Stream>
   class base_handler
@@ -161,7 +165,8 @@
 
   // Construct a new stream socket service for the specified io_service.
   explicit openssl_stream_service(boost::asio::io_service& io_service)
- : boost::asio::detail::service_base<openssl_stream_service>(io_service)
+ : boost::asio::detail::service_base<openssl_stream_service>(io_service),
+ strand_(io_service)
   {
   }
 
@@ -256,11 +261,12 @@
         local_handler,
         boost::arg<1>(),
         boost::arg<2>()
- )
+ ),
+ strand_
     );
     local_handler->set_operation(op);
 
- get_io_service().post(boost::bind(&openssl_operation<Stream>::start, op));
+ strand_.post(boost::bind(&openssl_operation<Stream>::start, op));
   }
 
   // Shut down SSL on the stream.
@@ -310,11 +316,12 @@
         local_handler,
         boost::arg<1>(),
         boost::arg<2>()
- )
+ ),
+ strand_
     );
     local_handler->set_operation(op);
 
- get_io_service().post(boost::bind(&openssl_operation<Stream>::start, op));
+ strand_.post(boost::bind(&openssl_operation<Stream>::start, op));
   }
 
   // Write some data to the stream.
@@ -325,10 +332,14 @@
     size_t bytes_transferred = 0;
     try
     {
+ std::size_t buffer_size = boost::asio::buffer_size(*buffers.begin());
+ if (buffer_size > max_buffer_size)
+ buffer_size = max_buffer_size;
+
       boost::function<int (SSL*)> send_func =
         boost::bind(&::SSL_write, boost::arg<1>(),
             boost::asio::buffer_cast<const void*>(*buffers.begin()),
- static_cast<int>(boost::asio::buffer_size(*buffers.begin())));
+ static_cast<int>(buffer_size));
       openssl_operation<Stream> op(
         send_func,
         next_layer,
@@ -357,10 +368,14 @@
 
     send_handler* local_handler = new send_handler(handler, get_io_service());
 
+ std::size_t buffer_size = boost::asio::buffer_size(*buffers.begin());
+ if (buffer_size > max_buffer_size)
+ buffer_size = max_buffer_size;
+
     boost::function<int (SSL*)> send_func =
       boost::bind(&::SSL_write, boost::arg<1>(),
           boost::asio::buffer_cast<const void*>(*buffers.begin()),
- static_cast<int>(boost::asio::buffer_size(*buffers.begin())));
+ static_cast<int>(buffer_size));
 
     openssl_operation<Stream>* op = new openssl_operation<Stream>
     (
@@ -375,11 +390,12 @@
         local_handler,
         boost::arg<1>(),
         boost::arg<2>()
- )
+ ),
+ strand_
     );
     local_handler->set_operation(op);
 
- get_io_service().post(boost::bind(&openssl_operation<Stream>::start, op));
+ strand_.post(boost::bind(&openssl_operation<Stream>::start, op));
   }
 
   // Read some data from the stream.
@@ -390,10 +406,14 @@
     size_t bytes_transferred = 0;
     try
     {
+ std::size_t buffer_size = boost::asio::buffer_size(*buffers.begin());
+ if (buffer_size > max_buffer_size)
+ buffer_size = max_buffer_size;
+
       boost::function<int (SSL*)> recv_func =
         boost::bind(&::SSL_read, boost::arg<1>(),
             boost::asio::buffer_cast<void*>(*buffers.begin()),
- boost::asio::buffer_size(*buffers.begin()));
+ static_cast<int>(buffer_size));
       openssl_operation<Stream> op(recv_func,
         next_layer,
         impl->recv_buf,
@@ -422,10 +442,14 @@
 
     recv_handler* local_handler = new recv_handler(handler, get_io_service());
 
+ std::size_t buffer_size = boost::asio::buffer_size(*buffers.begin());
+ if (buffer_size > max_buffer_size)
+ buffer_size = max_buffer_size;
+
     boost::function<int (SSL*)> recv_func =
       boost::bind(&::SSL_read, boost::arg<1>(),
           boost::asio::buffer_cast<void*>(*buffers.begin()),
- boost::asio::buffer_size(*buffers.begin()));
+ static_cast<int>(buffer_size));
 
     openssl_operation<Stream>* op = new openssl_operation<Stream>
     (
@@ -440,11 +464,12 @@
         local_handler,
         boost::arg<1>(),
         boost::arg<2>()
- )
+ ),
+ strand_
     );
     local_handler->set_operation(op);
 
- get_io_service().post(boost::bind(&openssl_operation<Stream>::start, op));
+ strand_.post(boost::bind(&openssl_operation<Stream>::start, op));
   }
 
   // Peek at the incoming data on the stream.
@@ -466,6 +491,8 @@
   }
 
 private:
+ boost::asio::io_service::strand strand_;
+
   typedef boost::asio::detail::mutex mutex_type;
   
   template<typename Mutex>

Modified: branches/fix-links/boost/config/compiler/intel.hpp
==============================================================================
--- branches/fix-links/boost/config/compiler/intel.hpp (original)
+++ branches/fix-links/boost/config/compiler/intel.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,4 +1,4 @@
-// (C) Copyright John Maddock 2001-7.
+// (C) Copyright John Maddock 2001-8.
 // (C) Copyright Peter Dimov 2001.
 // (C) Copyright Jens Maurer 2001.
 // (C) Copyright David Abrahams 2002 - 2003.
@@ -148,16 +148,15 @@
 #endif
 //
 // last known and checked version:
-#if (BOOST_INTEL_CXX_VERSION > 1000)
+#if (BOOST_INTEL_CXX_VERSION > 1010)
 # if defined(BOOST_ASSERT_CONFIG)
 # error "Unknown compiler version - please run the configure tests and report the results"
 # elif defined(_MSC_VER)
-# pragma message("Unknown compiler version - please run the configure tests and report the results")
+//
+// We don't emit this warning any more, since we have so few
+// defect macros set anyway (just the one).
+//
+//# pragma message("Unknown compiler version - please run the configure tests and report the results")
 # endif
 #endif
 
-
-
-
-
-

Modified: branches/fix-links/boost/config/compiler/vacpp.hpp
==============================================================================
--- branches/fix-links/boost/config/compiler/vacpp.hpp (original)
+++ branches/fix-links/boost/config/compiler/vacpp.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 // (C) Copyright John Maddock 2001 - 2003.
 // (C) Copyright Toon Knapen 2001 - 2003.
 // (C) Copyright Lie-Quan Lee 2001.
-// (C) Copyright Markus Schöpflin 2002 - 2003.
+// (C) Copyright Markus Schoepflin 2002 - 2003.
 // (C) Copyright Beman Dawes 2002 - 2003.
 // Use, modification and distribution are subject to the
 // Boost Software License, Version 1.0. (See accompanying file

Modified: branches/fix-links/boost/config/platform/hpux.hpp
==============================================================================
--- branches/fix-links/boost/config/platform/hpux.hpp (original)
+++ branches/fix-links/boost/config/platform/hpux.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -23,6 +23,8 @@
 
 #if !(defined(__HP_aCC) || !defined(_INCLUDE__STDC_A1_SOURCE))
 # define BOOST_NO_SWPRINTF
+#endif
+#if defined(__HP_aCC) && !defined(_INCLUDE__STDC_A1_SOURCE)
 # define BOOST_NO_CWCTYPE
 #endif
 
@@ -82,3 +84,4 @@
 #ifndef BOOST_HAS_EXPM1
 # define BOOST_HAS_EXPM1
 #endif
+

Modified: branches/fix-links/boost/function_types/components.hpp
==============================================================================
--- branches/fix-links/boost/function_types/components.hpp (original)
+++ branches/fix-links/boost/function_types/components.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -120,13 +120,14 @@
     template
     < typename Components
     , typename IfTagged
- , typename ThenTag
+ , typename ThenTag
+ , typename DefaultBase = components_non_func_base
>
     struct retagged_if
       : mpl::if_
         < detail::represents_impl<Components, IfTagged>
         , detail::changed_tag<Components,IfTagged,ThenTag>
- , components_non_func_base
+ , DefaultBase
>::type
     { };
 
@@ -213,14 +214,71 @@
       : components_impl<T,L>
     { };
 
-#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x565))
+
+ template<typename T, class C>
+ struct member_obj_ptr_result
+ { typedef T & type; };
+
+ template<typename T, class C>
+ struct member_obj_ptr_result<T, C const>
+ { typedef T const & type; };
+
+ template<typename T, class C>
+ struct member_obj_ptr_result<T, C volatile>
+ { typedef T volatile & type; };
+
+ template<typename T, class C>
+ struct member_obj_ptr_result<T, C const volatile>
+ { typedef T const volatile & type; };
+
+ template<typename T, class C>
+ struct member_obj_ptr_result<T &, C>
+ { typedef T & type; };
+
+ template<typename T, class C>
+ struct member_obj_ptr_result<T &, C const>
+ { typedef T & type; };
+
+ template<typename T, class C>
+ struct member_obj_ptr_result<T &, C volatile>
+ { typedef T & type; };
+
+ template<typename T, class C>
+ struct member_obj_ptr_result<T &, C const volatile>
+ { typedef T & type; };
+
+ template<typename T, class C, typename L>
+ struct member_obj_ptr_components
+ : member_object_pointer_base
+ {
+ typedef function_types::components<T C::*, L> type;
+ typedef components_mpl_sequence_tag tag;
+
+ typedef mpl::integral_c<std::size_t,1> function_arity;
+
+ typedef mpl::vector2< typename detail::member_obj_ptr_result<T,C>::type,
+ typename detail::class_transform<C,L>::type > types;
+ };
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x565))
+# define BOOST_FT_variations BOOST_FT_pointer|BOOST_FT_member_pointer
+
+ template<typename T, class C, typename L>
+ struct components_impl<T C::*, L>
+ : member_obj_ptr_components<T,C,L>
+ { };
+
+#else
+# define BOOST_FT_variations BOOST_FT_pointer
+
     // This workaround removes the member pointer from the type to allow
     // detection of member function pointers with BCC.
     template<typename T, typename C, typename L>
     struct components_impl<T C::*, L>
       : detail::retagged_if
         < detail::components_impl<typename boost::remove_cv<T>::type *, L>
- , pointer_tag, /* --> */ member_pointer_tag >
+ , pointer_tag, /* --> */ member_function_pointer_tag
+ , member_obj_ptr_components<T,C,L> >
     { };
 
     // BCC lets us test the cv-qualification of a function type by template
@@ -349,65 +407,13 @@
     struct components_bcc
       : mpl::if_
         < detail::represents_impl< detail::components_impl<T,L>
- , member_pointer_tag>
+ , member_function_pointer_tag>
         , detail::mfp_components<detail::components_impl<T,L>,T,OrigT,L>
         , detail::components_impl<T,L>
>::type
     { };
 
-// TODO: add data member support for Borland
-
-# define BOOST_FT_variations BOOST_FT_pointer
-#else // end of BORLAND WORKAROUND
-# define BOOST_FT_variations BOOST_FT_pointer|BOOST_FT_member_pointer
-
- template<typename T, class C>
- struct member_obj_ptr_result
- { typedef T & type; };
-
- template<typename T, class C>
- struct member_obj_ptr_result<T, C const>
- { typedef T const & type; };
-
- template<typename T, class C>
- struct member_obj_ptr_result<T, C volatile>
- { typedef T volatile & type; };
-
- template<typename T, class C>
- struct member_obj_ptr_result<T, C const volatile>
- { typedef T const volatile & type; };
-
- template<typename T, class C>
- struct member_obj_ptr_result<T &, C>
- { typedef T & type; };
-
- template<typename T, class C>
- struct member_obj_ptr_result<T &, C const>
- { typedef T & type; };
-
- template<typename T, class C>
- struct member_obj_ptr_result<T &, C volatile>
- { typedef T & type; };
-
- template<typename T, class C>
- struct member_obj_ptr_result<T &, C const volatile>
- { typedef T & type; };
-
-
- template<typename T, class C, typename L>
- struct components_impl<T C::*, L>
- : member_object_pointer_base
- {
- typedef function_types::components<T C::*, L> type;
- typedef components_mpl_sequence_tag tag;
-
- typedef mpl::integral_c<std::size_t,1> function_arity;
-
- typedef mpl::vector2< typename detail::member_obj_ptr_result<T,C>::type,
- typename detail::class_transform<C,L>::type > types;
- };
-
-#endif
+#endif // end of BORLAND WORKAROUND
 
 #define BOOST_FT_al_path boost/function_types/detail/components_impl
 #include <boost/function_types/detail/pp_loop.hpp>

Modified: branches/fix-links/boost/function_types/detail/cv_traits.hpp
==============================================================================
--- branches/fix-links/boost/function_types/detail/cv_traits.hpp (original)
+++ branches/fix-links/boost/function_types/detail/cv_traits.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -12,7 +12,7 @@
 #include <cstddef>
 #include <boost/detail/workaround.hpp>
 
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || BOOST_WORKAROUND(__BORLANDC__, <= 0x582)
 # include <boost/type_traits/remove_cv.hpp>
 # include <boost/type_traits/remove_pointer.hpp>
 # include <boost/type_traits/remove_reference.hpp>
@@ -25,7 +25,7 @@
 namespace ft = boost::function_types;
 
 
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !BOOST_WORKAROUND(__BORLANDC__, <= 0x582)
 
 template<typename T> struct cv_traits
 { typedef non_cv tag; typedef T type; };

Modified: branches/fix-links/boost/functional/detail/hash_float.hpp
==============================================================================
--- branches/fix-links/boost/functional/detail/hash_float.hpp (original)
+++ branches/fix-links/boost/functional/detail/hash_float.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -38,7 +38,7 @@
 
 // STLport
 #elif defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)
-// _fpclass and fpclassify aren't good enough on STLport.
+// fpclassify aren't good enough on STLport.
 
 // GNU libstdc++ 3
 #elif defined(__GLIBCPP__) || defined(__GLIBCXX__)
@@ -50,12 +50,7 @@
 // Dinkumware Library, on Visual C++
 #elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
 
-// Not using _fpclass because it causes a warning about a conversion
-// from 'long double' to 'double'. Pity.
-//
-//# if defined(BOOST_MSVC)
-//# define BOOST_HASH_USE_FPCLASS
-//# endif
+// Not using _fpclass because it is only available for double.
 
 #endif
 
@@ -160,28 +155,6 @@
                 BOOST_ASSERT(0);
                 return 0;
             }
-#elif defined(BOOST_HASH_USE_FPCLASS)
- switch(_fpclass(v)) {
- case _FPCLASS_NZ:
- case _FPCLASS_PZ:
- return 0;
- case _FPCLASS_PINF:
- return (std::size_t)(-1);
- case _FPCLASS_NINF:
- return (std::size_t)(-2);
- case _FPCLASS_SNAN:
- case _FPCLASS_QNAN:
- return (std::size_t)(-3);
- case _FPCLASS_NN:
- case _FPCLASS_ND:
- return float_hash_impl(v);
- case _FPCLASS_PD:
- case _FPCLASS_PN:
- return float_hash_impl(v);
- default:
- BOOST_ASSERT(0);
- return 0;
- }
 #else
             return v == 0 ? 0 : float_hash_impl(v);
 #endif

Modified: branches/fix-links/boost/gil/color_base.hpp
==============================================================================
--- branches/fix-links/boost/gil/color_base.hpp (original)
+++ branches/fix-links/boost/gil/color_base.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
     http://www.boost.org/LICENSE_1_0.txt).
 
- See http://opensource.adobe.com/gil for most recent version including documentation.
+ See http://stlab.adobe.com/gil for most recent version including documentation.
 */
 
 /*************************************************************************************************/
@@ -129,7 +129,7 @@
           _v1(*memunit_advanced(semantic_at_c<1>(ptr),diff)) {}
 
     // Support for planar_pixel_reference operator[]
- Element at_c_dynamic(size_t i) const {
+ Element at_c_dynamic(std::size_t i) const {
         if (i==0) return _v0;
         return _v1;
     }
@@ -182,7 +182,7 @@
           _v2(*memunit_advanced(semantic_at_c<2>(ptr),diff)) {}
 
     // Support for planar_pixel_reference operator[]
- Element at_c_dynamic(size_t i) const {
+ Element at_c_dynamic(std::size_t i) const {
         switch (i) {
             case 0: return _v0;
             case 1: return _v1;
@@ -245,7 +245,7 @@
           _v3(*memunit_advanced(semantic_at_c<3>(ptr),diff)) {}
 
     // Support for planar_pixel_reference operator[]
- Element at_c_dynamic(size_t i) const {
+ Element at_c_dynamic(std::size_t i) const {
         switch (i) {
             case 0: return _v0;
             case 1: return _v1;
@@ -316,7 +316,7 @@
           _v4(*memunit_advanced(semantic_at_c<4>(ptr),diff)) {}
 
     // Support for planar_pixel_reference operator[]
- Element at_c_dynamic(size_t i) const {
+ Element at_c_dynamic(std::size_t i) const {
         switch (i) {
             case 0: return _v0;
             case 1: return _v1;

Modified: branches/fix-links/boost/gil/extension/io/png_io_private.hpp
==============================================================================
--- branches/fix-links/boost/gil/extension/io/png_io_private.hpp (original)
+++ branches/fix-links/boost/gil/extension/io/png_io_private.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
     http://www.boost.org/LICENSE_1_0.txt).
 
- See http://opensource.adobe.com/gil for most recent version including documentation.
+ See http://stlab.adobe.com/gil for most recent version including documentation.
 */
 /*************************************************************************************************/
 
@@ -28,7 +28,7 @@
 
 namespace detail {
 
-static const size_t PNG_BYTES_TO_CHECK = 4;
+static const std::size_t PNG_BYTES_TO_CHECK = 4;
 
 // lbourdev: These can be greatly simplified, for example:
 template <typename Cs> struct png_color_type {BOOST_STATIC_CONSTANT(int,color_type=0);};

Modified: branches/fix-links/boost/interprocess/allocators/adaptive_pool.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/adaptive_pool.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/adaptive_pool.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -25,6 +25,7 @@
 #include <boost/interprocess/detail/type_traits.hpp>
 #include <boost/interprocess/allocators/detail/adaptive_node_pool.hpp>
 #include <boost/interprocess/exceptions.hpp>
+#include <boost/interprocess/allocators/detail/allocator_common.hpp>
 #include <memory>
 #include <algorithm>
 #include <cstddef>
@@ -35,35 +36,38 @@
 namespace boost {
 namespace interprocess {
 
-//!An STL node allocator that uses a segment manager as memory
-//!source. The internal pointer type will of the same type (raw, smart) as
-//!"typename SegmentManager::void_pointer" type. This allows
-//!placing the allocator in shared memory, memory mapped-files, etc...
-//!This node allocator shares a segregated storage between all instances
-//!of adaptive_pool with equal sizeof(T) placed in the same segment
-//!group. NodesPerChunk is the number of nodes allocated at once when the allocator
-//!needs runs out of nodes. MaxFreeChunks is the number of free nodes
-//!in the adaptive node pool that will trigger the deallocation of
-template<class T, class SegmentManager, std::size_t NodesPerChunk, std::size_t MaxFreeChunks>
-class adaptive_pool
+/// @cond
+
+namespace detail{
+
+template < unsigned int Version
+ , class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ , std::size_t MaxFreeChunks
+ , unsigned char OverheadPercent
+ >
+class adaptive_pool_base
+ : public node_pool_allocation_impl
+ < adaptive_pool_base
+ < Version, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent>
+ , Version
+ , T
+ , SegmentManager
+ >
 {
    public:
    typedef typename SegmentManager::void_pointer void_pointer;
- typedef typename detail::
- pointer_to_other<void_pointer, const void>::type cvoid_pointer;
    typedef SegmentManager segment_manager;
- typedef typename detail::
- pointer_to_other<void_pointer, char>::type char_pointer;
- typedef typename SegmentManager::
- mutex_family::mutex_type mutex_type;
- typedef adaptive_pool
- <T, SegmentManager, NodesPerChunk, MaxFreeChunks> self_t;
+ typedef adaptive_pool_base
+ <Version, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> self_t;
    typedef detail::shared_adaptive_node_pool
- < SegmentManager, mutex_type
- , sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
+ < SegmentManager, sizeof(T), NodesPerChunk, MaxFreeChunks, OverheadPercent> node_pool_t;
    typedef typename detail::
       pointer_to_other<void_pointer, node_pool_t>::type node_pool_ptr;
 
+ BOOST_STATIC_ASSERT((Version <=2));
+
    public:
    //-------
    typedef typename detail::
@@ -78,52 +82,60 @@
    typedef std::size_t size_type;
    typedef std::ptrdiff_t difference_type;
 
- //!Obtains adaptive_pool from
- //!adaptive_pool
+ typedef detail::version_type<adaptive_pool_base, Version> version;
+ typedef transform_iterator
+ < typename SegmentManager::
+ multiallocation_iterator
+ , detail::cast_functor <T> > multiallocation_iterator;
+ typedef typename SegmentManager::
+ multiallocation_chain multiallocation_chain;
+
+ //!Obtains adaptive_pool_base from
+ //!adaptive_pool_base
    template<class T2>
    struct rebind
    {
- typedef adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks> other;
+ typedef adaptive_pool_base<Version, T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
    };
 
    /// @cond
    private:
- //!Not assignable from related adaptive_pool
- template<class T2, class SegmentManager2, std::size_t N2, std::size_t F2>
- adaptive_pool& operator=
- (const adaptive_pool<T2, SegmentManager2, N2, F2>&);
+ //!Not assignable from related adaptive_pool_base
+ template<unsigned int Version2, class T2, class SegmentManager2, std::size_t N2, std::size_t F2, unsigned char O2>
+ adaptive_pool_base& operator=
+ (const adaptive_pool_base<Version2, T2, SegmentManager2, N2, F2, O2>&);
 
- //!Not assignable from other adaptive_pool
- adaptive_pool& operator=(const adaptive_pool&);
+ //!Not assignable from other adaptive_pool_base
+ adaptive_pool_base& operator=(const adaptive_pool_base&);
    /// @endcond
 
    public:
    //!Constructor from a segment manager. If not present, constructs a node
    //!pool. Increments the reference count of the associated node pool.
    //!Can throw boost::interprocess::bad_alloc
- adaptive_pool(segment_manager *segment_mngr)
- : mp_node_pool(priv_get_or_create(segment_mngr)) { }
+ adaptive_pool_base(segment_manager *segment_mngr)
+ : mp_node_pool(detail::get_or_create_node_pool<node_pool_t>(segment_mngr)) { }
 
- //!Copy constructor from other adaptive_pool. Increments the reference
+ //!Copy constructor from other adaptive_pool_base. Increments the reference
    //!count of the associated node pool. Never throws
- adaptive_pool(const adaptive_pool &other)
+ adaptive_pool_base(const adaptive_pool_base &other)
       : mp_node_pool(other.get_node_pool())
    {
       mp_node_pool->inc_ref_count();
    }
 
- //!Copy constructor from related adaptive_pool. If not present, constructs
+ //!Copy constructor from related adaptive_pool_base. If not present, constructs
    //!a node pool. Increments the reference count of the associated node pool.
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
- adaptive_pool
- (const adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks> &other)
- : mp_node_pool(priv_get_or_create(other.get_segment_manager())) { }
+ adaptive_pool_base
+ (const adaptive_pool_base<Version, T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ : mp_node_pool(detail::get_or_create_node_pool<node_pool_t>(other.get_segment_manager())) { }
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
- ~adaptive_pool()
- { priv_destroy_if_last_link(); }
+ ~adaptive_pool_base()
+ { detail::destroy_node_pool_if_last_link(detail::get_pointer(mp_node_pool)); }
 
    //!Returns a pointer to the node pool.
    //!Never throws
@@ -135,156 +147,300 @@
    segment_manager* get_segment_manager()const
    { return mp_node_pool->get_segment_manager(); }
 
+ //!Swaps allocators. Does not throw. If each allocator is placed in a
+ //!different memory segment, the result is undefined.
+ friend void swap(self_t &alloc1, self_t &alloc2)
+ { detail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool); }
+
+ /// @cond
+ private:
+ node_pool_ptr mp_node_pool;
+ /// @endcond
+};
+
+//!Equality test for same type
+//!of adaptive_pool_base
+template<unsigned int V, class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator==(const adaptive_pool_base<V, T, S, NodesPerChunk, F, OP> &alloc1,
+ const adaptive_pool_base<V, T, S, NodesPerChunk, F, OP> &alloc2)
+ { return alloc1.get_node_pool() == alloc2.get_node_pool(); }
+
+//!Inequality test for same type
+//!of adaptive_pool_base
+template<unsigned int V, class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator!=(const adaptive_pool_base<V, T, S, NodesPerChunk, F, OP> &alloc1,
+ const adaptive_pool_base<V, T, S, NodesPerChunk, F, OP> &alloc2)
+ { return alloc1.get_node_pool() != alloc2.get_node_pool(); }
+
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk = 64
+ , std::size_t MaxFreeChunks = 2
+ , unsigned char OverheadPercent = 5
+ >
+class adaptive_pool_v1
+ : public adaptive_pool_base
+ < 1
+ , T
+ , SegmentManager
+ , NodesPerChunk
+ , MaxFreeChunks
+ , OverheadPercent
+ >
+{
+ public:
+ typedef detail::adaptive_pool_base
+ < 1, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> base_t;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef adaptive_pool_v1<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ };
+
+ adaptive_pool_v1(SegmentManager *segment_mngr)
+ : base_t(segment_mngr)
+ {}
+
+ template<class T2>
+ adaptive_pool_v1
+ (const adaptive_pool_v1<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ : base_t(other)
+ {}
+};
+
+} //namespace detail{
+
+/// @endcond
+
+//!An STL node allocator that uses a segment manager as memory
+//!source. The internal pointer type will of the same type (raw, smart) as
+//!"typename SegmentManager::void_pointer" type. This allows
+//!placing the allocator in shared memory, memory mapped-files, etc...
+//!
+//!This node allocator shares a segregated storage between all instances
+//!of adaptive_pool with equal sizeof(T) placed in the same segment
+//!group. NodesPerChunk is the number of nodes allocated at once when the allocator
+//!needs runs out of nodes. MaxFreeChunks is the maximum number of totally free chunks
+//!that the adaptive node pool will hold. The rest of the totally free chunks will be
+//!deallocated with the segment manager.
+//!
+//!OverheadPercent is the (approximated) maximum size overhead (1-20%) of the allocator:
+//!(memory usable for nodes / total memory allocated from the segment manager)
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ , std::size_t MaxFreeChunks
+ , unsigned char OverheadPercent
+ >
+class adaptive_pool
+ /// @cond
+ : public detail::adaptive_pool_base
+ < 2
+ , T
+ , SegmentManager
+ , NodesPerChunk
+ , MaxFreeChunks
+ , OverheadPercent
+ >
+ /// @endcond
+{
+
+ #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+ typedef detail::adaptive_pool_base
+ < 2, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> base_t;
+ public:
+ typedef detail::version_type<adaptive_pool, 2> version;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ };
+
+ adaptive_pool(SegmentManager *segment_mngr)
+ : base_t(segment_mngr)
+ {}
+
+ template<class T2>
+ adaptive_pool
+ (const adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ : base_t(other)
+ {}
+
+ #else //BOOST_INTERPROCESS_DOXYGEN_INVOKED
+ public:
+ typedef implementation_defined::segment_manager segment_manager;
+ typedef segment_manager::void_pointer void_pointer;
+ typedef implementation_defined::pointer pointer;
+ typedef implementation_defined::const_pointer const_pointer;
+ typedef T value_type;
+ typedef typename detail::add_reference
+ <value_type>::type reference;
+ typedef typename detail::add_reference
+ <const value_type>::type const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ //!Obtains adaptive_pool from
+ //!adaptive_pool
+ template<class T2>
+ struct rebind
+ {
+ typedef adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ };
+
+ private:
+ //!Not assignable from
+ //!related adaptive_pool
+ template<class T2, class SegmentManager2, std::size_t N2, std::size_t F2, unsigned char OP2>
+ adaptive_pool& operator=
+ (const adaptive_pool<T2, SegmentManager2, N2, F2, OP2>&);
+
+ //!Not assignable from
+ //!other adaptive_pool
+ adaptive_pool& operator=(const adaptive_pool&);
+
+ public:
+ //!Constructor from a segment manager. If not present, constructs a node
+ //!pool. Increments the reference count of the associated node pool.
+ //!Can throw boost::interprocess::bad_alloc
+ adaptive_pool(segment_manager *segment_mngr);
+
+ //!Copy constructor from other adaptive_pool. Increments the reference
+ //!count of the associated node pool. Never throws
+ adaptive_pool(const adaptive_pool &other);
+
+ //!Copy constructor from related adaptive_pool. If not present, constructs
+ //!a node pool. Increments the reference count of the associated node pool.
+ //!Can throw boost::interprocess::bad_alloc
+ template<class T2>
+ adaptive_pool
+ (const adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other);
+
+ //!Destructor, removes node_pool_t from memory
+ //!if its reference count reaches to zero. Never throws
+ ~adaptive_pool();
+
+ //!Returns a pointer to the node pool.
+ //!Never throws
+ node_pool_t* get_node_pool() const;
+
+ //!Returns the segment manager.
+ //!Never throws
+ segment_manager* get_segment_manager()const;
+
    //!Returns the number of elements that could be allocated.
    //!Never throws
- size_type max_size() const
- { return this->get_segment_manager()->get_size()/sizeof(value_type); }
+ size_type max_size() const;
 
    //!Allocate memory for an array of count elements.
- //!Throws boost::interprocess::bad_alloc if there is no enough memory*/
- pointer allocate(size_type count, cvoid_pointer = 0)
- {
- if(count > ((size_type)-1)/sizeof(value_type))
- throw bad_alloc();
- return pointer(static_cast<T*>(mp_node_pool->allocate(count)));
- }
+ //!Throws boost::interprocess::bad_alloc if there is no enough memory
+ pointer allocate(size_type count, cvoid_pointer hint = 0);
 
    //!Deallocate allocated memory.
    //!Never throws
- void deallocate(const pointer &ptr, size_type count)
- { mp_node_pool->deallocate(detail::get_pointer(ptr), count); }
+ void deallocate(const pointer &ptr, size_type count);
 
- //!Deallocates all free chunks of the pool
- void deallocate_free_chunks()
- { mp_node_pool->deallocate_free_chunks(); }
+ //!Deallocates all free chunks
+ //!of the pool
+ void deallocate_free_chunks();
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
    //!different memory segment, the result is undefined.
- friend void swap(self_t &alloc1, self_t &alloc2)
- { detail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool); }
-
- //These functions are obsolete. These are here to conserve
- //backwards compatibility with containers using them...
+ friend void swap(self_t &alloc1, self_t &alloc2);
 
    //!Returns address of mutable object.
    //!Never throws
- pointer address(reference value) const
- { return pointer(boost::addressof(value)); }
+ pointer address(reference value) const;
 
    //!Returns address of non mutable object.
    //!Never throws
- const_pointer address(const_reference value) const
- { return const_pointer(boost::addressof(value)); }
+ const_pointer address(const_reference value) const;
 
    //!Default construct an object.
- //!Throws if T's default constructor throws*/
- void construct(const pointer &ptr)
- { new(detail::get_pointer(ptr)) value_type; }
+ //!Throws if T's default constructor throws
+ void construct(const pointer &ptr);
 
    //!Destroys object. Throws if object's
    //!destructor throws
- void destroy(const pointer &ptr)
- { BOOST_ASSERT(ptr != 0); (*ptr).~value_type(); }
-
- /// @cond
- private:
- //!Object function that creates the node allocator if it is not created and
- //!increments reference count if it is already created
- struct get_or_create_func
- {
- typedef detail::shared_adaptive_node_pool
- <SegmentManager, mutex_type, sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
-
- //!This connects or constructs the unique instance of node_pool_t
- //!Can throw boost::interprocess::bad_alloc
- void operator()()
- {
- //Find or create the node_pool_t
- mp_node_pool = mp_named_alloc->template find_or_construct
- <node_pool_t>(unique_instance)(mp_named_alloc);
- //If valid, increment link count
- if(mp_node_pool != 0)
- mp_node_pool->inc_ref_count();
- }
-
- //!Constructor. Initializes function
- //!object parameters
- get_or_create_func(segment_manager *hdr) : mp_named_alloc(hdr){}
-
- node_pool_t *mp_node_pool;
- segment_manager *mp_named_alloc;
- };
-
- //!Initialization function, creates an executes atomically the
- //!initialization object functions. Can throw boost::interprocess::bad_alloc
- node_pool_t *priv_get_or_create(segment_manager *named_alloc)
- {
- get_or_create_func func(named_alloc);
- named_alloc->atomic_func(func);
- return func.mp_node_pool;
- }
-
- //!Object function that decrements the reference count. If the count
- //!reaches to zero destroys the node allocator from memory.
- //!Never throws
- struct destroy_if_last_link_func
- {
- typedef detail::shared_adaptive_node_pool
- <SegmentManager, mutex_type,sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
-
- //!Decrements reference count and destroys the object if there is no
- //!more attached allocators. Never throws
- void operator()()
- {
- //If not the last link return
- if(mp_node_pool->dec_ref_count() != 0) return;
-
- //Last link, let's destroy the segment_manager
- mp_named_alloc->template destroy<node_pool_t>(unique_instance);
- }
-
- //!Constructor. Initializes function
- //!object parameters
- destroy_if_last_link_func(segment_manager *nhdr,
- node_pool_t *phdr)
- : mp_named_alloc(nhdr), mp_node_pool(phdr){}
-
- segment_manager *mp_named_alloc;
- node_pool_t *mp_node_pool;
- };
+ void destroy(const pointer &ptr);
 
- //!Destruction function, initializes and executes destruction function
- //!object. Never throws
- void priv_destroy_if_last_link()
- {
- typedef detail::shared_adaptive_node_pool
- <SegmentManager, mutex_type,sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
- //Get segment manager
- segment_manager *named_segment_mngr = this->get_segment_manager();
- //Execute destruction functor atomically
- destroy_if_last_link_func func(named_segment_mngr, detail::get_pointer(mp_node_pool));
- named_segment_mngr->atomic_func(func);
- }
-
- private:
- node_pool_ptr mp_node_pool;
- /// @endcond
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold. This size only works for memory allocated with
+ //!allocate, allocation_command and allocate_many.
+ size_type size(const pointer &p) const;
+
+ std::pair<pointer, bool>
+ allocation_command(allocation_type command,
+ size_type limit_size,
+ size_type preferred_size,
+ size_type &received_size, const pointer &reuse = 0);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ multiallocation_iterator allocate_many(size_type elem_size, std::size_t num_elements);
+
+ //!Allocates n_elements elements, each one of size elem_sizes[i]in a
+ //!contiguous chunk
+ //!of memory. The elements must be deallocated
+ multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ void deallocate_many(multiallocation_iterator it);
+
+ //!Allocates just one object. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ //!Throws boost::interprocess::bad_alloc if there is no enough memory
+ pointer allocate_one();
+
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ multiallocation_iterator allocate_individual(std::size_t num_elements);
+
+ //!Deallocates memory previously allocated with allocate_one().
+ //!You should never use deallocate_one to deallocate memory allocated
+ //!with other functions different from allocate_one(). Never throws
+ void deallocate_one(const pointer &p);
+
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ void deallocate_individual(multiallocation_iterator it);
+ #endif
 };
 
+#ifdef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+
 //!Equality test for same type
 //!of adaptive_pool
-template<class T, class S, std::size_t NodesPerChunk, std::size_t F> inline
-bool operator==(const adaptive_pool<T, S, NodesPerChunk, F> &alloc1,
- const adaptive_pool<T, S, NodesPerChunk, F> &alloc2)
- { return alloc1.get_node_pool() == alloc2.get_node_pool(); }
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator==(const adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc1,
+ const adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc2);
 
 //!Inequality test for same type
 //!of adaptive_pool
-template<class T, class S, std::size_t NodesPerChunk, std::size_t F> inline
-bool operator!=(const adaptive_pool<T, S, NodesPerChunk, F> &alloc1,
- const adaptive_pool<T, S, NodesPerChunk, F> &alloc2)
- { return alloc1.get_node_pool() != alloc2.get_node_pool(); }
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator!=(const adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc1,
+ const adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc2);
 
+#endif
 
 } //namespace interprocess {
 } //namespace boost {

Modified: branches/fix-links/boost/interprocess/allocators/allocation_type.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/allocation_type.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/allocation_type.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/allocators/allocator.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/allocator.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/allocator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -51,13 +51,6 @@
    /// @cond
    private:
 
- struct cast_functor
- {
- typedef typename detail::add_reference<T>::type result_type;
- result_type operator()(char &ptr) const
- { return *static_cast<T*>(static_cast<void*>(&ptr)); }
- };
-
    //Self type
    typedef allocator<T, SegmentManager> self_t;
 
@@ -108,7 +101,9 @@
    typedef transform_iterator
       < typename SegmentManager::
          multiallocation_iterator
- , cast_functor> multiallocation_iterator;
+ , detail::cast_functor <T> > multiallocation_iterator;
+ typedef typename SegmentManager::
+ multiallocation_chain multiallocation_chain;
 
    /// @endcond
 
@@ -146,7 +141,7 @@
    pointer allocate(size_type count, cvoid_ptr hint = 0)
    {
       (void)hint;
- if(count > ((size_type)-1)/sizeof(T))
+ if(count > this->max_size())
          throw bad_alloc();
       return pointer((value_type*)mp_mngr->allocate(count*sizeof(T)));
    }
@@ -166,7 +161,13 @@
    friend void swap(self_t &alloc1, self_t &alloc2)
    { detail::do_swap(alloc1.mp_mngr, alloc2.mp_mngr); }
 
- //Experimental version 2 allocator functions
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold. This size only works for memory allocated with
+ //!allocate, allocation_command and allocate_many.
+ size_type size(const pointer &p) const
+ {
+ return (size_type)mp_mngr->size(detail::get_pointer(p))/sizeof(T);
+ }
 
    std::pair<pointer, bool>
       allocation_command(allocation_type command,
@@ -178,23 +179,42 @@
          (command, limit_size, preferred_size, received_size, detail::get_pointer(reuse));
    }
 
- //!Returns maximum the number of objects the previously allocated memory
- //!pointed by p can hold.
- size_type size(const pointer &p) const
- {
- return (size_type)mp_mngr->size(detail::get_pointer(p))/sizeof(T);
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ multiallocation_iterator allocate_many(size_type elem_size, std::size_t num_elements)
+ {
+ return multiallocation_iterator
+ (mp_mngr->allocate_many(sizeof(T)*elem_size, num_elements));
    }
 
+ //!Allocates n_elements elements, each one of size elem_sizes[i]in a
+ //!contiguous chunk
+ //!of memory. The elements must be deallocated
+ multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements)
+ {
+ return multiallocation_iterator
+ (mp_mngr->allocate_many(elem_sizes, n_elements, sizeof(T)));
+ }
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ void deallocate_many(multiallocation_iterator it)
+ { return mp_mngr->deallocate_many(it.base()); }
+
    //!Allocates just one object. Memory allocated with this function
    //!must be deallocated only with deallocate_one().
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
    pointer allocate_one()
    { return this->allocate(1); }
 
- /// @cond
-
- //Experimental. Don't use.
-
    //!Allocates many elements of size == 1 in a contiguous chunk
    //!of memory. The minimum number to be allocated is min_elements,
    //!the preferred and maximum number is
@@ -204,41 +224,20 @@
    multiallocation_iterator allocate_individual(std::size_t num_elements)
    { return this->allocate_many(1, num_elements); }
 
- /// @endcond
-
    //!Deallocates memory previously allocated with allocate_one().
    //!You should never use deallocate_one to deallocate memory allocated
    //!with other functions different from allocate_one(). Never throws
    void deallocate_one(const pointer &p)
    { return this->deallocate(p, 1); }
 
- /// @cond
-
- //!Allocates many elements of size elem_size in a contiguous chunk
+ //!Allocates many elements of size == 1 in a contiguous chunk
    //!of memory. The minimum number to be allocated is min_elements,
    //!the preferred and maximum number is
    //!preferred_elements. The number of actually allocated elements is
- //!will be assigned to received_size. The elements must be deallocated
- //!with deallocate(...)
- multiallocation_iterator allocate_many(size_type elem_size, std::size_t num_elements)
- {
- return multiallocation_iterator
- (mp_mngr->allocate_many(sizeof(T)*elem_size, num_elements));
- }
-
- //!Allocates n_elements elements, each one of size elem_sizes[i]in a
- //!contiguous chunk
- //!of memory. The elements must be deallocated
- multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements)
- {
- return multiallocation_iterator
- (mp_mngr->allocate_many(elem_sizes, n_elements, sizeof(T)));
- }
-
- /// @endcond
-
- //These functions are obsolete. These are here to conserve
- //backwards compatibility with containers using them...
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ void deallocate_individual(multiallocation_iterator it)
+ { return this->deallocate_many(it); }
 
    //!Returns address of mutable object.
    //!Never throws
@@ -251,7 +250,7 @@
    { return const_pointer(boost::addressof(value)); }
 
    //!Default construct an object.
- //!Throws if T's default constructor throws*/
+ //!Throws if T's default constructor throws
    void construct(const pointer &ptr)
    { new(detail::get_pointer(ptr)) value_type; }
 

Modified: branches/fix-links/boost/interprocess/allocators/cached_adaptive_pool.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/cached_adaptive_pool.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/cached_adaptive_pool.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -19,56 +19,155 @@
 #include <boost/interprocess/detail/workaround.hpp>
 
 #include <boost/interprocess/interprocess_fwd.hpp>
-#include <boost/interprocess/detail/utilities.hpp>
-#include <boost/assert.hpp>
-#include <boost/utility/addressof.hpp>
 #include <boost/interprocess/allocators/detail/adaptive_node_pool.hpp>
+#include <boost/interprocess/allocators/detail/allocator_common.hpp>
 #include <boost/interprocess/detail/workaround.hpp>
-#include <boost/interprocess/exceptions.hpp>
+#include <boost/interprocess/detail/version_type.hpp>
 #include <boost/interprocess/allocators/detail/node_tools.hpp>
-#include <memory>
-#include <algorithm>
 #include <cstddef>
 
 //!\file
-//!Describes cached_cached_node_allocator pooled shared memory STL compatible allocator
+//!Describes cached_adaptive_pool pooled shared memory STL compatible allocator
 
 namespace boost {
 namespace interprocess {
 
+/// @cond
+
+namespace detail {
+
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk = 64
+ , std::size_t MaxFreeChunks = 2
+ , unsigned char OverheadPercent = 5
+ >
+class cached_adaptive_pool_v1
+ : public detail::cached_allocator_impl
+ < T
+ , detail::shared_adaptive_node_pool
+ < SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ , MaxFreeChunks
+ , OverheadPercent
+ >
+ , 1>
+{
+ public:
+ typedef detail::cached_allocator_impl
+ < T
+ , detail::shared_adaptive_node_pool
+ < SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ , MaxFreeChunks
+ , OverheadPercent
+ >
+ , 1> base_t;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef cached_adaptive_pool_v1
+ <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ };
+
+ cached_adaptive_pool_v1(SegmentManager *segment_mngr,
+ std::size_t max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES)
+ : base_t(segment_mngr, max_cached_nodes)
+ {}
+
+ template<class T2>
+ cached_adaptive_pool_v1
+ (const cached_adaptive_pool_v1
+ <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ : base_t(other)
+ {}
+};
+
+} //namespace detail{
+
+/// @endcond
+
 //!An STL node allocator that uses a segment manager as memory
 //!source. The internal pointer type will of the same type (raw, smart) as
 //!"typename SegmentManager::void_pointer" type. This allows
 //!placing the allocator in shared memory, memory mapped-files, etc...
+//!
 //!This node allocator shares a segregated storage between all instances of
-//!cached_adaptive_pool with equal sizeof(T) placed in the same fixed size
+//!cached_adaptive_pool with equal sizeof(T) placed in the same
 //!memory segment. But also caches some nodes privately to
 //!avoid some synchronization overhead.
-template<class T, class SegmentManager, std::size_t NodesPerChunk, std::size_t MaxFreeChunks>
+//!
+//!NodesPerChunk is the minimum number of nodes of nodes allocated at once when
+//!the allocator needs runs out of nodes. MaxFreeChunks is the maximum number of totally free chunks
+//!that the adaptive node pool will hold. The rest of the totally free chunks will be
+//!deallocated with the segment manager.
+//!
+//!OverheadPercent is the (approximated) maximum size overhead (1-20%) of the allocator:
+//!(memory usable for nodes / total memory allocated from the segment manager)
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ , std::size_t MaxFreeChunks
+ , unsigned char OverheadPercent
+ >
 class cached_adaptive_pool
-{
    /// @cond
- typedef typename SegmentManager::void_pointer void_pointer;
- typedef typename detail::
- pointer_to_other<void_pointer, const void>::type cvoid_pointer;
- typedef SegmentManager segment_manager;
- typedef typename detail::
- pointer_to_other<void_pointer, char>::type char_pointer;
- typedef typename SegmentManager::mutex_family::mutex_type mutex_type;
- typedef cached_adaptive_pool
- <T, SegmentManager, NodesPerChunk, MaxFreeChunks> self_t;
- enum { DEFAULT_MAX_CACHED_NODES = 64 };
-
- typedef typename detail::node_slist<void_pointer>::node_t node_t;
- typedef typename detail::node_slist<void_pointer>::node_slist_t cached_list_t;
+ : public detail::cached_allocator_impl
+ < T
+ , detail::shared_adaptive_node_pool
+ < SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ , MaxFreeChunks
+ , OverheadPercent
+ >
+ , 2>
    /// @endcond
+{
+
+ #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+ public:
+ typedef detail::cached_allocator_impl
+ < T
+ , detail::shared_adaptive_node_pool
+ < SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ , MaxFreeChunks
+ , OverheadPercent
+ >
+ , 2> base_t;
 
    public:
- //-------
- typedef typename detail::
- pointer_to_other<void_pointer, T>::type pointer;
- typedef typename detail::
- pointer_to_other<void_pointer, const T>::type const_pointer;
+ typedef detail::version_type<cached_adaptive_pool, 2> version;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef cached_adaptive_pool
+ <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ };
+
+ cached_adaptive_pool(SegmentManager *segment_mngr,
+ std::size_t max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES)
+ : base_t(segment_mngr, max_cached_nodes)
+ {}
+
+ template<class T2>
+ cached_adaptive_pool
+ (const cached_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ : base_t(other)
+ {}
+
+ #else
+ public:
+ typedef implementation_defined::segment_manager segment_manager;
+ typedef segment_manager::void_pointer void_pointer;
+ typedef implementation_defined::pointer pointer;
+ typedef implementation_defined::const_pointer const_pointer;
    typedef T value_type;
    typedef typename detail::add_reference
                      <value_type>::type reference;
@@ -76,312 +175,178 @@
                      <const value_type>::type const_reference;
    typedef std::size_t size_type;
    typedef std::ptrdiff_t difference_type;
- typedef detail::shared_adaptive_node_pool
- < SegmentManager, mutex_type
- , sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
- typedef typename detail::
- pointer_to_other<void_pointer, node_pool_t>::type node_pool_ptr;
 
- //!Obtains cached_adaptive_pool from other
+ //!Obtains cached_adaptive_pool from
    //!cached_adaptive_pool
    template<class T2>
    struct rebind
    {
- typedef cached_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks> other;
+ typedef cached_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
    };
 
- /// @cond
    private:
-
- //!Not assignable from related cached_adaptive_pool
- template<class T2, class SegmentManager2, std::size_t N2, std::size_t MaxFreeChunks2>
+ //!Not assignable from
+ //!related cached_adaptive_pool
+ template<class T2, class SegmentManager2, std::size_t N2, std::size_t F2, unsigned char OP2>
    cached_adaptive_pool& operator=
- (const cached_adaptive_pool<T2, SegmentManager2, N2, MaxFreeChunks2>&);
+ (const cached_adaptive_pool<T2, SegmentManager2, N2, F2, OP2>&);
 
- //!Not assignable from other cached_adaptive_pool
+ //!Not assignable from
+ //!other cached_adaptive_pool
    cached_adaptive_pool& operator=(const cached_adaptive_pool&);
- /// @endcond
-
+
    public:
- //!Constructor from a segment manager. If not present, constructs
- //!a node pool. Increments the reference count of the node pool.
+ //!Constructor from a segment manager. If not present, constructs a node
+ //!pool. Increments the reference count of the associated node pool.
    //!Can throw boost::interprocess::bad_alloc
- cached_adaptive_pool(segment_manager *segment_mngr,
- std::size_t max_cached_nodes = DEFAULT_MAX_CACHED_NODES)
- : mp_node_pool(priv_get_or_create(segment_mngr)),
- m_max_cached_nodes(max_cached_nodes)
- {}
+ cached_adaptive_pool(segment_manager *segment_mngr);
 
- //!Copy constructor from other cached_adaptive_pool. Increments the
- //!reference count of the associated node pool. Never throws
- cached_adaptive_pool(const cached_adaptive_pool &other)
- : mp_node_pool(other.get_node_pool()),
- m_max_cached_nodes(other.get_max_cached_nodes())
- { mp_node_pool->inc_ref_count(); }
+ //!Copy constructor from other cached_adaptive_pool. Increments the reference
+ //!count of the associated node pool. Never throws
+ cached_adaptive_pool(const cached_adaptive_pool &other);
 
    //!Copy constructor from related cached_adaptive_pool. If not present, constructs
    //!a node pool. Increments the reference count of the associated node pool.
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    cached_adaptive_pool
- (const cached_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks> &other)
- : mp_node_pool(priv_get_or_create(other.get_segment_manager())),
- m_max_cached_nodes(other.get_max_cached_nodes())
- { }
+ (const cached_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other);
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
- ~cached_adaptive_pool()
- {
- priv_deallocate_all_cached_nodes();
- priv_destroy_if_last_link();
- }
+ ~cached_adaptive_pool();
 
    //!Returns a pointer to the node pool.
    //!Never throws
- node_pool_t* get_node_pool() const
- { return detail::get_pointer(mp_node_pool); }
+ node_pool_t* get_node_pool() const;
 
    //!Returns the segment manager.
    //!Never throws
- segment_manager* get_segment_manager()const
- { return mp_node_pool->get_segment_manager(); }
-
- //!Sets the new max cached nodes value. This can provoke deallocations
- //!if "newmax" is less than current cached nodes. Never throws
- void set_max_cached_nodes(std::size_t newmax)
- {
- m_max_cached_nodes = newmax;
- priv_deallocate_remaining_nodes();
- }
+ segment_manager* get_segment_manager()const;
 
- //!Returns the max cached nodes parameter.
+ //!Returns the number of elements that could be allocated.
    //!Never throws
- std::size_t get_max_cached_nodes() const
- { return m_max_cached_nodes; }
-
- //!Returns the number of elements that could be
- //!allocated. Never throws
- size_type max_size() const
- { return this->get_segment_manager()->get_size()/sizeof(value_type); }
+ size_type max_size() const;
 
    //!Allocate memory for an array of count elements.
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
- pointer allocate(size_type count, cvoid_pointer hint = 0)
- {
- (void)hint;
- if(count > ((size_type)-1)/sizeof(value_type))
- throw bad_alloc();
- typedef detail::shared_adaptive_node_pool
- <SegmentManager, mutex_type, sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
-
- void * ret;
-
- if(count == 1){
- //If don't have any cached node, we have to get a new list of free nodes from the pool
- if(m_cached_nodes.empty()){
- mp_node_pool->allocate_nodes(m_max_cached_nodes/2, m_cached_nodes);
- }
- ret = &m_cached_nodes.front();
- m_cached_nodes.pop_front();
- }
- else{
- ret = mp_node_pool->allocate(count);
- }
- return pointer(static_cast<T*>(ret));
- }
-
- //!Deallocate allocated memory. Never throws
- void deallocate(const pointer &ptr, size_type count)
- {
- typedef detail::shared_adaptive_node_pool
- <SegmentManager, mutex_type, sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
-
- if(count == 1){
- //Check if cache is full
- if(m_cached_nodes.size() >= m_max_cached_nodes){
- //This only occurs if this allocator deallocate memory allocated
- //with other equal allocator. Since the cache is full, and more
- //deallocations are probably coming, we'll make some room in cache
- //in a single, efficient multi node deallocation.
- priv_deallocate_n_nodes(m_cached_nodes.size() - m_max_cached_nodes/2);
- }
- m_cached_nodes.push_front(*(node_t*)detail::char_ptr_cast(detail::get_pointer(ptr)));
- }
- else{
- mp_node_pool->deallocate(detail::get_pointer(ptr), count);
- }
- }
-
- //!Deallocates all free chunks of the pool
- void deallocate_free_chunks()
- { mp_node_pool->deallocate_free_chunks(); }
+ pointer allocate(size_type count, cvoid_pointer hint = 0);
 
- //!Swaps allocators. Does not throw. If each allocator is placed in a
- //!different shared memory segments, the result is undefined.
- friend void swap(self_t &alloc1, self_t &alloc2)
- {
- detail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool);
- alloc1.m_cached_nodes.swap(alloc2.m_cached_nodes);
- detail::do_swap(alloc1.m_max_cached_nodes, alloc2.m_max_cached_nodes);
- }
+ //!Deallocate allocated memory.
+ //!Never throws
+ void deallocate(const pointer &ptr, size_type count);
 
- void deallocate_cache()
- { this->priv_deallocate_all_cached_nodes(); }
+ //!Deallocates all free chunks
+ //!of the pool
+ void deallocate_free_chunks();
 
- //These functions are obsolete. These are here to conserve
- //backwards compatibility with containers using them...
+ //!Swaps allocators. Does not throw. If each allocator is placed in a
+ //!different memory segment, the result is undefined.
+ friend void swap(self_t &alloc1, self_t &alloc2);
 
    //!Returns address of mutable object.
    //!Never throws
- pointer address(reference value) const
- { return pointer(boost::addressof(value)); }
+ pointer address(reference value) const;
 
    //!Returns address of non mutable object.
    //!Never throws
- const_pointer address(const_reference value) const
- { return const_pointer(boost::addressof(value)); }
+ const_pointer address(const_reference value) const;
 
    //!Default construct an object.
- //!Throws if T's default constructor throws*/
- void construct(const pointer &ptr)
- { new(detail::get_pointer(ptr)) value_type; }
+ //!Throws if T's default constructor throws
+ void construct(const pointer &ptr);
 
    //!Destroys object. Throws if object's
    //!destructor throws
- void destroy(const pointer &ptr)
- { BOOST_ASSERT(ptr != 0); (*ptr).~value_type(); }
-
- /// @cond
- private:
+ void destroy(const pointer &ptr);
 
- //!Object function that creates the node allocator if it is not created and
- //!increments reference count if it is already created
- struct get_or_create_func
- {
- typedef detail::shared_adaptive_node_pool
- <SegmentManager, mutex_type, sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
-
- //!This connects or constructs the unique instance of node_pool_t
- //!Can throw boost::interprocess::bad_alloc
- void operator()()
- {
- //Find or create the node_pool_t
- mp_node_pool = mp_named_alloc->template find_or_construct
- <node_pool_t>(unique_instance)(mp_named_alloc);
- //If valid, increment link count
- if(mp_node_pool != 0)
- mp_node_pool->inc_ref_count();
- }
-
- //!Constructor. Initializes function
- //!object parameters
- get_or_create_func(segment_manager *hdr) : mp_named_alloc(hdr){}
-
- node_pool_t *mp_node_pool;
- segment_manager *mp_named_alloc;
- };
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold. This size only works for memory allocated with
+ //!allocate, allocation_command and allocate_many.
+ size_type size(const pointer &p) const;
+
+ std::pair<pointer, bool>
+ allocation_command(allocation_type command,
+ size_type limit_size,
+ size_type preferred_size,
+ size_type &received_size, const pointer &reuse = 0);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ multiallocation_iterator allocate_many(size_type elem_size, std::size_t num_elements);
+
+ //!Allocates n_elements elements, each one of size elem_sizes[i]in a
+ //!contiguous chunk
+ //!of memory. The elements must be deallocated
+ multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ void deallocate_many(multiallocation_iterator it);
 
- //!Frees all cached nodes.
- //!Never throws
- void priv_deallocate_all_cached_nodes()
- {
- if(m_cached_nodes.empty()) return;
- mp_node_pool->deallocate_nodes(m_cached_nodes);
- }
+ //!Allocates just one object. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ //!Throws boost::interprocess::bad_alloc if there is no enough memory
+ pointer allocate_one();
 
- //!Frees all cached nodes at once.
- //!Never throws
- void priv_deallocate_remaining_nodes()
- {
- if(m_cached_nodes.size() > m_max_cached_nodes){
- priv_deallocate_n_nodes(m_cached_nodes.size()-m_max_cached_nodes);
- }
- }
-
- //!Frees n cached nodes at once. Never throws
- void priv_deallocate_n_nodes(std::size_t n)
- {
- //Deallocate all new linked list at once
- mp_node_pool->deallocate_nodes(m_cached_nodes, n);
- }
-
- //!Initialization function, creates an executes atomically the
- //!initialization object functions. Can throw boost::interprocess::bad_alloc
- node_pool_t *priv_get_or_create(segment_manager *named_alloc)
- {
- get_or_create_func func(named_alloc);
- named_alloc->atomic_func(func);
- return func.mp_node_pool;
- }
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ multiallocation_iterator allocate_individual(std::size_t num_elements);
+
+ //!Deallocates memory previously allocated with allocate_one().
+ //!You should never use deallocate_one to deallocate memory allocated
+ //!with other functions different from allocate_one(). Never throws
+ void deallocate_one(const pointer &p);
+
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ void deallocate_individual(multiallocation_iterator it);
+ //!Sets the new max cached nodes value. This can provoke deallocations
+ //!if "newmax" is less than current cached nodes. Never throws
+ void set_max_cached_nodes(std::size_t newmax);
 
- //!Object function that decrements the reference count. If the count
- //!reaches to zero destroys the node allocator from memory.
+ //!Returns the max cached nodes parameter.
    //!Never throws
- struct destroy_if_last_link_func
- {
- typedef detail::shared_adaptive_node_pool
- <SegmentManager, mutex_type,sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
-
- //!Decrements reference count and destroys the object if there is no
- //!more attached allocators. Never throws
- void operator()()
- {
- //If not the last link return
- if(mp_node_pool->dec_ref_count() != 0) return;
-
- //Last link, let's destroy the segment_manager
- mp_named_alloc->template destroy<node_pool_t>(unique_instance);
- }
-
- //!Constructor. Initializes function
- //!object parameters
- destroy_if_last_link_func(segment_manager *nhdr,
- node_pool_t *phdr)
- : mp_named_alloc(nhdr), mp_node_pool(phdr){}
-
- segment_manager *mp_named_alloc;
- node_pool_t *mp_node_pool;
- };
+ std::size_t get_max_cached_nodes() const;
+ #endif
+};
 
- //!Destruction function, initializes and executes destruction function
- //!object. Never throws
- void priv_destroy_if_last_link()
- {
- typedef detail::shared_adaptive_node_pool
- <SegmentManager, mutex_type,sizeof(T), NodesPerChunk, MaxFreeChunks> node_pool_t;
- //Get segment manager
- segment_manager *segment_mngr = this->get_segment_manager();
- //Execute destruction functor atomically
- destroy_if_last_link_func func(segment_mngr, detail::get_pointer(mp_node_pool));
- segment_mngr->atomic_func(func);
- }
+#ifdef BOOST_INTERPROCESS_DOXYGEN_INVOKED
 
- private:
- node_pool_ptr mp_node_pool;
- cached_list_t m_cached_nodes;
- std::size_t m_max_cached_nodes;
- /// @endcond
-};
+//!Equality test for same type
+//!of cached_adaptive_pool
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, std::size_t OP> inline
+bool operator==(const cached_adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc1,
+ const cached_adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc2);
+
+//!Inequality test for same type
+//!of cached_adaptive_pool
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, std::size_t OP> inline
+bool operator!=(const cached_adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc1,
+ const cached_adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc2);
 
-//!Equality test for same type of
-//!cached_adaptive_pool
-template<class T, class S, std::size_t NodesPerChunk, std::size_t M> inline
-bool operator==(const cached_adaptive_pool<T, S, NodesPerChunk, M> &alloc1,
- const cached_adaptive_pool<T, S, NodesPerChunk, M> &alloc2)
- { return alloc1.get_node_pool() == alloc2.get_node_pool(); }
-
-//!Inequality test for same type of
-//!cached_adaptive_pool
-template<class T, class S, std::size_t NodesPerChunk, std::size_t M> inline
-bool operator!=(const cached_adaptive_pool<T, S, NodesPerChunk, M> &alloc1,
- const cached_adaptive_pool<T, S, NodesPerChunk, M> &alloc2)
- { return alloc1.get_node_pool() != alloc2.get_node_pool(); }
+#endif
 
 } //namespace interprocess {
-
 } //namespace boost {
 
+
 #include <boost/interprocess/detail/config_end.hpp>
 
 #endif //#ifndef BOOST_INTERPROCESS_CACHED_ADAPTIVE_POOL_HPP

Modified: branches/fix-links/boost/interprocess/allocators/cached_node_allocator.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/cached_node_allocator.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/cached_node_allocator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -19,14 +19,11 @@
 #include <boost/interprocess/detail/workaround.hpp>
 
 #include <boost/interprocess/interprocess_fwd.hpp>
-#include <boost/interprocess/detail/utilities.hpp>
-#include <boost/assert.hpp>
-#include <boost/utility/addressof.hpp>
 #include <boost/interprocess/allocators/detail/node_pool.hpp>
+#include <boost/interprocess/allocators/detail/allocator_common.hpp>
 #include <boost/interprocess/detail/workaround.hpp>
-#include <boost/interprocess/exceptions.hpp>
-#include <memory>
-#include <algorithm>
+#include <boost/interprocess/detail/version_type.hpp>
+#include <boost/interprocess/allocators/detail/node_tools.hpp>
 #include <cstddef>
 
 //!\file
@@ -35,37 +32,113 @@
 namespace boost {
 namespace interprocess {
 
-//!An STL node allocator that uses a segment manager as memory
-//!source. The internal pointer type will of the same type (raw, smart) as
-//!"typename SegmentManager::void_pointer" type. This allows
-//!placing the allocator in shared memory, memory mapped-files, etc...
-//!This node allocator shares a segregated storage between all instances of
-//!cached_node_allocator with equal sizeof(T) placed in the same fixed size
-//!memory segment. But also caches some nodes privately to
-//!avoid some synchronization overhead.
-template<class T, class SegmentManager, std::size_t NodesPerChunk>
-class cached_node_allocator
+
+/// @cond
+
+namespace detail {
+
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk = 64
+ >
+class cached_node_allocator_v1
+ : public detail::cached_allocator_impl
+ < T
+ , detail::shared_node_pool
+ < SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ >
+ , 1>
 {
+ public:
+ typedef detail::cached_allocator_impl
+ < T
+ , detail::shared_node_pool
+ < SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ >
+ , 1> base_t;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef cached_node_allocator_v1
+ <T2, SegmentManager, NodesPerChunk> other;
+ };
+
+ cached_node_allocator_v1(SegmentManager *segment_mngr,
+ std::size_t max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES)
+ : base_t(segment_mngr, max_cached_nodes)
+ {}
+
+ template<class T2>
+ cached_node_allocator_v1
+ (const cached_node_allocator_v1
+ <T2, SegmentManager, NodesPerChunk> &other)
+ : base_t(other)
+ {}
+};
+
+} //namespace detail{
+
+/// @endcond
+
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ >
+class cached_node_allocator
    /// @cond
- typedef typename SegmentManager::void_pointer void_pointer;
- typedef typename detail::
- pointer_to_other<void_pointer, const void>::type cvoid_pointer;
- typedef SegmentManager segment_manager;
- typedef typename detail::
- pointer_to_other<void_pointer, char>::type char_pointer;
- typedef typename SegmentManager::mutex_family::mutex_type mutex_type;
- typedef cached_node_allocator<T, SegmentManager, NodesPerChunk> self_t;
- enum { DEFAULT_MAX_CACHED_NODES = 64 };
- typedef typename detail::node_slist<void_pointer>::node_t node_t;
- typedef typename detail::node_slist<void_pointer>::node_slist_t cached_list_t;
+ : public detail::cached_allocator_impl
+ < T
+ , detail::shared_node_pool
+ < SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ >
+ , 2>
    /// @endcond
+{
+
+ #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+ public:
+ typedef detail::cached_allocator_impl
+ < T
+ , detail::shared_node_pool
+ < SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ >
+ , 2> base_t;
 
    public:
- //-------
- typedef typename detail::
- pointer_to_other<void_pointer, T>::type pointer;
- typedef typename detail::
- pointer_to_other<void_pointer, const T>::type const_pointer;
+ typedef detail::version_type<cached_node_allocator, 2> version;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef cached_node_allocator<T2, SegmentManager, NodesPerChunk> other;
+ };
+
+ cached_node_allocator(SegmentManager *segment_mngr,
+ std::size_t max_cached_nodes = base_t::DEFAULT_MAX_CACHED_NODES)
+ : base_t(segment_mngr, max_cached_nodes)
+ {}
+
+ template<class T2>
+ cached_node_allocator
+ (const cached_node_allocator<T2, SegmentManager, NodesPerChunk> &other)
+ : base_t(other)
+ {}
+
+ #else
+ public:
+ typedef implementation_defined::segment_manager segment_manager;
+ typedef segment_manager::void_pointer void_pointer;
+ typedef implementation_defined::pointer pointer;
+ typedef implementation_defined::const_pointer const_pointer;
    typedef T value_type;
    typedef typename detail::add_reference
                      <value_type>::type reference;
@@ -73,302 +146,173 @@
                      <const value_type>::type const_reference;
    typedef std::size_t size_type;
    typedef std::ptrdiff_t difference_type;
- typedef detail::shared_node_pool
- < SegmentManager, mutex_type
- , sizeof(T), NodesPerChunk> node_pool_t;
- typedef typename detail::
- pointer_to_other<void_pointer, node_pool_t>::type node_pool_ptr;
 
- //!Obtains cached_node_allocator from other cached_node_allocator
+ //!Obtains cached_node_allocator from
+ //!cached_node_allocator
    template<class T2>
    struct rebind
    {
- typedef cached_node_allocator<T2, SegmentManager, NodesPerChunk> other;
+ typedef cached_node_allocator<T2, SegmentManager> other;
    };
 
- /// @cond
    private:
-
- //!Not assignable from related cached_node_allocator
+ //!Not assignable from
+ //!related cached_node_allocator
    template<class T2, class SegmentManager2, std::size_t N2>
    cached_node_allocator& operator=
       (const cached_node_allocator<T2, SegmentManager2, N2>&);
 
- //!Not assignable from other cached_node_allocator
+ //!Not assignable from
+ //!other cached_node_allocator
    cached_node_allocator& operator=(const cached_node_allocator&);
- /// @endcond
 
    public:
- //!Constructor from a segment manager. If not present, constructs
- //!a node pool. Increments the reference count of the node pool.
+ //!Constructor from a segment manager. If not present, constructs a node
+ //!pool. Increments the reference count of the associated node pool.
    //!Can throw boost::interprocess::bad_alloc
- cached_node_allocator(segment_manager *segment_mngr,
- std::size_t max_cached_nodes = DEFAULT_MAX_CACHED_NODES)
- : mp_node_pool(priv_get_or_create(segment_mngr)),
- m_max_cached_nodes(max_cached_nodes)
- {}
+ cached_node_allocator(segment_manager *segment_mngr);
 
- //!Copy constructor from other cached_node_allocator. Increments the
- //!reference count of the associated node pool. Never throws
- cached_node_allocator(const cached_node_allocator &other)
- : mp_node_pool(other.get_node_pool()),
- m_max_cached_nodes(other.get_max_cached_nodes())
- { mp_node_pool->inc_ref_count(); }
+ //!Copy constructor from other cached_node_allocator. Increments the reference
+ //!count of the associated node pool. Never throws
+ cached_node_allocator(const cached_node_allocator &other);
 
    //!Copy constructor from related cached_node_allocator. If not present, constructs
    //!a node pool. Increments the reference count of the associated node pool.
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    cached_node_allocator
- (const cached_node_allocator<T2, SegmentManager, NodesPerChunk> &other)
- : mp_node_pool(priv_get_or_create(other.get_segment_manager())),
- m_max_cached_nodes(other.get_max_cached_nodes())
- { }
+ (const cached_node_allocator<T2, SegmentManager, NodesPerChunk> &other);
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
- ~cached_node_allocator()
- {
- priv_deallocate_all_cached_nodes();
- priv_destroy_if_last_link();
- }
+ ~cached_node_allocator();
 
    //!Returns a pointer to the node pool.
    //!Never throws
- node_pool_t* get_node_pool() const
- { return detail::get_pointer(mp_node_pool); }
+ node_pool_t* get_node_pool() const;
 
    //!Returns the segment manager.
    //!Never throws
- segment_manager* get_segment_manager()const
- { return mp_node_pool->get_segment_manager(); }
-
- //!Sets the new max cached nodes value. This can provoke deallocations
- //!if "newmax" is less than current cached nodes. Never throws
- void set_max_cached_nodes(std::size_t newmax)
- {
- m_max_cached_nodes = newmax;
- priv_deallocate_remaining_nodes();
- }
+ segment_manager* get_segment_manager()const;
 
- //!Returns the max cached nodes parameter.
+ //!Returns the number of elements that could be allocated.
    //!Never throws
- std::size_t get_max_cached_nodes() const
- { return m_max_cached_nodes; }
-
- //!Returns the number of elements that could be allocated. Never throws
- size_type max_size() const
- { return this->get_segment_manager()->get_size()/sizeof(value_type); }
+ size_type max_size() const;
 
    //!Allocate memory for an array of count elements.
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
- pointer allocate(size_type count, cvoid_pointer hint = 0)
- {
- (void)hint;
- if(count > ((size_type)-1)/sizeof(value_type))
- throw bad_alloc();
- typedef detail::shared_node_pool
- <SegmentManager, mutex_type, sizeof(T), NodesPerChunk> node_pool_t;
-
- void * ret;
-
- if(count == 1){
- //If don't have any cached node, we have to get a new list of free nodes from the pool
- if(m_cached_nodes.empty()){
- mp_node_pool->allocate_nodes(m_max_cached_nodes/2, m_cached_nodes);
- }
- ret = &m_cached_nodes.front();
- m_cached_nodes.pop_front();
- }
- else{
- ret = mp_node_pool->allocate(count);
- }
- return pointer(static_cast<T*>(ret));
- }
+ pointer allocate(size_type count, cvoid_pointer hint = 0);
 
    //!Deallocate allocated memory.
    //!Never throws
- void deallocate(const pointer &ptr, size_type count)
- {
- typedef detail::shared_node_pool
- <SegmentManager, mutex_type, sizeof(T), NodesPerChunk> node_pool_t;
-
- if(count == 1){
- //Check if cache is full
- if(m_cached_nodes.size() >= m_max_cached_nodes){
- //This only occurs if this allocator deallocate memory allocated
- //with other equal allocator. Since the cache is full, and more
- //deallocations are probably coming, we'll make some room in cache
- //in a single, efficient multi node deallocation.
- priv_deallocate_n_nodes(m_cached_nodes.size() - m_max_cached_nodes/2);
- }
- m_cached_nodes.push_front(*(node_t*)detail::char_ptr_cast(detail::get_pointer(ptr)));
- }
- else{
- mp_node_pool->deallocate(detail::get_pointer(ptr), count);
- }
- }
+ void deallocate(const pointer &ptr, size_type count);
 
- //!Swaps allocators. Does not throw. If each allocator is placed in a
- //!different shared memory segments, the result is undefined.
- friend void swap(self_t &alloc1, self_t &alloc2)
- {
- detail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool);
- alloc1.m_cached_nodes.swap(alloc2.m_cached_nodes);
- detail::do_swap(alloc1.m_max_cached_nodes, alloc2.m_max_cached_nodes);
- }
-
- //!Returns the cached nodes to the shared pool
- void deallocate_cache()
- { this->priv_deallocate_all_cached_nodes(); }
-
- //!Deallocates all free chunks of the pool
- void deallocate_free_chunks()
- { mp_node_pool->deallocate_free_chunks(); }
+ //!Deallocates all free chunks
+ //!of the pool
+ void deallocate_free_chunks();
 
- //These functions are obsolete. These are here to conserve
- //backwards compatibility with containers using them...
+ //!Swaps allocators. Does not throw. If each allocator is placed in a
+ //!different memory segment, the result is undefined.
+ friend void swap(self_t &alloc1, self_t &alloc2);
 
    //!Returns address of mutable object.
    //!Never throws
- pointer address(reference value) const
- { return pointer(boost::addressof(value)); }
+ pointer address(reference value) const;
 
    //!Returns address of non mutable object.
    //!Never throws
- const_pointer address(const_reference value) const
- { return const_pointer(boost::addressof(value)); }
+ const_pointer address(const_reference value) const;
 
    //!Default construct an object.
- //!Throws if T's default constructor throws*/
- void construct(const pointer &ptr)
- { new(detail::get_pointer(ptr)) value_type; }
+ //!Throws if T's default constructor throws
+ void construct(const pointer &ptr);
 
    //!Destroys object. Throws if object's
    //!destructor throws
- void destroy(const pointer &ptr)
- { BOOST_ASSERT(ptr != 0); (*ptr).~value_type(); }
+ void destroy(const pointer &ptr);
 
- /// @cond
- private:
-
- //!Object function that creates the node allocator if it is not created and
- //!increments reference count if it is already created
- struct get_or_create_func
- {
- typedef detail::shared_node_pool
- <SegmentManager, mutex_type, sizeof(T), NodesPerChunk> node_pool_t;
-
- //!This connects or constructs the unique instance of node_pool_t
- //!Can throw boost::interprocess::bad_alloc
- void operator()()
- {
- //Find or create the node_pool_t
- mp_node_pool = mp_named_alloc->template find_or_construct
- <node_pool_t>(unique_instance)(mp_named_alloc);
- //If valid, increment link count
- if(mp_node_pool != 0)
- mp_node_pool->inc_ref_count();
- }
-
- //!Constructor. Initializes function
- //!object parameters
- get_or_create_func(segment_manager *hdr) : mp_named_alloc(hdr){}
-
- node_pool_t *mp_node_pool;
- segment_manager *mp_named_alloc;
- };
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold. This size only works for memory allocated with
+ //!allocate, allocation_command and allocate_many.
+ size_type size(const pointer &p) const;
+
+ std::pair<pointer, bool>
+ allocation_command(allocation_type command,
+ size_type limit_size,
+ size_type preferred_size,
+ size_type &received_size, const pointer &reuse = 0);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ multiallocation_iterator allocate_many(size_type elem_size, std::size_t num_elements);
+
+ //!Allocates n_elements elements, each one of size elem_sizes[i]in a
+ //!contiguous chunk
+ //!of memory. The elements must be deallocated
+ multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ void deallocate_many(multiallocation_iterator it);
 
- //!Frees all cached nodes.
- //!Never throws
- void priv_deallocate_all_cached_nodes()
- { mp_node_pool->deallocate_nodes(m_cached_nodes); }
-
- //!Frees all cached nodes at once.
- //!Never throws
- void priv_deallocate_remaining_nodes()
- {
- if(m_cached_nodes.size() > m_max_cached_nodes){
- priv_deallocate_n_nodes(m_cached_nodes.size()-m_max_cached_nodes);
- }
- }
-
- //!Frees n cached nodes at once.
- //!Never throws
- void priv_deallocate_n_nodes(std::size_t n)
- { mp_node_pool->deallocate_nodes(m_cached_nodes, n); }
+ //!Allocates just one object. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ //!Throws boost::interprocess::bad_alloc if there is no enough memory
+ pointer allocate_one();
 
- //!Initialization function, creates an executes atomically the
- //!initialization object functions. Can throw boost::interprocess::bad_alloc
- node_pool_t *priv_get_or_create(segment_manager *named_alloc)
- {
- get_or_create_func func(named_alloc);
- named_alloc->atomic_func(func);
- return func.mp_node_pool;
- }
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ multiallocation_iterator allocate_individual(std::size_t num_elements);
+
+ //!Deallocates memory previously allocated with allocate_one().
+ //!You should never use deallocate_one to deallocate memory allocated
+ //!with other functions different from allocate_one(). Never throws
+ void deallocate_one(const pointer &p);
+
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ void deallocate_individual(multiallocation_iterator it);
+ //!Sets the new max cached nodes value. This can provoke deallocations
+ //!if "newmax" is less than current cached nodes. Never throws
+ void set_max_cached_nodes(std::size_t newmax);
 
- //!Object function that decrements the reference count. If the count
- //!reaches to zero destroys the node allocator from memory.
+ //!Returns the max cached nodes parameter.
    //!Never throws
- struct destroy_if_last_link_func
- {
- typedef detail::shared_node_pool
- <SegmentManager, mutex_type,sizeof(T), NodesPerChunk> node_pool_t;
-
- //!Decrements reference count and destroys the object if there is no
- //!more attached allocators. Never throws
- void operator()()
- {
- //If not the last link return
- if(mp_node_pool->dec_ref_count() != 0) return;
-
- //Last link, let's destroy the segment_manager
- mp_named_alloc->template destroy<node_pool_t>(unique_instance);
- }
-
- //!Constructor. Initializes function object
- //!parameters
- destroy_if_last_link_func(segment_manager *nhdr,
- node_pool_t *phdr)
- : mp_named_alloc(nhdr), mp_node_pool(phdr){}
-
- segment_manager *mp_named_alloc;
- node_pool_t *mp_node_pool;
- };
-
- //!Destruction function, initializes and executes destruction function
- //!object. Never throws
- void priv_destroy_if_last_link()
- {
- typedef detail::shared_node_pool
- <SegmentManager, mutex_type,sizeof(T), NodesPerChunk> node_pool_t;
- //Get segment manager
- segment_manager *segment_mngr = this->get_segment_manager();
- //Execute destruction functor atomically
- destroy_if_last_link_func func(segment_mngr, detail::get_pointer(mp_node_pool));
- segment_mngr->atomic_func(func);
- }
-
- private:
- node_pool_ptr mp_node_pool;
- cached_list_t m_cached_nodes;
- std::size_t m_max_cached_nodes;
- /// @endcond
+ std::size_t get_max_cached_nodes() const;
+ #endif
 };
 
-//!Equality test for same type of
-//!cached_node_allocator
+#ifdef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+
+//!Equality test for same type
+//!of cached_node_allocator
 template<class T, class S, std::size_t NodesPerChunk> inline
 bool operator==(const cached_node_allocator<T, S, NodesPerChunk> &alloc1,
- const cached_node_allocator<T, S, NodesPerChunk> &alloc2)
- { return alloc1.get_node_pool() == alloc2.get_node_pool(); }
+ const cached_node_allocator<T, S, NodesPerChunk> &alloc2);
 
-//!Inequality test for same type of
-//!cached_node_allocator
+//!Inequality test for same type
+//!of cached_node_allocator
 template<class T, class S, std::size_t NodesPerChunk> inline
 bool operator!=(const cached_node_allocator<T, S, NodesPerChunk> &alloc1,
- const cached_node_allocator<T, S, NodesPerChunk> &alloc2)
- { return alloc1.get_node_pool() != alloc2.get_node_pool(); }
+ const cached_node_allocator<T, S, NodesPerChunk> &alloc2);
+
+#endif
 
 } //namespace interprocess {
 } //namespace boost {

Modified: branches/fix-links/boost/interprocess/allocators/detail/adaptive_node_pool.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/detail/adaptive_node_pool.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/detail/adaptive_node_pool.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -17,20 +17,21 @@
 
 #include <boost/interprocess/detail/config_begin.hpp>
 #include <boost/interprocess/detail/workaround.hpp>
+#include <boost/interprocess/interprocess_fwd.hpp>
 #include <boost/interprocess/sync/interprocess_mutex.hpp>
 #include <boost/interprocess/detail/utilities.hpp>
 #include <boost/interprocess/detail/min_max.hpp>
 #include <boost/interprocess/detail/math_functions.hpp>
 #include <boost/interprocess/exceptions.hpp>
-#include <boost/intrusive/list.hpp>
+#include <boost/intrusive/set.hpp>
 #include <boost/intrusive/slist.hpp>
 #include <boost/math/common_factor_ct.hpp>
 #include <boost/interprocess/detail/type_traits.hpp>
 #include <boost/interprocess/allocators/detail/node_tools.hpp>
+#include <boost/interprocess/allocators/detail/allocator_common.hpp>
 #include <cstddef>
 #include <cmath>
 #include <cassert>
-#include <cassert>
 
 //!\file
 //!Describes the real adaptive pool shared by many Interprocess pool allocators
@@ -39,10 +40,6 @@
 namespace interprocess {
 namespace detail {
 
-//!Pooled shared memory allocator using an smart adaptive pool. Includes
-//!a reference count but the class does not delete itself, this is
-//!responsibility of user classes. Node size (NodeSize) and the number of
-//!nodes allocated per chunk (NodesPerChunk) are known at compile time.
 template<class SegmentManagerBase>
 class private_adaptive_node_pool_impl
 {
@@ -56,19 +53,85 @@
    public:
    typedef typename node_slist<void_pointer>::node_t node_t;
    typedef typename node_slist<void_pointer>::node_slist_t free_nodes_t;
+ typedef typename SegmentManagerBase::multiallocation_iterator multiallocation_iterator;
+ typedef typename SegmentManagerBase::multiallocation_chain multiallocation_chain;
 
    private:
- //This hook will be used to chain the memory chunks
- typedef typename bi::make_list_base_hook
- <bi::void_pointer<void_pointer>, bi::link_mode<bi::normal_link> >::type list_hook_t;
+ typedef typename bi::make_set_base_hook
+ < bi::void_pointer<void_pointer>
+ , bi::optimize_size<true>
+ , bi::constant_time_size<false>
+ , bi::link_mode<bi::normal_link> >::type multiset_hook_t;
+
+ struct hdr_offset_holder
+ {
+ hdr_offset_holder(std::size_t offset = 0)
+ : hdr_offset(offset)
+ {}
+ std::size_t hdr_offset;
+ };
 
    struct chunk_info_t
- : public list_hook_t
+ :
+ public hdr_offset_holder,
+ public multiset_hook_t
    {
       //An intrusive list of free node from this chunk
       free_nodes_t free_nodes;
+ friend bool operator <(const chunk_info_t &l, const chunk_info_t &r)
+ {
+// { return l.free_nodes.size() < r.free_nodes.size(); }
+ //Let's order blocks first by free nodes and then by address
+ //so that highest address fully free chunks are deallocated.
+ //This improves returning memory to the OS (trimming).
+ const bool is_less = l.free_nodes.size() < r.free_nodes.size();
+ const bool is_equal = l.free_nodes.size() == r.free_nodes.size();
+ return is_less || (is_equal && (&l < &r));
+ }
    };
- typedef typename bi::make_list<chunk_info_t, bi::base_hook<list_hook_t> >::type chunk_list_t;
+ typedef typename bi::make_multiset
+ <chunk_info_t, bi::base_hook<multiset_hook_t> >::type chunk_multiset_t;
+ typedef typename chunk_multiset_t::iterator chunk_iterator;
+
+ static const std::size_t MaxAlign = alignment_of<node_t>::value;
+ static const std::size_t HdrSize = ((sizeof(chunk_info_t)-1)/MaxAlign+1)*MaxAlign;
+ static const std::size_t HdrOffsetSize = ((sizeof(hdr_offset_holder)-1)/MaxAlign+1)*MaxAlign;
+ static std::size_t calculate_alignment
+ (std::size_t overhead_percent, std::size_t real_node_size)
+ {
+ //to-do: handle real_node_size != node_size
+ const std::size_t divisor = overhead_percent*real_node_size;
+ const std::size_t dividend = HdrOffsetSize*100;
+ std::size_t elements_per_subchunk = (dividend - 1)/divisor + 1;
+ std::size_t candidate_power_of_2 =
+ upper_power_of_2(elements_per_subchunk*real_node_size + HdrOffsetSize);
+ bool overhead_satisfied = false;
+ while(!overhead_satisfied){
+ elements_per_subchunk = (candidate_power_of_2 - HdrOffsetSize)/real_node_size;
+ std::size_t overhead_size = candidate_power_of_2 - elements_per_subchunk*real_node_size;
+ if(overhead_size*100/candidate_power_of_2 < overhead_percent){
+ overhead_satisfied = true;
+ }
+ else{
+ candidate_power_of_2 <<= 1;
+ }
+ }
+ return candidate_power_of_2;
+ }
+
+ static void calculate_num_subchunks
+ (std::size_t alignment, std::size_t real_node_size, std::size_t elements_per_chunk
+ ,std::size_t &num_subchunks, std::size_t &real_num_node)
+ {
+ std::size_t elements_per_subchunk = (alignment - HdrOffsetSize)/real_node_size;
+ std::size_t possible_num_subchunk = (elements_per_chunk - 1)/elements_per_subchunk + 1;
+ std::size_t hdr_subchunk_elements = (alignment - HdrSize - SegmentManagerBase::PayloadPerAllocation)/real_node_size;
+ while(((possible_num_subchunk-1)*elements_per_subchunk + hdr_subchunk_elements) < elements_per_chunk){
+ ++possible_num_subchunk;
+ }
+ num_subchunks = possible_num_subchunk;
+ real_num_node = (possible_num_subchunk-1)*elements_per_subchunk + hdr_subchunk_elements;
+ }
 
    public:
    //!Segment manager typedef
@@ -77,26 +140,25 @@
    //!Constructor from a segment manager. Never throws
    private_adaptive_node_pool_impl
       ( segment_manager_base_type *segment_mngr_base, std::size_t node_size
- , std::size_t nodes_per_chunk, std::size_t max_free_chunks)
- : m_node_size(node_size)
- , m_max_free_chunks(max_free_chunks)
- , m_real_node_size(lcm(m_node_size, sizeof(node_t)))
- , m_header_size(min_value(get_rounded_size(sizeof(chunk_info_t), alignment_of<max_align>::value)
- ,get_rounded_size(sizeof(chunk_info_t), m_real_node_size)))
- //Round the size to a power of two value.
- //This is the total memory size (including payload) that we want to
- //allocate from the general-purpose allocator
- , m_real_chunk_alignment(upper_power_of_2(m_header_size + m_real_node_size*nodes_per_chunk))
+ , std::size_t nodes_per_chunk, std::size_t max_free_chunks
+ , unsigned char overhead_percent
+ )
+ : m_max_free_chunks(max_free_chunks)
+ , m_real_node_size(lcm(node_size, std::size_t(alignment_of<node_t>::value)))
+ //Round the size to a power of two value.
+ //This is the total memory size (including payload) that we want to
+ //allocate from the general-purpose allocator
+ , m_real_chunk_alignment(calculate_alignment(overhead_percent, m_real_node_size))
       //This is the real number of nodes per chunk
- , m_real_num_node((m_real_chunk_alignment - SegmentManagerBase::PayloadPerAllocation - m_header_size)/m_real_node_size)
+ , m_num_subchunks(0)
+ , m_real_num_node(0)
       //General purpose allocator
    , mp_segment_mngr_base(segment_mngr_base)
- , m_chunklist()
- , m_first_free_chunk(m_chunklist.end())
- //Debug node count
- , m_allocated(0)
- , m_free_chunks(0)
- {}
+ , m_chunk_multiset()
+ , m_totally_free_chunks(0)
+ {
+ calculate_num_subchunks(m_real_chunk_alignment, m_real_node_size, nodes_per_chunk, m_num_subchunks, m_real_num_node);
+ }
 
    //!Destructor. Deallocates all allocated chunks. Never throws
    ~private_adaptive_node_pool_impl()
@@ -110,60 +172,118 @@
    { return detail::get_pointer(mp_segment_mngr_base); }
 
    //!Allocates array of count elements. Can throw boost::interprocess::bad_alloc
- void *allocate(std::size_t count)
+ void *allocate_node()
    {
- std::size_t bytes = count*m_node_size;
- if(bytes > m_real_node_size){//Normal allocation, no pooling used
- void *addr = mp_segment_mngr_base->allocate(bytes);
- if(!addr) throw bad_alloc();
- return addr;
+ priv_invariants();
+ //If there are no free nodes we allocate a new block
+ if (m_chunk_multiset.empty()){
+ priv_alloc_chunk(1);
       }
- else //Node allocation, pooling used
- return priv_alloc_node();
+ //We take the first free node the multiset can't be empty
+ return priv_take_first_node();
    }
-
+
    //!Deallocates an array pointed by ptr. Never throws
- void deallocate(void *ptr, std::size_t count)
+ void deallocate_node(void *pElem)
    {
- std::size_t bytes = count*m_node_size;
- if(bytes > m_real_node_size)//Normal allocation was used
- mp_segment_mngr_base->deallocate(ptr);
- else //Node allocation was used
- priv_dealloc_node(ptr);
+ priv_invariants();
+ chunk_info_t *chunk_info = priv_chunk_from_node(pElem);
+ assert(chunk_info->free_nodes.size() < m_real_num_node);
+ //We put the node at the beginning of the free node list
+ node_t * to_deallocate = static_cast<node_t*>(pElem);
+ chunk_info->free_nodes.push_front(*to_deallocate);
+
+ chunk_iterator this_chunk(chunk_multiset_t::s_iterator_to(*chunk_info));
+ chunk_iterator next_chunk(this_chunk);
+ ++next_chunk;
+
+ //Cache the free nodes from the chunk
+ std::size_t this_chunk_free_nodes = this_chunk->free_nodes.size();
+
+ if(this_chunk_free_nodes == 1){
+ m_chunk_multiset.insert(m_chunk_multiset.begin(), *chunk_info);
+ }
+ else{
+ chunk_iterator next_chunk(this_chunk);
+ ++next_chunk;
+ if(next_chunk != m_chunk_multiset.end()){
+ std::size_t next_free_nodes = next_chunk->free_nodes.size();
+ if(this_chunk_free_nodes > next_free_nodes){
+ //Now move the chunk to the new position
+ m_chunk_multiset.erase(this_chunk);
+ m_chunk_multiset.insert(*chunk_info);
+ }
+ }
+ }
+ //Update free chunk count
+ if(this_chunk_free_nodes == m_real_num_node){
+ ++m_totally_free_chunks;
+ priv_deallocate_free_chunks(m_max_free_chunks);
+ }
+ priv_invariants();
    }
 
    //!Allocates a singly linked list of n nodes ending in null pointer.
    //!can throw boost::interprocess::bad_alloc
- void allocate_nodes(const std::size_t n, free_nodes_t &nodes)
+ void allocate_nodes(multiallocation_chain &nodes, const std::size_t n)
    {
- std::size_t i = 0;
+ std::size_t old_node_count = nodes.size();
       try{
- for(; i < n; ++i){
- nodes.push_front(*priv_alloc_node());
+ priv_invariants();
+ for(std::size_t i = 0; i != n; ++i){
+ //If there are no free nodes we allocate all needed chunks
+ if (m_chunk_multiset.empty()){
+ priv_alloc_chunk(((n - i) - 1)/m_real_num_node + 1);
+ }
+ nodes.push_front(priv_take_first_node());
          }
       }
       catch(...){
- priv_deallocate_nodes(nodes, i);
+ priv_deallocate_nodes(nodes, nodes.size());
+ priv_deallocate_free_chunks(m_max_free_chunks);
          throw;
       }
+ //remove me
+ assert((n+old_node_count) == (std::size_t)std::distance(nodes.get_it(), multiallocation_iterator()));
+ priv_invariants();
+ }
+
+ //!Allocates n nodes, pointed by the multiallocation_iterator.
+ //!Can throw boost::interprocess::bad_alloc
+ multiallocation_iterator allocate_nodes(const std::size_t n)
+ {
+ multiallocation_chain chain;
+ this->allocate_nodes(chain, n);
+ return chain.get_it();
    }
 
    //!Deallocates a linked list of nodes. Never throws
- void deallocate_nodes(free_nodes_t &nodes)
+ void deallocate_nodes(multiallocation_chain &nodes)
    { priv_deallocate_nodes(nodes, nodes.size()); }
 
    //!Deallocates the first n nodes of a linked list of nodes. Never throws
- void deallocate_nodes(free_nodes_t &nodes, std::size_t n)
+ void deallocate_nodes(multiallocation_chain &nodes, std::size_t n)
    { priv_deallocate_nodes(nodes, n); }
 
+ //!Deallocates the nodes pointed by the multiallocation iterator. Never throws
+ void deallocate_nodes(multiallocation_iterator it)
+ {
+ multiallocation_iterator itend;
+ while(it != itend){
+ void *addr = &*it;
+ ++it;
+ deallocate_node(addr);
+ }
+ }
+
    void deallocate_free_chunks()
    { priv_deallocate_free_chunks(0); }
 
    std::size_t num_free_nodes()
    {
- typedef typename chunk_list_t::const_iterator citerator;
+ typedef typename chunk_multiset_t::const_iterator citerator;
       std::size_t count = 0;
- citerator it (m_first_free_chunk), itend(m_chunklist.end());
+ citerator it (m_chunk_multiset.begin()), itend(m_chunk_multiset.end());
       for(; it != itend; ++it){
          count += it->free_nodes.size();
       }
@@ -172,22 +292,40 @@
 
    void swap(private_adaptive_node_pool_impl &other)
    {
+ assert(m_max_free_chunks == other.m_max_free_chunks);
+ assert(m_real_node_size == other.m_real_node_size);
+ assert(m_real_chunk_alignment == other.m_real_chunk_alignment);
+ assert(m_real_num_node == other.m_real_num_node);
       std::swap(mp_segment_mngr_base, other.mp_segment_mngr_base);
- m_chunklist.swap(other.m_chunklist);
- std::swap(m_first_free_chunk, other.m_first_free_chunk);
- std::swap(m_allocated, other.m_allocated);
- std::swap(m_free_chunks, other.m_allocated);
+ std::swap(m_totally_free_chunks, other.m_totally_free_chunks);
+ m_chunk_multiset.swap(other.m_chunk_multiset);
    }
 
    private:
+ node_t *priv_take_first_node()
+ {
+ assert(m_chunk_multiset.begin() != m_chunk_multiset.end());
+ //We take the first free node the multiset can't be empty
+ free_nodes_t &free_nodes = m_chunk_multiset.begin()->free_nodes;
+ node_t *first_node = &free_nodes.front();
+ const std::size_t free_nodes_count = free_nodes.size();
+ assert(0 != free_nodes_count);
+ free_nodes.pop_front();
+ if(free_nodes_count == 1){
+ m_chunk_multiset.erase(m_chunk_multiset.begin());
+ }
+ else if(free_nodes_count == m_real_num_node){
+ --m_totally_free_chunks;
+ }
+ priv_invariants();
+ return first_node;
+ }
 
- void priv_deallocate_nodes(free_nodes_t &nodes, const std::size_t num)
+ void priv_deallocate_nodes(multiallocation_chain &nodes, const std::size_t num)
    {
       assert(nodes.size() >= num);
       for(std::size_t i = 0; i < num; ++i){
- node_t *to_deallocate = &nodes.front();
- nodes.pop_front();
- deallocate(to_deallocate, 1);
+ deallocate_node(nodes.pop_front());
       }
    }
 
@@ -197,71 +335,75 @@
    class chunk_destroyer
    {
       public:
- chunk_destroyer(segment_manager_base_type *mngr, std::size_t real_num_node)
- : mngr_(mngr), m_real_num_node(real_num_node)
+ chunk_destroyer(const private_adaptive_node_pool_impl *impl)
+ : mp_impl(impl)
       {}
 
- void operator()(typename chunk_list_t::pointer to_deallocate)
+ void operator()(typename chunk_multiset_t::pointer to_deallocate)
       {
          std::size_t free_nodes = to_deallocate->free_nodes.size();
          (void)free_nodes;
- assert(free_nodes == m_real_num_node);
- mngr_->deallocate(detail::get_pointer(to_deallocate));
+ assert(free_nodes == mp_impl->m_real_num_node);
+ assert(0 == to_deallocate->hdr_offset);
+ hdr_offset_holder *hdr_off_holder = mp_impl->priv_first_subchunk_from_chunk((chunk_info_t*)detail::get_pointer(to_deallocate));
+ mp_impl->mp_segment_mngr_base->deallocate(hdr_off_holder);
       }
- segment_manager_base_type *mngr_;
- const std::size_t m_real_num_node;
+ const private_adaptive_node_pool_impl *mp_impl;
    };
 
    //This macro will activate invariant checking. Slow, but helpful for debugging the code.
- //#define BOOST_INTERPROCESS_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS
+ #define BOOST_INTERPROCESS_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS
    void priv_invariants()
    #ifdef BOOST_INTERPROCESS_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS
    #undef BOOST_INTERPROCESS_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS
    {
- typedef typename chunk_list_t::iterator chunk_iterator;
- //We iterate though the chunk list to free the memory
- chunk_iterator it(m_chunklist.begin()),
- itend(m_chunklist.end()), to_deallocate;
- for(++it; it != itend; ++it){
- chunk_iterator prev(it);
- --prev;
- std::size_t sp = prev->free_nodes.size(),
- si = it->free_nodes.size();
- assert(sp <= si);
- (void)sp; (void)si;
- }
-
- //Check that the total free nodes are correct
- it = m_chunklist.begin();
- itend = m_chunklist.end();
- std::size_t total_free = 0;
- for(; it != itend; ++it){
- total_free += it->free_nodes.size();
+ //We iterate through the chunk list to free the memory
+ chunk_iterator it(m_chunk_multiset.begin()),
+ itend(m_chunk_multiset.end()), to_deallocate;
+ if(it != itend){
+ for(++it; it != itend; ++it){
+ chunk_iterator prev(it);
+ --prev;
+ std::size_t sp = prev->free_nodes.size(),
+ si = it->free_nodes.size();
+ assert(sp <= si);
+ (void)sp; (void)si;
+ }
       }
- assert(total_free >= m_free_chunks*m_real_num_node);
 
- //Check that the total totally free chunks are correct
- it = m_chunklist.begin();
- itend = m_chunklist.end();
- total_free = 0;
- for(; it != itend; ++it){
- total_free += it->free_nodes.size() == m_real_num_node;
- }
- assert(total_free >= m_free_chunks);
-
- //The chunk pointed by m_first_free_chunk should point
- //to end or to a non-empty chunk
- if(m_first_free_chunk != m_chunklist.end()){
- std::size_t s = m_first_free_chunk->free_nodes.size();
- assert(s != 0);
+ {
+ //Check that the total free nodes are correct
+ it = m_chunk_multiset.begin();
+ itend = m_chunk_multiset.end();
+ std::size_t total_free_nodes = 0;
+ for(; it != itend; ++it){
+ total_free_nodes += it->free_nodes.size();
+ }
+ assert(total_free_nodes >= m_totally_free_chunks*m_real_num_node);
       }
 
- //All previous nodes of m_first_free_chunk should be 0
- it = m_chunklist.begin();
- itend = m_first_free_chunk;
+ {
+ //Check that the total totally free chunks are correct
+ it = m_chunk_multiset.begin();
+ itend = m_chunk_multiset.end();
+ std::size_t total_free_chunks = 0;
+ for(; it != itend; ++it){
+ total_free_chunks += (it->free_nodes.size() == m_real_num_node);
+ }
+ assert(total_free_chunks == m_totally_free_chunks);
+ }
+ {
+ //Check that header offsets are correct
+ it = m_chunk_multiset.begin();
       for(; it != itend; ++it){
- std::size_t s = it->free_nodes.size();
- assert(s == 0);
+ hdr_offset_holder *hdr_off_holder = priv_first_subchunk_from_chunk(&*it);
+ for(std::size_t i = 0, max = m_num_subchunks; i < max; ++i){
+ assert(hdr_off_holder->hdr_offset == std::size_t((char*)&*it- (char*)hdr_off_holder));
+ assert(0 == ((std::size_t)hdr_off_holder & (m_real_chunk_alignment - 1)));
+ assert(0 == (hdr_off_holder->hdr_offset & (m_real_chunk_alignment - 1)));
+ hdr_off_holder = (hdr_offset_holder *)((char*)hdr_off_holder + m_real_chunk_alignment);
+ }
+ }
       }
    }
    #else
@@ -271,165 +413,136 @@
    //!Deallocates all used memory. Never throws
    void priv_clear()
    {
- //Check for memory leaks
- assert(m_allocated==0);
- priv_invariants();
- m_first_free_chunk = m_chunklist.end();
- m_chunklist.clear_and_dispose
- (chunk_destroyer(detail::get_pointer(mp_segment_mngr_base), m_real_num_node));
- m_free_chunks = 0;
- }
-
- chunk_info_t *priv_chunk_from_node(void *node)
- {
- return (chunk_info_t *)((std::size_t)node & std::size_t(~(m_real_chunk_alignment - 1)));
- }
-
- //!Allocates one node, using the adaptive pool algorithm.
- //!Never throws
- node_t *priv_alloc_node()
- {
- priv_invariants();
- //If there are no free nodes we allocate a new block
- if (m_first_free_chunk == m_chunklist.end()){
- priv_alloc_chunk();
- --m_first_free_chunk;
- }
- //We take the first free node since m_first_free_chunk can't be end()
- chunk_info_t &chunk_info = *m_first_free_chunk;
- assert(!chunk_info.free_nodes.empty());
- node_t *first_node = &chunk_info.free_nodes.front();
- if(chunk_info.free_nodes.size() == 1){
- ++m_first_free_chunk;
- }
- else if(chunk_info.free_nodes.size() == m_real_num_node){
- --m_free_chunks;
- }
- chunk_info.free_nodes.pop_front();
- ++m_allocated;
- priv_invariants();
- return detail::get_pointer(first_node);
- }
-
- //!Deallocates one node, using the adaptive pool algorithm.
- //!Never throws
- void priv_dealloc_node(void *pElem)
- {
- typedef typename chunk_list_t::iterator chunk_iterator;
- priv_invariants();
- chunk_info_t *chunk_info = priv_chunk_from_node(pElem);
- assert(chunk_info->free_nodes.size() < m_real_num_node);
- //We put the node at the beginning of the free node list
- node_t * to_deallocate = static_cast<node_t*>(pElem);
- chunk_info->free_nodes.push_front(*to_deallocate);
- chunk_iterator this_chunk(chunk_list_t::s_iterator_to(*chunk_info));
- chunk_iterator next_chunk(this_chunk);
- ++next_chunk;
-
- //If this chunk has more free nodes than the next ones,
- //we have to move the chunk in the list to maintain it ordered.
- //Check if we have to move it
- while(next_chunk != m_chunklist.end() &&
- this_chunk->free_nodes.size() > next_chunk->free_nodes.size()){
- ++next_chunk;
- }
- //Check if the chunk must be moved
- if(++chunk_iterator(this_chunk) != next_chunk){
- //Update m_first_free_chunk iterator if it was pointing to this_chunk
- if(m_first_free_chunk == this_chunk){
- ++m_first_free_chunk;
- }
- //Update m_first_free_chunk if the moved chunk crosses the empty boundary
- else if(this_chunk->free_nodes.size() == 1){
- m_first_free_chunk = chunk_list_t::s_iterator_to(*chunk_info);
- }
- //Now move the chunk to the new position
- m_chunklist.erase(this_chunk);
- m_chunklist.insert(next_chunk, *chunk_info);
- }
- //Update m_first_free_chunk if the chunk crosses the empty boundary
- else if(this_chunk->free_nodes.size() == 1){
- --m_first_free_chunk;
- }
-
- if(this_chunk->free_nodes.size() == m_real_num_node){
- ++m_free_chunks;
+ #ifndef NDEBUG
+ chunk_iterator it = m_chunk_multiset.begin();
+ chunk_iterator itend = m_chunk_multiset.end();
+ std::size_t num_free_nodes = 0;
+ for(; it != itend; ++it){
+ //Check for memory leak
+ assert(it->free_nodes.size() == m_real_num_node);
+ ++num_free_nodes;
       }
-
- assert(m_allocated>0);
- --m_allocated;
- priv_invariants();
- priv_deallocate_free_chunks(m_max_free_chunks);
+ assert(num_free_nodes == m_totally_free_chunks);
+ #endif
       priv_invariants();
+ m_chunk_multiset.clear_and_dispose
+ (chunk_destroyer(this));
+ m_totally_free_chunks = 0;
+ }
+
+ chunk_info_t *priv_chunk_from_node(void *node) const
+ {
+ hdr_offset_holder *hdr_off_holder =
+ (hdr_offset_holder*)((std::size_t)node & std::size_t(~(m_real_chunk_alignment - 1)));
+ assert(0 == ((std::size_t)hdr_off_holder & (m_real_chunk_alignment - 1)));
+ assert(0 == (hdr_off_holder->hdr_offset & (m_real_chunk_alignment - 1)));
+ chunk_info_t *chunk = (chunk_info_t *)(((char*)hdr_off_holder) + hdr_off_holder->hdr_offset);
+ assert(chunk->hdr_offset == 0);
+ return chunk;
+ }
+
+ hdr_offset_holder *priv_first_subchunk_from_chunk(chunk_info_t *chunk) const
+ {
+ hdr_offset_holder *hdr_off_holder = (hdr_offset_holder*)
+ (((char*)chunk) - (m_num_subchunks-1)*m_real_chunk_alignment);
+ assert(hdr_off_holder->hdr_offset == std::size_t((char*)chunk - (char*)hdr_off_holder));
+ assert(0 == ((std::size_t)hdr_off_holder & (m_real_chunk_alignment - 1)));
+ assert(0 == (hdr_off_holder->hdr_offset & (m_real_chunk_alignment - 1)));
+ return hdr_off_holder;
    }
 
    void priv_deallocate_free_chunks(std::size_t max_free_chunks)
    {
- typedef typename chunk_list_t::iterator chunk_iterator;
+ priv_invariants();
       //Now check if we've reached the free nodes limit
       //and check if we have free chunks. If so, deallocate as much
       //as we can to stay below the limit
- while(m_free_chunks > max_free_chunks &&
- m_chunklist.back().free_nodes.size() == m_real_num_node){
- chunk_iterator it(--m_chunklist.end());
- if(it == m_first_free_chunk)
- ++m_first_free_chunk; //m_first_free_chunk is now equal to end()
- m_chunklist.erase_and_dispose(it, chunk_destroyer(detail::get_pointer(mp_segment_mngr_base),m_real_num_node));
- --m_free_chunks;
+ for( chunk_iterator itend = m_chunk_multiset.end()
+ ; m_totally_free_chunks > max_free_chunks
+ ; --m_totally_free_chunks
+ ){
+ assert(!m_chunk_multiset.empty());
+ chunk_iterator it = itend;
+ --it;
+ std::size_t num_nodes = it->free_nodes.size();
+ assert(num_nodes == m_real_num_node);
+ (void)num_nodes;
+ m_chunk_multiset.erase_and_dispose
+ (it, chunk_destroyer(this));
       }
    }
 
- //!Allocates a chunk of nodes. Can throw boost::interprocess::bad_alloc
- void priv_alloc_chunk()
- {
- //We allocate a new NodeBlock and put it as first
- //element in the free Node list
- std::size_t real_chunk_size = m_real_chunk_alignment - SegmentManagerBase::PayloadPerAllocation;
- char *pNode = detail::char_ptr_cast
- (mp_segment_mngr_base->allocate_aligned(real_chunk_size, m_real_chunk_alignment));
- if(!pNode) throw bad_alloc();
- chunk_info_t *c_info = new(pNode)chunk_info_t;
- m_chunklist.push_back(*c_info);
-
- pNode += m_header_size;
- //We initialize all Nodes in Node Block to insert
- //them in the free Node list
- for(std::size_t i = 0; i < m_real_num_node; ++i){
- c_info->free_nodes.push_front(*new (pNode) node_t);
- pNode += m_real_node_size;
+ //!Allocates a several chunks of nodes. Can throw boost::interprocess::bad_alloc
+ void priv_alloc_chunk(std::size_t n)
+ {
+ std::size_t real_chunk_size = m_real_chunk_alignment*m_num_subchunks - SegmentManagerBase::PayloadPerAllocation;
+ std::size_t elements_per_subchunk = (m_real_chunk_alignment - HdrOffsetSize)/m_real_node_size;
+ std::size_t hdr_subchunk_elements = (m_real_chunk_alignment - HdrSize - SegmentManagerBase::PayloadPerAllocation)/m_real_node_size;
+
+ for(std::size_t i = 0; i != n; ++i){
+ //We allocate a new NodeBlock and put it the last
+ //element of the tree
+ char *mem_address = detail::char_ptr_cast
+ (mp_segment_mngr_base->allocate_aligned(real_chunk_size, m_real_chunk_alignment));
+ if(!mem_address) throw std::bad_alloc();
+ ++m_totally_free_chunks;
+
+ //First initialize header information on the last subchunk
+ char *hdr_addr = mem_address + m_real_chunk_alignment*(m_num_subchunks-1);
+ chunk_info_t *c_info = new(hdr_addr)chunk_info_t;
+ //Some structural checks
+ assert(static_cast<void*>(&static_cast<hdr_offset_holder*>(c_info)->hdr_offset) ==
+ static_cast<void*>(c_info));
+ typename free_nodes_t::iterator prev_insert_pos = c_info->free_nodes.before_begin();
+ for( std::size_t subchunk = 0, maxsubchunk = m_num_subchunks - 1
+ ; subchunk < maxsubchunk
+ ; ++subchunk, mem_address += m_real_chunk_alignment){
+ //Initialize header offset mark
+ new(mem_address) hdr_offset_holder(std::size_t(hdr_addr - mem_address));
+ char *pNode = mem_address + HdrOffsetSize;
+ for(std::size_t i = 0; i < elements_per_subchunk; ++i){
+ prev_insert_pos = c_info->free_nodes.insert_after(prev_insert_pos, *new (pNode) node_t);
+ pNode += m_real_node_size;
+ }
+ }
+ {
+ char *pNode = hdr_addr + HdrSize;
+ //We initialize all Nodes in Node Block to insert
+ //them in the free Node list
+ for(std::size_t i = 0; i < hdr_subchunk_elements; ++i){
+ prev_insert_pos = c_info->free_nodes.insert_after(prev_insert_pos, *new (pNode) node_t);
+ pNode += m_real_node_size;
+ }
+ }
+ //Insert the chunk after the free node list is full
+ m_chunk_multiset.insert(m_chunk_multiset.end(), *c_info);
       }
- ++m_free_chunks;
    }
 
    private:
    typedef typename pointer_to_other
       <void_pointer, segment_manager_base_type>::type segment_mngr_base_ptr_t;
 
- const std::size_t m_node_size;
    const std::size_t m_max_free_chunks;
    const std::size_t m_real_node_size;
- const std::size_t m_header_size;
    //Round the size to a power of two value.
    //This is the total memory size (including payload) that we want to
    //allocate from the general-purpose allocator
    const std::size_t m_real_chunk_alignment;
+ std::size_t m_num_subchunks;
    //This is the real number of nodes per chunk
- const std::size_t m_real_num_node;
+ //const
+ std::size_t m_real_num_node;
    segment_mngr_base_ptr_t mp_segment_mngr_base;//Segment manager
- chunk_list_t m_chunklist; //Intrusive chunk list
- typename chunk_list_t::iterator m_first_free_chunk; //Iterator to the active chunk
- std::size_t m_allocated; //Used nodes for debugging
- std::size_t m_free_chunks; //Free chunks
+ chunk_multiset_t m_chunk_multiset; //Intrusive chunk list
+ std::size_t m_totally_free_chunks; //Free chunks
 };
 
-//!Pooled shared memory allocator using an smart adaptive pool. Includes
-//!a reference count but the class does not delete itself, this is
-//!responsibility of user classes. Node size (NodeSize) and the number of
-//!nodes allocated per chunk (NodesPerChunk) are known at compile time.
 template< class SegmentManager
         , std::size_t NodeSize
         , std::size_t NodesPerChunk
         , std::size_t MaxFreeChunks
+ , unsigned char OverheadPercent
>
 class private_adaptive_node_pool
    : public private_adaptive_node_pool_impl
@@ -448,8 +561,8 @@
    static const std::size_t nodes_per_chunk = NodesPerChunk;
 
    //!Constructor from a segment manager. Never throws
- private_adaptive_node_pool(segment_manager *segmeng_mngr)
- : base_t(segmeng_mngr, NodeSize, NodesPerChunk, MaxFreeChunks)
+ private_adaptive_node_pool(segment_manager *segment_mngr)
+ : base_t(segment_mngr, NodeSize, NodesPerChunk, MaxFreeChunks, OverheadPercent)
    {}
 
    //!Returns the segment manager. Never throws
@@ -462,117 +575,25 @@
 //!responsibility of user classes. Node size (NodeSize) and the number of
 //!nodes allocated per chunk (NodesPerChunk) are known at compile time
 template< class SegmentManager
- , class Mutex
         , std::size_t NodeSize
         , std::size_t NodesPerChunk
         , std::size_t MaxFreeChunks
+ , unsigned char OverheadPercent
>
 class shared_adaptive_node_pool
- : public private_adaptive_node_pool
- <SegmentManager, NodeSize, NodesPerChunk, MaxFreeChunks>
+ : public detail::shared_pool_impl
+ < private_adaptive_node_pool
+ <SegmentManager, NodeSize, NodesPerChunk, MaxFreeChunks, OverheadPercent>
+ >
 {
- private:
- typedef typename SegmentManager::void_pointer void_pointer;
- typedef private_adaptive_node_pool
- <SegmentManager,
- NodeSize, NodesPerChunk, MaxFreeChunks> private_node_allocator_t;
- public:
- //!Segment manager typedef
- typedef SegmentManager segment_manager;
- typedef typename private_node_allocator_t::free_nodes_t free_nodes_t;
-
- //!Constructor from a segment manager. Never throws
- shared_adaptive_node_pool(segment_manager *segment_mgnr)
- : private_node_allocator_t(segment_mgnr){}
-
- //!Destructor. Deallocates all allocated chunks. Never throws
- ~shared_adaptive_node_pool()
+ typedef detail::shared_pool_impl
+ < private_adaptive_node_pool
+ <SegmentManager, NodeSize, NodesPerChunk, MaxFreeChunks, OverheadPercent>
+ > base_t;
+ public:
+ shared_adaptive_node_pool(SegmentManager *segment_mgnr)
+ : base_t(segment_mgnr)
    {}
-
- //!Allocates array of count elements. Can throw boost::interprocess::bad_alloc
- void *allocate(std::size_t count)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- return private_node_allocator_t::allocate(count);
- }
-
- //!Deallocates an array pointed by ptr. Never throws
- void deallocate(void *ptr, std::size_t count)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- private_node_allocator_t::deallocate(ptr, count);
- }
-
- //!Allocates a singly linked list of n nodes ending in null pointer.
- //!can throw boost::interprocess::bad_alloc
- void allocate_nodes(std::size_t n, free_nodes_t &nodes)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- return private_node_allocator_t::allocate_nodes(n, nodes);
- }
-
- //!Deallocates a linked list of nodes ending in null pointer. Never throws
- void deallocate_nodes(free_nodes_t &nodes, std::size_t num)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- private_node_allocator_t::deallocate_nodes(nodes, num);
- }
-
- //!Deallocates a linked list of nodes ending in null pointer. Never throws
- void deallocate_nodes(free_nodes_t &nodes)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- private_node_allocator_t::deallocate_nodes(nodes);
- }
-
- //!Deallocates all the free chunks of memory. Never throws
- void deallocate_free_chunks()
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- private_node_allocator_t::deallocate_free_chunks();
- }
-
- //!Increments internal reference count and returns new count. Never throws
- std::size_t inc_ref_count()
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- return ++m_header.m_usecount;
- }
-
- //!Decrements internal reference count and returns new count. Never throws
- std::size_t dec_ref_count()
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- assert(m_header.m_usecount > 0);
- return --m_header.m_usecount;
- }
-
- private:
- //!This struct includes needed data and derives from
- //!interprocess_mutex to allow EBO when using null_mutex
- struct header_t : Mutex
- {
- std::size_t m_usecount; //Number of attached allocators
-
- header_t()
- : m_usecount(0) {}
- } m_header;
 };
 
 } //namespace detail {

Modified: branches/fix-links/boost/interprocess/allocators/detail/node_pool.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/detail/node_pool.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/detail/node_pool.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -24,7 +24,9 @@
 #include <boost/intrusive/slist.hpp>
 #include <boost/math/common_factor_ct.hpp>
 #include <boost/interprocess/detail/math_functions.hpp>
+#include <boost/interprocess/detail/type_traits.hpp>
 #include <boost/interprocess/allocators/detail/node_tools.hpp>
+#include <boost/interprocess/allocators/detail/allocator_common.hpp>
 #include <cstddef>
 #include <functional>
 #include <algorithm>
@@ -51,10 +53,14 @@
    typedef typename node_slist<void_pointer>::slist_hook_t slist_hook_t;
    typedef typename node_slist<void_pointer>::node_t node_t;
    typedef typename node_slist<void_pointer>::node_slist_t free_nodes_t;
+ typedef typename SegmentManagerBase::multiallocation_iterator multiallocation_iterator;
+ typedef typename SegmentManagerBase::multiallocation_chain multiallocation_chain;
 
    private:
- typedef typename bi::make_slist < node_t, bi::base_hook<slist_hook_t>
- , bi::constant_time_size<false> >::type chunkslist_t;
+ typedef typename bi::make_slist
+ < node_t, bi::base_hook<slist_hook_t>
+ , bi::linear<true>
+ , bi::constant_time_size<false> >::type chunkslist_t;
    public:
 
    //!Segment manager typedef
@@ -62,10 +68,8 @@
 
    //!Constructor from a segment manager. Never throws
    private_node_pool_impl(segment_manager_base_type *segment_mngr_base, std::size_t node_size, std::size_t nodes_per_chunk)
- : m_node_size(node_size)
- , m_nodes_per_chunk(nodes_per_chunk)
- , m_real_node_size(detail::lcm(node_size, sizeof(node_t)))
- , m_block_size(detail::get_rounded_size(m_real_node_size*m_nodes_per_chunk, sizeof(node_t)))
+ : m_nodes_per_chunk(nodes_per_chunk)
+ , m_real_node_size(detail::lcm(node_size, std::size_t(alignment_of<node_t>::value)))
       //General purpose allocator
    , mp_segment_mngr_base(segment_mngr_base)
    , m_chunklist()
@@ -76,7 +80,7 @@
 
    //!Destructor. Deallocates all allocated chunks. Never throws
    ~private_node_pool_impl()
- { priv_clear(); }
+ { this->purge_chunks(); }
 
    std::size_t get_real_num_node() const
    { return m_nodes_per_chunk; }
@@ -86,116 +90,73 @@
    { return detail::get_pointer(mp_segment_mngr_base); }
 
    //!Allocates array of count elements. Can throw boost::interprocess::bad_alloc
- void *allocate(std::size_t count)
- {
- std::size_t bytes = count*m_node_size;
- if(bytes > m_real_node_size){//Normal allocation, no pooling used
- void *addr = mp_segment_mngr_base->allocate(bytes);
- if(!addr) throw bad_alloc();
- return addr;
- }
- else //Node allocation, pooling used
- return priv_alloc_node();
- }
+ void *allocate_node()
+ { return priv_alloc_node(); }
    
    //!Deallocates an array pointed by ptr. Never throws
- void deallocate(void *ptr, std::size_t count)
+ void deallocate_node(void *ptr)
+ { priv_dealloc_node(ptr); }
+
+ //!Allocates a singly linked list of n nodes ending in null pointer and pushes them in the chain.
+ //!can throw boost::interprocess::bad_alloc
+ void allocate_nodes(multiallocation_chain &nodes, const std::size_t n)
    {
- std::size_t bytes = count*m_node_size;
- if(bytes > m_real_node_size)//Normal allocation was used
- mp_segment_mngr_base->deallocate(ptr);
- else //Node allocation was used
- priv_dealloc_node(ptr);
+ std::size_t i = 0;
+ try{
+ for(; i < n; ++i){
+ nodes.push_front(priv_alloc_node());
+ }
+ }
+ catch(...){
+ this->deallocate_nodes(nodes, i);
+ throw;
+ }
    }
 
- //!Allocates a singly linked list of n nodes ending in null pointer.
+ //!Allocates a singly linked list of n nodes ending in null pointer
    //!can throw boost::interprocess::bad_alloc
- void allocate_nodes(const std::size_t n, free_nodes_t &nodes)
+ multiallocation_iterator allocate_nodes(const std::size_t n)
    {
+ multiallocation_chain nodes;
       std::size_t i = 0;
       try{
          for(; i < n; ++i){
- nodes.push_front(*priv_alloc_node());
+ nodes.push_front(priv_alloc_node());
          }
       }
       catch(...){
- priv_deallocate_nodes(nodes, i);
+ this->deallocate_nodes(nodes, i);
          throw;
       }
+ return nodes.get_it();
    }
 
    //!Deallocates a linked list of nodes. Never throws
- void deallocate_nodes(free_nodes_t &nodes)
- { priv_deallocate_nodes(nodes, nodes.size()); }
+ void deallocate_nodes(multiallocation_chain &nodes)
+ { this->deallocate_nodes(nodes.get_it()); }
 
    //!Deallocates the first n nodes of a linked list of nodes. Never throws
- void deallocate_nodes(free_nodes_t &nodes, std::size_t n)
- { priv_deallocate_nodes(nodes, n); }
-
- //!Deallocates all the free chunks of memory. Never throws
- void deallocate_free_chunks()
- { priv_deallocate_free_chunks(); }
-
- std::size_t num_free_nodes()
- { return m_freelist.size(); }
-
- void swap(private_node_pool_impl &other)
- {
- std::swap(mp_segment_mngr_base, other.mp_segment_mngr_base);
- m_chunklist.swap(other.m_chunklist);
- m_freelist.swap(other.m_freelist);
- std::swap(m_allocated, other.m_allocated);
- }
-
- private:
-
- void priv_deallocate_nodes(free_nodes_t &nodes, const std::size_t num)
+ void deallocate_nodes(multiallocation_chain &nodes, std::size_t num)
    {
       assert(nodes.size() >= num);
       for(std::size_t i = 0; i < num; ++i){
- node_t *to_deallocate = &nodes.front();
- nodes.pop_front();
- deallocate(to_deallocate, 1);
+ deallocate_node(nodes.pop_front());
       }
    }
 
- struct push_in_list
- {
- push_in_list(free_nodes_t &l, typename free_nodes_t::iterator &it)
- : slist_(l), last_it_(it)
- {}
-
- void operator()(typename free_nodes_t::pointer p) const
- {
- slist_.push_front(*p);
- if(slist_.size() == 1){ //Cache last element
- ++last_it_ = slist_.begin();
- }
- }
-
- private:
- free_nodes_t &slist_;
- typename free_nodes_t::iterator &last_it_;
- };
-
- struct is_between
- : std::unary_function<typename free_nodes_t::value_type, bool>
+ //!Deallocates the nodes pointed by the multiallocation iterator. Never throws
+ void deallocate_nodes(multiallocation_iterator it)
    {
- is_between(const void *addr, std::size_t size)
- : beg_((const char *)addr), end_(beg_+size)
- {}
-
- bool operator()(typename free_nodes_t::const_reference v) const
- {
- return (beg_ <= (const char *)&v &&
- end_ > (const char *)&v);
+ multiallocation_iterator itend;
+ while(it != itend){
+ void *addr = &*it;
+ ++it;
+ deallocate_node(addr);
       }
- private:
- const char * beg_;
- const char * end_;
- };
+ }
 
- void priv_deallocate_free_chunks()
+ //!Deallocates all the free chunks of memory. Never throws
+ void deallocate_free_chunks()
    {
       typedef typename free_nodes_t::iterator nodelist_iterator;
       typename chunkslist_t::iterator bit(m_chunklist.before_begin()),
@@ -204,16 +165,19 @@
       free_nodes_t backup_list;
       nodelist_iterator backup_list_last = backup_list.before_begin();
 
+ //Execute the algorithm and get an iterator to the last value
+ std::size_t blocksize = detail::get_rounded_size
+ (m_real_node_size*m_nodes_per_chunk, alignment_of<node_t>::value);
+
       while(it != itend){
          //Collect all the nodes from the chunk pointed by it
          //and push them in the list
          free_nodes_t free_nodes;
          nodelist_iterator last_it = free_nodes.before_begin();
- const void *addr = get_chunk_from_hook(&*it);
+ const void *addr = get_chunk_from_hook(&*it, blocksize);
 
- //Execute the algorithm and get an iterator to the last value
          m_freelist.remove_and_dispose_if
- (is_between(addr, m_block_size), push_in_list(free_nodes, last_it));
+ (is_between(addr, blocksize), push_in_list(free_nodes, last_it));
 
          //If the number of nodes is equal to m_nodes_per_chunk
          //this means that the block can be deallocated
@@ -253,23 +217,76 @@
          , backup_list.size());
    }
 
- //!Deallocates all used memory. Never throws
- void priv_clear()
+ std::size_t num_free_nodes()
+ { return m_freelist.size(); }
+
+ //!Deallocates all used memory. Precondition: all nodes allocated from this pool should
+ //!already be deallocated. Otherwise, undefined behaviour. Never throws
+ void purge_chunks()
    {
       //check for memory leaks
       assert(m_allocated==0);
-
+ std::size_t blocksize = detail::get_rounded_size
+ (m_real_node_size*m_nodes_per_chunk, alignment_of<node_t>::value);
       typename chunkslist_t::iterator
          it(m_chunklist.begin()), itend(m_chunklist.end()), aux;
 
       //We iterate though the NodeBlock list to free the memory
       while(!m_chunklist.empty()){
- void *addr = get_chunk_from_hook(&m_chunklist.front());
+ void *addr = get_chunk_from_hook(&m_chunklist.front(), blocksize);
          m_chunklist.pop_front();
          mp_segment_mngr_base->deallocate(addr);
- }
+ }
+ //Just clear free node list
+ m_freelist.clear();
    }
 
+ void swap(private_node_pool_impl &other)
+ {
+ std::swap(mp_segment_mngr_base, other.mp_segment_mngr_base);
+ m_chunklist.swap(other.m_chunklist);
+ m_freelist.swap(other.m_freelist);
+ std::swap(m_allocated, other.m_allocated);
+ }
+
+ private:
+
+ struct push_in_list
+ {
+ push_in_list(free_nodes_t &l, typename free_nodes_t::iterator &it)
+ : slist_(l), last_it_(it)
+ {}
+
+ void operator()(typename free_nodes_t::pointer p) const
+ {
+ slist_.push_front(*p);
+ if(slist_.size() == 1){ //Cache last element
+ ++last_it_ = slist_.begin();
+ }
+ }
+
+ private:
+ free_nodes_t &slist_;
+ typename free_nodes_t::iterator &last_it_;
+ };
+
+ struct is_between
+ : std::unary_function<typename free_nodes_t::value_type, bool>
+ {
+ is_between(const void *addr, std::size_t size)
+ : beg_((const char *)addr), end_(beg_+size)
+ {}
+
+ bool operator()(typename free_nodes_t::const_reference v) const
+ {
+ return (beg_ <= (const char *)&v &&
+ end_ > (const char *)&v);
+ }
+ private:
+ const char * beg_;
+ const char * end_;
+ };
+
    //!Allocates one node, using single segregated storage algorithm.
    //!Never throws
    node_t *priv_alloc_node()
@@ -300,10 +317,13 @@
    {
       //We allocate a new NodeBlock and put it as first
       //element in the free Node list
- char *pNode = detail::char_ptr_cast(mp_segment_mngr_base->allocate(m_block_size + sizeof(node_t)));
+ std::size_t blocksize =
+ detail::get_rounded_size(m_real_node_size*m_nodes_per_chunk, alignment_of<node_t>::value);
+ char *pNode = detail::char_ptr_cast
+ (mp_segment_mngr_base->allocate(blocksize + sizeof(node_t)));
       if(!pNode) throw bad_alloc();
       char *pBlock = pNode;
- m_chunklist.push_front(get_chunk_hook(pBlock));
+ m_chunklist.push_front(get_chunk_hook(pBlock, blocksize));
 
       //We initialize all Nodes in Node Block to insert
       //them in the free Node list
@@ -314,26 +334,24 @@
 
    private:
    //!Returns a reference to the chunk hook placed in the end of the chunk
- inline node_t & get_chunk_hook (void *chunk)
+ static inline node_t & get_chunk_hook (void *chunk, std::size_t blocksize)
    {
       return *static_cast<node_t*>(
- static_cast<void*>((detail::char_ptr_cast(chunk)+m_block_size)));
+ static_cast<void*>((detail::char_ptr_cast(chunk) + blocksize)));
    }
 
    //!Returns the starting address of the chunk reference to the chunk hook placed in the end of the chunk
- inline void *get_chunk_from_hook (node_t *hook)
+ inline void *get_chunk_from_hook (node_t *hook, std::size_t blocksize)
    {
- return static_cast<void*>((detail::char_ptr_cast(hook) - m_block_size));
+ return static_cast<void*>((detail::char_ptr_cast(hook) - blocksize));
    }
 
    private:
    typedef typename pointer_to_other
       <void_pointer, segment_manager_base_type>::type segment_mngr_base_ptr_t;
 
- const std::size_t m_node_size;
    const std::size_t m_nodes_per_chunk;
    const std::size_t m_real_node_size;
- const std::size_t m_block_size;
    segment_mngr_base_ptr_t mp_segment_mngr_base; //Segment manager
    chunkslist_t m_chunklist; //Intrusive container of chunks
    free_nodes_t m_freelist; //Intrusive container of free nods
@@ -376,114 +394,28 @@
 //!a reference count but the class does not delete itself, this is
 //!responsibility of user classes. Node size (NodeSize) and the number of
 //!nodes allocated per chunk (NodesPerChunk) are known at compile time
+//!Pooled shared memory allocator using adaptive pool. Includes
+//!a reference count but the class does not delete itself, this is
+//!responsibility of user classes. Node size (NodeSize) and the number of
+//!nodes allocated per chunk (NodesPerChunk) are known at compile time
 template< class SegmentManager
- , class Mutex
         , std::size_t NodeSize
         , std::size_t NodesPerChunk
>
 class shared_node_pool
- : public private_node_pool<SegmentManager, NodeSize, NodesPerChunk>
+ : public detail::shared_pool_impl
+ < private_node_pool
+ <SegmentManager, NodeSize, NodesPerChunk>
+ >
 {
- private:
- typedef typename SegmentManager::void_pointer void_pointer;
- typedef private_node_pool
- <SegmentManager, NodeSize, NodesPerChunk> private_node_allocator_t;
-
+ typedef detail::shared_pool_impl
+ < private_node_pool
+ <SegmentManager, NodeSize, NodesPerChunk>
+ > base_t;
    public:
- typedef SegmentManager segment_manager;
- typedef typename private_node_allocator_t::free_nodes_t free_nodes_t;
-
- //!Constructor from a segment manager. Never throws
- shared_node_pool(segment_manager *segment_mngr)
- : private_node_allocator_t(segment_mngr){}
-
- //!Destructor. Deallocates all allocated chunks. Never throws
- ~shared_node_pool()
+ shared_node_pool(SegmentManager *segment_mgnr)
+ : base_t(segment_mgnr)
    {}
-
- //!Allocates array of count elements. Can throw boost::interprocess::bad_alloc
- void *allocate(std::size_t count)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- return private_node_allocator_t::allocate(count);
- }
-
- //!Deallocates an array pointed by ptr. Never throws
- void deallocate(void *ptr, std::size_t count)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- private_node_allocator_t::deallocate(ptr, count);
- }
-
- //!Allocates a singly linked list of n nodes ending in null pointer.
- //!can throw boost::interprocess::bad_alloc
- void allocate_nodes(const std::size_t n, free_nodes_t &nodes)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- private_node_allocator_t::allocate_nodes(n, nodes);
- }
-
- //!Deallocates a linked list of nodes ending in null pointer. Never throws
- void deallocate_nodes(free_nodes_t &nodes, std::size_t n)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- private_node_allocator_t::deallocate_nodes(nodes, n);
- }
-
- void deallocate_nodes(free_nodes_t &nodes)
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- private_node_allocator_t::deallocate_nodes(nodes);
- }
-
- //!Deallocates all the free chunks of memory. Never throws
- void deallocate_free_chunks()
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- private_node_allocator_t::deallocate_free_chunks();
- }
-
- //!Increments internal reference count and returns new count. Never throws
- std::size_t inc_ref_count()
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- return ++m_header.m_usecount;
- }
-
- //!Decrements internal reference count and returns new count. Never throws
- std::size_t dec_ref_count()
- {
- //-----------------------
- boost::interprocess::scoped_lock<Mutex> guard(m_header);
- //-----------------------
- assert(m_header.m_usecount > 0);
- return --m_header.m_usecount;
- }
-
- private:
- //!This struct includes needed data and derives from
- //!interprocess_mutex to allow EBO when using null_mutex
- struct header_t : Mutex
- {
- std::size_t m_usecount; //Number of attached allocators
-
- header_t()
- : m_usecount(0) {}
- } m_header;
 };
 
 } //namespace detail {

Modified: branches/fix-links/boost/interprocess/allocators/detail/node_tools.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/detail/node_tools.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/detail/node_tools.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2007-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -37,7 +37,8 @@
       : public slist_hook_t
    {};
 
- typedef typename bi::make_slist<node_t, bi::base_hook<slist_hook_t> >::type node_slist_t;
+ typedef typename bi::make_slist
+ <node_t, bi::linear<true>, bi::base_hook<slist_hook_t> >::type node_slist_t;
 };
 
 } //namespace detail {

Modified: branches/fix-links/boost/interprocess/allocators/node_allocator.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/node_allocator.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/node_allocator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -8,8 +8,8 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 
-#ifndef BOOST_INTERPROCESS_POOLED_NODE_ALLOCATOR_HPP
-#define BOOST_INTERPROCESS_POOLED_NODE_ALLOCATOR_HPP
+#ifndef BOOST_INTERPROCESS_NODE_ALLOCATOR_HPP
+#define BOOST_INTERPROCESS_NODE_ALLOCATOR_HPP
 
 #if (defined _MSC_VER) && (_MSC_VER >= 1200)
 # pragma once
@@ -22,9 +22,10 @@
 #include <boost/assert.hpp>
 #include <boost/utility/addressof.hpp>
 #include <boost/interprocess/detail/utilities.hpp>
-#include <boost/interprocess/detail/workaround.hpp>
+#include <boost/interprocess/detail/type_traits.hpp>
 #include <boost/interprocess/allocators/detail/node_pool.hpp>
 #include <boost/interprocess/exceptions.hpp>
+#include <boost/interprocess/allocators/detail/allocator_common.hpp>
 #include <memory>
 #include <algorithm>
 #include <cstddef>
@@ -35,6 +36,177 @@
 namespace boost {
 namespace interprocess {
 
+/// @cond
+
+namespace detail{
+
+template < unsigned int Version
+ , class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ >
+class node_allocator_base
+ : public node_pool_allocation_impl
+ < node_allocator_base
+ < Version, T, SegmentManager, NodesPerChunk>
+ , Version
+ , T
+ , SegmentManager
+ >
+{
+ public:
+ typedef typename SegmentManager::void_pointer void_pointer;
+ typedef SegmentManager segment_manager;
+ typedef node_allocator_base
+ <Version, T, SegmentManager, NodesPerChunk> self_t;
+ typedef detail::shared_node_pool
+ < SegmentManager, sizeof(T), NodesPerChunk> node_pool_t;
+ typedef typename detail::
+ pointer_to_other<void_pointer, node_pool_t>::type node_pool_ptr;
+
+ BOOST_STATIC_ASSERT((Version <=2));
+
+ public:
+ //-------
+ typedef typename detail::
+ pointer_to_other<void_pointer, T>::type pointer;
+ typedef typename detail::
+ pointer_to_other<void_pointer, const T>::type const_pointer;
+ typedef T value_type;
+ typedef typename detail::add_reference
+ <value_type>::type reference;
+ typedef typename detail::add_reference
+ <const value_type>::type const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ typedef detail::version_type<node_allocator_base, Version> version;
+ typedef transform_iterator
+ < typename SegmentManager::
+ multiallocation_iterator
+ , detail::cast_functor <T> > multiallocation_iterator;
+ typedef typename SegmentManager::
+ multiallocation_chain multiallocation_chain;
+
+ //!Obtains node_allocator_base from
+ //!node_allocator_base
+ template<class T2>
+ struct rebind
+ {
+ typedef node_allocator_base<Version, T2, SegmentManager, NodesPerChunk> other;
+ };
+
+ /// @cond
+ private:
+ //!Not assignable from related node_allocator_base
+ template<unsigned int Version2, class T2, class SegmentManager2, std::size_t N2>
+ node_allocator_base& operator=
+ (const node_allocator_base<Version2, T2, SegmentManager2, N2>&);
+
+ //!Not assignable from other node_allocator_base
+ node_allocator_base& operator=(const node_allocator_base&);
+ /// @endcond
+
+ public:
+ //!Constructor from a segment manager. If not present, constructs a node
+ //!pool. Increments the reference count of the associated node pool.
+ //!Can throw boost::interprocess::bad_alloc
+ node_allocator_base(segment_manager *segment_mngr)
+ : mp_node_pool(detail::get_or_create_node_pool<node_pool_t>(segment_mngr)) { }
+
+ //!Copy constructor from other node_allocator_base. Increments the reference
+ //!count of the associated node pool. Never throws
+ node_allocator_base(const node_allocator_base &other)
+ : mp_node_pool(other.get_node_pool())
+ {
+ mp_node_pool->inc_ref_count();
+ }
+
+ //!Copy constructor from related node_allocator_base. If not present, constructs
+ //!a node pool. Increments the reference count of the associated node pool.
+ //!Can throw boost::interprocess::bad_alloc
+ template<class T2>
+ node_allocator_base
+ (const node_allocator_base<Version, T2, SegmentManager, NodesPerChunk> &other)
+ : mp_node_pool(detail::get_or_create_node_pool<node_pool_t>(other.get_segment_manager())) { }
+
+ //!Destructor, removes node_pool_t from memory
+ //!if its reference count reaches to zero. Never throws
+ ~node_allocator_base()
+ { detail::destroy_node_pool_if_last_link(detail::get_pointer(mp_node_pool)); }
+
+ //!Returns a pointer to the node pool.
+ //!Never throws
+ node_pool_t* get_node_pool() const
+ { return detail::get_pointer(mp_node_pool); }
+
+ //!Returns the segment manager.
+ //!Never throws
+ segment_manager* get_segment_manager()const
+ { return mp_node_pool->get_segment_manager(); }
+
+ //!Swaps allocators. Does not throw. If each allocator is placed in a
+ //!different memory segment, the result is undefined.
+ friend void swap(self_t &alloc1, self_t &alloc2)
+ { detail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool); }
+
+ /// @cond
+ private:
+ node_pool_ptr mp_node_pool;
+ /// @endcond
+};
+
+//!Equality test for same type
+//!of node_allocator_base
+template<unsigned int V, class T, class S, std::size_t NodesPerChunk> inline
+bool operator==(const node_allocator_base<V, T, S, NodesPerChunk> &alloc1,
+ const node_allocator_base<V, T, S, NodesPerChunk> &alloc2)
+ { return alloc1.get_node_pool() == alloc2.get_node_pool(); }
+
+//!Inequality test for same type
+//!of node_allocator_base
+template<unsigned int V, class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator!=(const node_allocator_base<V, T, S, NodesPerChunk> &alloc1,
+ const node_allocator_base<V, T, S, NodesPerChunk> &alloc2)
+ { return alloc1.get_node_pool() != alloc2.get_node_pool(); }
+
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk = 64
+ >
+class node_allocator_v1
+ : public node_allocator_base
+ < 1
+ , T
+ , SegmentManager
+ , NodesPerChunk
+ >
+{
+ public:
+ typedef detail::node_allocator_base
+ < 1, T, SegmentManager, NodesPerChunk> base_t;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef node_allocator_v1<T2, SegmentManager, NodesPerChunk> other;
+ };
+
+ node_allocator_v1(SegmentManager *segment_mngr)
+ : base_t(segment_mngr)
+ {}
+
+ template<class T2>
+ node_allocator_v1
+ (const node_allocator_v1<T2, SegmentManager, NodesPerChunk> &other)
+ : base_t(other)
+ {}
+};
+
+} //namespace detail{
+
+/// @endcond
+
 //!An STL node allocator that uses a segment manager as memory
 //!source. The internal pointer type will of the same type (raw, smart) as
 //!"typename SegmentManager::void_pointer" type. This allows
@@ -43,25 +215,49 @@
 //!of node_allocator with equal sizeof(T) placed in the same segment
 //!group. NodesPerChunk is the number of nodes allocated at once when the allocator
 //!needs runs out of nodes
-template<class T, class SegmentManager, std::size_t NodesPerChunk>
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ >
 class node_allocator
+ /// @cond
+ : public detail::node_allocator_base
+ < 2
+ , T
+ , SegmentManager
+ , NodesPerChunk
+ >
+ /// @endcond
 {
+
+ #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+ typedef detail::node_allocator_base
+ < 2, T, SegmentManager, NodesPerChunk> base_t;
    public:
- typedef typename SegmentManager::void_pointer void_pointer;
- typedef typename detail::
- pointer_to_other<void_pointer, const void>::type cvoid_pointer;
- typedef SegmentManager segment_manager;
- typedef typename SegmentManager::
- mutex_family::mutex_type mutex_type;
- typedef node_allocator
- <T, SegmentManager, NodesPerChunk> self_t;
+ typedef detail::version_type<node_allocator, 2> version;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef node_allocator<T2, SegmentManager, NodesPerChunk> other;
+ };
+
+ node_allocator(SegmentManager *segment_mngr)
+ : base_t(segment_mngr)
+ {}
 
+ template<class T2>
+ node_allocator
+ (const node_allocator<T2, SegmentManager, NodesPerChunk> &other)
+ : base_t(other)
+ {}
+
+ #else //BOOST_INTERPROCESS_DOXYGEN_INVOKED
    public:
- //-------
- typedef typename detail::
- pointer_to_other<void_pointer, T>::type pointer;
- typedef typename detail::
- pointer_to_other<void_pointer, const T>::type const_pointer;
+ typedef implementation_defined::segment_manager segment_manager;
+ typedef segment_manager::void_pointer void_pointer;
+ typedef implementation_defined::pointer pointer;
+ typedef implementation_defined::const_pointer const_pointer;
    typedef T value_type;
    typedef typename detail::add_reference
                      <value_type>::type reference;
@@ -69,225 +265,170 @@
                      <const value_type>::type const_reference;
    typedef std::size_t size_type;
    typedef std::ptrdiff_t difference_type;
- typedef detail::shared_node_pool
- < SegmentManager, mutex_type
- , sizeof(T), NodesPerChunk> node_pool_t;
- typedef typename detail::
- pointer_to_other<void_pointer, node_pool_t>::type node_pool_ptr;
 
- //!Obtains node_allocator from other
+ //!Obtains node_allocator from
    //!node_allocator
    template<class T2>
    struct rebind
    {
- typedef node_allocator<T2, SegmentManager, NodesPerChunk> other;
+ typedef node_allocator<T2, SegmentManager, NodesPerChunk> other;
    };
 
- /// @cond
    private:
- //!Not assignable from related
- //!node_allocator
+ //!Not assignable from
+ //!related node_allocator
    template<class T2, class SegmentManager2, std::size_t N2>
    node_allocator& operator=
       (const node_allocator<T2, SegmentManager2, N2>&);
 
- //!Not assignable from other
- //!node_allocator
+ //!Not assignable from
+ //!other node_allocator
    node_allocator& operator=(const node_allocator&);
- /// @endcond
 
    public:
-
    //!Constructor from a segment manager. If not present, constructs a node
    //!pool. Increments the reference count of the associated node pool.
    //!Can throw boost::interprocess::bad_alloc
- node_allocator(segment_manager *segment_mngr)
- : mp_node_pool(priv_get_or_create(segment_mngr))
- {}
+ node_allocator(segment_manager *segment_mngr);
 
    //!Copy constructor from other node_allocator. Increments the reference
    //!count of the associated node pool. Never throws
- node_allocator(const node_allocator &other)
- : mp_node_pool(other.get_node_pool())
- { mp_node_pool->inc_ref_count(); }
+ node_allocator(const node_allocator &other);
 
    //!Copy constructor from related node_allocator. If not present, constructs
    //!a node pool. Increments the reference count of the associated node pool.
    //!Can throw boost::interprocess::bad_alloc
    template<class T2>
    node_allocator
- (const node_allocator<T2, SegmentManager, NodesPerChunk> &other)
- : mp_node_pool(priv_get_or_create(other.get_segment_manager()))
- {}
+ (const node_allocator<T2, SegmentManager, NodesPerChunk> &other);
 
    //!Destructor, removes node_pool_t from memory
    //!if its reference count reaches to zero. Never throws
- ~node_allocator()
- { priv_destroy_if_last_link(); }
+ ~node_allocator();
 
    //!Returns a pointer to the node pool.
    //!Never throws
- node_pool_t* get_node_pool() const
- { return detail::get_pointer(mp_node_pool); }
+ node_pool_t* get_node_pool() const;
 
    //!Returns the segment manager.
    //!Never throws
- segment_manager* get_segment_manager()const
- { return mp_node_pool->get_segment_manager(); }
+ segment_manager* get_segment_manager()const;
 
- //!Returns the number of elements that could be allocated. Never throws
- size_type max_size() const
- { return this->get_segment_manager()->get_size()/sizeof(value_type); }
+ //!Returns the number of elements that could be allocated.
+ //!Never throws
+ size_type max_size() const;
 
    //!Allocate memory for an array of count elements.
    //!Throws boost::interprocess::bad_alloc if there is no enough memory
- pointer allocate(size_type count, cvoid_pointer = 0)
- {
- if(count > ((size_type)-1)/sizeof(value_type))
- throw bad_alloc();
- return pointer(static_cast<T*>(mp_node_pool->allocate(count)));
- }
+ pointer allocate(size_type count, cvoid_pointer hint = 0);
 
    //!Deallocate allocated memory.
    //!Never throws
- void deallocate(const pointer &ptr, size_type count)
- { mp_node_pool->deallocate(detail::get_pointer(ptr), count); }
+ void deallocate(const pointer &ptr, size_type count);
 
- //!Deallocates all free chunks of the pool
- void deallocate_free_chunks()
- { mp_node_pool->deallocate_free_chunks(); }
+ //!Deallocates all free chunks
+ //!of the pool
+ void deallocate_free_chunks();
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
    //!different memory segment, the result is undefined.
- friend void swap(self_t &alloc1, self_t &alloc2)
- { detail::do_swap(alloc1.mp_node_pool, alloc2.mp_node_pool); }
-
- //These functions are obsolete. These are here to conserve
- //backwards compatibility with containers using them...
+ friend void swap(self_t &alloc1, self_t &alloc2);
 
    //!Returns address of mutable object.
    //!Never throws
- pointer address(reference value) const
- { return pointer(boost::addressof(value)); }
+ pointer address(reference value) const;
 
    //!Returns address of non mutable object.
    //!Never throws
- const_pointer address(const_reference value) const
- { return const_pointer(boost::addressof(value)); }
+ const_pointer address(const_reference value) const;
 
    //!Default construct an object.
- //!Throws if T's default constructor throws*/
- void construct(const pointer &ptr)
- { new(detail::get_pointer(ptr)) value_type; }
+ //!Throws if T's default constructor throws
+ void construct(const pointer &ptr);
 
    //!Destroys object. Throws if object's
    //!destructor throws
- void destroy(const pointer &ptr)
- { BOOST_ASSERT(ptr != 0); (*ptr).~value_type(); }
-
- /// @cond
- private:
- //!Object function that creates the node allocator if it is not created and
- //!increments reference count if it is already created
- struct get_or_create_func
- {
- typedef detail::shared_node_pool
- <SegmentManager, mutex_type, sizeof(T), NodesPerChunk> node_pool_t;
-
- //!This connects or constructs the unique instance of node_pool_t
- //!Can throw boost::interprocess::bad_alloc
- void operator()()
- {
- //Find or create the node_pool_t
- mp_node_pool = mp_named_alloc->template find_or_construct
- <node_pool_t>(unique_instance)(mp_named_alloc);
- //If valid, increment link count
- if(mp_node_pool != 0)
- mp_node_pool->inc_ref_count();
- }
-
- //!Constructor. Initializes function
- //!object parameters
- get_or_create_func(segment_manager *hdr) : mp_named_alloc(hdr){}
-
- node_pool_t *mp_node_pool;
- segment_manager *mp_named_alloc;
- };
-
- //!Initialization function, creates an executes atomically the
- //!initialization object functions. Can throw boost::interprocess::bad_alloc
- node_pool_t *priv_get_or_create(segment_manager *named_alloc)
- {
- get_or_create_func func(named_alloc);
- named_alloc->atomic_func(func);
- return func.mp_node_pool;
- }
-
- //!Object function that decrements the reference count. If the count
- //!reaches to zero destroys the node allocator from memory.
- //!Never throws
- struct destroy_if_last_link_func
- {
- typedef detail::shared_node_pool
- <SegmentManager, mutex_type,sizeof(T), NodesPerChunk> node_pool_t;
-
- //!Decrements reference count and destroys the object if there is no
- //!more attached allocators. Never throws
- void operator()()
- {
- //If not the last link return
- if(mp_node_pool->dec_ref_count() != 0) return;
-
- //Last link, let's destroy the segment_manager
- mp_named_alloc->template destroy<node_pool_t>(unique_instance);
- }
-
- //!Constructor. Initializes function
- //!object parameters
- destroy_if_last_link_func(segment_manager *nhdr,
- node_pool_t *phdr)
- : mp_named_alloc(nhdr), mp_node_pool(phdr)
- {}
+ void destroy(const pointer &ptr);
 
- segment_manager *mp_named_alloc;
- node_pool_t *mp_node_pool;
- };
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold. This size only works for memory allocated with
+ //!allocate, allocation_command and allocate_many.
+ size_type size(const pointer &p) const;
+
+ std::pair<pointer, bool>
+ allocation_command(allocation_type command,
+ size_type limit_size,
+ size_type preferred_size,
+ size_type &received_size, const pointer &reuse = 0);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ multiallocation_iterator allocate_many(size_type elem_size, std::size_t num_elements);
+
+ //!Allocates n_elements elements, each one of size elem_sizes[i]in a
+ //!contiguous chunk
+ //!of memory. The elements must be deallocated
+ multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ void deallocate_many(multiallocation_iterator it);
 
- //!Destruction function, initializes and executes destruction function
- //!object. Never throws
- void priv_destroy_if_last_link()
- {
- typedef detail::shared_node_pool
- <SegmentManager, mutex_type,sizeof(T), NodesPerChunk> node_pool_t;
- //Get segment manager
- segment_manager *named_segment_mngr = this->get_segment_manager();
- //Execute destruction functor atomically
- destroy_if_last_link_func func(named_segment_mngr, detail::get_pointer(mp_node_pool));
- named_segment_mngr->atomic_func(func);
- }
+ //!Allocates just one object. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ //!Throws boost::interprocess::bad_alloc if there is no enough memory
+ pointer allocate_one();
 
- private:
- node_pool_ptr mp_node_pool;
- /// @endcond
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ multiallocation_iterator allocate_individual(std::size_t num_elements);
+
+ //!Deallocates memory previously allocated with allocate_one().
+ //!You should never use deallocate_one to deallocate memory allocated
+ //!with other functions different from allocate_one(). Never throws
+ void deallocate_one(const pointer &p);
+
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ void deallocate_individual(multiallocation_iterator it);
+ #endif
 };
 
-//!Equality test for same type of
-//!node_allocator
-template<class T, class S, std::size_t NodesPerChunk> inline
-bool operator==(const node_allocator<T, S, NodesPerChunk> &alloc1,
- const node_allocator<T, S, NodesPerChunk> &alloc2)
- { return alloc1.get_node_pool() == alloc2.get_node_pool(); }
+#ifdef BOOST_INTERPROCESS_DOXYGEN_INVOKED
 
-//!Inequality test for same type of
-//!node_allocator
-template<class T, class S, std::size_t NodesPerChunk> inline
-bool operator!=(const node_allocator<T, S, NodesPerChunk> &alloc1,
- const node_allocator<T, S, NodesPerChunk> &alloc2)
- { return alloc1.get_node_pool() != alloc2.get_node_pool(); }
+//!Equality test for same type
+//!of node_allocator
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator==(const node_allocator<T, S, NodesPerChunk, F, OP> &alloc1,
+ const node_allocator<T, S, NodesPerChunk, F, OP> &alloc2);
+
+//!Inequality test for same type
+//!of node_allocator
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator!=(const node_allocator<T, S, NodesPerChunk, F, OP> &alloc1,
+ const node_allocator<T, S, NodesPerChunk, F, OP> &alloc2);
+
+#endif
 
 } //namespace interprocess {
 } //namespace boost {
 
 #include <boost/interprocess/detail/config_end.hpp>
 
-#endif //#ifndef BOOST_INTERPROCESS_POOLED_NODE_ALLOCATOR_HPP
+#endif //#ifndef BOOST_INTERPROCESS_NODE_ALLOCATOR_HPP

Modified: branches/fix-links/boost/interprocess/allocators/private_adaptive_pool.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/private_adaptive_pool.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/private_adaptive_pool.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -30,38 +30,47 @@
 #include <cstddef>
 
 //!\file
-//!Describes private_adaptive_pool pooled shared memory STL compatible allocator
+//!Describes private_adaptive_pool_base pooled shared memory STL compatible allocator
 
 namespace boost {
 namespace interprocess {
 
-//!An STL node allocator that uses a segment manager as memory
-//!source. The internal pointer type will of the same type (raw, smart) as
-//!"typename SegmentManager::void_pointer" type. This allows
-//!placing the allocator in shared memory, memory mapped-files, etc...
-//!This allocator has its own node pool. NodesPerChunk is the minimum number of nodes
-//!allocated at once when the allocator needs runs out of nodes.
-template<class T, class SegmentManager, std::size_t NodesPerChunk, std::size_t MaxFreeChunks>
-class private_adaptive_pool
+/// @cond
+
+namespace detail {
+
+template < unsigned int Version
+ , class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ , std::size_t MaxFreeChunks
+ , unsigned char OverheadPercent
+ >
+class private_adaptive_pool_base
+ : public node_pool_allocation_impl
+ < private_adaptive_pool_base < Version, T, SegmentManager, NodesPerChunk
+ , MaxFreeChunks, OverheadPercent>
+ , Version
+ , T
+ , SegmentManager
+ >
 {
    /// @cond
    private:
    typedef typename SegmentManager::void_pointer void_pointer;
- typedef typename detail::
- pointer_to_other<void_pointer, const void>::type cvoid_pointer;
    typedef SegmentManager segment_manager;
- typedef typename detail::
- pointer_to_other<void_pointer, char>::type char_pointer;
- typedef typename detail::pointer_to_other
- <void_pointer, segment_manager>::type segment_mngr_ptr_t;
- typedef typename SegmentManager::
- mutex_family::mutex_type mutex_type;
- typedef private_adaptive_pool
- <T, SegmentManager, NodesPerChunk, MaxFreeChunks> self_t;
+ typedef private_adaptive_pool_base
+ < Version, T, SegmentManager, NodesPerChunk
+ , MaxFreeChunks, OverheadPercent> self_t;
    typedef detail::private_adaptive_node_pool
- <SegmentManager, sizeof(T)
- , NodesPerChunk, MaxFreeChunks> priv_node_pool_t;
+ <SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ , MaxFreeChunks
+ , OverheadPercent
+ > node_pool_t;
 
+ BOOST_STATIC_ASSERT((Version <=2));
 
    /// @endcond
 
@@ -77,120 +86,358 @@
                      <const value_type>::type const_reference;
    typedef std::size_t size_type;
    typedef std::ptrdiff_t difference_type;
+ typedef detail::version_type
+ <private_adaptive_pool_base, Version> version;
+ typedef transform_iterator
+ < typename SegmentManager::
+ multiallocation_iterator
+ , detail::cast_functor <T> > multiallocation_iterator;
+ typedef typename SegmentManager::
+ multiallocation_chain multiallocation_chain;
 
    //!Obtains node_allocator from other node_allocator
    template<class T2>
    struct rebind
    {
- typedef private_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks> other;
+ typedef private_adaptive_pool_base
+ <Version, T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
    };
 
    /// @cond
    private:
- //!Not assignable from related private_adaptive_pool
- template<class T2, class MemoryAlgorithm2, std::size_t N2, std::size_t F2>
- private_adaptive_pool& operator=
- (const private_adaptive_pool<T2, MemoryAlgorithm2, N2, F2>&);
+ //!Not assignable from related private_adaptive_pool_base
+ template<unsigned int Version2, class T2, class MemoryAlgorithm2, std::size_t N2, std::size_t F2, unsigned char OP2>
+ private_adaptive_pool_base& operator=
+ (const private_adaptive_pool_base<Version2, T2, MemoryAlgorithm2, N2, F2, OP2>&);
 
- //!Not assignable from other private_adaptive_pool
- private_adaptive_pool& operator=(const private_adaptive_pool&);
+ //!Not assignable from other private_adaptive_pool_base
+ private_adaptive_pool_base& operator=(const private_adaptive_pool_base&);
    /// @endcond
 
    public:
    //!Constructor from a segment manager
- private_adaptive_pool(segment_manager *segment_mngr)
+ private_adaptive_pool_base(segment_manager *segment_mngr)
       : m_node_pool(segment_mngr)
    {}
 
- //!Copy constructor from other private_adaptive_pool. Never throws
- private_adaptive_pool(const private_adaptive_pool &other)
+ //!Copy constructor from other private_adaptive_pool_base. Never throws
+ private_adaptive_pool_base(const private_adaptive_pool_base &other)
       : m_node_pool(other.get_segment_manager())
    {}
 
- //!Copy constructor from related private_adaptive_pool. Never throws.
+ //!Copy constructor from related private_adaptive_pool_base. Never throws.
    template<class T2>
- private_adaptive_pool
- (const private_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks> &other)
+ private_adaptive_pool_base
+ (const private_adaptive_pool_base
+ <Version, T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
       : m_node_pool(other.get_segment_manager())
    {}
 
    //!Destructor, frees all used memory. Never throws
- ~private_adaptive_pool()
+ ~private_adaptive_pool_base()
    {}
 
    //!Returns the segment manager. Never throws
    segment_manager* get_segment_manager()const
    { return m_node_pool.get_segment_manager(); }
 
- //!Returns the number of elements that could be allocated. Never throws
- size_type max_size() const
- { return this->get_segment_manager()/sizeof(value_type); }
-
- //!Allocate memory for an array of count elements.
- //!Throws boost::interprocess::bad_alloc if there is no enough memory
- pointer allocate(size_type count, cvoid_pointer hint = 0)
- {
- (void)hint;
- if(count > ((size_type)-1)/sizeof(value_type))
- throw bad_alloc();
- return pointer(static_cast<value_type*>(m_node_pool.allocate(count)));
- }
-
- //!Deallocate allocated memory. Never throws
- void deallocate(const pointer &ptr, size_type count)
- { m_node_pool.deallocate(detail::get_pointer(ptr), count); }
-
- //!Deallocates all free chunks of the pool
- void deallocate_free_chunks()
- { m_node_pool.deallocate_free_chunks(); }
+ //!Returns the internal node pool. Never throws
+ node_pool_t* get_node_pool() const
+ { return const_cast<node_pool_t*>(&m_node_pool); }
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
- //!different shared memory segments, the result is undefined.*/
+ //!different shared memory segments, the result is undefined.
    friend void swap(self_t &alloc1,self_t &alloc2)
    { alloc1.m_node_pool.swap(alloc2.m_node_pool); }
 
- //These functions are obsolete. These are here to conserve
- //backwards compatibility with containers using them...
+ /// @cond
+ private:
+ node_pool_t m_node_pool;
+ /// @endcond
+};
+
+//!Equality test for same type of private_adaptive_pool_base
+template<unsigned int V, class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator==(const private_adaptive_pool_base<V, T, S, NodesPerChunk, F, OP> &alloc1,
+ const private_adaptive_pool_base<V, T, S, NodesPerChunk, F, OP> &alloc2)
+{ return &alloc1 == &alloc2; }
+
+//!Inequality test for same type of private_adaptive_pool_base
+template<unsigned int V, class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator!=(const private_adaptive_pool_base<V, T, S, NodesPerChunk, F, OP> &alloc1,
+ const private_adaptive_pool_base<V, T, S, NodesPerChunk, F, OP> &alloc2)
+{ return &alloc1 != &alloc2; }
+
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk = 64
+ , std::size_t MaxFreeChunks = 2
+ , unsigned char OverheadPercent = 5
+ >
+class private_adaptive_pool_v1
+ : public private_adaptive_pool_base
+ < 1
+ , T
+ , SegmentManager
+ , NodesPerChunk
+ , MaxFreeChunks
+ , OverheadPercent
+ >
+{
+ public:
+ typedef detail::private_adaptive_pool_base
+ < 1, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> base_t;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef private_adaptive_pool_v1<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ };
+
+ private_adaptive_pool_v1(SegmentManager *segment_mngr)
+ : base_t(segment_mngr)
+ {}
+
+ template<class T2>
+ private_adaptive_pool_v1
+ (const private_adaptive_pool_v1<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ : base_t(other)
+ {}
+};
+
+} //namespace detail {
+
+/// @endcond
+
+//!An STL node allocator that uses a segment manager as memory
+//!source. The internal pointer type will of the same type (raw, smart) as
+//!"typename SegmentManager::void_pointer" type. This allows
+//!placing the allocator in shared memory, memory mapped-files, etc...
+//!This allocator has its own node pool.
+//!
+//!NodesPerChunk is the minimum number of nodes of nodes allocated at once when
+//!the allocator needs runs out of nodes. MaxFreeChunks is the maximum number of totally free chunks
+//!that the adaptive node pool will hold. The rest of the totally free chunks will be
+//!deallocated with the segment manager.
+//!
+//!OverheadPercent is the (approximated) maximum size overhead (1-20%) of the allocator:
+//!(memory usable for nodes / total memory allocated from the segment manager)
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ , std::size_t MaxFreeChunks
+ , unsigned char OverheadPercent
+ >
+class private_adaptive_pool
+ /// @cond
+ : public detail::private_adaptive_pool_base
+ < 2
+ , T
+ , SegmentManager
+ , NodesPerChunk
+ , MaxFreeChunks
+ , OverheadPercent
+ >
+ /// @endcond
+{
+
+ #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+ typedef detail::private_adaptive_pool_base
+ < 2, T, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> base_t;
+ public:
+ typedef detail::version_type<private_adaptive_pool, 2> version;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef private_adaptive_pool
+ <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ };
+
+ private_adaptive_pool(SegmentManager *segment_mngr)
+ : base_t(segment_mngr)
+ {}
+
+ template<class T2>
+ private_adaptive_pool
+ (const private_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other)
+ : base_t(other)
+ {}
+
+ #else
+ public:
+ typedef implementation_defined::segment_manager segment_manager;
+ typedef segment_manager::void_pointer void_pointer;
+ typedef implementation_defined::pointer pointer;
+ typedef implementation_defined::const_pointer const_pointer;
+ typedef T value_type;
+ typedef typename detail::add_reference
+ <value_type>::type reference;
+ typedef typename detail::add_reference
+ <const value_type>::type const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ //!Obtains private_adaptive_pool from
+ //!private_adaptive_pool
+ template<class T2>
+ struct rebind
+ {
+ typedef private_adaptive_pool
+ <T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> other;
+ };
+
+ private:
+ //!Not assignable from
+ //!related private_adaptive_pool
+ template<class T2, class SegmentManager2, std::size_t N2, std::size_t F2, unsigned char OP2>
+ private_adaptive_pool& operator=
+ (const private_adaptive_pool<T2, SegmentManager2, N2, F2>&);
+
+ //!Not assignable from
+ //!other private_adaptive_pool
+ private_adaptive_pool& operator=(const private_adaptive_pool&);
+
+ public:
+ //!Constructor from a segment manager. If not present, constructs a node
+ //!pool. Increments the reference count of the associated node pool.
+ //!Can throw boost::interprocess::bad_alloc
+ private_adaptive_pool(segment_manager *segment_mngr);
+
+ //!Copy constructor from other private_adaptive_pool. Increments the reference
+ //!count of the associated node pool. Never throws
+ private_adaptive_pool(const private_adaptive_pool &other);
+
+ //!Copy constructor from related private_adaptive_pool. If not present, constructs
+ //!a node pool. Increments the reference count of the associated node pool.
+ //!Can throw boost::interprocess::bad_alloc
+ template<class T2>
+ private_adaptive_pool
+ (const private_adaptive_pool<T2, SegmentManager, NodesPerChunk, MaxFreeChunks, OverheadPercent> &other);
+
+ //!Destructor, removes node_pool_t from memory
+ //!if its reference count reaches to zero. Never throws
+ ~private_adaptive_pool();
+
+ //!Returns a pointer to the node pool.
+ //!Never throws
+ node_pool_t* get_node_pool() const;
+
+ //!Returns the segment manager.
+ //!Never throws
+ segment_manager* get_segment_manager()const;
+
+ //!Returns the number of elements that could be allocated.
+ //!Never throws
+ size_type max_size() const;
+
+ //!Allocate memory for an array of count elements.
+ //!Throws boost::interprocess::bad_alloc if there is no enough memory
+ pointer allocate(size_type count, cvoid_pointer hint = 0);
+
+ //!Deallocate allocated memory.
+ //!Never throws
+ void deallocate(const pointer &ptr, size_type count);
+
+ //!Deallocates all free chunks
+ //!of the pool
+ void deallocate_free_chunks();
+
+ //!Swaps allocators. Does not throw. If each allocator is placed in a
+ //!different memory segment, the result is undefined.
+ friend void swap(self_t &alloc1, self_t &alloc2);
 
    //!Returns address of mutable object.
    //!Never throws
- pointer address(reference value) const
- { return pointer(boost::addressof(value)); }
+ pointer address(reference value) const;
 
    //!Returns address of non mutable object.
    //!Never throws
- const_pointer address(const_reference value) const
- { return const_pointer(boost::addressof(value)); }
+ const_pointer address(const_reference value) const;
 
    //!Default construct an object.
- //!Throws if T's default constructor throws*/
- void construct(const pointer &ptr)
- { new(detail::get_pointer(ptr)) value_type; }
+ //!Throws if T's default constructor throws
+ void construct(const pointer &ptr);
 
    //!Destroys object. Throws if object's
    //!destructor throws
- void destroy(const pointer &ptr)
- { BOOST_ASSERT(ptr != 0); (*ptr).~value_type(); }
+ void destroy(const pointer &ptr);
 
- /// @cond
- private:
- priv_node_pool_t m_node_pool;
- /// @endcond
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold. This size only works for memory allocated with
+ //!allocate, allocation_command and allocate_many.
+ size_type size(const pointer &p) const;
+
+ std::pair<pointer, bool>
+ allocation_command(allocation_type command,
+ size_type limit_size,
+ size_type preferred_size,
+ size_type &received_size, const pointer &reuse = 0);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ multiallocation_iterator allocate_many(size_type elem_size, std::size_t num_elements);
+
+ //!Allocates n_elements elements, each one of size elem_sizes[i]in a
+ //!contiguous chunk
+ //!of memory. The elements must be deallocated
+ multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ void deallocate_many(multiallocation_iterator it);
+
+ //!Allocates just one object. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ //!Throws boost::interprocess::bad_alloc if there is no enough memory
+ pointer allocate_one();
+
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ multiallocation_iterator allocate_individual(std::size_t num_elements);
+
+ //!Deallocates memory previously allocated with allocate_one().
+ //!You should never use deallocate_one to deallocate memory allocated
+ //!with other functions different from allocate_one(). Never throws
+ void deallocate_one(const pointer &p);
+
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ void deallocate_individual(multiallocation_iterator it);
+ #endif
 };
 
-//!Equality test for same type of private_adaptive_pool
-template<class T, class S, std::size_t NodesPerChunk, std::size_t F> inline
-bool operator==(const private_adaptive_pool<T, S, NodesPerChunk, F> &alloc1,
- const private_adaptive_pool<T, S, NodesPerChunk, F> &alloc2)
-{ return &alloc1 == &alloc2; }
+#ifdef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+
+//!Equality test for same type
+//!of private_adaptive_pool
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator==(const private_adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc1,
+ const private_adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc2);
+
+//!Inequality test for same type
+//!of private_adaptive_pool
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator!=(const private_adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc1,
+ const private_adaptive_pool<T, S, NodesPerChunk, F, OP> &alloc2);
 
-//!Inequality test for same type of private_adaptive_pool
-template<class T, class S, std::size_t NodesPerChunk, std::size_t F> inline
-bool operator!=(const private_adaptive_pool<T, S, NodesPerChunk, F> &alloc1,
- const private_adaptive_pool<T, S, NodesPerChunk, F> &alloc2)
-{
- return &alloc1 != &alloc2;
-}
+#endif
 
 } //namespace interprocess {
 } //namespace boost {

Modified: branches/fix-links/boost/interprocess/allocators/private_node_allocator.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/allocators/private_node_allocator.hpp (original)
+++ branches/fix-links/boost/interprocess/allocators/private_node_allocator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,13 +1,13 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
 // See http://www.boost.org/libs/interprocess for documentation.
 //
 //////////////////////////////////////////////////////////////////////////////
-
+/*
 #ifndef BOOST_INTERPROCESS_PRIVATE_NODE_ALLOCATOR_HPP
 #define BOOST_INTERPROCESS_PRIVATE_NODE_ALLOCATOR_HPP
 
@@ -50,12 +50,8 @@
    typedef typename detail::
       pointer_to_other<void_pointer, const void>::type cvoid_pointer;
    typedef SegmentManager segment_manager;
- typedef typename detail::
- pointer_to_other<void_pointer, char>::type char_pointer;
    typedef typename detail::pointer_to_other
       <void_pointer, segment_manager>::type segment_mngr_ptr_t;
- typedef typename SegmentManager::
- mutex_family::mutex_type mutex_type;
    typedef private_node_allocator
       <T, SegmentManager, NodesPerChunk> self_t;
    typedef detail::private_node_pool
@@ -128,21 +124,30 @@
    pointer allocate(size_type count, cvoid_pointer hint = 0)
    {
       (void)hint;
- if(count > ((size_type)-1)/sizeof(value_type))
+ if(count > this->max_size())
          throw bad_alloc();
- return pointer(static_cast<value_type*>(m_node_pool.allocate(count)));
+ else if(count == 1)
+ return pointer(static_cast<value_type*>(m_node_pool.allocate_node()));
+ else
+ return pointer(static_cast<value_type*>
+ (m_node_pool.get_segment_manager()->allocate(sizeof(T)*count)));
    }
 
    //!Deallocate allocated memory. Never throws
    void deallocate(const pointer &ptr, size_type count)
- { m_node_pool.deallocate(detail::get_pointer(ptr), count); }
+ {
+ if(count == 1)
+ m_node_pool.deallocate_node(detail::get_pointer(ptr));
+ else
+ m_node_pool.get_segment_manager()->deallocate(detail::get_pointer(ptr));
+ }
 
    //!Deallocates all free chunks of the pool
    void deallocate_free_chunks()
    { m_node_pool.deallocate_free_chunks(); }
 
    //!Swaps allocators. Does not throw. If each allocator is placed in a
- //!different shared memory segments, the result is undefined.*/
+ //!different shared memory segments, the result is undefined.
    friend void swap(self_t &alloc1,self_t &alloc2)
    { alloc1.m_node_pool.swap(alloc2.m_node_pool); }
 
@@ -160,7 +165,7 @@
    { return const_pointer(boost::addressof(value)); }
 
    //!Default construct an object.
- //!Throws if T's default constructor throws*/
+ //!Throws if T's default constructor throws
    void construct(const pointer &ptr)
    { new(detail::get_pointer(ptr)) value_type; }
 
@@ -196,3 +201,432 @@
 
 #endif //#ifndef BOOST_INTERPROCESS_PRIVATE_NODE_ALLOCATOR_HPP
 
+*/
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
+// Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/interprocess for documentation.
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef BOOST_INTERPROCESS_PRIVATE_NODE_ALLOCATOR_HPP
+#define BOOST_INTERPROCESS_PRIVATE_NODE_ALLOCATOR_HPP
+
+#if (defined _MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif
+
+#include <boost/interprocess/detail/config_begin.hpp>
+#include <boost/interprocess/detail/workaround.hpp>
+
+#include <boost/interprocess/interprocess_fwd.hpp>
+#include <boost/assert.hpp>
+#include <boost/utility/addressof.hpp>
+#include <boost/interprocess/allocators/detail/node_pool.hpp>
+#include <boost/interprocess/exceptions.hpp>
+#include <boost/interprocess/detail/utilities.hpp>
+#include <boost/interprocess/detail/workaround.hpp>
+#include <memory>
+#include <algorithm>
+#include <cstddef>
+
+//!\file
+//!Describes private_node_allocator_base pooled shared memory STL compatible allocator
+
+namespace boost {
+namespace interprocess {
+
+/// @cond
+
+namespace detail {
+
+template < unsigned int Version
+ , class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ >
+class private_node_allocator_base
+ : public node_pool_allocation_impl
+ < private_node_allocator_base < Version, T, SegmentManager, NodesPerChunk>
+ , Version
+ , T
+ , SegmentManager
+ >
+{
+ /// @cond
+ private:
+ typedef typename SegmentManager::void_pointer void_pointer;
+ typedef SegmentManager segment_manager;
+ typedef private_node_allocator_base
+ < Version, T, SegmentManager, NodesPerChunk> self_t;
+ typedef detail::private_node_pool
+ <SegmentManager
+ , sizeof(T)
+ , NodesPerChunk
+ > node_pool_t;
+
+ BOOST_STATIC_ASSERT((Version <=2));
+
+ /// @endcond
+
+ public:
+ typedef typename detail::
+ pointer_to_other<void_pointer, T>::type pointer;
+ typedef typename detail::
+ pointer_to_other<void_pointer, const T>::type const_pointer;
+ typedef T value_type;
+ typedef typename detail::add_reference
+ <value_type>::type reference;
+ typedef typename detail::add_reference
+ <const value_type>::type const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef detail::version_type
+ <private_node_allocator_base, Version> version;
+ typedef transform_iterator
+ < typename SegmentManager::
+ multiallocation_iterator
+ , detail::cast_functor <T> > multiallocation_iterator;
+ typedef typename SegmentManager::
+ multiallocation_chain multiallocation_chain;
+
+ //!Obtains node_allocator from other node_allocator
+ template<class T2>
+ struct rebind
+ {
+ typedef private_node_allocator_base
+ <Version, T2, SegmentManager, NodesPerChunk> other;
+ };
+
+ /// @cond
+ private:
+ //!Not assignable from related private_node_allocator_base
+ template<unsigned int Version2, class T2, class MemoryAlgorithm2, std::size_t N2>
+ private_node_allocator_base& operator=
+ (const private_node_allocator_base<Version2, T2, MemoryAlgorithm2, N2>&);
+
+ //!Not assignable from other private_node_allocator_base
+ private_node_allocator_base& operator=(const private_node_allocator_base&);
+ /// @endcond
+
+ public:
+ //!Constructor from a segment manager
+ private_node_allocator_base(segment_manager *segment_mngr)
+ : m_node_pool(segment_mngr)
+ {}
+
+ //!Copy constructor from other private_node_allocator_base. Never throws
+ private_node_allocator_base(const private_node_allocator_base &other)
+ : m_node_pool(other.get_segment_manager())
+ {}
+
+ //!Copy constructor from related private_node_allocator_base. Never throws.
+ template<class T2>
+ private_node_allocator_base
+ (const private_node_allocator_base
+ <Version, T2, SegmentManager, NodesPerChunk> &other)
+ : m_node_pool(other.get_segment_manager())
+ {}
+
+ //!Destructor, frees all used memory. Never throws
+ ~private_node_allocator_base()
+ {}
+
+ //!Returns the segment manager. Never throws
+ segment_manager* get_segment_manager()const
+ { return m_node_pool.get_segment_manager(); }
+
+ //!Returns the internal node pool. Never throws
+ node_pool_t* get_node_pool() const
+ { return const_cast<node_pool_t*>(&m_node_pool); }
+
+ //!Swaps allocators. Does not throw. If each allocator is placed in a
+ //!different shared memory segments, the result is undefined.
+ friend void swap(self_t &alloc1,self_t &alloc2)
+ { alloc1.m_node_pool.swap(alloc2.m_node_pool); }
+
+ /// @cond
+ private:
+ node_pool_t m_node_pool;
+ /// @endcond
+};
+
+//!Equality test for same type of private_node_allocator_base
+template<unsigned int V, class T, class S, std::size_t NodesPerChunk> inline
+bool operator==(const private_node_allocator_base<V, T, S, NodesPerChunk> &alloc1,
+ const private_node_allocator_base<V, T, S, NodesPerChunk> &alloc2)
+{ return &alloc1 == &alloc2; }
+
+//!Inequality test for same type of private_node_allocator_base
+template<unsigned int V, class T, class S, std::size_t NodesPerChunk> inline
+bool operator!=(const private_node_allocator_base<V, T, S, NodesPerChunk> &alloc1,
+ const private_node_allocator_base<V, T, S, NodesPerChunk> &alloc2)
+{ return &alloc1 != &alloc2; }
+
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk = 64
+ >
+class private_node_allocator_v1
+ : public private_node_allocator_base
+ < 1
+ , T
+ , SegmentManager
+ , NodesPerChunk
+ >
+{
+ public:
+ typedef detail::private_node_allocator_base
+ < 1, T, SegmentManager, NodesPerChunk> base_t;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef private_node_allocator_v1<T2, SegmentManager, NodesPerChunk> other;
+ };
+
+ private_node_allocator_v1(SegmentManager *segment_mngr)
+ : base_t(segment_mngr)
+ {}
+
+ template<class T2>
+ private_node_allocator_v1
+ (const private_node_allocator_v1<T2, SegmentManager, NodesPerChunk> &other)
+ : base_t(other)
+ {}
+};
+
+} //namespace detail {
+
+/// @endcond
+
+//!An STL node allocator that uses a segment manager as memory
+//!source. The internal pointer type will of the same type (raw, smart) as
+//!"typename SegmentManager::void_pointer" type. This allows
+//!placing the allocator in shared memory, memory mapped-files, etc...
+//!This allocator has its own node pool. NodesPerChunk is the number of nodes allocated
+//!at once when the allocator needs runs out of nodes
+template < class T
+ , class SegmentManager
+ , std::size_t NodesPerChunk
+ >
+class private_node_allocator
+ /// @cond
+ : public detail::private_node_allocator_base
+ < 2
+ , T
+ , SegmentManager
+ , NodesPerChunk
+ >
+ /// @endcond
+{
+
+ #ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+ typedef detail::private_node_allocator_base
+ < 2, T, SegmentManager, NodesPerChunk> base_t;
+ public:
+ typedef detail::version_type<private_node_allocator, 2> version;
+
+ template<class T2>
+ struct rebind
+ {
+ typedef private_node_allocator
+ <T2, SegmentManager, NodesPerChunk> other;
+ };
+
+ private_node_allocator(SegmentManager *segment_mngr)
+ : base_t(segment_mngr)
+ {}
+
+ template<class T2>
+ private_node_allocator
+ (const private_node_allocator<T2, SegmentManager, NodesPerChunk> &other)
+ : base_t(other)
+ {}
+
+ #else
+ public:
+ typedef implementation_defined::segment_manager segment_manager;
+ typedef segment_manager::void_pointer void_pointer;
+ typedef implementation_defined::pointer pointer;
+ typedef implementation_defined::const_pointer const_pointer;
+ typedef T value_type;
+ typedef typename detail::add_reference
+ <value_type>::type reference;
+ typedef typename detail::add_reference
+ <const value_type>::type const_reference;
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+
+ //!Obtains private_node_allocator from
+ //!private_node_allocator
+ template<class T2>
+ struct rebind
+ {
+ typedef private_node_allocator
+ <T2, SegmentManager, NodesPerChunk> other;
+ };
+
+ private:
+ //!Not assignable from
+ //!related private_node_allocator
+ template<class T2, class SegmentManager2, std::size_t N2>
+ private_node_allocator& operator=
+ (const private_node_allocator<T2, SegmentManager2, N2>&);
+
+ //!Not assignable from
+ //!other private_node_allocator
+ private_node_allocator& operator=(const private_node_allocator&);
+
+ public:
+ //!Constructor from a segment manager. If not present, constructs a node
+ //!pool. Increments the reference count of the associated node pool.
+ //!Can throw boost::interprocess::bad_alloc
+ private_node_allocator(segment_manager *segment_mngr);
+
+ //!Copy constructor from other private_node_allocator. Increments the reference
+ //!count of the associated node pool. Never throws
+ private_node_allocator(const private_node_allocator &other);
+
+ //!Copy constructor from related private_node_allocator. If not present, constructs
+ //!a node pool. Increments the reference count of the associated node pool.
+ //!Can throw boost::interprocess::bad_alloc
+ template<class T2>
+ private_node_allocator
+ (const private_node_allocator<T2, SegmentManager, NodesPerChunk> &other);
+
+ //!Destructor, removes node_pool_t from memory
+ //!if its reference count reaches to zero. Never throws
+ ~private_node_allocator();
+
+ //!Returns a pointer to the node pool.
+ //!Never throws
+ node_pool_t* get_node_pool() const;
+
+ //!Returns the segment manager.
+ //!Never throws
+ segment_manager* get_segment_manager()const;
+
+ //!Returns the number of elements that could be allocated.
+ //!Never throws
+ size_type max_size() const;
+
+ //!Allocate memory for an array of count elements.
+ //!Throws boost::interprocess::bad_alloc if there is no enough memory
+ pointer allocate(size_type count, cvoid_pointer hint = 0);
+
+ //!Deallocate allocated memory.
+ //!Never throws
+ void deallocate(const pointer &ptr, size_type count);
+
+ //!Deallocates all free chunks
+ //!of the pool
+ void deallocate_free_chunks();
+
+ //!Swaps allocators. Does not throw. If each allocator is placed in a
+ //!different memory segment, the result is undefined.
+ friend void swap(self_t &alloc1, self_t &alloc2);
+
+ //!Returns address of mutable object.
+ //!Never throws
+ pointer address(reference value) const;
+
+ //!Returns address of non mutable object.
+ //!Never throws
+ const_pointer address(const_reference value) const;
+
+ //!Default construct an object.
+ //!Throws if T's default constructor throws
+ void construct(const pointer &ptr);
+
+ //!Destroys object. Throws if object's
+ //!destructor throws
+ void destroy(const pointer &ptr);
+
+ //!Returns maximum the number of objects the previously allocated memory
+ //!pointed by p can hold. This size only works for memory allocated with
+ //!allocate, allocation_command and allocate_many.
+ size_type size(const pointer &p) const;
+
+ std::pair<pointer, bool>
+ allocation_command(allocation_type command,
+ size_type limit_size,
+ size_type preferred_size,
+ size_type &received_size, const pointer &reuse = 0);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ multiallocation_iterator allocate_many(size_type elem_size, std::size_t num_elements);
+
+ //!Allocates n_elements elements, each one of size elem_sizes[i]in a
+ //!contiguous chunk
+ //!of memory. The elements must be deallocated
+ multiallocation_iterator allocate_many(const size_type *elem_sizes, size_type n_elements);
+
+ //!Allocates many elements of size elem_size in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. The elements must be deallocated
+ //!with deallocate(...)
+ void deallocate_many(multiallocation_iterator it);
+
+ //!Allocates just one object. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ //!Throws boost::interprocess::bad_alloc if there is no enough memory
+ pointer allocate_one();
+
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ multiallocation_iterator allocate_individual(std::size_t num_elements);
+
+ //!Deallocates memory previously allocated with allocate_one().
+ //!You should never use deallocate_one to deallocate memory allocated
+ //!with other functions different from allocate_one(). Never throws
+ void deallocate_one(const pointer &p);
+
+ //!Allocates many elements of size == 1 in a contiguous chunk
+ //!of memory. The minimum number to be allocated is min_elements,
+ //!the preferred and maximum number is
+ //!preferred_elements. The number of actually allocated elements is
+ //!will be assigned to received_size. Memory allocated with this function
+ //!must be deallocated only with deallocate_one().
+ void deallocate_individual(multiallocation_iterator it);
+ #endif
+};
+
+#ifdef BOOST_INTERPROCESS_DOXYGEN_INVOKED
+
+//!Equality test for same type
+//!of private_node_allocator
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator==(const private_node_allocator<T, S, NodesPerChunk, F, OP> &alloc1,
+ const private_node_allocator<T, S, NodesPerChunk, F, OP> &alloc2);
+
+//!Inequality test for same type
+//!of private_node_allocator
+template<class T, class S, std::size_t NodesPerChunk, std::size_t F, unsigned char OP> inline
+bool operator!=(const private_node_allocator<T, S, NodesPerChunk, F, OP> &alloc1,
+ const private_node_allocator<T, S, NodesPerChunk, F, OP> &alloc2);
+
+#endif
+
+} //namespace interprocess {
+} //namespace boost {
+
+#include <boost/interprocess/detail/config_end.hpp>
+
+#endif //#ifndef BOOST_INTERPROCESS_PRIVATE_NODE_ALLOCATOR_HPP
+

Modified: branches/fix-links/boost/interprocess/containers/detail/flat_tree.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/detail/flat_tree.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/detail/flat_tree.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/containers/detail/node_alloc_holder.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/detail/node_alloc_holder.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/detail/node_alloc_holder.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -74,6 +74,9 @@
    typedef detail::integral_constant<unsigned,
       boost::interprocess::detail::
          version<NodeAlloc>::value> alloc_version;
+ typedef typename ICont::iterator icont_iterator;
+ typedef typename ICont::const_iterator icont_citerator;
+ typedef allocator_destroyer<NodeAlloc> Destroyer;
 
    node_alloc_holder(const ValAlloc &a)
       : members_(a)
@@ -292,18 +295,41 @@
          if(constructed){
             this->destroy(p);
          }
- this->deallocate_one(p);
- multiallocation_iterator itend;
- while(itbeg != itend){
- Node *n = &*itbeg;
- ++itbeg;
- this->deallocate_one(n);
- }
+ this->node_alloc().deallocate_many(itbeg);
       }
       BOOST_CATCH_END
       return beg;
    }
 
+ void clear(allocator_v1)
+ { this->icont().clear_and_dispose(Destroyer(this->node_alloc())); }
+
+ void clear(allocator_v2)
+ {
+ allocator_multialloc_chain_node_deallocator<NodeAlloc> chain_holder(this->node_alloc());
+ this->icont().clear_and_dispose(chain_holder.get_chain_builder());
+ }
+
+ icont_iterator erase_range(icont_iterator first, icont_iterator last, allocator_v1)
+ { return this->icont().erase_and_dispose(first, last, Destroyer(this->node_alloc())); }
+
+ icont_iterator erase_range(icont_iterator first, icont_iterator last, allocator_v2)
+ {
+ allocator_multialloc_chain_node_deallocator<NodeAlloc> chain_holder(this->node_alloc());
+ return this->icont().erase_and_dispose(first, last, chain_holder.get_chain_builder());
+ }
+
+ template<class Key, class Comparator>
+ size_type erase_key(const Key& k, const Comparator &comp, allocator_v1)
+ { return this->icont().erase_and_dispose(k, comp, Destroyer(this->node_alloc())); }
+
+ template<class Key, class Comparator>
+ size_type erase_key(const Key& k, const Comparator &comp, allocator_v2)
+ {
+ allocator_multialloc_chain_node_deallocator<NodeAlloc> chain_holder(this->node_alloc());
+ return this->icont().erase_and_dispose(k, comp, chain_holder.get_chain_builder());
+ }
+
    protected:
    struct cloner
    {
@@ -359,10 +385,10 @@
    { return this->members_.m_icont; }
 
    NodeAlloc &node_alloc()
- { return this->members_; }
+ { return static_cast<NodeAlloc &>(this->members_); }
 
    const NodeAlloc &node_alloc() const
- { return this->members_; }
+ { return static_cast<const NodeAlloc &>(this->members_); }
 };
 
 } //namespace detail {

Modified: branches/fix-links/boost/interprocess/containers/detail/tree.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/detail/tree.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/detail/tree.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -732,13 +732,13 @@
    { return iterator(this->icont().erase_and_dispose(position.get(), Destroyer(this->node_alloc()))); }
 
    size_type erase(const key_type& k)
- { return this->icont().erase_and_dispose(k, KeyNodeCompare(value_comp()), Destroyer(this->node_alloc())); }
+ { return AllocHolder::erase_key(k, KeyNodeCompare(value_comp()), alloc_version()); }
 
    iterator erase(const_iterator first, const_iterator last)
- { return iterator(this->icont().erase_and_dispose(first.get(), last.get(), Destroyer(this->node_alloc()))); }
+ { return iterator(AllocHolder::erase_range(first.get(), last.get(), alloc_version())); }
 
    void clear()
- { this->icont().clear_and_dispose(Destroyer(this->node_alloc())); }
+ { AllocHolder::clear(alloc_version()); }
 
    // set operations:
    iterator find(const key_type& k)

Modified: branches/fix-links/boost/interprocess/containers/flat_map.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/flat_map.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/flat_map.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/containers/flat_set.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/flat_set.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/flat_set.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/containers/list.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/list.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/list.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -404,7 +404,7 @@
    //!
    //! <b>Complexity</b>: Linear to the number of elements in the list.
    void clear()
- { this->icont().clear_and_dispose(Destroyer(this->node_alloc())); }
+ { AllocHolder::clear(alloc_version()); }
 
    //! <b>Effects</b>: Returns an iterator to the first element contained in the list.
    //!
@@ -786,7 +786,7 @@
    //!
    //! <b>Complexity</b>: Linear to the distance between first and last.
    iterator erase(iterator first, iterator last)
- { return iterator(this->icont().erase_and_dispose(first.get(), last.get(), Destroyer(this->node_alloc()))); }
+ { return iterator(AllocHolder::erase_range(first.get(), last.get(), alloc_version())); }
 
    //! <b>Effects</b>: Assigns the n copies of val to *this.
    //!
@@ -1085,6 +1085,7 @@
 
    /// @cond
    private:
+
    //Iterator range version
    template<class InpIterator>
    void priv_create_and_insert_nodes
@@ -1160,7 +1161,7 @@
 
    template<class Integer>
    void priv_insert_dispatch(iterator p, Integer n, Integer x, detail::true_)
- { this->priv_create_and_insert_nodes(p, n, x); }
+ { this->insert(p, (size_type)n, x); }
 
    void priv_fill_assign(size_type n, const T& val)
    {

Modified: branches/fix-links/boost/interprocess/containers/map.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/map.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/map.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/containers/set.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/set.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/set.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/containers/slist.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/slist.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/slist.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2004-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2004-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -8,7 +8,7 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 //
-// This file comes from SGI's stl_slist.h file. Modified by Ion Gaztanaga 2004-2007
+// This file comes from SGI's stl_slist.h file. Modified by Ion Gaztanaga 2004-2008
 // Renaming, isolating and porting to generic algorithms. Pointer typedef
 // set to allocator::pointer to allow placing it in shared memory.
 //

Modified: branches/fix-links/boost/interprocess/containers/string.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/string.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/string.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -8,7 +8,7 @@
 //
 //////////////////////////////////////////////////////////////////////////////
 //
-// This file comes from SGI's string file. Modified by Ion Gaztanaga 2004-2007
+// This file comes from SGI's string file. Modified by Ion Gaztanaga 2004-2008
 // Renaming, isolating and porting to generic algorithms. Pointer typedef
 // set to allocator::pointer to allow placing it in shared memory.
 //

Modified: branches/fix-links/boost/interprocess/containers/vector.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/containers/vector.hpp (original)
+++ branches/fix-links/boost/interprocess/containers/vector.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -740,6 +740,9 @@
          //Check for forward expansion
          same_buffer_start = ret.second && this->members_.m_start == ret.first;
          if(same_buffer_start){
+ #ifdef BOOST_INTERPROCESS_VECTOR_ALLOC_STATS
+ ++this->num_expand_fwd;
+ #endif
             this->members_.m_capacity = real_cap;
          }
          //If there is no forward expansion, move objects
@@ -748,6 +751,9 @@
             copy_move_it dummy_it(detail::get_pointer(this->members_.m_start));
             //Backwards (and possibly forward) expansion
             if(ret.second){
+ #ifdef BOOST_INTERPROCESS_VECTOR_ALLOC_STATS
+ ++this->num_expand_bwd;
+ #endif
                this->priv_range_insert_expand_backwards
                   ( detail::get_pointer(ret.first)
                   , real_cap
@@ -758,6 +764,9 @@
             }
             //New buffer
             else{
+ #ifdef BOOST_INTERPROCESS_VECTOR_ALLOC_STATS
+ ++this->num_alloc;
+ #endif
                this->priv_range_insert_new_allocation
                   ( detail::get_pointer(ret.first)
                   , real_cap
@@ -1184,11 +1193,17 @@
          
          //If we had room or we have expanded forward
          if (same_buffer_start){
+ #ifdef BOOST_INTERPROCESS_VECTOR_ALLOC_STATS
+ ++this->num_expand_fwd;
+ #endif
             this->priv_range_insert_expand_forward
                (detail::get_pointer(pos), first, last, n);
          }
          //Backwards (and possibly forward) expansion
          else if(ret.second){
+ #ifdef BOOST_INTERPROCESS_VECTOR_ALLOC_STATS
+ ++this->num_expand_bwd;
+ #endif
             this->priv_range_insert_expand_backwards
                ( detail::get_pointer(ret.first)
                , real_cap
@@ -1199,6 +1214,9 @@
          }
          //New buffer
          else{
+ #ifdef BOOST_INTERPROCESS_VECTOR_ALLOC_STATS
+ ++this->num_alloc;
+ #endif
             this->priv_range_insert_new_allocation
                ( detail::get_pointer(ret.first)
                , real_cap
@@ -1778,6 +1796,15 @@
       if (n >= size())
          throw std::out_of_range("vector::at");
    }
+
+ #ifdef BOOST_INTERPROCESS_VECTOR_ALLOC_STATS
+ public:
+ unsigned int num_expand_fwd;
+ unsigned int num_expand_bwd;
+ unsigned int num_alloc;
+ void reset_alloc_stats()
+ { num_expand_fwd = num_expand_bwd = num_alloc = 0; }
+ #endif
    /// @endcond
 };
 

Modified: branches/fix-links/boost/interprocess/creation_tags.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/creation_tags.hpp (original)
+++ branches/fix-links/boost/interprocess/creation_tags.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/algorithms.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/algorithms.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/algorithms.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007.
+// (C) Copyright Ion Gaztanaga 2005-2008.
 //
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at

Modified: branches/fix-links/boost/interprocess/detail/atomic.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/atomic.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/atomic.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2006-2007
+// (C) Copyright Ion Gaztanaga 2006-2008
 // (C) Copyright Markus Schoepflin 2007
 //
 // Distributed under the Boost Software License, Version 1.0. (See

Modified: branches/fix-links/boost/interprocess/detail/cast_tags.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/cast_tags.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/cast_tags.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/config_begin.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/config_begin.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/config_begin.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -9,6 +9,7 @@
    #define _CRT_SECURE_NO_DEPRECATE
    #endif
    #pragma warning (push)
+ #pragma warning (disable : 4702) // unreachable code
    #pragma warning (disable : 4706) // assignment within conditional expression
    #pragma warning (disable : 4127) // conditional expression is constant
    #pragma warning (disable : 4146) // unary minus operator applied to unsigned type, result still unsigned

Modified: branches/fix-links/boost/interprocess/detail/in_place_interface.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/in_place_interface.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/in_place_interface.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/interprocess_tester.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/interprocess_tester.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/interprocess_tester.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2007-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/iterators.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/iterators.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/iterators.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007.
+// (C) Copyright Ion Gaztanaga 2005-2008.
 // (C) Copyright Gennaro Prota 2003 - 2004.
 //
 // Distributed under the Boost Software License, Version 1.0.
@@ -428,6 +428,12 @@
       operator->() const
    { return operator_arrow_proxy<typename UnaryFunction::result_type>(dereference()); }
 
+ Iterator & base()
+ { return m_it; }
+
+ const Iterator & base() const
+ { return m_it; }
+
    private:
    Iterator m_it;
 

Modified: branches/fix-links/boost/interprocess/detail/managed_memory_impl.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/managed_memory_impl.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/managed_memory_impl.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/math_functions.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/math_functions.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/math_functions.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 //////////////////////////////////////////////////////////////////////////////
 //
 // (C) Copyright Stephen Cleary 2000.
-// (C) Copyright Ion Gaztanaga 2007.
+// (C) Copyright Ion Gaztanaga 2007-2008.
 //
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at

Modified: branches/fix-links/boost/interprocess/detail/min_max.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/min_max.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/min_max.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007.
+// (C) Copyright Ion Gaztanaga 2005-2008.
 //
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at

Modified: branches/fix-links/boost/interprocess/detail/mpl.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/mpl.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/mpl.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007.
+// (C) Copyright Ion Gaztanaga 2005-2008.
 //
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at

Modified: branches/fix-links/boost/interprocess/detail/named_proxy.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/named_proxy.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/named_proxy.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/os_file_functions.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/os_file_functions.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/os_file_functions.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/os_thread_functions.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/os_thread_functions.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/os_thread_functions.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/pointer_type.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/pointer_type.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/pointer_type.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007.
+// (C) Copyright Ion Gaztanaga 2005-2008.
 // (C) Copyright Gennaro Prota 2003 - 2004.
 //
 // Distributed under the Boost Software License, Version 1.0.

Modified: branches/fix-links/boost/interprocess/detail/posix_time_types_wrk.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/posix_time_types_wrk.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/posix_time_types_wrk.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/segment_manager_helper.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/segment_manager_helper.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/segment_manager_helper.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/tmp_dir_helpers.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/tmp_dir_helpers.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/tmp_dir_helpers.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2007-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/type_traits.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/type_traits.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/type_traits.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 // (C) Copyright John Maddock 2000.
-// (C) Copyright Ion Gaztanaga 2005-2007.
+// (C) Copyright Ion Gaztanaga 2005-2008.
 //
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at

Modified: branches/fix-links/boost/interprocess/detail/utilities.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/utilities.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/utilities.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007.
+// (C) Copyright Ion Gaztanaga 2005-2008.
 // (C) Copyright Gennaro Prota 2003 - 2004.
 //
 // Distributed under the Boost Software License, Version 1.0.
@@ -25,6 +25,9 @@
 #include <boost/interprocess/detail/move.hpp>
 #include <boost/type_traits/has_trivial_destructor.hpp>
 #include <boost/interprocess/detail/min_max.hpp>
+#include <boost/interprocess/detail/type_traits.hpp>
+#include <boost/interprocess/detail/type_traits.hpp>
+#include <boost/interprocess/detail/version_type.hpp>
 #include <utility>
 #include <algorithm>
 
@@ -70,14 +73,27 @@
 struct scoped_ptr_dealloc_functor
 {
    typedef typename Allocator::pointer pointer;
+ typedef detail::integral_constant<unsigned,
+ boost::interprocess::detail::
+ version<Allocator>::value> alloc_version;
+ typedef detail::integral_constant<unsigned, 1> allocator_v1;
+ typedef detail::integral_constant<unsigned, 2> allocator_v2;
 
+ private:
+ void priv_deallocate(const typename Allocator::pointer &p, allocator_v1)
+ { m_alloc.deallocate(p, 1); }
+
+ void priv_deallocate(const typename Allocator::pointer &p, allocator_v2)
+ { m_alloc.deallocate_one(p); }
+
+ public:
    Allocator& m_alloc;
 
    scoped_ptr_dealloc_functor(Allocator& a)
- : m_alloc(a) {}
+ : m_alloc(a) {}
 
    void operator()(pointer ptr)
- { if (ptr) m_alloc.deallocate(ptr, 1); }
+ { if (ptr) priv_deallocate(ptr, alloc_version()); }
 };
 
 //!A deleter for scoped_ptr that deallocates the memory
@@ -86,7 +102,20 @@
 struct scoped_deallocator
 {
    typedef typename Allocator::pointer pointer;
+ typedef detail::integral_constant<unsigned,
+ boost::interprocess::detail::
+ version<Allocator>::value> alloc_version;
+ typedef detail::integral_constant<unsigned, 1> allocator_v1;
+ typedef detail::integral_constant<unsigned, 2> allocator_v2;
 
+ private:
+ void priv_deallocate(allocator_v1)
+ { m_alloc.deallocate(m_ptr, 1); }
+
+ void priv_deallocate(allocator_v2)
+ { m_alloc.deallocate_one(m_ptr); }
+
+ public:
    pointer m_ptr;
    Allocator& m_alloc;
 
@@ -94,7 +123,7 @@
       : m_ptr(p), m_alloc(a) {}
 
    ~scoped_deallocator()
- { if (m_ptr) m_alloc.deallocate(m_ptr, 1); }
+ { if (m_ptr)priv_deallocate(alloc_version()); }
 
    void release()
    { m_ptr = 0; }
@@ -189,9 +218,22 @@
 class allocator_destroyer
 {
    typedef typename A::value_type value_type;
+ typedef detail::integral_constant<unsigned,
+ boost::interprocess::detail::
+ version<A>::value> alloc_version;
+ typedef detail::integral_constant<unsigned, 1> allocator_v1;
+ typedef detail::integral_constant<unsigned, 2> allocator_v2;
+
    private:
    A & a_;
 
+ private:
+ void priv_deallocate(const typename A::pointer &p, allocator_v1)
+ { a_.deallocate(p, 1); }
+
+ void priv_deallocate(const typename A::pointer &p, allocator_v2)
+ { a_.deallocate_one(p); }
+
    public:
    allocator_destroyer(A &a)
       : a_(a)
@@ -200,35 +242,86 @@
    void operator()(const typename A::pointer &p)
    {
       detail::get_pointer(p)->~value_type();
- a_.deallocate(p, 1);
+ priv_deallocate(p, alloc_version());
    }
 };
 
-//!A class used for exception-safe multi-allocation + construction.
-template <class Allocator>
-struct multiallocation_deallocator
+template <class A>
+class allocator_destroyer_and_chain_builder
 {
- typedef typename Allocator::multiallocation_iterator multiallocation_iterator;
+ typedef typename A::value_type value_type;
+ typedef typename A::multiallocation_iterator multiallocation_iterator;
+ typedef typename A::multiallocation_chain multiallocation_chain;
 
- multiallocation_iterator m_itbeg;
- Allocator& m_alloc;
+ A & a_;
+ multiallocation_chain &c_;
 
- multiallocation_deallocator(multiallocation_iterator itbeg, Allocator& a)
- : m_itbeg(itbeg), m_alloc(a) {}
+ public:
+ allocator_destroyer_and_chain_builder(A &a, multiallocation_chain &c)
+ : a_(a), c_(c)
+ {}
 
- ~multiallocation_deallocator()
+ void operator()(const typename A::pointer &p)
+ {
+ value_type *vp = detail::get_pointer(p);
+ vp->~value_type();
+ c_.push_back(vp);
+ }
+};
+
+template <class A>
+class allocator_multialloc_chain_node_deallocator
+{
+ typedef typename A::value_type value_type;
+ typedef typename A::multiallocation_iterator multiallocation_iterator;
+ typedef typename A::multiallocation_chain multiallocation_chain;
+ typedef allocator_destroyer_and_chain_builder<A> chain_builder;
+
+ A & a_;
+ multiallocation_chain c_;
+
+ public:
+ allocator_multialloc_chain_node_deallocator(A &a)
+ : a_(a), c_()
+ {}
+
+ chain_builder get_chain_builder()
+ { return chain_builder(a_, c_); }
+
+ ~allocator_multialloc_chain_node_deallocator()
    {
- multiallocation_iterator endit;
- while(m_itbeg != endit){
- m_alloc.deallocate(&*m_itbeg, 1);
- ++m_itbeg;
- }
+ multiallocation_iterator it(c_.get_it());
+ if(it != multiallocation_iterator())
+ a_.deallocate_individual(it);
    }
-
- void increment()
- { ++m_itbeg; }
 };
 
+template <class A>
+class allocator_multialloc_chain_array_deallocator
+{
+ typedef typename A::value_type value_type;
+ typedef typename A::multiallocation_iterator multiallocation_iterator;
+ typedef typename A::multiallocation_chain multiallocation_chain;
+ typedef allocator_destroyer_and_chain_builder<A> chain_builder;
+
+ A & a_;
+ multiallocation_chain c_;
+
+ public:
+ allocator_multialloc_chain_array_deallocator(A &a)
+ : a_(a), c_()
+ {}
+
+ chain_builder get_chain_builder()
+ { return chain_builder(a_, c_); }
+
+ ~allocator_multialloc_chain_array_deallocator()
+ {
+ multiallocation_iterator it(c_.get_it());
+ if(it != multiallocation_iterator())
+ a_.deallocate_many(it);
+ }
+};
 
 //!A class used for exception-safe multi-allocation + construction.
 template <class Allocator>
@@ -577,6 +670,14 @@
 }
 #endif
 
+template<class T>
+struct cast_functor
+{
+ typedef typename detail::add_reference<T>::type result_type;
+ result_type operator()(char &ptr) const
+ { return *static_cast<T*>(static_cast<void*>(&ptr)); }
+};
+
 } //namespace detail {
 
 //!The pair is movable if any of its members is movable

Modified: branches/fix-links/boost/interprocess/detail/version_type.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/version_type.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/version_type.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/win32_api.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/win32_api.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/win32_api.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/detail/workaround.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/workaround.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/workaround.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -19,8 +19,8 @@
 
    #if defined(_POSIX_THREAD_PROCESS_SHARED)
    # if !((_XOPEN_VERSION >= 600) && (_POSIX_THREAD_PROCESS_SHARED - 0 <= 0))
- // Cygwin defines _POSIX_THREAD_PROCESS_SHARED but does not support it.
- // Mac Os X >= Leopard defines _POSIX_THREAD_PROCESS_SHARED but it does not seem to work
+ //Cygwin defines _POSIX_THREAD_PROCESS_SHARED but does not implement it.
+ //Mac Os X >= Leopard defines _POSIX_THREAD_PROCESS_SHARED but does not seems to work.
    # if !defined(__CYGWIN__) && !defined(__APPLE__)
    # define BOOST_INTERPROCESS_POSIX_PROCESS_SHARED
    # endif

Modified: branches/fix-links/boost/interprocess/errors.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/errors.hpp (original)
+++ branches/fix-links/boost/interprocess/errors.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/exceptions.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/exceptions.hpp (original)
+++ branches/fix-links/boost/interprocess/exceptions.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/file_mapping.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/file_mapping.hpp (original)
+++ branches/fix-links/boost/interprocess/file_mapping.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/indexes/flat_map_index.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/indexes/flat_map_index.hpp (original)
+++ branches/fix-links/boost/interprocess/indexes/flat_map_index.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/indexes/iset_index.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/indexes/iset_index.hpp (original)
+++ branches/fix-links/boost/interprocess/indexes/iset_index.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/indexes/iunordered_set_index.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/indexes/iunordered_set_index.hpp (original)
+++ branches/fix-links/boost/interprocess/indexes/iunordered_set_index.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/indexes/map_index.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/indexes/map_index.hpp (original)
+++ branches/fix-links/boost/interprocess/indexes/map_index.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/indexes/null_index.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/indexes/null_index.hpp (original)
+++ branches/fix-links/boost/interprocess/indexes/null_index.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/indexes/unordered_map_index.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/indexes/unordered_map_index.hpp (original)
+++ branches/fix-links/boost/interprocess/indexes/unordered_map_index.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/interprocess_fwd.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/interprocess_fwd.hpp (original)
+++ branches/fix-links/boost/interprocess/interprocess_fwd.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -129,13 +129,19 @@
 template<class T, class SegmentManager, std::size_t NodesPerChunk = 64>
 class cached_node_allocator;
 
-template<class T, class SegmentManager, std::size_t NodesPerChunk = 64, std::size_t MaxFreeChunks = 2>
+template<class T, class SegmentManager, std::size_t NodesPerChunk = 64, std::size_t MaxFreeChunks = 2
+ , unsigned char OverheadPercent = 5
+>
 class adaptive_pool;
 
-template<class T, class SegmentManager, std::size_t NodesPerChunk = 64, std::size_t MaxFreeChunks = 2>
+template<class T, class SegmentManager, std::size_t NodesPerChunk = 64, std::size_t MaxFreeChunks = 2
+ , unsigned char OverheadPercent = 5
+>
 class private_adaptive_pool;
 
-template<class T, class SegmentManager, std::size_t NodesPerChunk = 64, std::size_t MaxFreeChunks = 2>
+template<class T, class SegmentManager, std::size_t NodesPerChunk = 64, std::size_t MaxFreeChunks = 2
+ , unsigned char OverheadPercent = 5
+>
 class cached_adaptive_pool;
 
 
@@ -151,10 +157,10 @@
 //////////////////////////////////////////////////////////////////////////////
 
 //Single segment memory allocation algorithms
-template<class MutexFamily, class VoidMutex = void*>//offset_ptr<void> >
+template<class MutexFamily, class VoidMutex = offset_ptr<void> >
 class simple_seq_fit;
 
-template<class MutexFamily, class VoidMutex = offset_ptr<void> >
+template<class MutexFamily, class VoidMutex = offset_ptr<void>, std::size_t MemAlignment = 0>
 class rbtree_best_fit;
 
 //////////////////////////////////////////////////////////////////////////////

Modified: branches/fix-links/boost/interprocess/ipc/message_queue.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/ipc/message_queue.hpp (original)
+++ branches/fix-links/boost/interprocess/ipc/message_queue.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/managed_external_buffer.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/managed_external_buffer.hpp (original)
+++ branches/fix-links/boost/interprocess/managed_external_buffer.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -20,6 +20,7 @@
 #include <boost/interprocess/creation_tags.hpp>
 #include <boost/interprocess/detail/managed_memory_impl.hpp>
 #include <boost/interprocess/detail/move.hpp>
+#include <cassert>
 
 //!\file
 //!Describes a named user memory allocation user class.
@@ -49,6 +50,8 @@
    basic_managed_external_buffer
       (create_only_t, void *addr, std::size_t size)
    {
+ //Check if alignment is correct
+ assert((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - std::size_t(1u)))));
       if(!base_t::create_impl(addr, size)){
          throw interprocess_exception();
       }
@@ -58,6 +61,8 @@
    basic_managed_external_buffer
       (open_only_t, void *addr, std::size_t size)
    {
+ //Check if alignment is correct
+ assert((0 == (((std::size_t)addr) & (AllocationAlgorithm::Alignment - std::size_t(1u)))));
       if(!base_t::open_impl(addr, size)){
          throw interprocess_exception();
       }

Modified: branches/fix-links/boost/interprocess/managed_heap_memory.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/managed_heap_memory.hpp (original)
+++ branches/fix-links/boost/interprocess/managed_heap_memory.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/managed_mapped_file.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/managed_mapped_file.hpp (original)
+++ branches/fix-links/boost/interprocess/managed_mapped_file.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/managed_shared_memory.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/managed_shared_memory.hpp (original)
+++ branches/fix-links/boost/interprocess/managed_shared_memory.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/managed_windows_shared_memory.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/managed_windows_shared_memory.hpp (original)
+++ branches/fix-links/boost/interprocess/managed_windows_shared_memory.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/mapped_region.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/mapped_region.hpp (original)
+++ branches/fix-links/boost/interprocess/mapped_region.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/mem_algo/detail/mem_algo_common.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/mem_algo/detail/mem_algo_common.hpp (original)
+++ branches/fix-links/boost/interprocess/mem_algo/detail/mem_algo_common.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -104,6 +104,167 @@
    multi_allocation_next<VoidPointer> next_alloc_;
 };
 
+template<class VoidPointer>
+class basic_multiallocation_chain
+{
+ private:
+ basic_multiallocation_iterator<VoidPointer> it_;
+ VoidPointer last_mem_;
+ std::size_t num_mem_;
+
+ basic_multiallocation_chain(const basic_multiallocation_chain &);
+ basic_multiallocation_chain &operator=(const basic_multiallocation_chain &);
+
+ public:
+ typedef basic_multiallocation_iterator<VoidPointer> multiallocation_iterator;
+
+ basic_multiallocation_chain()
+ : it_(0), last_mem_(0), num_mem_(0)
+ {}
+
+ void push_back(void *mem)
+ {
+ typedef multi_allocation_next<VoidPointer> next_impl_t;
+ next_impl_t * tmp_mem = static_cast<next_impl_t*>(mem);
+
+ if(!this->last_mem_){
+ this->it_ = basic_multiallocation_iterator<VoidPointer>(tmp_mem);
+ }
+ else{
+ static_cast<next_impl_t*>(detail::get_pointer(this->last_mem_))->next_ = tmp_mem;
+ }
+ tmp_mem->next_ = 0;
+ this->last_mem_ = tmp_mem;
+ ++num_mem_;
+ }
+
+ void push_back(multiallocation_iterator it, std::size_t n)
+ {
+ typedef multi_allocation_next<VoidPointer> next_impl_t;
+ next_impl_t * tmp_mem = (next_impl_t*)(&*it);
+
+ if(!this->last_mem_){
+ this->it_ = it;
+ }
+ else{
+ static_cast<next_impl_t*>(detail::get_pointer(this->last_mem_))->next_ = tmp_mem;
+ }
+ tmp_mem->next_ = 0;
+ this->last_mem_ = tmp_mem;
+ ++num_mem_;
+ }
+
+ void push_front(void *mem)
+ {
+ typedef multi_allocation_next<VoidPointer> next_impl_t;
+
+ if(!this->last_mem_){
+ push_back(mem);
+ }
+ else{
+ next_impl_t * tmp_mem = static_cast<next_impl_t*>(mem);
+ next_impl_t * old_first = (next_impl_t*)(&*this->it_);
+ static_cast<next_impl_t*>(mem)->next_ = old_first;
+ this->it_ = basic_multiallocation_iterator<VoidPointer>(tmp_mem);
+ ++num_mem_;
+ }
+ }
+
+ void swap(basic_multiallocation_chain &other_chain)
+ {
+ std::swap(this->it_, other_chain.it_);
+ std::swap(this->last_mem_, other_chain.last_mem_);
+ std::swap(this->num_mem_, other_chain.num_mem_);
+ }
+
+ void splice_back(basic_multiallocation_chain &other_chain)
+ {
+ typedef multi_allocation_next<VoidPointer> next_impl_t;
+ multiallocation_iterator end_it;
+ multiallocation_iterator other_it = other_chain.get_it();
+ multiallocation_iterator this_it = this->get_it();
+ if(end_it == other_it){
+ return;
+ }
+ else if(end_it == other_it){
+ this->swap(other_chain);
+ }
+
+ static_cast<next_impl_t*>(detail::get_pointer(this->last_mem_))->next_
+ = (next_impl_t*)&*this->it_;
+ this->last_mem_ = other_chain.last_mem_;
+ this->num_mem_ += other_chain.num_mem_;
+ }
+
+ void *pop_front()
+ {
+ multiallocation_iterator itend;
+ if(this->it_ == itend){
+ this->last_mem_= 0;
+ this->num_mem_ = 0;
+ return 0;
+ }
+ else{
+ void *addr = &*it_;
+ ++it_;
+ --num_mem_;
+ if(!num_mem_){
+ this->last_mem_ = 0;
+ this->it_ = multiallocation_iterator();
+ }
+ return addr;
+ }
+ }
+
+ bool empty() const
+ { return !num_mem_; }
+
+ multiallocation_iterator get_it() const
+ { return it_; }
+
+ std::size_t size() const
+ { return num_mem_; }
+};
+
+template<class Allocator>
+class allocator_multiallocation_chain
+{
+ typedef typename detail::
+ pointer_to_other<typename Allocator::pointer, void>::type
+ void_ptr;
+
+ typedef typename Allocator::multiallocation_iterator multiallocation_iterator;
+ basic_multiallocation_chain<void_ptr> chain_;
+
+ public:
+
+ allocator_multiallocation_chain()
+ : chain_()
+ {}
+
+ void push_back(void *mem)
+ { chain_.push_back(mem); }
+
+ multiallocation_iterator get_it() const
+ { return multiallocation_iterator(chain_.get_it()); }
+};
+
+
+#define BOOST_MULTIALLOC_IT_CHAIN_INIT(IT_CHAIN) ((IT_CHAIN).it.next = 0, (IT_CHAIN).last_mem = 0)
+#define BOOST_MULTIALLOC_IT_CHAIN_ADD(IT_CHAIN, MEM)\
+ do{\
+ multialloc_it_t *____tmp_mem____ = (multialloc_it_t*)(MEM);\
+ if(!IT_CHAIN.last_mem){\
+ (IT_CHAIN).it.next = ____tmp_mem____;\
+ }else{\
+ ((multialloc_it_t*)(IT_CHAIN.last_mem))->next = ____tmp_mem____;\
+ }\
+ ____tmp_mem____->next = 0;\
+ IT_CHAIN.last_mem = ____tmp_mem____;\
+ }while(0)
+
+#define BOOST_MULTIALLOC_IT_CHAIN_IT(IT_CHAIN) ((IT_CHAIN).it)
+
 
 //!This class implements several allocation functions shared by different algorithms
 //!(aligned allocation, multiple allocation...).
@@ -125,6 +286,7 @@
    static const std::size_t AllocatedCtrlUnits = MemoryAlgorithm::AllocatedCtrlUnits;
    static const std::size_t BlockCtrlBytes = MemoryAlgorithm::BlockCtrlBytes;
    static const std::size_t BlockCtrlUnits = MemoryAlgorithm::BlockCtrlUnits;
+ static const std::size_t UsableByPreviousChunk = MemoryAlgorithm::UsableByPreviousChunk;
 
    static void assert_alignment(const void *ptr)
    { assert_alignment((std::size_t)ptr); }
@@ -165,10 +327,11 @@
    static void* allocate_aligned
       (MemoryAlgorithm *memory_algo, std::size_t nbytes, std::size_t alignment)
    {
+
       //Ensure power of 2
       if ((alignment & (alignment - std::size_t(1u))) != 0){
          //Alignment is not power of two
- BOOST_ASSERT((alignment & (alignment - std::size_t(1u))) != 0);
+ BOOST_ASSERT((alignment & (alignment - std::size_t(1u))) == 0);
          return 0;
       }
 
@@ -176,6 +339,9 @@
       if(alignment <= Alignment){
          return memory_algo->priv_allocate(allocate_new, nbytes, nbytes, real_size).first;
       }
+
+ if(nbytes > UsableByPreviousChunk)
+ nbytes -= UsableByPreviousChunk;
       
       //We can find a aligned portion if we allocate a chunk that has alignment
       //nbytes + alignment bytes or more.
@@ -191,7 +357,9 @@
       // | MBU |
       // -----------------------------------------------------
       std::size_t request =
- minimum_allocation + (2*MinBlockUnits*Alignment - AllocatedCtrlBytes);
+ minimum_allocation + (2*MinBlockUnits*Alignment - AllocatedCtrlBytes
+ //prevsize - UsableByPreviousChunk
+ );
 
       //Now allocate the buffer
       void *buffer = memory_algo->priv_allocate(allocate_new, request, request, real_size).first;
@@ -207,7 +375,8 @@
             max_value(ceil_units(nbytes) + AllocatedCtrlUnits, std::size_t(MinBlockUnits));
          //We can create a new block in the end of the segment
          if(old_size >= (first_min_units + MinBlockUnits)){
- block_ctrl *second = new((char*)first + Alignment*first_min_units) block_ctrl;
+ //block_ctrl *second = new((char*)first + Alignment*first_min_units) block_ctrl;
+ block_ctrl *second = (block_ctrl *)((char*)first + Alignment*first_min_units);
             first->m_size = first_min_units;
             second->m_size = old_size - first->m_size;
             BOOST_ASSERT(second->m_size >= MinBlockUnits);
@@ -285,6 +454,7 @@
       ,const std::size_t max_size, const std::size_t preferred_size
       ,std::size_t &received_size)
    {
+ (void)memory_algo;
       //Obtain the real block
       block_ctrl *block = memory_algo->priv_get_block(ptr);
       std::size_t old_block_units = block->m_size;
@@ -296,11 +466,11 @@
       assert_alignment(ptr);
 
       //Put this to a safe value
- received_size = (old_block_units - AllocatedCtrlUnits)*Alignment;
+ received_size = (old_block_units - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk;
 
       //Now translate it to Alignment units
- const std::size_t max_user_units = floor_units(max_size);
- const std::size_t preferred_user_units = ceil_units(preferred_size);
+ const std::size_t max_user_units = floor_units(max_size - UsableByPreviousChunk);
+ const std::size_t preferred_user_units = ceil_units(preferred_size - UsableByPreviousChunk);
 
       //Check if rounded max and preferred are possible correct
       if(max_user_units < preferred_user_units)
@@ -331,7 +501,7 @@
       }
 
       //Update new size
- received_size = shrunk_user_units*Alignment;
+ received_size = shrunk_user_units*Alignment + UsableByPreviousChunk;
       return true;
    }
 
@@ -350,22 +520,23 @@
       }
 
       //Check if the old size was just the shrunk size (no splitting)
- if((old_block_units - AllocatedCtrlUnits) == ceil_units(preferred_size))
+ if((old_block_units - AllocatedCtrlUnits) == ceil_units(preferred_size - UsableByPreviousChunk))
          return true;
 
       //Now we can just rewrite the size of the old buffer
- block->m_size = received_size/Alignment + AllocatedCtrlUnits;
+ block->m_size = (received_size-UsableByPreviousChunk)/Alignment + AllocatedCtrlUnits;
       BOOST_ASSERT(block->m_size >= BlockCtrlUnits);
- memory_algo->priv_mark_new_allocated_block(block);
 
       //We create the new block
- block_ctrl *new_block = new(reinterpret_cast<block_ctrl*>
- (detail::char_ptr_cast(block) + block->m_size*Alignment)) block_ctrl;
-
+// block_ctrl *new_block = new(reinterpret_cast<block_ctrl*>
+// (detail::char_ptr_cast(block) + block->m_size*Alignment)) block_ctrl;
+ block_ctrl *new_block = reinterpret_cast<block_ctrl*>
+ (detail::char_ptr_cast(block) + block->m_size*Alignment);
       //Write control data to simulate this new block was previously allocated
       //and deallocate it
       new_block->m_size = old_block_units - block->m_size;
       BOOST_ASSERT(new_block->m_size >= BlockCtrlUnits);
+ memory_algo->priv_mark_new_allocated_block(block);
       memory_algo->priv_mark_new_allocated_block(new_block);
       memory_algo->priv_deallocate(memory_algo->priv_get_user_buffer(new_block));
       return true;
@@ -401,11 +572,11 @@
       multi_allocation_next_ptr first = 0, previous = 0;
       std::size_t low_idx = 0;
       while(low_idx < n_elements){
- std::size_t total_bytes = total_request_units*Alignment - AllocatedCtrlBytes;
+ std::size_t total_bytes = total_request_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk;
          std::size_t min_allocation = (!sizeof_element)
             ? elem_units
             : memory_algo->priv_get_total_units(elem_sizes[low_idx]*sizeof_element);
- min_allocation = min_allocation*Alignment - AllocatedCtrlBytes;
+ min_allocation = min_allocation*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk;
 
          std::size_t received_size;
          std::pair<void *, bool> ret = memory_algo->priv_allocate
@@ -419,6 +590,7 @@
          char *block_address = (char*)block;
 
          std::size_t total_used_units = 0;
+// block_ctrl *prev_block = 0;
          while(total_used_units < received_units){
             if(sizeof_element){
                elem_units = memory_algo->priv_get_total_units(elem_sizes[low_idx]*sizeof_element);
@@ -428,7 +600,10 @@
                break;
             total_request_units -= elem_units;
             //This is the position where the new block must be created
- block_ctrl *new_block = new(block_address)block_ctrl;
+// if(prev_block)
+// memory_algo->priv_mark_new_allocated_block(prev_block);
+ block_ctrl *new_block = (block_ctrl *)(block_address);
+// block_ctrl *new_block = new(block_address)block_ctrl;
             assert_alignment(new_block);
 
             //The last block should take all the remaining space
@@ -446,7 +621,7 @@
                //split it obtaining a new free memory block do it.
                if((received_units - total_used_units) >= (elem_units + MemoryAlgorithm::BlockCtrlUnits)){
                   std::size_t shrunk_received;
- std::size_t shrunk_request = elem_units*Alignment - AllocatedCtrlBytes;
+ std::size_t shrunk_request = elem_units*Alignment - AllocatedCtrlBytes + UsableByPreviousChunk;
                   bool ret = shrink
                         (memory_algo
                         ,memory_algo->priv_get_user_buffer(new_block)
@@ -457,7 +632,7 @@
                   BOOST_ASSERT(ret);
                   //Some sanity checks
                   BOOST_ASSERT(shrunk_request == shrunk_received);
- BOOST_ASSERT(elem_units == (shrunk_request/Alignment + AllocatedCtrlUnits));
+ BOOST_ASSERT(elem_units == ((shrunk_request-UsableByPreviousChunk)/Alignment + AllocatedCtrlUnits));
                   //"new_block->m_size" must have been reduced to elem_units by "shrink"
                   BOOST_ASSERT(new_block->m_size == elem_units);
                   //Now update the total received units with the reduction
@@ -483,6 +658,7 @@
             }
             previous = p;
             ++low_idx;
+ //prev_block = new_block;
          }
          //Sanity check
          BOOST_ASSERT(total_used_units == received_units);

Modified: branches/fix-links/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp (original)
+++ branches/fix-links/boost/interprocess/mem_algo/detail/simple_seq_fit_impl.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -64,6 +64,8 @@
 
    typedef detail::basic_multiallocation_iterator
       <void_pointer> multiallocation_iterator;
+ typedef detail::basic_multiallocation_chain
+ <void_pointer> multiallocation_chain;
 
    private:
    class block_ctrl;
@@ -137,6 +139,9 @@
    //!Multiple element allocation, different size
    multiallocation_iterator allocate_many(const std::size_t *elem_sizes, std::size_t n_elements, std::size_t sizeof_element);
 
+ //!Multiple element deallocation
+ void deallocate_many(multiallocation_iterator it);
+
    /// @endcond
 
    //!Deallocates previously allocated bytes
@@ -170,8 +175,13 @@
                            std::size_t preferred_size,std::size_t &received_size,
                            T *reuse_ptr = 0);
 
+ std::pair<void *, bool>
+ raw_allocation_command (allocation_type command, std::size_t limit_size,
+ std::size_t preferred_size,std::size_t &received_size,
+ void *reuse_ptr = 0, std::size_t sizeof_object = 1);
+
    //!Returns the size of the buffer previously allocated pointed by ptr
- std::size_t size(void *ptr) const;
+ std::size_t size(const void *ptr) const;
 
    //!Allocates aligned bytes, returns 0 if there is not more memory.
    //!Alignment must be power of 2
@@ -247,13 +257,16 @@
 
    void priv_mark_new_allocated_block(block_ctrl *block);
 
+ public:
    static const std::size_t Alignment = detail::alignment_of<detail::max_align>::value;
+ private:
    static const std::size_t BlockCtrlBytes = detail::ct_rounded_size<sizeof(block_ctrl), Alignment>::value;
    static const std::size_t BlockCtrlUnits = BlockCtrlBytes/Alignment;
    static const std::size_t MinBlockUnits = BlockCtrlUnits;
    static const std::size_t MinBlockSize = MinBlockUnits*Alignment;
    static const std::size_t AllocatedCtrlBytes = BlockCtrlBytes;
    static const std::size_t AllocatedCtrlUnits = BlockCtrlUnits;
+ static const std::size_t UsableByPreviousChunk = 0;
 
    public:
    static const std::size_t PayloadPerAllocation = BlockCtrlBytes;
@@ -549,19 +562,34 @@
                         std::size_t preferred_size,std::size_t &received_size,
                         T *reuse_ptr)
 {
- if(command & try_shrink_in_place){
- bool success =
- algo_impl_t::try_shrink(this, reuse_ptr, limit_size, preferred_size, received_size);
- return std::pair<T *, bool> ((success ? reuse_ptr : 0), true);
- }
    std::pair<void*, bool> ret = priv_allocation_command
       (command, limit_size, preferred_size, received_size, reuse_ptr, sizeof(T));
+
    BOOST_ASSERT(0 == ((std::size_t)ret.first % detail::alignment_of<T>::value));
    return std::pair<T *, bool>(static_cast<T*>(ret.first), ret.second);
 }
 
 template<class MutexFamily, class VoidPointer>
 inline std::pair<void*, bool> simple_seq_fit_impl<MutexFamily, VoidPointer>::
+ raw_allocation_command (allocation_type command, std::size_t limit_objects,
+ std::size_t preferred_objects,std::size_t &received_objects,
+ void *reuse_ptr, std::size_t sizeof_object)
+{
+ if(!sizeof_object)
+ return std::pair<void *, bool>(0, 0);
+ if(command & try_shrink_in_place){
+ bool success = algo_impl_t::try_shrink
+ ( this, reuse_ptr, limit_objects*sizeof_object
+ , preferred_objects*sizeof_object, received_objects);
+ received_objects /= sizeof_object;
+ return std::pair<void *, bool> ((success ? reuse_ptr : 0), true);
+ }
+ return priv_allocation_command
+ (command, limit_objects, preferred_objects, received_objects, reuse_ptr, sizeof_object);
+}
+
+template<class MutexFamily, class VoidPointer>
+inline std::pair<void*, bool> simple_seq_fit_impl<MutexFamily, VoidPointer>::
    priv_allocation_command (allocation_type command, std::size_t limit_size,
                        std::size_t preferred_size, std::size_t &received_size,
                        void *reuse_ptr, std::size_t sizeof_object)
@@ -589,13 +617,13 @@
 
 template<class MutexFamily, class VoidPointer>
 inline std::size_t simple_seq_fit_impl<MutexFamily, VoidPointer>::
- size(void *ptr) const
+ size(const void *ptr) const
 {
    //We need no synchronization since this block is not going
    //to be modified
    //Obtain the real size of the block
    block_ctrl *block = reinterpret_cast<block_ctrl*>
- (priv_get_block(detail::char_ptr_cast(ptr)));
+ (priv_get_block(detail::char_ptr_cast(const_cast<void*>(ptr))));
    return block->get_user_bytes();
 }
 
@@ -690,6 +718,20 @@
 }
 
 template<class MutexFamily, class VoidPointer>
+inline void simple_seq_fit_impl<MutexFamily, VoidPointer>::
+ deallocate_many(typename simple_seq_fit_impl<MutexFamily, VoidPointer>::multiallocation_iterator it)
+{
+ //-----------------------
+ boost::interprocess::scoped_lock<interprocess_mutex> guard(m_header);
+ //-----------------------
+ while(it){
+ void *addr = &*it;
+ ++it;
+ this->priv_deallocate(addr);
+ }
+}
+
+template<class MutexFamily, class VoidPointer>
 inline typename simple_seq_fit_impl<MutexFamily, VoidPointer>::multiallocation_iterator
    simple_seq_fit_impl<MutexFamily, VoidPointer>::
    allocate_many(const std::size_t *elem_sizes, std::size_t n_elements, std::size_t sizeof_element)

Modified: branches/fix-links/boost/interprocess/mem_algo/rbtree_best_fit.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/mem_algo/rbtree_best_fit.hpp (original)
+++ branches/fix-links/boost/interprocess/mem_algo/rbtree_best_fit.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -60,7 +60,7 @@
 
 //!This class implements an algorithm that stores the free nodes in a red-black tree
 //!to have logarithmic search/insert times.
-template<class MutexFamily, class VoidPointer>
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
 class rbtree_best_fit
 {
    /// @cond
@@ -77,6 +77,8 @@
    typedef VoidPointer void_pointer;
    typedef detail::basic_multiallocation_iterator
       <void_pointer> multiallocation_iterator;
+ typedef detail::basic_multiallocation_chain
+ <void_pointer> multiallocation_chain;
 
    /// @cond
 
@@ -106,9 +108,9 @@
    {
       //!This block's memory size (including block_ctrl
       //!header) in Alignment units
- std::size_t m_prev_size : sizeof(std::size_t)*CHAR_BIT - 1;
- std::size_t m_end : 1;
- std::size_t m_size : sizeof(std::size_t)*CHAR_BIT - 1;
+ std::size_t m_prev_size : sizeof(std::size_t)*CHAR_BIT;
+ std::size_t m_size : sizeof(std::size_t)*CHAR_BIT - 2;
+ std::size_t m_prev_allocated : 1;
       std::size_t m_allocated : 1;
    };
 
@@ -117,7 +119,7 @@
       : public SizeHolder, public TreeHook
    {
       block_ctrl()
- { this->m_end = 0; this->m_size = 0; this->m_allocated = 0; }
+ { this->m_size = 0; this->m_allocated = 0, this->m_prev_allocated = 0; }
 
       friend bool operator<(const block_ctrl &a, const block_ctrl &b)
       { return a.m_size < b.m_size; }
@@ -195,6 +197,9 @@
    //!Multiple element allocation, different size
    multiallocation_iterator allocate_many(const std::size_t *elem_sizes, std::size_t n_elements, std::size_t sizeof_element);
 
+ //!Multiple element allocation, different size
+ void deallocate_many(multiallocation_iterator it);
+
    /// @endcond
 
    //!Deallocates previously allocated bytes
@@ -230,6 +235,11 @@
                            std::size_t preferred_size,std::size_t &received_size,
                            T *reuse_ptr = 0);
 
+ std::pair<void *, bool>
+ raw_allocation_command (allocation_type command, std::size_t limit_object,
+ std::size_t preferred_object,std::size_t &received_object,
+ void *reuse_ptr = 0, std::size_t sizeof_object = 1);
+
    //!Returns the size of the buffer previously allocated pointed by ptr
    std::size_t size(const void *ptr) const;
 
@@ -279,17 +289,14 @@
                                ,bool only_preferred_backwards
                                ,std::size_t backwards_multiple);
 
- //!Set the size in the tail of the block
- void priv_tail_size(block_ctrl *ptr, std::size_t size);
+ //!Get poitner of the previous block (previous block must be free)
+ block_ctrl * priv_prev_block(block_ctrl *ptr);
 
- //!Real private aligned allocation function
- //void* priv_allocate_aligned (std::size_t nbytes, std::size_t alignment);
+ //!Returns true if the previous block is allocated
+ bool priv_is_prev_allocated(block_ctrl *ptr);
 
- //!Get the size in the tail of the block
- std::size_t priv_tail_size(block_ctrl *ptr);
-
- //!Get the size in the tail of the previous block
- block_ctrl * priv_prev_block(block_ctrl *ptr);
+ //!Get a pointer of the "end" block from the first block of the segment
+ block_ctrl * priv_end_block(block_ctrl *first_segment_block);
 
    //!Get the size in the tail of the previous block
    block_ctrl * priv_next_block(block_ctrl *ptr);
@@ -316,44 +323,50 @@
 
    void priv_mark_new_allocated_block(block_ctrl *block);
 
- static const std::size_t Alignment = detail::alignment_of<detail::max_align>::value;
+ public:
+
+ static const std::size_t Alignment = !MemAlignment
+ ? detail::alignment_of<detail::max_align>::value
+ : MemAlignment
+ ;
+
+ private:
    //Due to embedded bits in size, Alignment must be at least 2
- BOOST_STATIC_ASSERT((Alignment >= 2));
+ BOOST_STATIC_ASSERT((Alignment >= 4));
    //Due to rbtree size optimizations, Alignment must have at least pointer alignment
    BOOST_STATIC_ASSERT((Alignment >= detail::alignment_of<void_pointer>::value));
    static const std::size_t AlignmentMask = (Alignment - 1);
    static const std::size_t BlockCtrlBytes = detail::ct_rounded_size<sizeof(block_ctrl), Alignment>::value;
    static const std::size_t BlockCtrlUnits = BlockCtrlBytes/Alignment;
- static const std::size_t AllocatedCtrlBytes = detail::ct_rounded_size<sizeof(SizeHolder), Alignment>::value;
- static const std::size_t AllocatedCtrlUnits = AllocatedCtrlBytes/Alignment;
+ static const std::size_t AllocatedCtrlBytes = detail::ct_rounded_size<sizeof(SizeHolder), Alignment>::value;
+ static const std::size_t AllocatedCtrlUnits = AllocatedCtrlBytes/Alignment;
    static const std::size_t EndCtrlBlockBytes = detail::ct_rounded_size<sizeof(SizeHolder), Alignment>::value;
- static const std::size_t EndCtrlBlockUnits = EndCtrlBlockBytes/Alignment;
- static const std::size_t MinBlockUnits = BlockCtrlUnits;
+ static const std::size_t EndCtrlBlockUnits = EndCtrlBlockBytes/Alignment;
+ static const std::size_t MinBlockUnits = BlockCtrlUnits;
+ static const std::size_t UsableByPreviousChunk = sizeof(std::size_t);
 
    //Make sure the maximum alignment is power of two
    BOOST_STATIC_ASSERT((0 == (Alignment & (Alignment - std::size_t(1u)))));
    /// @endcond
    public:
- static const std::size_t PayloadPerAllocation = AllocatedCtrlBytes;
+ static const std::size_t PayloadPerAllocation = AllocatedCtrlBytes - UsableByPreviousChunk;
 };
 
-template<class MutexFamily, class VoidPointer>
-inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer>
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>
    ::priv_first_block_offset(const void *this_ptr, std::size_t extra_hdr_bytes)
 {
- //First align "this" pointer
- std::size_t uint_this = (std::size_t)this_ptr;
- std::size_t uint_aligned_this = uint_this/Alignment*Alignment;
- std::size_t this_disalignment = (uint_this - uint_aligned_this);
- std::size_t block1_off =
- detail::get_rounded_size(sizeof(rbtree_best_fit) + extra_hdr_bytes + this_disalignment, Alignment)
- - this_disalignment;
- algo_impl_t::assert_alignment(this_disalignment + block1_off);
+ std::size_t uint_this = (std::size_t)this_ptr;
+ std::size_t main_hdr_end = uint_this + sizeof(rbtree_best_fit) + extra_hdr_bytes;
+ std::size_t aligned_main_hdr_end = detail::get_rounded_size(main_hdr_end, Alignment);
+ std::size_t block1_off = aligned_main_hdr_end - uint_this;
+ algo_impl_t::assert_alignment(aligned_main_hdr_end);
+ algo_impl_t::assert_alignment(uint_this + block1_off);
    return block1_off;
 }
 
-template<class MutexFamily, class VoidPointer>
-inline rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    rbtree_best_fit(std::size_t size, std::size_t extra_hdr_bytes)
 {
    //Initialize the header
@@ -368,26 +381,25 @@
    priv_add_segment(detail::char_ptr_cast(this) + block1_off, size - block1_off);
 }
 
-template<class MutexFamily, class VoidPointer>
-inline rbtree_best_fit<MutexFamily, VoidPointer>::~rbtree_best_fit()
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::~rbtree_best_fit()
 {
    //There is a memory leak!
 // assert(m_header.m_allocated == 0);
 // assert(m_header.m_root.m_next->m_next == block_ctrl_ptr(&m_header.m_root));
 }
 
-template<class MutexFamily, class VoidPointer>
-void rbtree_best_fit<MutexFamily, VoidPointer>::grow(std::size_t extra_size)
-{
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::grow(std::size_t extra_size)
+{
    //Get the address of the first block
    std::size_t block1_off =
       priv_first_block_offset(this, m_header.m_extra_hdr_bytes);
 
    block_ctrl *first_block = reinterpret_cast<block_ctrl *>
                                  (detail::char_ptr_cast(this) + block1_off);
- block_ctrl *old_end_block = priv_prev_block(first_block);
+ block_ctrl *old_end_block = priv_end_block(first_block);
    assert(priv_is_allocated_block(old_end_block));
- assert(old_end_block->m_end);
    std::size_t old_border_offset = (detail::char_ptr_cast(old_end_block) -
                                     detail::char_ptr_cast(this)) + EndCtrlBlockBytes;
 
@@ -406,18 +418,16 @@
       (detail::char_ptr_cast(old_end_block) + align_offset*Alignment);
    new_end_block->m_size = (detail::char_ptr_cast(first_block) -
                                  detail::char_ptr_cast(new_end_block))/Alignment;
+ first_block->m_prev_size = new_end_block->m_size;
    assert(first_block == priv_next_block(new_end_block));
- new_end_block->m_end = 1;
    priv_mark_new_allocated_block(new_end_block);
-
- assert(new_end_block == priv_prev_block(first_block));
+
+ assert(new_end_block == priv_end_block(first_block));
 
    //The old end block is the new block
- std::size_t old_end_prev = old_end_block->m_prev_size;
- block_ctrl *new_block = new(old_end_block)block_ctrl;
+ block_ctrl *new_block = old_end_block;
    new_block->m_size = (detail::char_ptr_cast(new_end_block) -
                         detail::char_ptr_cast(new_block))/Alignment;
- new_block->m_prev_size = old_end_prev;
    assert(new_block->m_size >= BlockCtrlUnits);
    priv_mark_new_allocated_block(new_block);
    assert(priv_next_block(new_block) == new_end_block);
@@ -428,8 +438,8 @@
    this->priv_deallocate(priv_get_user_buffer(new_block));
 }
 
-template<class MutexFamily, class VoidPointer>
-void rbtree_best_fit<MutexFamily, VoidPointer>::shrink_to_fit()
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::shrink_to_fit()
 {
    //Get the address of the first block
    std::size_t block1_off =
@@ -439,32 +449,36 @@
                                  (detail::char_ptr_cast(this) + block1_off);
    algo_impl_t::assert_alignment(first_block);
 
- block_ctrl *old_end_block = priv_prev_block(first_block);
+ block_ctrl *old_end_block = priv_end_block(first_block);
    algo_impl_t::assert_alignment(old_end_block);
    assert(priv_is_allocated_block(old_end_block));
- assert(old_end_block->m_end);
 
- block_ctrl *last_block = priv_prev_block(old_end_block);
    algo_impl_t::assert_alignment(old_end_block);
 
- std::size_t old_end_block_size = old_end_block->m_size;
+ std::size_t old_end_block_size = old_end_block->m_size;
 
- void *unique_block = 0;
- if(last_block == first_block){
+ void *unique_buffer = 0;
+ block_ctrl *last_block;
+ if(priv_next_block(first_block) == old_end_block){
       std::size_t ignore;
- unique_block = priv_allocate(allocate_new, 0, 0, ignore).first;
- if(!unique_block)
+ unique_buffer = priv_allocate(allocate_new, 0, 0, ignore).first;
+ if(!unique_buffer)
          return;
+ algo_impl_t::assert_alignment(unique_buffer);
+ block_ctrl *unique_block = priv_get_block(unique_buffer);
+ assert(priv_is_allocated_block(unique_block));
       algo_impl_t::assert_alignment(unique_block);
- last_block = priv_prev_block(old_end_block);
+ last_block = priv_next_block(unique_block);
+ assert(!priv_is_allocated_block(last_block));
       algo_impl_t::assert_alignment(last_block);
    }
+ else{
+ if(priv_is_prev_allocated(old_end_block))
+ return;
+ last_block = priv_prev_block(old_end_block);
+ }
 
- //The last block must be free to be able to shrink
- if(priv_is_allocated_block(last_block))
- return;
-
- std::size_t last_block_size = last_block->m_size;
+ std::size_t last_block_size = last_block->m_size;
 
    //Erase block from the free tree, since we will erase it
    m_header.m_imultiset.erase(Imultiset::s_iterator_to(*last_block));
@@ -474,20 +488,23 @@
    
    block_ctrl *new_end_block = last_block;
    algo_impl_t::assert_alignment(new_end_block);
- priv_mark_as_allocated_block(new_end_block);
- new_end_block->m_end = 1;
    new_end_block->m_size = old_end_block_size + last_block_size;
- priv_tail_size(new_end_block, new_end_block->m_size);
- assert(priv_prev_block(first_block) == new_end_block);
+ priv_mark_as_allocated_block(new_end_block);
+
+ //Although the first block might be allocated, we'll
+ //store the offset to the end block since in the previous
+ //offset can't be overwritten by a previous block
+ first_block->m_prev_size = new_end_block->m_size;
+ assert(priv_end_block(first_block) == new_end_block);
 
    //Update managed buffer's size
    m_header.m_size = shrunk_border_offset;
- if(unique_block)
- priv_deallocate(unique_block);
+ if(unique_buffer)
+ priv_deallocate(unique_buffer);
 }
 
-template<class MutexFamily, class VoidPointer>
-void rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    priv_add_segment(void *addr, std::size_t size)
 {
    //Check alignment
@@ -506,17 +523,15 @@
          (detail::char_ptr_cast(addr) + first_big_block->m_size*Alignment))SizeHolder);
 
    //This will overwrite the prev part of the "end" node
- priv_tail_size(first_big_block, first_big_block->m_size);
    priv_mark_as_free_block (first_big_block);
    first_big_block->m_prev_size = end_block->m_size =
       (detail::char_ptr_cast(first_big_block) - detail::char_ptr_cast(end_block))/Alignment;
- end_block->m_end = 1;
- end_block->m_allocated = 1;
+ priv_mark_as_allocated_block(end_block);
 
    assert(priv_next_block(first_big_block) == end_block);
- assert(priv_prev_block(end_block) == first_big_block);
    assert(priv_next_block(end_block) == first_big_block);
- assert(priv_prev_block(first_big_block) == end_block);
+ assert(priv_end_block(first_big_block) == end_block);
+ assert(priv_prev_block(end_block) == first_big_block);
 
    //Some check to validate the algorithm, since it makes some assumptions
    //to optimize the space wasted in bookkeeping:
@@ -530,27 +545,24 @@
    m_header.m_imultiset.insert(*first_big_block);
 }
 
-template<class MutexFamily, class VoidPointer>
-inline void rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    priv_mark_new_allocated_block(block_ctrl *new_block)
-{
- priv_tail_size(new_block, new_block->m_size);
- priv_mark_as_allocated_block(new_block);
-}
+{ priv_mark_as_allocated_block(new_block); }
 
-template<class MutexFamily, class VoidPointer>
-inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer>::get_size() const
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::get_size() const
 { return m_header.m_size; }
 
-template<class MutexFamily, class VoidPointer>
-inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer>::get_free_memory() const
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::get_free_memory() const
 {
    return m_header.m_size - m_header.m_allocated -
       priv_first_block_offset(this, m_header.m_extra_hdr_bytes);
 }
 
-template<class MutexFamily, class VoidPointer>
-inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    get_min_size (std::size_t extra_hdr_bytes)
 {
    return (algo_impl_t::ceil_units(sizeof(rbtree_best_fit)) +
@@ -558,8 +570,8 @@
            MinBlockUnits + EndCtrlBlockUnits)*Alignment;
 }
 
-template<class MutexFamily, class VoidPointer>
-inline bool rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline bool rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
     all_memory_deallocated()
 {
    //-----------------------
@@ -575,8 +587,8 @@
          (m_header.m_size - block1_off - EndCtrlBlockBytes)/Alignment;
 }
 
-template<class MutexFamily, class VoidPointer>
-bool rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+bool rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
     check_sanity()
 {
    //-----------------------
@@ -609,8 +621,8 @@
    return true;
 }
 
-template<class MutexFamily, class VoidPointer>
-inline void* rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline void* rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    allocate(std::size_t nbytes)
 {
    //-----------------------
@@ -621,8 +633,8 @@
    return ret;
 }
 
-template<class MutexFamily, class VoidPointer>
-inline void* rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline void* rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    allocate_aligned(std::size_t nbytes, std::size_t alignment)
 {
    //-----------------------
@@ -631,26 +643,42 @@
    return algo_impl_t::allocate_aligned(this, nbytes, alignment);
 }
 
-template<class MutexFamily, class VoidPointer>
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
 template<class T>
-inline std::pair<T*, bool> rbtree_best_fit<MutexFamily, VoidPointer>::
+inline std::pair<T*, bool> rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    allocation_command (allocation_type command, std::size_t limit_size,
                         std::size_t preferred_size,std::size_t &received_size,
                         T *reuse_ptr)
 {
- if(command & try_shrink_in_place){
- bool success =
- algo_impl_t::try_shrink(this, reuse_ptr, limit_size, preferred_size, received_size);
- return std::pair<T *, bool> ((success ? reuse_ptr : 0), true);
- }
    std::pair<void*, bool> ret = priv_allocation_command
       (command, limit_size, preferred_size, received_size, reuse_ptr, sizeof(T));
+
    BOOST_ASSERT(0 == ((std::size_t)ret.first % detail::alignment_of<T>::value));
    return std::pair<T *, bool>(static_cast<T*>(ret.first), ret.second);
 }
 
-template<class MutexFamily, class VoidPointer>
-inline std::pair<void*, bool> rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline std::pair<void*, bool> rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
+ raw_allocation_command (allocation_type command, std::size_t limit_objects,
+ std::size_t preferred_objects,std::size_t &received_objects,
+ void *reuse_ptr, std::size_t sizeof_object)
+{
+ if(!sizeof_object)
+ return std::pair<void *, bool>(0, 0);
+ if(command & try_shrink_in_place){
+ bool success = algo_impl_t::try_shrink
+ ( this, reuse_ptr, limit_objects*sizeof_object
+ , preferred_objects*sizeof_object, received_objects);
+ received_objects /= sizeof_object;
+ return std::pair<void *, bool> ((success ? reuse_ptr : 0), true);
+ }
+ return priv_allocation_command
+ (command, limit_objects, preferred_objects, received_objects, reuse_ptr, sizeof_object);
+}
+
+
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline std::pair<void*, bool> rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    priv_allocation_command (allocation_type command, std::size_t limit_size,
                        std::size_t preferred_size,std::size_t &received_size,
                        void *reuse_ptr, std::size_t sizeof_object)
@@ -673,18 +701,18 @@
    return ret;
 }
 
-template<class MutexFamily, class VoidPointer>
-inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline std::size_t rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    size(const void *ptr) const
 {
    //We need no synchronization since this block's size is not going
    //to be modified by anyone else
    //Obtain the real size of the block
- return (priv_get_block(ptr)->m_size - AllocatedCtrlUnits)*Alignment;
+ return (priv_get_block(ptr)->m_size - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk;
 }
 
-template<class MutexFamily, class VoidPointer>
-inline void rbtree_best_fit<MutexFamily, VoidPointer>::zero_free_memory()
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::zero_free_memory()
 {
    //-----------------------
    boost::interprocess::scoped_lock<interprocess_mutex> guard(m_header);
@@ -700,8 +728,8 @@
    }
 }
 
-template<class MutexFamily, class VoidPointer>
-void* rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+void* rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    priv_expand_both_sides(allocation_type command
                          ,std::size_t min_size
                          ,std::size_t preferred_size
@@ -717,7 +745,7 @@
    }
    else{
       received_size = this->size(reuse_ptr);
- if(received_size >= preferred_size)
+ if(received_size >= preferred_size || received_size >= min_size)
          return reuse_ptr;
    }
 
@@ -731,18 +759,21 @@
       block_ctrl *reuse = priv_get_block(reuse_ptr);
 
       //Sanity check
- assert(reuse->m_size == priv_tail_size(reuse));
+ //assert(reuse->m_size == priv_tail_size(reuse));
       algo_impl_t::assert_alignment(reuse);
 
       block_ctrl *prev_block;
 
       //If the previous block is not free, there is nothing to do
- if(priv_is_allocated_block(prev_block = priv_prev_block(reuse))){
+ if(priv_is_prev_allocated(reuse)){
          return 0;
       }
 
+ prev_block = priv_prev_block(reuse);
+ assert(!priv_is_allocated_block(prev_block));
+
       //Some sanity checks
- assert(prev_block->m_size == priv_tail_size(prev_block));
+ assert(prev_block->m_size == reuse->m_prev_size);
       algo_impl_t::assert_alignment(prev_block);
 
       //Let's calculate the number of extra bytes of data before the current
@@ -769,32 +800,41 @@
       if(std::size_t(prev_block->m_size*Alignment) >= needs_backwards_aligned){
          //Now take all next space. This will succeed
          if(command & expand_fwd){
- if(!priv_expand(reuse_ptr, received_size, received_size, received_size)){
+ std::size_t received_size2;
+ if(!priv_expand(reuse_ptr, received_size, received_size, received_size2)){
                assert(0);
             }
+ assert(received_size = received_size2);
          }
          //We need a minimum size to split the previous one
          if(prev_block->m_size >= (needs_backwards_aligned/Alignment + BlockCtrlUnits)){
             block_ctrl *new_block = reinterpret_cast<block_ctrl *>
                (detail::char_ptr_cast(reuse) - needs_backwards_aligned);
 
- //Erase old previous block, since we will change it
- m_header.m_imultiset.erase(Imultiset::s_iterator_to(*prev_block));
-
             //Free old previous buffer
             new_block->m_size =
- AllocatedCtrlUnits + (needs_backwards_aligned + received_size)/Alignment;
+ AllocatedCtrlUnits + (needs_backwards_aligned + (received_size - UsableByPreviousChunk))/Alignment;
             assert(new_block->m_size >= BlockCtrlUnits);
             priv_mark_new_allocated_block(new_block);
 
             prev_block->m_size = (detail::char_ptr_cast(new_block) -
                                   detail::char_ptr_cast(prev_block))/Alignment;
             assert(prev_block->m_size >= BlockCtrlUnits);
- priv_tail_size(prev_block, prev_block->m_size);
             priv_mark_as_free_block(prev_block);
 
- //Insert the remaining previous block in the free tree
- m_header.m_imultiset.insert( m_header.m_imultiset.begin(), *prev_block);
+ //Update the old previous block in the free chunks tree
+ //If the new size fulfills tree invariants do nothing,
+ //otherwise erase() + insert()
+ {
+ imultiset_iterator prev_block_it(Imultiset::s_iterator_to(*prev_block));
+ imultiset_iterator was_smaller_it(prev_block_it);
+ if(prev_block_it != m_header.m_imultiset.begin() &&
+ (--(was_smaller_it = prev_block_it))->m_size > prev_block->m_size){
+ m_header.m_imultiset.erase(prev_block_it);
+ m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *prev_block);
+ }
+ }
+
             received_size = needs_backwards_aligned + received_size;
             m_header.m_allocated += needs_backwards_aligned;
          
@@ -812,14 +852,15 @@
          //Check if there is no place to create a new block and
          //the whole new block is multiple of the backwards expansion multiple
          else if(prev_block->m_size >= needs_backwards_aligned/Alignment &&
- 0 == (prev_block->m_size % lcm)) {
+ 0 == ((prev_block->m_size*Alignment) % lcm)) {
             //Erase old previous block, since we will change it
             m_header.m_imultiset.erase(Imultiset::s_iterator_to(*prev_block));
 
             //Just merge the whole previous block
- const std::size_t needs_backwards_aligned = prev_block->m_size*Alignment;
- const std::size_t needs_backwards = detail::get_truncated_size(needs_backwards_aligned, backwards_multiple);
- received_size = received_size/backwards_multiple*backwards_multiple + needs_backwards;
+ needs_backwards = detail::get_truncated_size
+ (prev_block->m_size*Alignment, backwards_multiple);
+ //received_size = received_size/backwards_multiple*backwards_multiple + needs_backwards;
+ received_size = received_size + needs_backwards;
 
             m_header.m_allocated += prev_block->m_size*Alignment;
             //Now update sizes
@@ -843,9 +884,9 @@
    return 0;
 }
 
-template<class MutexFamily, class VoidPointer>
-inline typename rbtree_best_fit<MutexFamily, VoidPointer>::multiallocation_iterator
- rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::multiallocation_iterator
+ rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    allocate_many(std::size_t elem_bytes, std::size_t num_elements)
 {
    //-----------------------
@@ -854,9 +895,23 @@
    return algo_impl_t::allocate_many(this, elem_bytes, num_elements);
 }
 
-template<class MutexFamily, class VoidPointer>
-inline typename rbtree_best_fit<MutexFamily, VoidPointer>::multiallocation_iterator
- rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
+ deallocate_many(typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::multiallocation_iterator it)
+{
+ //-----------------------
+ boost::interprocess::scoped_lock<interprocess_mutex> guard(m_header);
+ //-----------------------
+ while(it){
+ void *addr = &*it;
+ ++it;
+ this->priv_deallocate(addr);
+ }
+}
+
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+inline typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::multiallocation_iterator
+ rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    allocate_many(const std::size_t *elem_sizes, std::size_t n_elements, std::size_t sizeof_element)
 {
    //-----------------------
@@ -865,8 +920,8 @@
    return algo_impl_t::allocate_many(this, elem_sizes, n_elements, sizeof_element);
 }
 
-template<class MutexFamily, class VoidPointer>
-std::pair<void *, bool> rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+std::pair<void *, bool> rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    priv_allocate(allocation_type command
                 ,std::size_t limit_size
                 ,std::size_t preferred_size
@@ -929,32 +984,34 @@
    return return_type(0, false);
 }
 
-template<class MutexFamily, class VoidPointer>
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
 inline
-typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *
- rbtree_best_fit<MutexFamily, VoidPointer>::priv_get_block(const void *ptr)
+typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *
+ rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_get_block(const void *ptr)
 {
    return reinterpret_cast<block_ctrl*>(detail::char_ptr_cast(ptr) - AllocatedCtrlBytes);
 }
 
-template<class MutexFamily, class VoidPointer>
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
 inline
-void *rbtree_best_fit<MutexFamily, VoidPointer>::
- priv_get_user_buffer(const typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *block)
+void *rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
+ priv_get_user_buffer(const typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *block)
 { return detail::char_ptr_cast(block) + AllocatedCtrlBytes; }
 
-template<class MutexFamily, class VoidPointer>
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
 inline
-std::size_t rbtree_best_fit<MutexFamily, VoidPointer>::
+std::size_t rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    priv_get_total_units(std::size_t userbytes)
 {
- std::size_t units = detail::get_rounded_size(userbytes, Alignment)/Alignment + AllocatedCtrlUnits;
+ if(userbytes < UsableByPreviousChunk)
+ userbytes = UsableByPreviousChunk;
+ std::size_t units = detail::get_rounded_size(userbytes - UsableByPreviousChunk, Alignment)/Alignment + AllocatedCtrlUnits;
    if(units < BlockCtrlUnits) units = BlockCtrlUnits;
    return units;
 }
 
-template<class MutexFamily, class VoidPointer>
-bool rbtree_best_fit<MutexFamily, VoidPointer>::
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+bool rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::
    priv_expand (void *ptr
                ,const std::size_t min_size
                ,const std::size_t preferred_size
@@ -966,16 +1023,16 @@
 
    //The block must be marked as allocated and the sizes must be equal
    assert(priv_is_allocated_block(block));
- assert(old_block_units == priv_tail_size(block));
+ //assert(old_block_units == priv_tail_size(block));
    
    //Put this to a safe value
- received_size = (old_block_units - AllocatedCtrlUnits)*Alignment;
- if(received_size > preferred_size)
+ received_size = (old_block_units - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk;
+ if(received_size >= preferred_size || received_size >= min_size)
       return true;
 
    //Now translate it to Alignment units
- const std::size_t min_user_units = algo_impl_t::ceil_units(min_size);
- const std::size_t preferred_user_units = algo_impl_t::ceil_units(preferred_size);
+ const std::size_t min_user_units = algo_impl_t::ceil_units(min_size - UsableByPreviousChunk);
+ const std::size_t preferred_user_units = algo_impl_t::ceil_units(preferred_size - UsableByPreviousChunk);
 
    //Some parameter checks
    assert(min_user_units <= preferred_user_units);
@@ -994,7 +1051,7 @@
    const std::size_t merged_user_units = merged_units - AllocatedCtrlUnits;
 
    if(merged_user_units < min_user_units){
- received_size = merged_user_units*Alignment;
+ received_size = merged_units*Alignment - UsableByPreviousChunk;
       return false;
    }
 
@@ -1007,30 +1064,44 @@
 
    //Check if we can split the next one in two parts
    if((merged_units - intended_units) >= BlockCtrlUnits){
- //Now we have to update the data in the tree
- m_header.m_imultiset.erase(Imultiset::s_iterator_to(*next_block));
-
       //This block is bigger than needed, split it in
       //two blocks, the first one will be merged and
       //the second's size will be the remaining space
- assert(next_block->m_size == priv_tail_size(next_block));
+ assert(next_block->m_size == priv_next_block(next_block)->m_prev_size);
+ const std::size_t rem_units = merged_units - intended_units;
 
+ //Check if we we need to update the old next block in the free chunks tree
+ //If the new size fulfills tree invariants, we just need to replace the node
+ //(the block start has been displaced), otherwise erase() + insert().
+ //
+ //This fixup must be done in two parts, because the new next chunk might
+ //overwrite the tree hook of the old next chunk. So we first erase the
+ //old if needed and we'll insert the new one after creating the new next
+ imultiset_iterator old_next_block_it(Imultiset::s_iterator_to(*next_block));
+ const bool size_invariants_broken =
+ (next_block->m_size - rem_units ) < BlockCtrlUnits ||
+ (old_next_block_it != m_header.m_imultiset.begin() &&
+ (--imultiset_iterator(old_next_block_it))->m_size > rem_units);
+ if(size_invariants_broken){
+ m_header.m_imultiset.erase(old_next_block_it);
+ }
       //This is the remaining block
- block_ctrl *new_block = new(reinterpret_cast<block_ctrl*>
+ block_ctrl *rem_block = new(reinterpret_cast<block_ctrl*>
                      (detail::char_ptr_cast(block) + intended_units*Alignment))block_ctrl;
- new_block->m_size = merged_units - intended_units;
- algo_impl_t::assert_alignment(new_block);
- assert(new_block->m_size >= BlockCtrlUnits);
- priv_tail_size(new_block, new_block->m_size);
- priv_mark_as_free_block(new_block);
-
- //Insert the new block in the container
- m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *new_block);
+ rem_block->m_size = rem_units;
+ algo_impl_t::assert_alignment(rem_block);
+ assert(rem_block->m_size >= BlockCtrlUnits);
+ priv_mark_as_free_block(rem_block);
+
+ //Now the second part of the fixup
+ if(size_invariants_broken)
+ m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *rem_block);
+ else
+ m_header.m_imultiset.replace_node(old_next_block_it, *rem_block);
 
       //Write the new length
       block->m_size = intended_user_units + AllocatedCtrlUnits;
       assert(block->m_size >= BlockCtrlUnits);
- priv_tail_size(block, block->m_size);
       m_header.m_allocated += (intended_units - old_block_units)*Alignment;
    }
    //There is no free space to create a new node: just merge both blocks
@@ -1041,61 +1112,95 @@
       //Write the new length
       block->m_size = merged_units;
       assert(block->m_size >= BlockCtrlUnits);
- priv_tail_size(block, merged_units);
       m_header.m_allocated += (merged_units - old_block_units)*Alignment;
    }
-
- received_size = (block->m_size - AllocatedCtrlUnits)*Alignment;
+ priv_mark_as_allocated_block(block);
+ received_size = (block->m_size - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk;
    return true;
 }
 
-template<class MutexFamily, class VoidPointer> inline
-void rbtree_best_fit<MutexFamily, VoidPointer>::priv_tail_size
- (typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *ptr, std::size_t size)
-{ priv_next_block(ptr)->m_prev_size = size; }
-
-template<class MutexFamily, class VoidPointer> inline
-std::size_t rbtree_best_fit<MutexFamily, VoidPointer>::priv_tail_size
- (typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *ptr)
-{ return priv_next_block(ptr)->m_prev_size; }
-
-template<class MutexFamily, class VoidPointer> inline
-typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *
- rbtree_best_fit<MutexFamily, VoidPointer>::priv_prev_block
- (typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *ptr)
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment> inline
+typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *
+ rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_prev_block
+ (typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *ptr)
 {
+ assert(!ptr->m_prev_allocated);
    return reinterpret_cast<block_ctrl *>
       (detail::char_ptr_cast(ptr) - ptr->m_prev_size*Alignment);
 }
 
-template<class MutexFamily, class VoidPointer> inline
-typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *
- rbtree_best_fit<MutexFamily, VoidPointer>::priv_next_block
- (typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *ptr)
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment> inline
+bool rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_is_prev_allocated
+ (typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *ptr)
+{
+ if(ptr->m_prev_allocated){
+ return true;
+ }
+ else{
+ block_ctrl *prev = priv_prev_block(ptr);
+ assert(!priv_is_allocated_block(prev));
+ return false;
+ }
+}
+
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment> inline
+typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *
+ rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_end_block
+ (typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *first_segment_block)
+{
+ assert(first_segment_block->m_prev_allocated);
+ block_ctrl *end_block = reinterpret_cast<block_ctrl *>
+ (detail::char_ptr_cast(first_segment_block) - first_segment_block->m_prev_size*Alignment);
+ assert(priv_is_allocated_block(end_block));
+ assert(end_block > first_segment_block);
+ return end_block;
+}
+
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment> inline
+typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *
+ rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_next_block
+ (typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *ptr)
 {
    return reinterpret_cast<block_ctrl *>
       (detail::char_ptr_cast(ptr) + ptr->m_size*Alignment);
 }
 
-template<class MutexFamily, class VoidPointer> inline
-bool rbtree_best_fit<MutexFamily, VoidPointer>::priv_is_allocated_block
- (typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *block)
-{ return block->m_allocated != 0; }
-
-template<class MutexFamily, class VoidPointer> inline
-void rbtree_best_fit<MutexFamily, VoidPointer>::priv_mark_as_allocated_block
- (typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *block)
-{ block->m_allocated = 1; }
-
-template<class MutexFamily, class VoidPointer> inline
-void rbtree_best_fit<MutexFamily, VoidPointer>::priv_mark_as_free_block
- (typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl *block)
-{ block->m_allocated = 0; }
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment> inline
+bool rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_is_allocated_block
+ (typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *block)
+{
+ bool allocated = block->m_allocated != 0;
+ block_ctrl *next_block = (block_ctrl *)
+ (detail::char_ptr_cast(block) + block->m_size*Alignment);
+ bool next_block_prev_allocated = next_block->m_prev_allocated != 0;
+ (void)next_block_prev_allocated;
+ assert(allocated == next_block_prev_allocated);
+ return allocated;
+}
 
-template<class MutexFamily, class VoidPointer> inline
-void* rbtree_best_fit<MutexFamily, VoidPointer>::priv_check_and_allocate
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment> inline
+void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_mark_as_allocated_block
+ (typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *block)
+{
+ //assert(!priv_is_allocated_block(block));
+ block->m_allocated = 1;
+ ((block_ctrl *)(((char*)block) + block->m_size*Alignment))->m_prev_allocated = 1;
+}
+
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment> inline
+void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_mark_as_free_block
+ (typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl *block)
+{
+ block->m_allocated = 0;
+ ((block_ctrl *)(((char*)block) + block->m_size*Alignment))->m_prev_allocated = 0;
+ //assert(!priv_is_allocated_block(ptr));
+ priv_next_block(block)->m_prev_size = block->m_size;
+}
+
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment> inline
+void* rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_check_and_allocate
    (std::size_t nunits
- ,typename rbtree_best_fit<MutexFamily, VoidPointer>::block_ctrl* block
+ ,typename rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::block_ctrl* block
    ,std::size_t &received_size)
 {
    std::size_t upper_nunits = nunits + BlockCtrlUnits;
@@ -1109,32 +1214,30 @@
       std::size_t block_old_size = block->m_size;
       block->m_size = nunits;
       assert(block->m_size >= BlockCtrlUnits);
- priv_tail_size(block, block->m_size);
 
       //This is the remaining block
- block_ctrl *new_block = new(reinterpret_cast<block_ctrl*>
+ block_ctrl *rem_block = new(reinterpret_cast<block_ctrl*>
                      (detail::char_ptr_cast(block) + Alignment*nunits))block_ctrl;
- algo_impl_t::assert_alignment(new_block);
- new_block->m_size = block_old_size - nunits;
- assert(new_block->m_size >= BlockCtrlUnits);
- priv_tail_size(new_block, new_block->m_size);
- priv_mark_as_free_block(new_block);
+ algo_impl_t::assert_alignment(rem_block);
+ rem_block->m_size = block_old_size - nunits;
+ assert(rem_block->m_size >= BlockCtrlUnits);
+ priv_mark_as_free_block(rem_block);
 
       imultiset_iterator it_hint;
       if(it_old == m_header.m_imultiset.begin()
- || (--imultiset_iterator(it_old))->m_size < new_block->m_size){
+ || (--imultiset_iterator(it_old))->m_size < rem_block->m_size){
          //option a: slow but secure
- //m_header.m_imultiset.insert(m_header.m_imultiset.erase(it_old), *new_block);
+ //m_header.m_imultiset.insert(m_header.m_imultiset.erase(it_old), *rem_block);
          //option b: Construct an empty node and swap
- //Imultiset::init_node(*new_block);
- //block->swap_nodes(*new_block);
+ //Imultiset::init_node(*rem_block);
+ //block->swap_nodes(*rem_block);
          //option c: replace the node directly
- m_header.m_imultiset.replace_node(Imultiset::s_iterator_to(*it_old), *new_block);
+ m_header.m_imultiset.replace_node(Imultiset::s_iterator_to(*it_old), *rem_block);
       }
       else{
          //Now we have to update the data in the tree
          m_header.m_imultiset.erase(it_old);
- m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *new_block);
+ m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *rem_block);
       }
          
    }
@@ -1148,7 +1251,7 @@
    //We need block_ctrl for deallocation stuff, so
    //return memory user can overwrite
    m_header.m_allocated += block->m_size*Alignment;
- received_size = (block->m_size - AllocatedCtrlUnits)*Alignment;
+ received_size = (block->m_size - AllocatedCtrlUnits)*Alignment + UsableByPreviousChunk;
 
    //Mark the block as allocated
    priv_mark_as_allocated_block(block);
@@ -1157,11 +1260,12 @@
    //cleared with zero_free_memory
    TreeHook *t = static_cast<TreeHook*>(block);
    std::memset(t, 0, sizeof(*t));
+ this->priv_next_block(block)->m_prev_size = 0;
    return priv_get_user_buffer(block);
 }
 
-template<class MutexFamily, class VoidPointer>
-void rbtree_best_fit<MutexFamily, VoidPointer>::deallocate(void* addr)
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::deallocate(void* addr)
 {
    if(!addr) return;
    //-----------------------
@@ -1170,8 +1274,8 @@
    return this->priv_deallocate(addr);
 }
 
-template<class MutexFamily, class VoidPointer>
-void rbtree_best_fit<MutexFamily, VoidPointer>::priv_deallocate(void* addr)
+template<class MutexFamily, class VoidPointer, std::size_t MemAlignment>
+void rbtree_best_fit<MutexFamily, VoidPointer, MemAlignment>::priv_deallocate(void* addr)
 {
    if(!addr) return;
 
@@ -1179,7 +1283,7 @@
   
    //The blocks must be marked as allocated and the sizes must be equal
    assert(priv_is_allocated_block(block));
- assert(block->m_size == priv_tail_size(block));
+// assert(block->m_size == priv_tail_size(block));
 
    //Check if alignment and block size are right
    algo_impl_t::assert_alignment(addr);
@@ -1194,33 +1298,48 @@
    block_ctrl *block_to_insert = block;
 
    //Get the next block
- block_ctrl *next_block = priv_next_block(block);
+ block_ctrl *next_block = priv_next_block(block);
+ bool merge_with_prev = !priv_is_prev_allocated(block);
+ bool merge_with_next = !priv_is_allocated_block(next_block);
+
+ //Merge logic. First just update block sizes, then fix free chunks tree
+ if(merge_with_prev || merge_with_next){
+ //Merge if the previous is free
+ if(merge_with_prev){
+ //Get the previous block
+ block_ctrl *prev_block = priv_prev_block(block);
+ prev_block->m_size += block->m_size;
+ assert(prev_block->m_size >= BlockCtrlUnits);
+ block_to_insert = prev_block;
+ }
+ //Merge if the next is free
+ if(merge_with_next){
+ block_to_insert->m_size += next_block->m_size;
+ assert(block_to_insert->m_size >= BlockCtrlUnits);
+ if(merge_with_prev)
+ m_header.m_imultiset.erase(Imultiset::s_iterator_to(*next_block));
+ }
 
- //Merge if the next is free
- if(!priv_is_allocated_block(next_block)){
- block->m_size += next_block->m_size;
- assert(block->m_size >= BlockCtrlUnits);
- priv_tail_size(block, block->m_size);
- m_header.m_imultiset.erase(Imultiset::s_iterator_to(*next_block));
+ bool only_merge_next = !merge_with_prev && merge_with_next;
+ imultiset_iterator free_block_to_check_it
+ (Imultiset::s_iterator_to(only_merge_next ? *next_block : *block_to_insert));
+ imultiset_iterator was_bigger_it(free_block_to_check_it);
+
+ //Now try to shortcut erasure + insertion (O(log(N))) with
+ //a O(1) operation if merging does not alter tree positions
+ if(++was_bigger_it != m_header.m_imultiset.end() &&
+ block_to_insert->m_size > was_bigger_it->m_size ){
+ m_header.m_imultiset.erase(free_block_to_check_it);
+ m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *block_to_insert);
+ }
+ else if(only_merge_next){
+ m_header.m_imultiset.replace_node(free_block_to_check_it, *block_to_insert);
+ }
    }
-
- //Get the previous block
- block_ctrl *prev_block = priv_prev_block(block);
-
- //Now check that tail size and control size are equal
- assert(prev_block->m_size == priv_tail_size(prev_block));
-
- //Merge if the previous is free
- if(!priv_is_allocated_block(prev_block)){
- prev_block->m_size += block->m_size;
- assert(prev_block->m_size >= BlockCtrlUnits);
- priv_tail_size(prev_block, prev_block->m_size);
- m_header.m_imultiset.erase(Imultiset::s_iterator_to(*prev_block));
- block_to_insert = prev_block;
+ else{
+ m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *block_to_insert);
    }
-
    priv_mark_as_free_block(block_to_insert);
- m_header.m_imultiset.insert(m_header.m_imultiset.begin(), *block_to_insert);
 }
 
 } //namespace interprocess {

Modified: branches/fix-links/boost/interprocess/mem_algo/simple_seq_fit.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/mem_algo/simple_seq_fit.hpp (original)
+++ branches/fix-links/boost/interprocess/mem_algo/simple_seq_fit.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/offset_ptr.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/offset_ptr.hpp (original)
+++ branches/fix-links/boost/interprocess/offset_ptr.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -61,7 +61,7 @@
    typedef void (self_t::*unspecified_bool_type)() const;
 
    #if defined(_MSC_VER) && (_MSC_VER >= 1400)
- __declspec(noinline)
+ __declspec(noinline) //this workaround is needed for msvc-8.0 and msvc-9.0
    #endif
    void set_offset(const volatile void *ptr)
    {
@@ -77,7 +77,7 @@
    }
 
    #if defined(_MSC_VER) && (_MSC_VER >= 1400)
- __declspec(noinline)
+ __declspec(noinline) //this workaround is needed for msvc-8.0 and msvc-9.0
    #endif
    void* get_pointer() const
    { return (m_offset == 1) ? 0 : (detail::char_ptr_cast(this) + m_offset); }

Modified: branches/fix-links/boost/interprocess/segment_manager.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/segment_manager.hpp (original)
+++ branches/fix-links/boost/interprocess/segment_manager.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -70,7 +70,8 @@
    /// @cond
    
    //Experimental. Don't use
- typedef typename MemoryAlgorithm::multiallocation_iterator multiallocation_iterator;
+ typedef typename MemoryAlgorithm::multiallocation_iterator multiallocation_iterator;
+ typedef typename MemoryAlgorithm::multiallocation_chain multiallocation_chain;
 
    /// @endcond
 
@@ -148,6 +149,11 @@
    multiallocation_iterator allocate_many(const std::size_t *elem_sizes, std::size_t n_elements, std::size_t sizeof_element, std::nothrow_t)
    { return MemoryAlgorithm::allocate_many(elem_sizes, n_elements, sizeof_element); }
 
+ //!Deallocates elements pointed by the
+ //!multiallocation iterator range.
+ void deallocate_many(multiallocation_iterator it)
+ { MemoryAlgorithm::deallocate_many(it); }
+
    /// @endcond
 
    //!Allocates nbytes bytes. Throws boost::interprocess::bad_alloc
@@ -189,6 +195,19 @@
       return ret;
    }
 
+ std::pair<void *, bool>
+ raw_allocation_command (allocation_type command, std::size_t limit_objects,
+ std::size_t preferred_objects,std::size_t &received_objects,
+ void *reuse_ptr = 0, std::size_t sizeof_object = 1)
+ {
+ std::pair<void *, bool> ret = MemoryAlgorithm::raw_allocation_command
+ ( command | nothrow_allocation, limit_objects, preferred_objects, received_objects
+ , reuse_ptr, sizeof_object);
+ if(!(command & nothrow_allocation) && !ret.first)
+ throw bad_alloc();
+ return ret;
+ }
+
    //!Deallocates the bytes allocated with allocate/allocate_many()
    //!pointed by addr
    void deallocate (void *addr)
@@ -219,6 +238,10 @@
    void zero_free_memory()
    { MemoryAlgorithm::zero_free_memory(); }
 
+ //!Returns the size of the buffer previously allocated pointed by ptr
+ std::size_t size(const void *ptr) const
+ { return MemoryAlgorithm::size(ptr); }
+
    /// @cond
    protected:
    void * prot_anonymous_construct

Modified: branches/fix-links/boost/interprocess/shared_memory_object.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/shared_memory_object.hpp (original)
+++ branches/fix-links/boost/interprocess/shared_memory_object.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/smart_ptr/deleter.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/smart_ptr/deleter.hpp (original)
+++ branches/fix-links/boost/interprocess/smart_ptr/deleter.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2007.
+// (C) Copyright Ion Gaztanaga 2007-2008.
 //
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at

Modified: branches/fix-links/boost/interprocess/smart_ptr/detail/shared_count.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/smart_ptr/detail/shared_count.hpp (original)
+++ branches/fix-links/boost/interprocess/smart_ptr/detail/shared_count.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 //
 // (C) Copyright Peter Dimov and Multi Media Ltd. 2001, 2002, 2003
 // (C) Copyright Peter Dimov 2004-2005
-// (C) Copyright Ion Gaztanaga 2006-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2006-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp (original)
+++ branches/fix-links/boost/interprocess/smart_ptr/detail/sp_counted_base_atomic.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -9,7 +9,7 @@
 
 // Copyright (c) 2001, 2002, 2003 Peter Dimov and Multi Media Ltd.
 // Copyright 2004-2005 Peter Dimov
-// Copyright 2007 Ion Gaztanaga
+// Copyright 2007-2008 Ion Gaztanaga
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at

Modified: branches/fix-links/boost/interprocess/smart_ptr/shared_ptr.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/smart_ptr/shared_ptr.hpp (original)
+++ branches/fix-links/boost/interprocess/smart_ptr/shared_ptr.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 //
 // (C) Copyright Greg Colvin and Beman Dawes 1998, 1999.
 // (C) Copyright Peter Dimov 2001, 2002, 2003
-// (C) Copyright Ion Gaztanaga 2006-2007.
+// (C) Copyright Ion Gaztanaga 2006-2008.
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/boost/interprocess/smart_ptr/weak_ptr.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/smart_ptr/weak_ptr.hpp (original)
+++ branches/fix-links/boost/interprocess/smart_ptr/weak_ptr.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 // This file is the adaptation for Interprocess of boost/weak_ptr.hpp
 //
 // (C) Copyright Peter Dimov 2001, 2002, 2003
-// (C) Copyright Ion Gaztanaga 2006-2007.
+// (C) Copyright Ion Gaztanaga 2006-2008.
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/boost/interprocess/streams/bufferstream.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/streams/bufferstream.hpp (original)
+++ branches/fix-links/boost/interprocess/streams/bufferstream.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/streams/vectorstream.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/streams/vectorstream.hpp (original)
+++ branches/fix-links/boost/interprocess/streams/vectorstream.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/emulation/interprocess_condition.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/emulation/interprocess_condition.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/emulation/interprocess_condition.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/emulation/interprocess_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/emulation/interprocess_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/emulation/interprocess_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/emulation/interprocess_recursive_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/emulation/interprocess_recursive_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/emulation/interprocess_recursive_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/emulation/interprocess_semaphore.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/emulation/interprocess_semaphore.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/emulation/interprocess_semaphore.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/emulation/named_creation_functor.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/emulation/named_creation_functor.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/emulation/named_creation_functor.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2007-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/file_lock.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/file_lock.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/file_lock.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/interprocess_barrier.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/interprocess_barrier.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/interprocess_barrier.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/interprocess_condition.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/interprocess_condition.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/interprocess_condition.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/interprocess_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/interprocess_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/interprocess_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/interprocess_recursive_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/interprocess_recursive_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/interprocess_recursive_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/interprocess_semaphore.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/interprocess_semaphore.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/interprocess_semaphore.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/interprocess_upgradable_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/interprocess_upgradable_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/interprocess_upgradable_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/lock_options.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/lock_options.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/lock_options.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/mutex_family.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/mutex_family.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/mutex_family.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/named_condition.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/named_condition.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/named_condition.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/named_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/named_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/named_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/named_recursive_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/named_recursive_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/named_recursive_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/named_semaphore.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/named_semaphore.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/named_semaphore.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
  //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/named_upgradable_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/named_upgradable_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/named_upgradable_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/null_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/null_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/null_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/posix/interprocess_condition.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/posix/interprocess_condition.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/posix/interprocess_condition.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/posix/interprocess_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/posix/interprocess_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/posix/interprocess_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/posix/interprocess_recursive_mutex.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/posix/interprocess_recursive_mutex.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/posix/interprocess_recursive_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/posix/interprocess_semaphore.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/posix/interprocess_semaphore.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/posix/interprocess_semaphore.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/posix/pthread_helpers.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/posix/pthread_helpers.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/posix/pthread_helpers.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/posix/ptime_to_timespec.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/posix/ptime_to_timespec.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/posix/ptime_to_timespec.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/posix/semaphore_wrapper.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/posix/semaphore_wrapper.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/posix/semaphore_wrapper.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/scoped_lock.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/scoped_lock.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/scoped_lock.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/sharable_lock.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/sharable_lock.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/sharable_lock.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/sync/upgradable_lock.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/sync/upgradable_lock.hpp (original)
+++ branches/fix-links/boost/interprocess/sync/upgradable_lock.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/interprocess/windows_shared_memory.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/windows_shared_memory.hpp (original)
+++ branches/fix-links/boost/interprocess/windows_shared_memory.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2005-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2005-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //

Modified: branches/fix-links/boost/intrusive/circular_list_algorithms.hpp
==============================================================================
--- branches/fix-links/boost/intrusive/circular_list_algorithms.hpp (original)
+++ branches/fix-links/boost/intrusive/circular_list_algorithms.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -54,6 +54,27 @@
    typedef typename NodeTraits::const_node_ptr const_node_ptr;
    typedef NodeTraits node_traits;
 
+ //! <b>Effects</b>: Constructs an non-used list element, so that
+ //! inited(this_node) == true
+ //!
+ //! <b>Complexity</b>: Constant
+ //!
+ //! <b>Throws</b>: Nothing.
+ static void init(node_ptr this_node)
+ {
+ NodeTraits::set_next(this_node, 0);
+ NodeTraits::set_previous(this_node, 0);
+ }
+
+ //! <b>Effects</b>: Returns true is "this_node" is in a non-used state
+ //! as if it was initialized by the "init" function.
+ //!
+ //! <b>Complexity</b>: Constant
+ //!
+ //! <b>Throws</b>: Nothing.
+ static bool inited(const_node_ptr this_node)
+ { return !NodeTraits::get_next(this_node); }
+
    //! <b>Effects</b>: Constructs an empty list, making this_node the only
    //! node of the circular list:
    //! <tt>NodeTraits::get_next(this_node) == NodeTraits::get_previous(this_node)
@@ -62,11 +83,12 @@
    //! <b>Complexity</b>: Constant
    //!
    //! <b>Throws</b>: Nothing.
- static void init(node_ptr this_node)
+ static void init_header(node_ptr this_node)
    {
       NodeTraits::set_next(this_node, this_node);
       NodeTraits::set_previous(this_node, this_node);
- }
+ }
+
 
    //! <b>Requires</b>: this_node must be in a circular list or be an empty circular list.
    //!
@@ -76,8 +98,11 @@
    //! <b>Complexity</b>: Constant
    //!
    //! <b>Throws</b>: Nothing.
- static bool unique(const_node_ptr this_node)
- { return NodeTraits::get_next(this_node) == this_node; }
+ static bool unique(const_node_ptr this_node)
+ {
+ node_ptr next = NodeTraits::get_next(this_node);
+ return !next || next == this_node;
+ }
 
    //! <b>Requires</b>: this_node must be in a circular list or be an empty circular list.
    //!
@@ -107,11 +132,16 @@
    //! <b>Throws</b>: Nothing.
    static node_ptr unlink(node_ptr this_node)
    {
- node_ptr next(NodeTraits::get_next(this_node));
- node_ptr prev(NodeTraits::get_previous(this_node));
- NodeTraits::set_next(prev, next);
- NodeTraits::set_previous(next, prev);
- return next;
+ if(NodeTraits::get_next(this_node)){
+ node_ptr next(NodeTraits::get_next(this_node));
+ node_ptr prev(NodeTraits::get_previous(this_node));
+ NodeTraits::set_next(prev, next);
+ NodeTraits::set_previous(next, prev);
+ return next;
+ }
+ else{
+ return this_node;
+ }
    }
 
    //! <b>Requires</b>: b and e must be nodes of the same circular list or an empty range.
@@ -229,6 +259,17 @@
    public:
    static void swap_nodes(node_ptr this_node, node_ptr other_node)
    {
+ if (other_node == this_node)
+ return;
+ bool this_inited = inited(this_node);
+ bool other_inited = inited(other_node);
+ if(this_inited){
+ init_header(this_node);
+ }
+ if(other_inited){
+ init_header(other_node);
+ }
+
       node_ptr next_this(NodeTraits::get_next(this_node));
       node_ptr prev_this(NodeTraits::get_previous(this_node));
       node_ptr next_other(NodeTraits::get_next(other_node));
@@ -238,6 +279,13 @@
       swap_next(prev_this, prev_other);
       swap_next(this_node, other_node);
       swap_prev(this_node, other_node);
+
+ if(this_inited){
+ init(other_node);
+ }
+ if(other_inited){
+ init(this_node);
+ }
    }
 
    //! <b>Requires</b>: b and e must be nodes of the same circular list or an empty range.
@@ -254,8 +302,8 @@
    {
       if (b != e) {
          node_ptr prev_p(NodeTraits::get_previous(p));
- node_ptr prev_e(NodeTraits::get_previous(e));
          node_ptr prev_b(NodeTraits::get_previous(b));
+ node_ptr prev_e(NodeTraits::get_previous(e));
          NodeTraits::set_next(prev_e, p);
          NodeTraits::set_previous(p, prev_e);
          NodeTraits::set_next(prev_b, e);
@@ -308,6 +356,47 @@
          f = n;
       }
    }
+
+ //! <b>Effects</b>: Moves the node p n positions towards the end of the list.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Linear to the number of moved positions.
+ static void move_backwards(node_ptr p, std::size_t n)
+ {
+ //Null shift, nothing to do
+ if(!n) return;
+ node_ptr first = NodeTraits::get_next(p);
+ //size() == 0 or 1, nothing to do
+ if(first == NodeTraits::get_previous(p)) return;
+ unlink(p);
+ //Now get the new first node
+ while(n--){
+ first = NodeTraits::get_next(first);
+ }
+ link_before(first, p);
+ }
+
+ //! <b>Effects</b>: Moves the node p n positions towards the beginning of the list.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Linear to the number of moved positions.
+ static void move_forward(node_ptr p, std::size_t n)
+ {
+ //Null shift, nothing to do
+ if(!n) return;
+ node_ptr last = NodeTraits::get_previous(p);
+ //size() == 0 or 1, nothing to do
+ if(last == NodeTraits::get_next(p)) return;
+
+ unlink(p);
+ //Now get the new last node
+ while(n--){
+ last = NodeTraits::get_previous(last);
+ }
+ link_after(last, p);
+ }
 };
 
 } //namespace intrusive

Modified: branches/fix-links/boost/intrusive/circular_slist_algorithms.hpp
==============================================================================
--- branches/fix-links/boost/intrusive/circular_slist_algorithms.hpp (original)
+++ branches/fix-links/boost/intrusive/circular_slist_algorithms.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,6 +16,7 @@
 
 #include <boost/intrusive/detail/config_begin.hpp>
 #include <boost/intrusive/intrusive_fwd.hpp>
+#include <boost/intrusive/detail/assert.hpp>
 #include <cstddef>
 
 namespace boost {
@@ -25,7 +26,7 @@
 //! forming a circular singly linked list. An empty circular list is formed by a node
 //! whose pointer to the next node points to itself.
 //!
-//! circular_slist_algorithms is configured with a NodeTraits class, which capsulates the
+//! circular_slist_algorithms is configured with a NodeTraits class, which encapsulates the
 //! information about the node to be manipulated. NodeTraits must support the
 //! following interface:
 //!
@@ -72,11 +73,13 @@
    //! <b>Throws</b>: Nothing.
    static node_ptr get_previous_node(node_ptr prev_init_node, node_ptr this_node)
    {
- node_ptr p = prev_init_node;
+ node_ptr p = prev_init_node;
       for( node_ptr p_next
          ; this_node != (p_next = NodeTraits::get_next(p))
          ; p = p_next){
- //empty
+ //Logic error: possible use of linear lists with
+ //operations only permitted with circular lists
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(p);
       }
       return p;
    }
@@ -115,25 +118,46 @@
 
    //! <b>Effects</b>: Constructs an empty list, making this_node the only
    //! node of the circular list:
- //! <tt>NodeTraits::get_next(this_node) == NodeTraits::get_previous(this_node)
- //! == this_node</tt>.
+ //! <tt>NodeTraits::get_next(this_node) == this_node</tt>.
    //!
    //! <b>Complexity</b>: Constant
    //!
    //! <b>Throws</b>: Nothing.
- static void init(node_ptr this_node)
+ static void init_header(node_ptr this_node)
    { NodeTraits::set_next(this_node, this_node); }
 
+ //! <b>Effects</b>: Constructs an non-used list element, putting the next
+ //! pointer to null:
+ //! <tt>NodeTraits::get_next(this_node) == 0
+ //!
+ //! <b>Complexity</b>: Constant
+ //!
+ //! <b>Throws</b>: Nothing.
+ static void init(node_ptr this_node)
+ { NodeTraits::set_next(this_node, 0); }
+
    //! <b>Requires</b>: this_node must be in a circular list or be an empty circular list.
    //!
    //! <b>Effects</b>: Returns true is "this_node" is the only node of a circular list:
- //! <tt>return NodeTraits::get_next(this_node) == this_node</tt>
+ //! or it's a not inserted node:
+ //! <tt>return !NodeTraits::get_next(this_node) || NodeTraits::get_next(this_node) == this_node</tt> or
    //!
    //! <b>Complexity</b>: Constant
    //!
    //! <b>Throws</b>: Nothing.
- static bool unique(const_node_ptr this_node)
- { return NodeTraits::get_next(this_node) == this_node; }
+ static bool unique(const_node_ptr this_node)
+ {
+ node_ptr next = NodeTraits::get_next(this_node);
+ return !next || next == this_node;
+ }
+
+ //! <b>Effects</b>: Returns true is "this_node" has the same state as if it was inited using "init(node_ptr)"
+ //!
+ //! <b>Complexity</b>: Constant
+ //!
+ //! <b>Throws</b>: Nothing.
+ static bool inited(const_node_ptr this_node)
+ { return !NodeTraits::get_next(this_node); }
 
    //! <b>Requires</b>: this_node must be in a circular list or be an empty circular list.
    //!
@@ -165,7 +189,7 @@
    {
       node_ptr this_node(NodeTraits::get_next(prev_node));
       NodeTraits::set_next(prev_node, NodeTraits::get_next(this_node));
- NodeTraits::set_next(this_node, this_node);
+ //NodeTraits::set_next(this_node, this_node);
    }
 
    //! <b>Requires</b>: nxt_node must be in a circular list or be an empty circular list.
@@ -181,7 +205,7 @@
       unlink_after(prev_to_erase);
    }
 
- //! <b>Requires</b>: this_node must be in a circular list or be an empty circular list.
+ //! <b>Requires</b>: this_node must be in a circular list, be an empty circular list or be inited.
    //!
    //! <b>Effects</b>: Unlinks the node from the circular list.
    //!
@@ -189,7 +213,10 @@
    //!
    //! <b>Throws</b>: Nothing.
    static void unlink(node_ptr this_node)
- { unlink_after(get_previous_node(this_node)); }
+ {
+ if(NodeTraits::get_next(this_node))
+ unlink_after(get_previous_node(this_node));
+ }
 
    //! <b>Requires</b>: prev_node must be a node of a circular list.
    //!
@@ -200,8 +227,7 @@
    //! <b>Throws</b>: Nothing.
    static void link_after(node_ptr prev_node, node_ptr this_node)
    {
- node_ptr this_nxt = NodeTraits::get_next(prev_node);
- NodeTraits::set_next(this_node, this_nxt);
+ NodeTraits::set_next(this_node, NodeTraits::get_next(prev_node));
       NodeTraits::set_next(prev_node, this_node);
    }
 
@@ -229,6 +255,15 @@
    {
       if (other_node == this_node)
          return;
+ bool this_inited = inited(this_node);
+ bool other_inited = inited(other_node);
+ if(this_inited){
+ init_header(this_node);
+ }
+ if(other_inited){
+ init_header(other_node);
+ }
+
       bool empty1 = unique(this_node);
       bool empty2 = unique(other_node);
       node_ptr prev_this (get_previous_node(this_node));
@@ -240,12 +275,19 @@
       NodeTraits::set_next(other_node, this_next);
       NodeTraits::set_next(empty1 ? other_node : prev_this, other_node);
       NodeTraits::set_next(empty2 ? this_node : prev_other, this_node);
+
+ if(this_inited){
+ init(other_node);
+ }
+ if(other_inited){
+ init(this_node);
+ }
    }
 
    //! <b>Requires</b>: b and e must be nodes of the same circular list or an empty range.
    //! and p must be a node of a different circular list.
    //!
- //! <b>Effects</b>: Removes the nodes from [b, e) range from their circular list and inserts
+ //! <b>Effects</b>: Removes the nodes from (b, e] range from their circular list and inserts
    //! them after p in p's circular list.
    //!
    //! <b>Complexity</b>: Constant
@@ -278,6 +320,99 @@
          transfer_after(e, i, nxt);
       }
    }
+
+ //! <b>Effects</b>: Moves the node p n positions towards the end of the list.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements plus the number moved positions.
+ static void move_backwards(node_ptr p, std::size_t n)
+ {
+ //Null shift, nothing to do
+ if(!n) return;
+ node_ptr first = NodeTraits::get_next(p);
+
+ //count() == 1 or 2, nothing to do
+ if(NodeTraits::get_next(first) == p)
+ return;
+
+ bool end_found = false;
+ node_ptr new_last(0);
+
+ //Now find the new last node according to the shift count.
+ //If we find p before finding the new last node
+ //unlink p, shortcut the search now that we know the size of the list
+ //and continue.
+ for(std::size_t i = 1; i <= n; ++i){
+ new_last = first;
+ first = NodeTraits::get_next(first);
+ if(first == p){
+ //Shortcut the shift with the modulo of the size of the list
+ n %= i;
+ if(!n)
+ return;
+ i = 0;
+ //Unlink p and continue the new first node search
+ first = NodeTraits::get_next(p);
+ unlink_after(new_last);
+ end_found = true;
+ }
+ }
+
+ //If the p has not been found in the previous loop, find it
+ //starting in the new first node and unlink it
+ if(!end_found){
+ unlink_after(get_previous_node(first, p));
+ }
+
+ //Now link p after the new last node
+ link_after(new_last, p);
+ }
+
+ //! <b>Effects</b>: Moves the node p n positions towards the beginning of the list.
+ //!
+ //! <b>Throws</b>: Nothing.
+ //!
+ //! <b>Complexity</b>: Linear to the number of elements plus the number moved positions.
+ static void move_forward(node_ptr p, std::size_t n)
+ {
+ //Null shift, nothing to do
+ if(!n) return;
+ node_ptr first = node_traits::get_next(p);
+
+ //count() == 1 or 2, nothing to do
+ if(node_traits::get_next(first) == p) return;
+
+ //Iterate until p is found to know where the current last node is.
+ //If the shift count is less than the size of the list, we can also obtain
+ //the position of the new last node after the shift.
+ node_ptr old_last(first), next_to_it, new_last(p);
+ std::size_t distance = 1;
+ while(p != (next_to_it = node_traits::get_next(old_last))){
+ if(++distance > n)
+ new_last = node_traits::get_next(new_last);
+ old_last = next_to_it;
+ }
+ //If the shift was bigger or equal than the size, obtain the equivalent
+ //forward shifts and find the new last node.
+ if(distance <= n){
+ //Now find the equivalent forward shifts.
+ //Shortcut the shift with the modulo of the size of the list
+ std::size_t new_before_last_pos = (distance - (n % distance))% distance;
+ //If the shift is a multiple of the size there is nothing to do
+ if(!new_before_last_pos) return;
+
+ for( new_last = p
+ ; new_before_last_pos--
+ ; new_last = node_traits::get_next(new_last)){
+ //empty
+ }
+ }
+
+ //Now unlink p and link it after the new last node
+ unlink_after(old_last);
+ link_after(new_last, p);
+ }
 };
 
 } //namespace intrusive

Modified: branches/fix-links/boost/intrusive/detail/tree_algorithms.hpp
==============================================================================
--- branches/fix-links/boost/intrusive/detail/tree_algorithms.hpp (original)
+++ branches/fix-links/boost/intrusive/detail/tree_algorithms.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -137,9 +137,9 @@
    { return uncast(header); }
 
    //! <b>Requires</b>: node is a node of the tree or an node initialized
- //! by init(...).
+ //! by init(...) or init_node.
    //!
- //! <b>Effects</b>: Returns true if the node is initialized by init().
+ //! <b>Effects</b>: Returns true if the node is initialized by init() or init_node().
    //!
    //! <b>Complexity</b>: Constant time.
    //!

Modified: branches/fix-links/boost/intrusive/detail/utilities.hpp
==============================================================================
--- branches/fix-links/boost/intrusive/detail/utilities.hpp (original)
+++ branches/fix-links/boost/intrusive/detail/utilities.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -498,8 +498,8 @@
 
 inline float fast_log2 (float val)
 {
- boost::uint32_t * const exp_ptr =
- static_cast <boost::uint32_t * const>(static_cast<void * const >(&val));
+ boost::uint32_t * exp_ptr =
+ static_cast<boost::uint32_t *>(static_cast<void*>(&val));
    boost::uint32_t x = *exp_ptr;
    const int log_2 = (int)(((x >> 23) & 255) - 128);
    x &= ~(255 << 23);

Modified: branches/fix-links/boost/intrusive/intrusive_fwd.hpp
==============================================================================
--- branches/fix-links/boost/intrusive/intrusive_fwd.hpp (original)
+++ branches/fix-links/boost/intrusive/intrusive_fwd.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -69,6 +69,7 @@
    , class O1 = none
    , class O2 = none
    , class O3 = none
+ , class O4 = none
>
 class slist;
 

Modified: branches/fix-links/boost/intrusive/list.hpp
==============================================================================
--- branches/fix-links/boost/intrusive/list.hpp (original)
+++ branches/fix-links/boost/intrusive/list.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -208,7 +208,7 @@
       : data_(v_traits)
    {
       this->priv_size_traits().set_size(size_type(0));
- node_algorithms::init(this->get_root_node());
+ node_algorithms::init_header(this->get_root_node());
    }
 
    //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
@@ -224,7 +224,7 @@
       : data_(v_traits)
    {
       this->priv_size_traits().set_size(size_type(0));
- node_algorithms::init(this->get_root_node());
+ node_algorithms::init_header(this->get_root_node());
       this->insert(this->end(), b, e);
    }
 
@@ -258,7 +258,7 @@
    {
       node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
       if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
       node_algorithms::link_before(this->get_root_node(), to_insert);
       this->priv_size_traits().increment();
    }
@@ -277,7 +277,7 @@
    {
       node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
       if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
       node_algorithms::link_before(node_traits::get_next(this->get_root_node()), to_insert);
       this->priv_size_traits().increment();
    }
@@ -569,21 +569,7 @@
    //!
    //! <b>Note</b>: Does not affect the validity of iterators and references.
    void shift_backwards(size_type n = 1)
- {
- //Null shift, nothing to do
- if(!n) return;
- node_ptr root = this->get_root_node();
- node_ptr last = node_traits::get_previous(root);
- //size() == 0 or 1, nothing to do
- if(last == node_traits::get_next(root)) return;
-
- node_algorithms::unlink(root);
- //Now get the new last node
- while(n--){
- last = node_traits::get_previous(last);
- }
- node_algorithms::link_after(last, root);
- }
+ { node_algorithms::move_forward(this->get_root_node(), n); }
 
    //! <b>Effects</b>: Moves forward all the elements, so that the second
    //! element becomes the first, the third becomes the second...
@@ -595,20 +581,7 @@
    //!
    //! <b>Note</b>: Does not affect the validity of iterators and references.
    void shift_forward(size_type n = 1)
- {
- //Null shift, nothing to do
- if(!n) return;
- node_ptr root = this->get_root_node();
- node_ptr first = node_traits::get_next(root);
- //size() == 0 or 1, nothing to do
- if(first == node_traits::get_previous(root)) return;
- node_algorithms::unlink(root);
- //Now get the new first node
- while(n--){
- first = node_traits::get_next(first);
- }
- node_algorithms::link_before(first, root);
- }
+ { node_algorithms::move_backwards(this->get_root_node(), n); }
 
    //! <b>Effects</b>: Erases the element pointed by i of the list.
    //! No destructors are called.
@@ -729,7 +702,7 @@
          this->erase(this->begin(), this->end());
       }
       else{
- node_algorithms::init(this->get_root_node());
+ node_algorithms::init_header(this->get_root_node());
          this->priv_size_traits().set_size(size_type(0));
       }
    }
@@ -794,7 +767,7 @@
    {
       node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
       if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
       node_algorithms::link_before(p.pointed_node(), to_insert);
       this->priv_size_traits().increment();
       return iterator(to_insert, this);
@@ -1234,7 +1207,7 @@
    static iterator s_iterator_to(reference value)
    {
       BOOST_STATIC_ASSERT((!stateful_value_traits));
- BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::unique(real_value_traits::to_node_ptr(value)));
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(value)));
       return iterator(real_value_traits::to_node_ptr(value), 0);
    }
 
@@ -1252,7 +1225,7 @@
    static const_iterator s_iterator_to(const_reference value)
    {
       BOOST_STATIC_ASSERT((!stateful_value_traits));
- BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::unique(real_value_traits::to_node_ptr(const_cast<reference> (value))));
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(const_cast<reference> (value))));
       return const_iterator(real_value_traits::to_node_ptr(const_cast<reference> (value)), 0);
    }
 
@@ -1267,7 +1240,7 @@
    //! <b>Note</b>: Iterators and references are not invalidated.
    iterator iterator_to(reference value)
    {
- BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::unique(real_value_traits::to_node_ptr(value)));
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(value)));
       return iterator(real_value_traits::to_node_ptr(value), this);
    }
 
@@ -1282,7 +1255,7 @@
    //! <b>Note</b>: Iterators and references are not invalidated.
    const_iterator iterator_to(const_reference value) const
    {
- BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::unique(real_value_traits::to_node_ptr(const_cast<reference> (value))));
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(const_cast<reference> (value))));
       return const_iterator(real_value_traits::to_node_ptr(const_cast<reference> (value)), this);
    }
 

Modified: branches/fix-links/boost/intrusive/options.hpp
==============================================================================
--- branches/fix-links/boost/intrusive/options.hpp (original)
+++ branches/fix-links/boost/intrusive/options.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -318,10 +318,8 @@
 /// @endcond
 };
 
-//!This option setter specifies the type of
-//!a void pointer. This will instruct the hook
-//!to use this type of pointer instead of the
-//!default one
+//!This option setter specifies the link mode
+//!(normal_link, safe_link or auto_unlink)
 template<link_mode_type LinkType>
 struct link_mode
 {
@@ -334,10 +332,8 @@
 /// @endcond
 };
 
-//!This option setter specifies the type of
-//!a void pointer. This will instruct the hook
-//!to use this type of pointer instead of the
-//!default one
+//!This option setter specifies if the hook
+//!should be optimized for size instead of for speed.
 template<bool Enabled>
 struct optimize_size
 {
@@ -350,6 +346,20 @@
 /// @endcond
 };
 
+//!This option setter specifies if the list container should
+//!use a linear implementation instead of a circular one.
+template<bool Enabled>
+struct linear
+{
+/// @cond
+ template<class Base>
+ struct pack : Base
+ {
+ static const bool linear = Enabled;
+ };
+/// @endcond
+};
+
 //!This option setter specifies the bucket traits
 //!class for unordered associative containers. When this option is specified,
 //!instead of using the default bucket traits, a user defined holder will be defined
@@ -475,6 +485,7 @@
       , tag<default_tag>
       , optimize_size<false>
       , store_hash<false>
+ , linear<false>
>::type
 {};
 

Modified: branches/fix-links/boost/intrusive/slist.hpp
==============================================================================
--- branches/fix-links/boost/intrusive/slist.hpp (original)
+++ branches/fix-links/boost/intrusive/slist.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -21,6 +21,7 @@
 #include <boost/intrusive/intrusive_fwd.hpp>
 #include <boost/intrusive/slist_hook.hpp>
 #include <boost/intrusive/circular_slist_algorithms.hpp>
+#include <boost/intrusive/linear_slist_algorithms.hpp>
 #include <boost/intrusive/detail/pointer_to_other.hpp>
 #include <boost/intrusive/link_mode.hpp>
 #include <boost/intrusive/options.hpp>
@@ -46,12 +47,13 @@
 struct get_default_slist_hook
 { typedef typename T::default_slist_hook type; };
 
-template <class ValueTraits, class SizeType, bool ConstantTimeSize>
+template <class ValueTraits, class SizeType, bool ConstantTimeSize, bool Linear>
 struct slistopt
 {
    typedef ValueTraits value_traits;
    typedef SizeType size_type;
    static const bool constant_time_size = ConstantTimeSize;
+ static const bool linear = Linear;
 };
 
 template <class T>
@@ -66,6 +68,7 @@
>::type
>
       , constant_time_size<true>
+ , linear<false>
       , size_type<std::size_t>
>::type
 {};
@@ -129,10 +132,15 @@
       <pointer, node>::type node_ptr;
    typedef typename boost::pointer_to_other
       <pointer, const node>::type const_node_ptr;
- typedef circular_slist_algorithms<node_traits> node_algorithms;
+ typedef typename detail::if_c
+ < Config::linear
+ , linear_slist_algorithms<node_traits>
+ , circular_slist_algorithms<node_traits>
+ >::type node_algorithms;
 
    static const bool constant_time_size = Config::constant_time_size;
    static const bool stateful_value_traits = detail::store_cont_ptr_on_it<slist_impl>::value;
+ static const bool linear = Config::linear;
 
    /// @cond
    private:
@@ -152,6 +160,8 @@
 
    //Constant-time size is incompatible with auto-unlink hooks!
    BOOST_STATIC_ASSERT(!(constant_time_size && ((int)real_value_traits::link_mode == (int)auto_unlink)));
+ //Linear singly linked lists are incompatible with auto-unlink hooks!
+ BOOST_STATIC_ASSERT(!(linear && ((int)real_value_traits::link_mode == (int)auto_unlink)));
 
    node_ptr get_root_node()
    { return node_ptr(&data_.root_plus_size_.root_); }
@@ -220,7 +230,7 @@
       : data_(v_traits)
    {
       this->priv_size_traits().set_size(size_type(0));
- node_algorithms::init(this->get_root_node());
+ node_algorithms::init_header(this->get_root_node());
    }
 
    //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
@@ -236,7 +246,7 @@
       : data_(v_traits)
    {
       this->priv_size_traits().set_size(size_type(0));
- node_algorithms::init(this->get_root_node());
+ node_algorithms::init_header(this->get_root_node());
       insert_after(before_begin(), b, e);
    }
 
@@ -266,7 +276,7 @@
          this->erase_after(this->before_begin(), this->end());
       }
       else{
- node_algorithms::init(this->get_root_node());
+ node_algorithms::init_header(this->get_root_node());
          this->priv_size_traits().set_size(size_type(0));
       }
    }
@@ -299,7 +309,7 @@
    {
       node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
       if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(to_insert));
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
       node_algorithms::link_after(this->get_root_node(), to_insert);
       this->priv_size_traits().increment();
    }
@@ -385,7 +395,7 @@
    //!
    //! <b>Complexity</b>: Constant.
    iterator end()
- { return iterator (this->get_root_node(), this); }
+ { return iterator (linear ? 0 : this->get_root_node(), this); }
 
    //! <b>Effects</b>: Returns a const_iterator to the end of the list.
    //!
@@ -393,7 +403,7 @@
    //!
    //! <b>Complexity</b>: Constant.
    const_iterator end() const
- { return const_iterator (uncast(this->get_root_node()), this); }
+ { return const_iterator (linear ? 0 : uncast(this->get_root_node()), this); }
 
    //! <b>Effects</b>: Returns a const_iterator to the end of the list.
    //!
@@ -401,7 +411,7 @@
    //!
    //! <b>Complexity</b>: Constant.
    const_iterator cend() const
- { return const_iterator (uncast(this->get_root_node()), this); }
+ { return this->end(); }
 
    //! <b>Effects</b>: Returns an iterator that points to a position
    //! before the first element. Equivalent to "end()"
@@ -410,7 +420,7 @@
    //!
    //! <b>Complexity</b>: Constant.
    iterator before_begin()
- { return end(); }
+ { return iterator(this->get_root_node(), this); }
 
    //! <b>Effects</b>: Returns an iterator that points to a position
    //! before the first element. Equivalent to "end()"
@@ -419,7 +429,7 @@
    //!
    //! <b>Complexity</b>: Constant.
    const_iterator before_begin() const
- { return end(); }
+ { return const_iterator(uncast(this->get_root_node()), this); }
 
    //! <b>Effects</b>: Returns an iterator that points to a position
    //! before the first element. Equivalent to "end()"
@@ -428,7 +438,7 @@
    //!
    //! <b>Complexity</b>: Constant.
    const_iterator cbefore_begin() const
- { return end(); }
+ { return this->before_begin(); }
 
    //! <b>Precondition</b>: end_iterator must be a valid end iterator
    //! of slist.
@@ -487,7 +497,7 @@
    //! <b>Note</b>: Does not affect the validity of iterators and references.
    void swap(slist_impl& other)
    {
- node_algorithms::swap_nodes(this->get_root_node(), other.get_root_node());
+ priv_swap_lists(this->get_root_node(), other.get_root_node(), detail::bool_<linear>());
       if(constant_time_size){
          size_type backup = this->priv_size_traits().get_size();
          this->priv_size_traits().set_size(other.priv_size_traits().get_size());
@@ -506,43 +516,7 @@
    //! <b>Note</b>: Iterators Does not affect the validity of iterators and references.
    void shift_backwards(size_type n = 1)
    {
- //Null shift, nothing to do
- if(!n) return;
- node_ptr root = this->get_root_node();
- node_ptr first = node_traits::get_next(root);
-
- //size() == 0 or 1, nothing to do
- if(node_traits::get_next(first) == root) return;
-
- //Iterate until the root node is found to know where the current last node is.
- //If the shift count is less than the size of the list, we can also obtain
- //the position of the new last node after the shift.
- node_ptr old_last(first), next_to_it, new_last(root);
- size_type distance = 1;
- while(root != (next_to_it = node_traits::get_next(old_last))){
- if(++distance > n)
- new_last = node_traits::get_next(new_last);
- old_last = next_to_it;
- }
- //If the shift was bigger or equal than the size, obtain the equivalent
- //forward shifts and find the new last node.
- if(distance <= n){
- //Now find the equivalent forward shifts.
- //Shorcut the shift with the modulo of the size of the list
- size_type new_before_last_pos = (distance - (n % distance))% distance;
- //If the shift is a multiple of the size there is nothing to do
- if(!new_before_last_pos) return;
-
- for( new_last = root
- ; new_before_last_pos--
- ; new_last = node_traits::get_next(new_last)){
- //empty
- }
- }
-
- //Now unlink the root node and link it after the new last node
- node_algorithms::unlink_after(old_last);
- node_algorithms::link_after(new_last, root);
+ priv_shift_backwards(n, detail::bool_<linear>());
    }
 
    //! <b>Effects</b>: Moves forward all the elements, so that the second
@@ -556,43 +530,7 @@
    //! <b>Note</b>: Does not affect the validity of iterators and references.
    void shift_forward(size_type n = 1)
    {
- //Null shift, nothing to do
- if(!n) return;
- node_ptr root = this->get_root_node();
- node_ptr first = node_traits::get_next(root);
-
- //size() == 0 or 1, nothing to do
- if(node_traits::get_next(first) == root) return;
-
- bool end_found = false;
- node_ptr new_last(0);
-
- //Now find the new last node according to the shift count.
- //If we find the root node before finding the new last node
- //unlink the root, shortcut the search now that we know the size of the list
- //and continue.
- for(size_type i = 1; i <= n; ++i){
- new_last = first;
- first = node_traits::get_next(first);
- if(first == root){
- //Shorcut the shift with the modulo of the size of the list
- n %= i;
- i = 0;
- //Unlink the root node and continue the new first node search
- first = node_traits::get_next(first);
- node_algorithms::unlink_after(new_last);
- end_found = true;
- }
- }
-
- //If the root node has not been found in the previous loop, find it
- //starting in the new first node and unlink it
- if(!end_found){
- node_algorithms::unlink_after(node_algorithms::get_previous_node(first, root));
- }
-
- //Now link the root node after the new last node
- node_algorithms::link_after(new_last, root);
+ priv_shift_forward(n, detail::bool_<linear>());
    }
 
    //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
@@ -643,7 +581,7 @@
    {
       node_ptr n = get_real_value_traits().to_node_ptr(value);
       if(safemode_or_autounlink)
- BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::unique(n));
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(n));
       node_algorithms::link_after(prev_p.pointed_node(), n);
       this->priv_size_traits().increment();
       return iterator (n, this);
@@ -712,16 +650,7 @@
    //! <b>Note</b>: Invalidates the iterators (but not the references) to the
    //! erased element.
    iterator erase_after(iterator prev)
- {
- iterator it(prev); ++it;
- node_ptr to_erase(it.pointed_node());
- node_algorithms::unlink_after(prev.pointed_node());
- this->priv_size_traits().decrement();
- iterator ret(++prev);
- if(safemode_or_autounlink)
- node_algorithms::init(to_erase);
- return ret;
- }
+ { return this->erase_after_and_dispose(prev, detail::null_disposer()); }
 
    //! <b>Effects</b>: Erases the range (before_first, last) from
    //! the list. No destructors are called.
@@ -731,18 +660,12 @@
    //!
    //! <b>Throws</b>: Nothing.
    //!
- //! <b>Complexity</b>: Lineal to the elements (last - before_first).
+ //! <b>Complexity</b>: Lineal to the elements (last - before_first + 1).
    //!
    //! <b>Note</b>: Invalidates the iterators (but not the references) to the
    //! erased element.
    iterator erase_after(iterator before_first, iterator last)
- {
- iterator first;
- while(++(first = before_first) != last){
- this->erase_after(before_first);
- }
- return last;
- }
+ { return this->erase_after_and_dispose(before_first, last, detail::null_disposer()); }
 
    //! <b>Effects</b>: Erases the element pointed by i of the list.
    //! No destructors are called.
@@ -794,11 +717,16 @@
    template<class Disposer>
    iterator erase_after_and_dispose(iterator prev, Disposer disposer)
    {
- iterator it(prev); ++it;
+ iterator it(prev);
+ ++it;
       node_ptr to_erase(it.pointed_node());
- iterator ret(this->erase_after(prev));
+ ++it;
+ node_algorithms::unlink_after(prev.pointed_node());
+ this->priv_size_traits().decrement();
+ if(safemode_or_autounlink)
+ node_algorithms::init(to_erase);
       disposer(get_real_value_traits().to_value_ptr(to_erase));
- return ret;
+ return it;
    }
 
    //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
@@ -818,9 +746,10 @@
    template<class Disposer>
    iterator erase_after_and_dispose(iterator before_first, iterator last, Disposer disposer)
    {
- iterator first;
- while(++(first = before_first) != last){
- this->erase_after_and_dispose(before_first, disposer);
+ iterator next(before_first);
+ ++next;
+ while(next != last){
+ next = this->erase_after_and_dispose(before_first, disposer);
       }
       return last;
    }
@@ -931,7 +860,7 @@
          iterator last_x(x.previous(x.end()));
          node_algorithms::transfer_after
             ( prev.pointed_node()
- , x.end().pointed_node()
+ , x.before_begin().pointed_node()
             , last_x.pointed_node());
          this->priv_size_traits().set_size(this->priv_size_traits().get_size() + x.priv_size_traits().get_size());
          x.priv_size_traits().set_size(size_type(0));
@@ -1133,12 +1062,12 @@
                (last_inserted.pointed_node(), carry.end().pointed_node());
             iterator last_element(p, this);
             if(constant_time_size){
- counter[i].splice_after( counter[i].end(), carry
+ counter[i].splice_after( counter[i].before_begin(), carry
                                       , carry.before_begin(), last_element
                                       , carry.size());
             }
             else{
- counter[i].splice_after( counter[i].end(), carry
+ counter[i].splice_after( counter[i].before_begin(), carry
                                       , carry.before_begin(), last_element);
             }
             if(i == fill)
@@ -1153,11 +1082,11 @@
             (last_inserted.pointed_node(), counter[--fill].end().pointed_node());
          iterator last_element(p, this);
          if(constant_time_size){
- this->splice_after( end(), counter[fill], counter[fill].before_begin()
+ this->splice_after( before_begin(), counter[fill], counter[fill].before_begin()
                               , last_element, counter[fill].size());
          }
          else{
- this->splice_after( end(), counter[fill], counter[fill].before_begin()
+ this->splice_after( before_begin(), counter[fill], counter[fill].before_begin()
                               , last_element);
          }
       }
@@ -1201,14 +1130,14 @@
    template<class Predicate>
    iterator merge(slist_impl& x, Predicate p)
    {
- iterator a(before_begin()), e(end()), ax(x.before_begin());
+ iterator a(before_begin()), e(end()), ax(x.before_begin()), ex(x.end());
       iterator last_inserted(e);
       iterator a_next;
       while(++(a_next = a) != e && !x.empty()) {
          iterator ix(ax);
          iterator cx;
          size_type n(0);
- while(++(cx = ix) != ax && p(*cx, *a_next)){
+ while(++(cx = ix) != ex && p(*cx, *a_next)){
             ++ix; ++n;
          }
          if(ax != ix){
@@ -1235,7 +1164,7 @@
    //!
    //! <b>Note</b>: Iterators and references are not invalidated
    void merge(slist_impl& x)
- { this->merge(x, std::less<value_type>()); }
+ { this->merge(x, std::less<value_type>()); }
 
    //! <b>Effects</b>: Reverses the order of elements in the list.
    //!
@@ -1245,7 +1174,7 @@
    //!
    //! <b>Note</b>: Iterators and references are not invalidated
    void reverse()
- { node_algorithms::reverse(this->get_root_node()); }
+ { priv_reverse(detail::bool_<linear>()); }
 
    //! <b>Effects</b>: Removes all the elements that compare equal to value.
    //! No destructors are called.
@@ -1406,7 +1335,7 @@
    static iterator s_iterator_to(reference value)
    {
       BOOST_STATIC_ASSERT((!stateful_value_traits));
- BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::unique(value_traits::to_node_ptr(value)));
+ //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(value)));
       return iterator (value_traits::to_node_ptr(value), 0);
    }
 
@@ -1424,7 +1353,7 @@
    static const_iterator s_iterator_to(const_reference value)
    {
       BOOST_STATIC_ASSERT((!stateful_value_traits));
- BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::unique(value_traits::to_node_ptr(const_cast<reference> (value))));
+ //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(const_cast<reference> (value))));
       return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), 0);
    }
 
@@ -1439,7 +1368,7 @@
    //! <b>Note</b>: Iterators and references are not invalidated.
    iterator iterator_to(reference value)
    {
- BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::unique(value_traits::to_node_ptr(value)));
+ //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(value)));
       return iterator (value_traits::to_node_ptr(value), this);
    }
 
@@ -1454,7 +1383,7 @@
    //! <b>Note</b>: Iterators and references are not invalidated.
    const_iterator iterator_to(const_reference value) const
    {
- BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::unique(value_traits::to_node_ptr(const_cast<reference> (value))));
+ //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(const_cast<reference> (value))));
       return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), this);
    }
 
@@ -1487,8 +1416,54 @@
    }
 
    private:
+
+ void priv_reverse(detail::bool_<false>)
+ { node_algorithms::reverse(this->get_root_node()); }
+
+ void priv_reverse(detail::bool_<true>)
+ {
+ node_ptr new_first = node_algorithms::reverse
+ (node_traits::get_next(this->get_root_node()));
+ node_traits::set_next(this->get_root_node(), new_first);
+ }
+
+ void priv_shift_backwards(size_type n, detail::bool_<false>)
+ {
+ node_algorithms::move_forward(this->get_root_node(), (std::size_t)n);
+ }
+
+ void priv_shift_backwards(size_type n, detail::bool_<true>)
+ {
+ node_ptr new_first = node_algorithms::move_forward
+ (node_traits::get_next(this->get_root_node()), (std::size_t)n);
+ node_traits::set_next(this->get_root_node(), new_first);
+ }
+
+ void priv_shift_forward(size_type n, detail::bool_<false>)
+ {
+ node_algorithms::move_backwards(this->get_root_node(), (std::size_t)n);
+ }
+
+ void priv_shift_forward(size_type n, detail::bool_<true>)
+ {
+ node_ptr new_first = node_algorithms::move_backwards
+ (node_traits::get_next(this->get_root_node()), (std::size_t)n);
+ node_traits::set_next(this->get_root_node(), new_first);
+ }
+
+ //circular version
+ static void priv_swap_lists(node_ptr this_node, node_ptr other_node, detail::bool_<false>)
+ { node_algorithms::swap_nodes(this_node, other_node); }
+
+ //linear version
+ static void priv_swap_lists(node_ptr this_node, node_ptr other_node, detail::bool_<true>)
+ { node_algorithms::swap_trailing_nodes(this_node, other_node); }
+
    static slist_impl &priv_container_from_end_iterator(const const_iterator &end_iterator)
    {
+ //Obtaining the container from the end iterator is not possible with linear
+ //singly linked lists (because "end" is represented by the null pointer)
+ BOOST_STATIC_ASSERT(!linear);
       root_plus_size *r = detail::parent_from_member<root_plus_size, node>
          ( detail::get_pointer(end_iterator.pointed_node()), &root_plus_size::root_);
       data_t *d = detail::parent_from_member<data_t, root_plus_size>
@@ -1620,13 +1595,13 @@
 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
 template<class T, class ...Options>
 #else
-template<class T, class O1 = none, class O2 = none, class O3 = none>
+template<class T, class O1 = none, class O2 = none, class O3 = none, class O4 = none>
 #endif
 struct make_slist
 {
    /// @cond
    typedef typename pack_options
- < slist_defaults<T>, O1, O2, O3>::type packed_options;
+ < slist_defaults<T>, O1, O2, O3, O4>::type packed_options;
    typedef typename detail::get_value_traits
       <T, typename packed_options::value_traits>::type value_traits;
    typedef slist_impl
@@ -1635,6 +1610,7 @@
          < value_traits
          , typename packed_options::size_type
          , packed_options::constant_time_size
+ , packed_options::linear
>
> implementation_defined;
    /// @endcond
@@ -1643,12 +1619,12 @@
 
 
 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
-template<class T, class O1, class O2, class O3>
+template<class T, class O1, class O2, class O3, class O4>
 class slist
- : public make_slist<T, O1, O2, O3>::type
+ : public make_slist<T, O1, O2, O3, O4>::type
 {
    typedef typename make_slist
- <T, O1, O2, O3>::type Base;
+ <T, O1, O2, O3, O4>::type Base;
    typedef typename Base::real_value_traits real_value_traits;
    //Assert if passed value traits are compatible with the type
    BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));

Modified: branches/fix-links/boost/intrusive/slist_hook.hpp
==============================================================================
--- branches/fix-links/boost/intrusive/slist_hook.hpp (original)
+++ branches/fix-links/boost/intrusive/slist_hook.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -19,6 +19,7 @@
 #include <boost/intrusive/detail/utilities.hpp>
 #include <boost/intrusive/detail/slist_node.hpp>
 #include <boost/intrusive/circular_slist_algorithms.hpp>
+#include <boost/intrusive/link_mode.hpp>
 #include <boost/intrusive/options.hpp>
 #include <boost/intrusive/detail/generic_hook.hpp>
 
@@ -31,6 +32,7 @@
 {
    typedef circular_slist_algorithms<slist_node_traits<VoidPointer> > type;
 };
+
 /// @endcond
 
 //! Helper metafunction to define a \c slist_base_hook that yields to the same

Modified: branches/fix-links/boost/iostreams/code_converter.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/code_converter.hpp (original)
+++ branches/fix-links/boost/iostreams/code_converter.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -311,10 +311,9 @@
 std::streamsize code_converter<Device, Codevt, Alloc>::read
     (char_type* s, std::streamsize n)
 {
- using namespace std;
     const extern_type* next; // Next external char.
     intern_type* nint; // Next internal char.
- streamsize total = 0; // Characters read.
+ std::streamsize total = 0; // Characters read.
     int status = iostreams::char_traits<char>::good();
     bool partial = false;
     buffer_type& buf = in();
@@ -330,28 +329,28 @@
         }
 
         // Convert.
- codecvt_base::result result =
+ std::codecvt_base::result result =
             cvt().in( buf.state(),
                       buf.ptr(), buf.eptr(), next,
                       s + total, s + n, nint );
         buf.ptr() += next - buf.ptr();
- total = static_cast<streamsize>(nint - s);
+ total = static_cast<std::streamsize>(nint - s);
 
         switch (result) {
- case codecvt_base::partial:
+ case std::codecvt_base::partial:
             partial = true;
             break;
- case codecvt_base::ok:
+ case std::codecvt_base::ok:
             break;
- case codecvt_base::noconv:
+ case std::codecvt_base::noconv:
             {
- streamsize amt =
- std::min<streamsize>(next - buf.ptr(), n - total);
+ std::streamsize amt =
+ std::min<std::streamsize>(next - buf.ptr(), n - total);
                 detail::strncpy_if_same(s + total, buf.ptr(), amt);
                 total += amt;
             }
             break;
- case codecvt_base::error:
+ case std::codecvt_base::error:
         default:
             buf.state() = state_type();
             throw code_conversion_error();
@@ -366,11 +365,10 @@
 std::streamsize code_converter<Device, Codevt, Alloc>::write
     (const char_type* s, std::streamsize n)
 {
- using namespace std;
     buffer_type& buf = out();
     extern_type* next; // Next external char.
     const intern_type* nint; // Next internal char.
- streamsize total = 0; // Characters written.
+ std::streamsize total = 0; // Characters written.
     bool partial = false;
 
     while (total < n) {
@@ -383,7 +381,7 @@
         }
        
         // Convert.
- codecvt_base::result result =
+ std::codecvt_base::result result =
             cvt().out( buf.state(),
                        s + total, s + n, nint,
                        buf.eptr(), buf.end(), next );
@@ -391,21 +389,21 @@
         buf.eptr() += progress;
 
         switch (result) {
- case codecvt_base::partial:
+ case std::codecvt_base::partial:
             partial = true; // Fall through.
- case codecvt_base::ok:
- total = static_cast<streamsize>(nint - s);
+ case std::codecvt_base::ok:
+ total = static_cast<std::streamsize>(nint - s);
             break;
- case codecvt_base::noconv:
+ case std::codecvt_base::noconv:
             {
- streamsize amt =
- std::min<streamsize>( nint - total - s,
- buf.end() - buf.eptr() );
+ std::streamsize amt =
+ std::min<std::streamsize>( nint - total - s,
+ buf.end() - buf.eptr() );
                 detail::strncpy_if_same(buf.eptr(), s + total, amt);
                 total += amt;
             }
             break;
- case codecvt_base::error:
+ case std::codecvt_base::error:
         default:
             buf.state() = state_type();
             throw code_conversion_error();

Modified: branches/fix-links/boost/iostreams/combine.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/combine.hpp (original)
+++ branches/fix-links/boost/iostreams/combine.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -26,6 +26,9 @@
 #include <boost/type_traits/is_convertible.hpp>
 #include <boost/type_traits/is_same.hpp>
 
+// Must come last.
+#include <boost/iostreams/detail/config/disable_warnings.hpp>
+
 namespace boost { namespace iostreams {
 
 namespace detail {
@@ -96,12 +99,22 @@
 
     template<typename Sink>
     void close(Sink& snk, BOOST_IOS::openmode which)
- {
- if (which == BOOST_IOS::in)
+ {
+ if (which == BOOST_IOS::in) {
+ if (is_convertible<in_category, dual_use>::value) {
+ iostreams::close(in_, snk, BOOST_IOS::in);
+ } else {
                 detail::close_all(in_, snk);
- if (which == BOOST_IOS::out)
+ }
+ }
+ if (which == BOOST_IOS::out) {
+ if (is_convertible<out_category, dual_use>::value) {
+ iostreams::close(out_, snk, BOOST_IOS::out);
+ } else {
                 detail::close_all(out_, snk);
+ }
         }
+ }
     #ifndef BOOST_NO_STD_LOCALE
         void imbue(const std::locale& loc);
     #endif
@@ -230,4 +243,6 @@
 
 } } // End namespaces iostreams, boost.
 
+#include <boost/iostreams/detail/config/enable_warnings.hpp>
+
 #endif // #ifndef BOOST_IOSTREAMS_COMBINE_HPP_INCLUDED

Modified: branches/fix-links/boost/iostreams/compose.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/compose.hpp (original)
+++ branches/fix-links/boost/iostreams/compose.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -65,6 +65,8 @@
 class composite_device {
 private:
     typedef typename detail::param_type<Device>::type param_type;
+ typedef typename mode_of<Filter>::type filter_mode;
+ typedef typename mode_of<Device>::type device_mode;
     typedef typename
             iostreams::select< // Disambiguation for Tru64.
                 is_direct<Device>, direct_adapter<Device>,
@@ -120,7 +122,23 @@
               BOOST_DEDUCED_TYPENAME composite_mode<Filter1, Filter2>::type >
 class composite_filter {
 private:
- typedef reference_wrapper<Filter2> filter_ref;
+ typedef reference_wrapper<Filter2> filter_ref;
+ typedef typename mode_of<Filter1>::type first_mode;
+ typedef typename mode_of<Filter2>::type second_mode;
+
+ // A dual-use filter cannot be composed with a read-write filter
+ BOOST_STATIC_ASSERT(
+ !(is_convertible<first_mode, dual_use>::value) ||
+ !(is_convertible<second_mode, input>::value) ||
+ !(is_convertible<second_mode, output>::value) ||
+ (is_convertible<second_mode, dual_use>::value)
+ );
+ BOOST_STATIC_ASSERT(
+ !(is_convertible<second_mode, dual_use>::value) ||
+ !(is_convertible<first_mode, input>::value) ||
+ !(is_convertible<first_mode, output>::value) ||
+ (is_convertible<first_mode, dual_use>::value)
+ );
 public:
     typedef typename char_type_of<Filter1>::type char_type;
     struct category
@@ -170,12 +188,24 @@
 
         // Close input sequences in reverse order and output sequences in
         // forward order
- detail::execute_all(
- detail::call_close(filter2_, dev, BOOST_IOS::in),
- detail::call_close(filter1_, cmp, BOOST_IOS::in),
- detail::call_close(filter1_, cmp, BOOST_IOS::out),
- detail::call_close(filter2_, dev, BOOST_IOS::out)
- );
+ if (!is_convertible<first_mode, dual_use>::value) {
+ detail::execute_all(
+ detail::call_close(filter2_, dev, BOOST_IOS::in),
+ detail::call_close(filter1_, cmp, BOOST_IOS::in),
+ detail::call_close(filter1_, cmp, BOOST_IOS::out),
+ detail::call_close(filter2_, dev, BOOST_IOS::out)
+ );
+ } else if (is_convertible<second_mode, input>::value) {
+ detail::execute_all(
+ detail::call_close(filter2_, dev, BOOST_IOS::in),
+ detail::call_close(filter1_, cmp, BOOST_IOS::in)
+ );
+ } else {
+ detail::execute_all(
+ detail::call_close(filter1_, cmp, BOOST_IOS::out),
+ detail::call_close(filter2_, dev, BOOST_IOS::out)
+ );
+ }
     }
 
     template<typename Device>
@@ -190,18 +220,26 @@
         composite_device<filter_ref, Device> cmp(boost::ref(filter2_), dev);
 
         // Close input sequences in reverse order
- if (which == BOOST_IOS::in)
+ if ( which == BOOST_IOS::in &&
+ ( !is_convertible<first_mode, dual_use>::value ||
+ is_convertible<second_mode, input>::value ) )
+ {
             detail::execute_all(
                 detail::call_close(filter2_, dev, BOOST_IOS::in),
                 detail::call_close(filter1_, cmp, BOOST_IOS::in)
             );
+ }
 
         // Close output sequences in forward order
- if (which == BOOST_IOS::out)
+ if ( which == BOOST_IOS::out &&
+ ( !is_convertible<first_mode, dual_use>::value ||
+ is_convertible<second_mode, output>::value ) )
+ {
             detail::execute_all(
                 detail::call_close(filter1_, cmp, BOOST_IOS::out),
                 detail::call_close(filter2_, dev, BOOST_IOS::out)
             );
+ }
     }
 
     template<typename Device>
@@ -378,33 +416,55 @@
 void composite_device<Filter, Device, Mode>::close()
 {
     BOOST_STATIC_ASSERT((!is_convertible<Mode, two_sequence>::value));
+ BOOST_STATIC_ASSERT(
+ !(is_convertible<filter_mode, dual_use>::value) ||
+ !(is_convertible<device_mode, input>::value) ||
+ !(is_convertible<device_mode, output>::value)
+ );
 
     // Close input sequences in reverse order and output sequences
     // in forward order
- detail::execute_all( detail::call_close(device_, BOOST_IOS::in),
- detail::call_close(filter_, device_, BOOST_IOS::in),
- detail::call_close(filter_, device_, BOOST_IOS::out),
- detail::call_close(device_, BOOST_IOS::out) );
+ if (!is_convertible<filter_mode, dual_use>::value) {
+ detail::execute_all(
+ detail::call_close(device_, BOOST_IOS::in),
+ detail::call_close(filter_, device_, BOOST_IOS::in),
+ detail::call_close(filter_, device_, BOOST_IOS::out),
+ detail::call_close(device_, BOOST_IOS::out)
+ );
+ } else if (is_convertible<device_mode, input>::value) {
+ detail::execute_all(
+ detail::call_close(device_, BOOST_IOS::in),
+ detail::call_close(filter_, device_, BOOST_IOS::in)
+ );
+ } else {
+ detail::execute_all(
+ detail::call_close(filter_, device_, BOOST_IOS::out),
+ detail::call_close(device_, BOOST_IOS::out)
+ );
+ }
 }
 
 template<typename Filter, typename Device, typename Mode>
 void composite_device<Filter, Device, Mode>::close(BOOST_IOS::openmode which)
 {
     BOOST_STATIC_ASSERT((is_convertible<Mode, two_sequence>::value));
+ BOOST_STATIC_ASSERT(!(is_convertible<filter_mode, dual_use>::value));
 
     // Close input sequences in reverse order
- if (which == BOOST_IOS::in)
+ if (which == BOOST_IOS::in) {
         detail::execute_all(
             detail::call_close(device_, BOOST_IOS::in),
             detail::call_close(filter_, device_, BOOST_IOS::in)
         );
+ }
 
     // Close output sequences in forward order
- if (which == BOOST_IOS::out)
+ if (which == BOOST_IOS::out) {
         detail::execute_all(
             detail::call_close(filter_, device_, BOOST_IOS::out),
             detail::call_close(device_, BOOST_IOS::out)
         );
+ }
 }
 
 template<typename Filter, typename Device, typename Mode>

Modified: branches/fix-links/boost/iostreams/copy.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/copy.hpp (original)
+++ branches/fix-links/boost/iostreams/copy.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -56,11 +56,11 @@
 {
     using namespace std;
     typedef typename char_type_of<Source>::type char_type;
- typedef pair<char_type*, char_type*> pair_type;
+ typedef std::pair<char_type*, char_type*> pair_type;
     pair_type p1 = iostreams::input_sequence(src);
     pair_type p2 = iostreams::output_sequence(snk);
- streamsize total =
- static_cast<streamsize>(
+ std::streamsize total =
+ static_cast<std::streamsize>(
             (std::min)(p1.second - p1.first, p2.second - p2.first)
         );
     std::copy(p1.first, p1.first + total, p2.first);
@@ -75,10 +75,10 @@
 {
     using namespace std;
     typedef typename char_type_of<Source>::type char_type;
- typedef pair<char_type*, char_type*> pair_type;
+ typedef std::pair<char_type*, char_type*> pair_type;
     pair_type p = iostreams::input_sequence(src);
     std::streamsize size, total;
- for ( total = 0, size = static_cast<streamsize>(p.second - p.first);
+ for ( total = 0, size = static_cast<std::streamsize>(p.second - p.first);
           total < size; )
     {
         std::streamsize amt =
@@ -94,19 +94,20 @@
                            std::streamsize buffer_size,
                            mpl::false_, mpl::true_ )
 {
- using namespace std;
     typedef typename char_type_of<Source>::type char_type;
- typedef pair<char_type*, char_type*> pair_type;
+ typedef std::pair<char_type*, char_type*> pair_type;
     detail::basic_buffer<char_type> buf(buffer_size);
     pair_type p = snk.output_sequence();
- streamsize total = 0;
- ptrdiff_t capacity = p.second - p.first;
+ std::streamsize total = 0;
+ std::ptrdiff_t capacity = p.second - p.first;
     while (true) {
- streamsize amt =
+ std::streamsize amt =
             iostreams::read(
                 src,
                 buf.data(),
- (std::min)(buffer_size, capacity - total)
+ buffer_size < capacity - total ?
+ buffer_size :
+ static_cast<std::streamsize>(capacity - total)
             );
         if (amt == -1)
             break;

Modified: branches/fix-links/boost/iostreams/detail/adapter/direct_adapter.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/adapter/direct_adapter.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/adapter/direct_adapter.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -42,9 +42,10 @@
 template<typename Direct>
 class direct_adapter_base {
 public:
- typedef typename char_type_of<Direct>::type char_type;
+ typedef typename char_type_of<Direct>::type char_type;
+ typedef typename mode_of<Direct>::type mode_type;
     struct category
- : mode_of<Direct>::type,
+ : mode_type,
           device_tag,
           closable_tag
           #ifndef BOOST_IOSTREAMS_NO_LOCALE
@@ -192,9 +193,9 @@
 {
     using namespace std;
     pointers& get = ptrs_.first();
- streamsize avail =
- static_cast<streamsize>(get.end - get.ptr);
- streamsize result = (std::min)(n, avail);
+ std::streamsize avail =
+ static_cast<std::streamsize>(get.end - get.ptr);
+ std::streamsize result = (std::min)(n, avail);
     std::copy(get.ptr, get.ptr + result, s);
     get.ptr += result;
     return result != 0 ? result : -1;
@@ -206,7 +207,7 @@
 {
     using namespace std;
     pointers& put = ptrs_.second();
- if (n > static_cast<streamsize>(put.end - put.ptr))
+ if (n > static_cast<std::streamsize>(put.end - put.ptr))
         throw write_area_exhausted();
     std::copy(s, s + n, put.ptr);
     put.ptr += n;
@@ -222,7 +223,7 @@
     pointers& get = ptrs_.first();
     pointers& put = ptrs_.second();
     if (way == BOOST_IOS::cur && get.ptr != put.ptr)
- bad_seek();
+ throw bad_seek();
     ptrdiff_t next = 0;
     if ((which & BOOST_IOS::in) || !is_double::value) {
         if (way == BOOST_IOS::beg)
@@ -231,10 +232,10 @@
             next = get.ptr - get.beg + off;
         else
             next = get.end - get.beg + off;
- if (next >= 0 && next < get.end - get.beg)
+ if (next >= 0 && next <= get.end - get.beg)
             get.ptr = get.beg + next;
         else
- bad_seek();
+ throw bad_seek();
     }
     if ((which & BOOST_IOS::out) && is_double::value) {
         if (way == BOOST_IOS::beg)
@@ -243,10 +244,10 @@
             next = put.ptr - put.beg + off;
         else
             next = put.end - put.beg + off;
- if (next >= 0 && next < put.end - put.beg)
+ if (next >= 0 && next <= put.end - put.beg)
             put.ptr = put.beg + next;
         else
- bad_seek();
+ throw bad_seek();
     }
     return offset_to_position(next);
 }

Modified: branches/fix-links/boost/iostreams/detail/adapter/range_adapter.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/adapter/range_adapter.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/adapter/range_adapter.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -155,18 +155,18 @@
         using namespace std;
         switch (way) {
         case BOOST_IOS::beg:
- if (off > last - first || off < 0) bad_seek();
+ if (off > last - first || off < 0) throw bad_seek();
             cur = first + off;
             break;
         case BOOST_IOS::cur:
             {
                 std::ptrdiff_t newoff = cur - first + off;
- if (newoff > last - first || newoff < 0) bad_seek();
+ if (newoff > last - first || newoff < 0) throw bad_seek();
                 cur += off;
                 break;
             }
         case BOOST_IOS::end:
- if (last - first + off < 0 || off > 0) bad_seek();
+ if (last - first + off < 0 || off > 0) throw bad_seek();
             cur = last + off;
             break;
         default:

Modified: branches/fix-links/boost/iostreams/detail/buffer.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/buffer.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/buffer.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -95,11 +95,11 @@
     typename int_type_of<Source>::type fill(Source& src)
     {
         using namespace std;
- streamsize keep;
- if ((keep = static_cast<streamsize>(eptr_ - ptr_)) > 0)
+ std::streamsize keep;
+ if ((keep = static_cast<std::streamsize>(eptr_ - ptr_)) > 0)
             traits_type::move(this->data(), ptr_, keep);
         set(0, keep);
- streamsize result =
+ std::streamsize result =
             iostreams::read(src, this->data() + keep, this->size() - keep);
         if (result != -1)
             this->set(0, keep + result);
@@ -121,8 +121,8 @@
     bool flush(Sink& dest)
     {
         using namespace std;
- streamsize amt = static_cast<std::streamsize>(eptr_ - ptr_);
- streamsize result = iostreams::write_if(dest, ptr_, amt);
+ std::streamsize amt = static_cast<std::streamsize>(eptr_ - ptr_);
+ std::streamsize result = iostreams::write_if(dest, ptr_, amt);
         if (result < amt) {
             traits_type::move( this->data(),
                                ptr_ + result,

Modified: branches/fix-links/boost/iostreams/detail/config/codecvt.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/config/codecvt.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/config/codecvt.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -40,7 +40,10 @@
 
 //------------------Normalize codecvt::length---------------------------------//
 
-#if !defined(__MSL_CPP__) && !defined(__LIBCOMO__)
+#if !defined(__MSL_CPP__) && !defined(__LIBCOMO__) && \
+ (!defined(BOOST_RWSTD_VER) || BOOST_RWSTD_VER < 0x04010300) && \
+ (!defined(__MACH__) || !defined(__INTEL_COMPILER))
+ /**/
 # define BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER const
 #else
 # define BOOST_IOSTREAMS_CODECVT_CV_QUALIFIER

Modified: branches/fix-links/boost/iostreams/detail/config/disable_warnings.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/config/disable_warnings.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/config/disable_warnings.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -18,6 +18,7 @@
 #else
 # if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
 # pragma warn -8008 // Condition always true/false.
+# pragma warn -8066 // Unreachable code.
 # pragma warn -8071 // Conversion may lose significant digits.
 # pragma warn -8072 // Suspicious pointer arithmetic.
 # pragma warn -8080 // identifier declared but never used.

Modified: branches/fix-links/boost/iostreams/detail/config/enable_warnings.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/config/enable_warnings.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/config/enable_warnings.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -9,7 +9,9 @@
 #else
 # if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
 # pragma warn .8008 // Condition always true/false.
+# pragma warn .8066 // Unreachable code.
 # pragma warn .8071 // Conversion may lose significant digits.
+# pragma warn .8072 // Suspicious pointer arithmetic.
 # pragma warn .8080 // identifier declared but never used.
 # endif
 #endif

Modified: branches/fix-links/boost/iostreams/detail/execute.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/execute.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/execute.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -18,13 +18,9 @@
  * are thrown. If one of the operations throws an exception, performs the
  * remaining operations and rethrows the initial exception.
  *
- * In order to preserve support for old compilers, no attempt is made to deduce
- * the return type of the primary operation, even though it could be easily
- * deduced in all the intended use cases.
- *
  * execute_foreach() is a variant of std::foreach which invokes a function
  * object for each item in a sequence, catching all execptions and rethrowing
- * the first caucht exception after the function object has been invoked on each
+ * the first caught exception after the function object has been invoked on each
  * item.
  */
 
@@ -35,7 +31,8 @@
 # pragma once
 #endif
 
-#include <boost/config.hpp> // BOOST_NO_RESULT_OF
+#include <boost/config.hpp>
+#include <boost/detail/workaround.hpp>
 #include <boost/iostreams/detail/config/limits.hpp> // MAX_EXECUTE_ARITY
 #include <boost/preprocessor/arithmetic/dec.hpp>
 #include <boost/preprocessor/cat.hpp>
@@ -43,9 +40,7 @@
 #include <boost/preprocessor/repetition/enum_params.hpp>
 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
 #include <boost/preprocessor/punctuation/comma_if.hpp>
-#ifndef BOOST_NO_RESULT_OF
-# include <boost/utility/result_of.hpp>
-#endif
+#include <boost/utility/result_of.hpp>
 
 namespace boost { namespace iostreams { namespace detail {
 
@@ -70,11 +65,12 @@
 // returning void and non-void.
 template< typename Op,
           typename Result = // VC6.5 workaround.
- #ifndef BOOST_NO_RESULT_OF
+ #if !defined(BOOST_NO_RESULT_OF) && \
+ !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x592))
                   typename boost::result_of<Op()>::type
               #else
                   BOOST_DEDUCED_TYPENAME Op::result_type
- #endif
+ #endif
>
 struct execute_traits
     : execute_traits_impl<Result>

Modified: branches/fix-links/boost/iostreams/detail/streambuf/direct_streambuf.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/streambuf/direct_streambuf.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/streambuf/direct_streambuf.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -187,10 +187,9 @@
 template<typename T, typename Tr>
 inline typename direct_streambuf<T, Tr>::pos_type
 direct_streambuf<T, Tr>::seekpos
- (pos_type sp, BOOST_IOS::openmode)
+ (pos_type sp, BOOST_IOS::openmode which)
 {
- return seek_impl( position_to_offset(sp), BOOST_IOS::beg,
- BOOST_IOS::in | BOOST_IOS::out );
+ return seek_impl(position_to_offset(sp), BOOST_IOS::beg, which);
 }
 
 template<typename T, typename Tr>

Modified: branches/fix-links/boost/iostreams/detail/streambuf/indirect_streambuf.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/streambuf/indirect_streambuf.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/streambuf/indirect_streambuf.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -7,6 +7,8 @@
 // A. Langer and K. Kreft, "Standard C++ IOStreams and Locales",
 // Addison-Wesley, 2000, pp. 228-43.
 
+// User "GMSB" provided an optimization for small seeks.
+
 #ifndef BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
 #define BOOST_IOSTREAMS_DETAIL_INDIRECT_STREAMBUF_HPP_INCLUDED
 
@@ -122,7 +124,7 @@
     enum flag_type {
         f_open = 1,
         f_output_buffered = f_open << 1,
- f_auto_close = f_output_buffered << 1,
+ f_auto_close = f_output_buffered << 1
     };
 
     optional<wrapper> storage_;
@@ -165,7 +167,7 @@
     // Construct input buffer.
     if (can_read()) {
         pback_size_ = (std::max)(2, pback_size); // STLPort needs 2.
- streamsize size =
+ std::streamsize size =
             pback_size_ +
             ( buffer_size ? buffer_size: 1 );
         in().resize(size);
@@ -236,8 +238,9 @@
     if (gptr() < egptr()) return traits_type::to_int_type(*gptr());
 
     // Fill putback buffer.
- streamsize keep = (std::min)( static_cast<streamsize>(gptr() - eback()),
- pback_size_ );
+ std::streamsize keep =
+ (std::min)( static_cast<std::streamsize>(gptr() - eback()),
+ pback_size_ );
     if (keep)
         traits_type::move( buf.data() + (pback_size_ - keep),
                            gptr() - keep, keep );
@@ -248,7 +251,7 @@
           buf.data() + pback_size_ );
 
     // Read from source.
- streamsize chars =
+ std::streamsize chars =
         obj().read(buf.data() + pback_size_, buf.size() - pback_size_, next_);
     if (chars == -1) {
         this->set_true_eof(true);
@@ -329,10 +332,9 @@
 template<typename T, typename Tr, typename Alloc, typename Mode>
 inline typename indirect_streambuf<T, Tr, Alloc, Mode>::pos_type
 indirect_streambuf<T, Tr, Alloc, Mode>::seekpos
- (pos_type sp, BOOST_IOS::openmode)
+ (pos_type sp, BOOST_IOS::openmode which)
 {
- return seek_impl( position_to_offset(sp), BOOST_IOS::beg,
- BOOST_IOS::in | BOOST_IOS::out );
+ return seek_impl(position_to_offset(sp), BOOST_IOS::beg, which);
 }
 
 template<typename T, typename Tr, typename Alloc, typename Mode>
@@ -340,6 +342,13 @@
 indirect_streambuf<T, Tr, Alloc, Mode>::seek_impl
     (stream_offset off, BOOST_IOS::seekdir way, BOOST_IOS::openmode which)
 {
+ if ( gptr() != 0 && way == BOOST_IOS::cur && which == BOOST_IOS::in &&
+ eback() - gptr() <= off && off <= egptr() - gptr() )
+ { // Small seek optimization
+ gbump(off);
+ return obj().seek(0, BOOST_IOS::cur, BOOST_IOS::in, next_) -
+ static_cast<off_type>(egptr() - gptr());
+ }
     if (pptr() != 0)
         this->BOOST_IOSTREAMS_PUBSYNC(); // sync() confuses VisualAge 6.
     if (way == BOOST_IOS::cur && gptr())
@@ -365,7 +374,11 @@
         sync();
         setp(0, 0);
     }
- obj().close(which, next_);
+ if ( !is_convertible<category, dual_use>::value ||
+ is_convertible<Mode, input>::value == (which == BOOST_IOS::in) )
+ {
+ obj().close(which, next_);
+ }
 }
 
 //----------State changing functions------------------------------------------//

Modified: branches/fix-links/boost/iostreams/detail/streambuf/linked_streambuf.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/detail/streambuf/linked_streambuf.hpp (original)
+++ branches/fix-links/boost/iostreams/detail/streambuf/linked_streambuf.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -61,7 +61,7 @@
     template<typename Chain, typename Mode, typename Access>
     friend class chainbuf;
     template<typename U>
- friend struct member_close_operation;
+ friend class member_close_operation;
 #else
     public:
         typedef BOOST_IOSTREAMS_BASIC_STREAMBUF(Ch, Tr) base;

Modified: branches/fix-links/boost/iostreams/device/file_descriptor.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/device/file_descriptor.hpp (original)
+++ branches/fix-links/boost/iostreams/device/file_descriptor.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -32,29 +32,25 @@
 class BOOST_IOSTREAMS_DECL file_descriptor {
 public:
 #ifdef BOOST_IOSTREAMS_WINDOWS
- typedef void* handle_type;
+ typedef void* handle_type; // A.k.a HANDLE
+#else
+ typedef int handle_type;
 #endif
     typedef char char_type;
     struct category
         : seekable_device_tag,
           closable_tag
         { };
- file_descriptor() : pimpl_(new impl) { }
- explicit file_descriptor(int fd, bool close_on_exit = false)
- : pimpl_(new impl(fd, close_on_exit))
- { }
+ file_descriptor();
+ explicit file_descriptor(handle_type fd, bool close_on_exit = false);
 #ifdef BOOST_IOSTREAMS_WINDOWS
- explicit file_descriptor(handle_type handle, bool close_on_exit = false)
- : pimpl_(new impl(handle, close_on_exit))
- { }
+ explicit file_descriptor(int fd, bool close_on_exit = false);
 #endif
     explicit file_descriptor( const std::string& path,
                               BOOST_IOS::openmode mode =
                                   BOOST_IOS::in | BOOST_IOS::out,
                               BOOST_IOS::openmode base_mode =
- BOOST_IOS::in | BOOST_IOS::out )
- : pimpl_(new impl)
- { open(path, mode, base_mode); }
+ BOOST_IOS::in | BOOST_IOS::out );
     void open( const std::string& path,
                BOOST_IOS::openmode =
                    BOOST_IOS::in | BOOST_IOS::out,
@@ -65,41 +61,44 @@
     std::streamsize write(const char_type* s, std::streamsize n);
     std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
     void close();
+ handle_type handle() const { return pimpl_->handle_; }
 private:
     struct impl {
- impl() : fd_(-1), flags_(0) { }
- impl(int fd, bool close_on_exit)
- : fd_(fd), flags_(0)
- { if (close_on_exit) flags_ |= impl::close_on_exit; }
- #ifdef BOOST_IOSTREAMS_WINDOWS
- impl(handle_type handle, bool close_on_exit)
- : handle_(handle), flags_(has_handle)
+ impl() :
+ #ifdef BOOST_IOSTREAMS_WINDOWS
+ handle_(reinterpret_cast<handle_type>(-1)),
+ #else
+ handle_(-1),
+ #endif
+ flags_(0)
+ { }
+ impl(handle_type fd, bool close_on_exit)
+ : handle_(fd), flags_(0)
         { if (close_on_exit) flags_ |= impl::close_on_exit; }
- #endif
- ~impl() {
- if (flags_ & close_on_exit) close_impl(*this);
- }
+ ~impl()
+ { if (flags_ & close_on_exit) close_impl(*this); }
         enum flags {
             close_on_exit = 1,
- has_handle = 2,
             append = 4
         };
- int fd_;
- #ifdef BOOST_IOSTREAMS_WINDOWS
         handle_type handle_;
- #endif
         int flags_;
     };
     friend struct impl;
 
     static void close_impl(impl&);
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ static handle_type int_to_handle(int fd);
+#endif
 
     shared_ptr<impl> pimpl_;
 };
 
 struct file_descriptor_source : private file_descriptor {
 #ifdef BOOST_IOSTREAMS_WINDOWS
- typedef void* handle_type;
+ typedef void* handle_type; // A.k.a HANDLE
+#else
+ typedef int handle_type;
 #endif
     typedef char char_type;
     struct category
@@ -112,14 +111,14 @@
     using file_descriptor::open;
     using file_descriptor::is_open;
     using file_descriptor::close;
+ using file_descriptor::handle;
     file_descriptor_source() { }
- explicit file_descriptor_source(int fd, bool close_on_exit = false)
+ explicit file_descriptor_source(handle_type fd, bool close_on_exit = false)
         : file_descriptor(fd, close_on_exit)
         { }
 #ifdef BOOST_IOSTREAMS_WINDOWS
- explicit file_descriptor_source( handle_type handle,
- bool close_on_exit = false )
- : file_descriptor(handle, close_on_exit)
+ explicit file_descriptor_source(int fd, bool close_on_exit = false)
+ : file_descriptor(fd, close_on_exit)
         { }
 #endif
     explicit file_descriptor_source( const std::string& path,
@@ -130,7 +129,9 @@
 
 struct file_descriptor_sink : private file_descriptor {
 #ifdef BOOST_IOSTREAMS_WINDOWS
- typedef void* handle_type;
+ typedef void* handle_type; // A.k.a HANDLE
+#else
+ typedef int handle_type;
 #endif
     typedef char char_type;
     struct category
@@ -143,14 +144,14 @@
     using file_descriptor::open;
     using file_descriptor::is_open;
     using file_descriptor::close;
+ using file_descriptor::handle;
     file_descriptor_sink() { }
- explicit file_descriptor_sink(int fd, bool close_on_exit = false)
+ explicit file_descriptor_sink(handle_type fd, bool close_on_exit = false)
         : file_descriptor(fd, close_on_exit)
         { }
 #ifdef BOOST_IOSTREAMS_WINDOWS
- explicit file_descriptor_sink( handle_type handle,
- bool close_on_exit = false )
- : file_descriptor(handle, close_on_exit)
+ explicit file_descriptor_sink(int fd, bool close_on_exit = false)
+ : file_descriptor(fd, close_on_exit)
         { }
 #endif
     explicit file_descriptor_sink( const std::string& path,

Modified: branches/fix-links/boost/iostreams/device/mapped_file.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/device/mapped_file.hpp (original)
+++ branches/fix-links/boost/iostreams/device/mapped_file.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -62,7 +62,9 @@
 
 struct mapped_file_params {
     explicit mapped_file_params()
- #if BOOST_WORKAROUND(BOOST_MSVC, < 1400) && defined(BOOST_RWSTD_VER)
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1400) && defined(BOOST_RWSTD_VER) || \
+ defined(__BORLANDC__) && defined(_CPPLIB_VER)
+ /**/
         : mode(std::ios_base::openmode(0)),
     #else
         : mode(),
@@ -72,7 +74,8 @@
         { }
     explicit mapped_file_params(const std::string& path)
         : path(path),
- #if BOOST_WORKAROUND(BOOST_MSVC, < 1400) && defined(BOOST_RWSTD_VER)
+ #if BOOST_WORKAROUND(BOOST_MSVC, < 1400) && defined(BOOST_RWSTD_VER) || \
+ defined(__BORLANDC__) && defined(_CPPLIB_VER)
           mode(std::ios_base::openmode(0)),
     #else
           mode(),
@@ -221,6 +224,7 @@
           public closable_tag
         { };
     using mapped_file::close;
+ using mapped_file::size;
     explicit mapped_file_sink(mapped_file_params p);
     explicit mapped_file_sink( const std::string& path,
                                size_type length = max_length,

Modified: branches/fix-links/boost/iostreams/filter/aggregate.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/filter/aggregate.hpp (original)
+++ branches/fix-links/boost/iostreams/filter/aggregate.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -15,10 +15,13 @@
 #include <cassert>
 #include <iterator> // back_inserter
 #include <vector>
+#include <boost/iostreams/constants.hpp> // default_device_buffer_size
 #include <boost/iostreams/categories.hpp>
 #include <boost/iostreams/detail/char_traits.hpp>
 #include <boost/iostreams/detail/ios.hpp> // openmode, streamsize.
 #include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/read.hpp> // check_eof
+#include <boost/iostreams/write.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/type_traits/is_convertible.hpp>
 
@@ -58,8 +61,8 @@
         state_ |= f_read;
         if (!(state_ & f_eof))
             do_read(src);
- streamsize amt =
- (std::min)(n, static_cast<streamsize>(data_.size() - ptr_));
+ std::streamsize amt =
+ (std::min)(n, static_cast<std::streamsize>(data_.size() - ptr_));
         if (amt) {
             BOOST_IOSTREAMS_CHAR_TRAITS(char_type)::copy(s, &data_[ptr_], amt);
             ptr_ += amt;
@@ -110,9 +113,9 @@
         using std::streamsize;
         vector_type data;
         while (true) {
- const streamsize size = default_device_buffer_size;
- Ch buf[size];
- streamsize amt;
+ const std::streamsize size = default_device_buffer_size;
+ Ch buf[size];
+ std::streamsize amt;
             if ((amt = boost::iostreams::read(src, buf, size)) == -1)
                 break;
             data.insert(data.end(), buf, buf + amt);

Modified: branches/fix-links/boost/iostreams/filter/gzip.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/filter/gzip.hpp (original)
+++ branches/fix-links/boost/iostreams/filter/gzip.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -134,7 +134,7 @@
                  std::string comment = "",
                  std::time_t mtime = 0 )
         : zlib_params(level, method, window_bits, mem_level, strategy),
- file_name(file_name), mtime(mtime)
+ file_name(file_name), comment(comment), mtime(mtime)
         { }
     std::string file_name;
     std::string comment;
@@ -185,8 +185,7 @@
     template<typename Source>
     std::streamsize read(Source& src, char_type* s, std::streamsize n)
     {
- using namespace std;
- streamsize result = 0;
+ std::streamsize result = 0;
 
         // Read header.
         if (!(flags_ & f_header_done))
@@ -196,7 +195,7 @@
         if (!(flags_ & f_body_done)) {
 
             // Read from basic_zlib_filter.
- streamsize amt = base_type::read(src, s + result, n - result);
+ std::streamsize amt = base_type::read(src, s + result, n - result);
             if (amt != -1) {
                 result += amt;
                 if (amt < n - result) { // Double-check for EOF.
@@ -252,6 +251,8 @@
                 throw;
             }
             close_impl();
+ } else {
+ close_impl();
         }
     }
 private:
@@ -557,10 +558,9 @@
 std::streamsize basic_gzip_compressor<Alloc>::read_string
     (char* s, std::streamsize n, std::string& str)
 {
- using namespace std;
- streamsize avail =
- static_cast<streamsize>(str.size() - offset_);
- streamsize amt = (std::min)(avail, n);
+ std::streamsize avail =
+ static_cast<std::streamsize>(str.size() - offset_);
+ std::streamsize amt = (std::min)(avail, n);
     std::copy( str.data() + offset_,
                str.data() + offset_ + amt,
                s );

Modified: branches/fix-links/boost/iostreams/filter/line.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/filter/line.hpp (original)
+++ branches/fix-links/boost/iostreams/filter/line.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -18,7 +18,9 @@
 #include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
 #include <boost/iostreams/categories.hpp>
 #include <boost/iostreams/detail/ios.hpp> // openmode, streamsize.
+#include <boost/iostreams/read.hpp> // check_eof
 #include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/write.hpp>
 
 // Must come last.
 #include <boost/iostreams/detail/config/disable_warnings.hpp> // VC7.1 C4244.
@@ -70,7 +72,7 @@
         state_ |= f_read;
 
         // Handle unfinished business.
- streamsize result = 0;
+ std::streamsize result = 0;
         if (!cur_line_.empty() && (result = read_line(s, n)) == n)
             return n;
 
@@ -143,8 +145,8 @@
     std::streamsize read_line(char_type* s, std::streamsize n)
     {
         using namespace std;
- streamsize result =
- (std::min) (n, static_cast<streamsize>(cur_line_.size()));
+ std::streamsize result =
+ (std::min) (n, static_cast<std::streamsize>(cur_line_.size()));
         traits_type::copy(s, cur_line_.data(), result);
         cur_line_.erase(0, result);
         return result;

Modified: branches/fix-links/boost/iostreams/filter/newline.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/filter/newline.hpp (original)
+++ branches/fix-links/boost/iostreams/filter/newline.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -19,8 +19,12 @@
 #include <stdexcept> // logic_error.
 #include <boost/config.hpp> // BOOST_STATIC_CONSTANT.
 #include <boost/iostreams/categories.hpp>
-#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/char_traits.hpp>
+#include <boost/iostreams/detail/ios.hpp> // BOOST_IOSTREAMS_FAILURE
+#include <boost/iostreams/read.hpp> // get
+#include <boost/iostreams/write.hpp> // put
 #include <boost/iostreams/pipeline.hpp>
+#include <boost/iostreams/putback.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/type_traits/is_convertible.hpp>
 
@@ -211,8 +215,7 @@
         typedef typename iostreams::category_of<Sink>::type category;
         if ((flags_ & f_write) != 0 && (flags_ & f_has_CR) != 0)
             newline_if_sink(dest);
- if (which == BOOST_IOS::out)
- flags_ &= newline::platform_mask;
+ flags_ &= ~f_has_LF; // Restore original flags.
     }
 private:
 
@@ -398,24 +401,21 @@
     {
         using iostreams::newline::final_newline;
 
- if (which == BOOST_IOS::out) {
-
- // Update final_newline flag.
- if ( (source() & f_has_CR) != 0 ||
- (source() & f_line_complete) != 0 )
- {
- source() |= final_newline;
- }
+ // Update final_newline flag.
+ if ( (source() & f_has_CR) != 0 ||
+ (source() & f_line_complete) != 0 )
+ {
+ source() |= final_newline;
+ }
 
- // Clear non-sticky flags.
- source() &= ~(f_has_CR | f_line_complete);
+ // Clear non-sticky flags.
+ source() &= ~(f_has_CR | f_line_complete);
 
- // Check for errors.
- if ( (target_ & final_newline) != 0 &&
- (source() & final_newline) == 0 )
- {
- fail();
- }
+ // Check for errors.
+ if ( (target_ & final_newline) != 0 &&
+ (source() & final_newline) == 0 )
+ {
+ fail();
         }
     }
 private:

Modified: branches/fix-links/boost/iostreams/filter/symmetric.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/filter/symmetric.hpp (original)
+++ branches/fix-links/boost/iostreams/filter/symmetric.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -115,7 +115,9 @@
                     !filter().filter(next, buf.eptr(), next_s, end_s, flush);
                 buf.ptr() = buf.data() + (next - buf.data());
                 if (done)
- return detail::check_eof(static_cast<streamsize>(next_s - s));
+ return detail::check_eof(
+ static_cast<std::streamsize>(next_s - s)
+ );
             }
 
             // If no more characters are available without blocking, or
@@ -123,7 +125,7 @@
             if ( status == f_would_block && buf.ptr() == buf.eptr() ||
                  next_s == end_s )
             {
- return static_cast<streamsize>(next_s - s);
+ return static_cast<std::streamsize>(next_s - s);
             }
 
             // Fill buffer.
@@ -151,10 +153,7 @@
     template<typename Sink>
     void close(Sink& snk, BOOST_IOS::openmode which)
     {
- using namespace std;
- if ((state() & f_write) == 0 && which == BOOST_IOS::in)
- close_impl();
- if ((state() & f_write) != 0 && which == BOOST_IOS::out) {
+ if ((state() & f_write) != 0) {
 
             // Repeatedly invoke filter() with no input.
             try {
@@ -173,6 +172,8 @@
                 throw;
             }
             close_impl();
+ } else {
+ close_impl();
         }
     }
     SymmetricFilter& filter() { return *pimpl_; }
@@ -215,11 +216,10 @@
     template<typename Sink>
     bool flush(Sink& snk, mpl::true_)
     {
- using std::streamsize;
         typedef char_traits<char_type> traits_type;
- streamsize amt =
- static_cast<streamsize>(buf().ptr() - buf().data());
- streamsize result =
+ std::streamsize amt =
+ static_cast<std::streamsize>(buf().ptr() - buf().data());
+ std::streamsize result =
             boost::iostreams::write(snk, buf().data(), amt);
         if (result < amt && result > 0)
             traits_type::move(buf().data(), buf().data() + result, amt - result);

Modified: branches/fix-links/boost/iostreams/input_sequence.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/input_sequence.hpp (original)
+++ branches/fix-links/boost/iostreams/input_sequence.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -15,6 +15,7 @@
 #include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
 #include <boost/detail/workaround.hpp>
 #include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp> // is_custom
 #include <boost/iostreams/traits.hpp>
 #include <boost/mpl/if.hpp>
 

Modified: branches/fix-links/boost/iostreams/invert.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/invert.hpp (original)
+++ branches/fix-links/boost/iostreams/invert.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -36,8 +36,9 @@
 //
 // Template name: inverse.
 // Template paramters:
-// Filter - A filter adapter which
-// Description: Returns an instance of an appropriate specialization of inverse.
+// Filter - A model of InputFilter or OutputFilter.
+// Description: Generates an InputFilter from an OutputFilter or
+// vice versa.
 //
 template<typename Filter>
 class inverse {

Modified: branches/fix-links/boost/iostreams/output_sequence.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/output_sequence.hpp (original)
+++ branches/fix-links/boost/iostreams/output_sequence.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -15,6 +15,7 @@
 #include <boost/config.hpp> // DEDUCED_TYPENAME, MSVC.
 #include <boost/detail/workaround.hpp>
 #include <boost/iostreams/detail/wrap_unwrap.hpp>
+#include <boost/iostreams/operations_fwd.hpp> // is_custom
 #include <boost/iostreams/traits.hpp>
 #include <boost/mpl/if.hpp>
 

Modified: branches/fix-links/boost/iostreams/positioning.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/positioning.hpp (original)
+++ branches/fix-links/boost/iostreams/positioning.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -18,6 +18,7 @@
 #include <boost/cstdint.hpp>
 #include <boost/integer_traits.hpp>
 #include <boost/iostreams/detail/config/codecvt.hpp> // mbstate_t.
+#include <boost/iostreams/detail/config/fpos.hpp>
 #include <boost/iostreams/detail/ios.hpp> // streamoff, streampos.
 
 // Must come last.
@@ -28,72 +29,83 @@
 #endif
 
 namespace boost { namespace iostreams {
+
+//------------------Definition of stream_offset-------------------------------//
 
 typedef boost::intmax_t stream_offset;
 
+//------------------Definition of stream_offset_to_streamoff------------------//
+
 inline std::streamoff stream_offset_to_streamoff(stream_offset off)
 { return static_cast<stream_offset>(off); }
 
-template<typename PosType> // Hande custom pos_type's.
+//------------------Definition of offset_to_position--------------------------//
+
+# ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+inline std::streampos offset_to_position(stream_offset off) { return off; }
+
+# else // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+inline std::streampos offset_to_position(stream_offset off)
+{ return std::streampos(std::mbstate_t(), off); }
+
+# endif // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
+
+//------------------Definition of position_to_offset--------------------------//
+
+// Hande custom pos_type's
+template<typename PosType>
 inline stream_offset position_to_offset(PosType pos)
 { return std::streamoff(pos); }
 
-#if ((defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)) && \
- !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) \
- && !defined(__QNX__) \
- /**/
+# ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
 
- /* Dinkumware */
+inline stream_offset position_to_offset(std::streampos pos) { return pos; }
 
-inline std::streampos offset_to_position(stream_offset off)
-{
- // Use implementation-specific constructor.
- return std::streampos(std::mbstate_t(), off);
-}
+# else // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
 
+// In the Dinkumware standard library, a std::streampos consists of two stream
+// offsets -- _Fpos, of type std::fpos_t, and _Myoff, of type std::streamoff --
+// together with a conversion state. A std::streampos is converted to a
+// boost::iostreams::stream_offset by extracting the two stream offsets and
+// summing them. The value of _Fpos can be extracted using the implementation-
+// defined member functions seekpos() or get_fpos_t(), depending on the
+// Dinkumware version. The value of _Myoff cannot be extracted directly, but can
+// be calculated as the difference between the result of converting the
+// std::fpos to a std::streamoff and the result of converting the member _Fpos
+// to a long. The latter operation is accomplished with the macro _FPOSOFF,
+// which works correctly on platforms where std::fpos_t is an integral type and
+// platforms where it is a struct
+
+// Converts a std::fpos_t to a stream_offset
 inline stream_offset fpos_t_to_offset(std::fpos_t pos)
-{ // Helper function.
-#if defined(_POSIX_) || (_INTEGRAL_MAX_BITS >= 64)
+{
+# if defined(_POSIX_) || (_INTEGRAL_MAX_BITS >= 64) || defined(__IBMCPP__)
     return pos;
-#else
+# else
     return _FPOSOFF(pos);
-#endif
+# endif
 }
 
-# if defined(_CPPLIB_VER) //--------------------------------------------------//
-
- /* Recent Dinkumware */
-
-inline stream_offset position_to_offset(std::streampos pos)
+// Extracts the member _Fpos from a std::fpos
+inline std::fpos_t streampos_to_fpos_t(std::streampos pos)
 {
- // Use implementation-specific member function seekpos().
- return fpos_t_to_offset(pos.seekpos()) +
- stream_offset(std::streamoff(pos)) -
- stream_offset(std::streamoff(pos.seekpos()));
+# if defined (_CPPLIB_VER) || defined(__IBMCPP__)
+ return pos.seekpos();
+# else
+ return pos.get_fpos_t();
+# endif
 }
 
-# else // # if defined(_CPPLIB_VER) //----------------------------------------//
-
- /* Old Dinkumware */
-
 inline stream_offset position_to_offset(std::streampos pos)
 {
- // use implementation-specific member function get_fpos_t().
- return fpos_t_to_offset(pos.get_fpos_t()) +
- stream_offset(std::streamoff(pos)) -
- stream_offset(std::streamoff(pos.get_fpos_t()));
+ return fpos_t_to_offset(streampos_to_fpos_t(pos)) +
+ static_cast<stream_offset>(static_cast<std::streamoff>(pos)) -
+ static_cast<stream_offset>(_FPOSOFF(streampos_to_fpos_t(pos)));
 }
 
-# endif // # if defined(_CPPLIB_VER) //---------------------------------------//
-#else // Dinkumware //--------------------------------------------------------//
-
- /* Non-Dinkumware */
-
-inline std::streampos offset_to_position(stream_offset off) { return off; }
-
-inline stream_offset position_to_offset(std::streampos pos) { return pos; }
-
-#endif // Dinkumware //-------------------------------------------------------//
+# endif // # ifndef BOOST_IOSTREAMS_HAS_DINKUMWARE_FPOS
 
 } } // End namespaces iostreams, boost.
 

Modified: branches/fix-links/boost/iostreams/restrict.hpp
==============================================================================
--- branches/fix-links/boost/iostreams/restrict.hpp (original)
+++ branches/fix-links/boost/iostreams/restrict.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,442 +1,24 @@
-// (C) Copyright Jonathan Turkanis 2005.
-// Distributed under the Boost Software License, Version 1.0. (See accompanying
-// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
-
-// See http://www.boost.org/libs/iostreams for documentation.
+/*
+ * Distributed under the Boost Software License, Version 1.0.(See accompanying
+ * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
+ *
+ * See http://www.boost.org/libs/iostreams for documentation.
+ *
+ * File: boost/iostreams/detail/restrict.hpp
+ * Date: Sun Jan 06 12:57:30 MST 2008
+ * Copyright: 2004-2007 Jonathan Turkanis
+ * Author: Jonathan Turkanis
+ *
+ * Defines the class template boost::iostreams::restriction and the
+ * overloaded function template boost::iostreams::restrict
+ */
 
 #ifndef BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
 #define BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED
 
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-# pragma once
-#endif
-
-#include <algorithm> // min.
-#include <utility> // pair.
-#include <boost/cstdint.hpp> // intmax_t.
-#include <boost/config.hpp> // DEDUCED_TYPENAME.
-#include <boost/iostreams/categories.hpp>
-#include <boost/iostreams/char_traits.hpp>
-#include <boost/iostreams/detail/adapter/device_adapter.hpp>
-#include <boost/iostreams/detail/adapter/filter_adapter.hpp>
-#include <boost/iostreams/detail/call_traits.hpp>
-#include <boost/iostreams/detail/enable_if_stream.hpp>
-#include <boost/iostreams/detail/error.hpp>
-#include <boost/iostreams/detail/ios.hpp> // failure.
-#include <boost/iostreams/detail/select.hpp>
-#include <boost/iostreams/operations.hpp>
-#include <boost/iostreams/skip.hpp>
-#include <boost/iostreams/traits.hpp> // mode_of, is_direct.
-#include <boost/mpl/bool.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/is_convertible.hpp>
-
-#include <boost/iostreams/detail/config/disable_warnings.hpp>
-
-namespace boost { namespace iostreams {
-
-namespace detail {
-
-//
-// Template name: restricted_indirect_device.
-// Description: Provides an restricted view of an indirect Device.
-// Template paramters:
-// Device - An indirect model of Device that models either Source or
-// SeekableDevice.
-//
-template<typename Device>
-class restricted_indirect_device : public device_adapter<Device> {
-private:
- typedef typename detail::param_type<Device>::type param_type;
-public:
- typedef typename char_type_of<Device>::type char_type;
- typedef typename mode_of<Device>::type mode;
- BOOST_STATIC_ASSERT(!(is_convertible<mode, detail::two_sequence>::value));
- struct category
- : mode,
- device_tag,
- closable_tag,
- flushable_tag,
- localizable_tag,
- optimally_buffered_tag
- { };
- restricted_indirect_device( param_type dev, stream_offset off,
- stream_offset len = -1 );
- std::streamsize read(char_type* s, std::streamsize n);
- std::streamsize write(const char_type* s, std::streamsize n);
- std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
-private:
- stream_offset beg_, pos_, end_;
-};
-
-//
-// Template name: restricted_direct_device.
-// Description: Provides an restricted view of a Direct Device.
-// Template paramters:
-// Device - A model of Direct and Device.
-//
-template<typename Device>
-class restricted_direct_device : public device_adapter<Device> {
-public:
- typedef typename char_type_of<Device>::type char_type;
- typedef std::pair<char_type*, char_type*> pair_type;
- typedef typename mode_of<Device>::type mode;
- BOOST_STATIC_ASSERT(!(is_convertible<mode, detail::two_sequence>::value));
- struct category
- : mode_of<Device>::type,
- device_tag,
- direct_tag,
- closable_tag,
- localizable_tag
- { };
- restricted_direct_device( const Device& dev, stream_offset off,
- stream_offset len = -1 );
- pair_type input_sequence();
- pair_type output_sequence();
-private:
- pair_type sequence(mpl::true_);
- pair_type sequence(mpl::false_);
- char_type *beg_, *end_;
-};
-
-//
-// Template name: restricted_filter.
-// Description: Provides an restricted view of a Filter.
-// Template paramters:
-// Filter - An indirect model of Filter.
-//
-template<typename Filter>
-class restricted_filter : public filter_adapter<Filter> {
-public:
- typedef typename char_type_of<Filter>::type char_type;
- typedef typename mode_of<Filter>::type mode;
- BOOST_STATIC_ASSERT(!(is_convertible<mode, detail::two_sequence>::value));
- struct category
- : mode,
- filter_tag,
- multichar_tag,
- closable_tag,
- localizable_tag,
- optimally_buffered_tag
- { };
- restricted_filter( const Filter& flt, stream_offset off,
- stream_offset len = -1 );
-
- template<typename Source>
- std::streamsize read(Source& src, char_type* s, std::streamsize n)
- {
- using namespace std;
- if (!open_)
- open(src, BOOST_IOS::in);
- streamsize amt =
- end_ != -1 ?
- (std::min) (n, static_cast<streamsize>(end_ - pos_)) :
- n;
- streamsize result = iostreams::read(this->component(), src, s, amt);
- if (result != -1)
- pos_ += result;
- return result;
- }
-
- template<typename Sink>
- std::streamsize write(Sink& snk, const char_type* s, std::streamsize n)
- {
- if (!open_)
- open(snk, BOOST_IOS::out);
- if (end_ != -1 && pos_ + n >= end_)
- bad_write();
- std::streamsize result =
- iostreams::write(this->component(), snk, s, n);
- pos_ += result;
- return result;
- }
-
- template<typename Device>
- std::streampos seek(Device& dev, stream_offset off, BOOST_IOS::seekdir way)
- {
- stream_offset next;
- if (way == BOOST_IOS::beg) {
- next = beg_ + off;
- } else if (way == BOOST_IOS::cur) {
- next = pos_ + off;
- } else if (end_ != -1) {
- next = end_ + off;
- } else {
- // Restriction is half-open; seek relative to the actual end.
- pos_ = this->component().seek(dev, off, BOOST_IOS::end);
- if (pos_ < beg_)
- bad_seek();
- return offset_to_position(pos_ - beg_);
- }
- if (next < beg_ || end_ != -1 && next >= end_)
- bad_seek();
- pos_ = this->component().seek(dev, next, BOOST_IOS::cur);
- return offset_to_position(pos_ - beg_);
- }
-
- template<typename Device>
- void close(Device& dev)
- {
- open_ = false;
- detail::close_all(this->component(), dev);
- }
-
- template<typename Device>
- void close(Device& dev, BOOST_IOS::openmode which)
- {
- open_ = false;
- iostreams::close(this->component(), dev, which);
- }
-private:
- template<typename Device>
- void open(Device& dev, BOOST_IOS::openmode which)
- {
- typedef typename is_convertible<mode, dual_use>::type is_dual_use;
- open_ = true;
- which = is_dual_use() ? which : (BOOST_IOS::in | BOOST_IOS::out);
- iostreams::skip(this->component(), dev, beg_, which);
- }
-
- stream_offset beg_, pos_, end_;
- bool open_;
-};
-
-template<typename T>
-struct restriction_traits
- : iostreams::select< // Disambiguation for Tru64.
- is_filter<T>, restricted_filter<T>,
- is_direct<T>, restricted_direct_device<T>,
- else_, restricted_indirect_device<T>
- >
- { };
-
-} // End namespace detail.
-
-template<typename T>
-struct restriction : public detail::restriction_traits<T>::type {
- typedef typename detail::param_type<T>::type param_type;
- typedef typename detail::restriction_traits<T>::type base_type;
- restriction(param_type t, stream_offset off, stream_offset len = -1)
- : base_type(t, off, len)
- { }
-};
-
-//--------------Implementation of restrict------------------------------------//
-
-// Note: The following workarounds are patterned after resolve.hpp. It has not
-// yet been confirmed that they are necessary.
-
-#ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //-------------------------//
-# ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //-------------------------------//
-
-template<typename T>
-restriction<T> restrict( const T& t, stream_offset off, stream_offset len = -1
- BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
-{ return restriction<T>(t, off, len); }
-
-template<typename Ch, typename Tr>
-restriction< std::basic_streambuf<Ch, Tr> >
-restrict(std::basic_streambuf<Ch, Tr>& sb, stream_offset off, stream_offset len = -1)
-{ return restriction< std::basic_streambuf<Ch, Tr> >(sb, off, len); }
-
-template<typename Ch, typename Tr>
-restriction< std::basic_istream<Ch, Tr> >
-restrict(std::basic_istream<Ch, Tr>& is, stream_offset off, stream_offset len = -1)
-{ return restriction< std::basic_istream<Ch, Tr> >(is, off, len); }
-
-template<typename Ch, typename Tr>
-restriction< std::basic_ostream<Ch, Tr> >
-restrict(std::basic_ostream<Ch, Tr>& os, stream_offset off, stream_offset len = -1)
-{ return restriction< std::basic_ostream<Ch, Tr> >(os, off, len); }
-
-template<typename Ch, typename Tr>
-restriction< std::basic_iostream<Ch, Tr> >
-restrict(std::basic_iostream<Ch, Tr>& io, stream_offset off, stream_offset len = -1)
-{ return restriction< std::basic_iostream<Ch, Tr> >(io, off, len); }
-
-# else // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //---------------------//
-
-template<typename T>
-restriction<T> restrict( const T& t, stream_offset off, stream_offset len = -1
- BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
-{ return restriction<T>(t, off, len); }
-
-restriction<std::streambuf>
-restrict(std::streambuf& sb, stream_offset off, stream_offset len = -1)
-{ return restriction<std::streambuf>(sb, off, len); }
-
-restriction<std::istream>
-restrict(std::istream<Ch, Tr>& is, stream_offset off, stream_offset len = -1)
-{ return restriction<std::istream>(is, off, len); }
-
-restriction<std::ostream>
-restrict(std::ostream<Ch, Tr>& os, stream_offset off, stream_offset len = -1)
-{ return restriction<std::ostream>(os, off, len); }
-
-restriction<std::iostream>
-restrict(std::iostream<Ch, Tr>& io, stream_offset off, stream_offset len = -1)
-{ return restriction<std::iostream>(io, off, len); }
-
-# endif // # ifndef BOOST_IOSTREAMS_NO_STREAM_TEMPLATES //--------------------//
-#else // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //----------------//
-
-template<typename T>
-restriction<T>
-restrict(const T& t, stream_offset off, stream_offset len, mpl::true_)
-{ // Bad overload resolution.
- return restriction<T>(const_cast<T&>(t, off, len));
-}
-
-template<typename T>
-restriction<T>
-restrict(const T& t, stream_offset off, stream_offset len, mpl::false_)
-{ return restriction<T>(t, off, len); }
-
-template<typename T>
-restriction<T>
-restrict( const T& t, stream_offset off, stream_offset len = -1
- BOOST_IOSTREAMS_DISABLE_IF_STREAM(T) )
-{ return restrict(t, off, len, is_std_io<T>()); }
-
-# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && \
- !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && \
- !defined(__GNUC__) // ---------------------------------------------------//
-
-template<typename T>
-restriction<T>
-restrict(T& t, stream_offset off, stream_offset len = -1)
-{ return restriction<T>(t, off, len); }
-
-# endif // Borland 5.x, VC6-7.0 or GCC 2.9x //--------------------------------//
-#endif // #ifndef BOOST_IOSTREAMS_BROKEN_OVERLOAD_RESOLUTION //---------------//
-//----------------------------------------------------------------------------//
-
-namespace detail {
-
-//--------------Implementation of restricted_indirect_device------------------//
-
-template<typename Device>
-restricted_indirect_device<Device>::restricted_indirect_device
- (param_type dev, stream_offset off, stream_offset len)
- : device_adapter<Device>(dev), beg_(off), pos_(off),
- end_(len != -1 ? off + len : -1)
-{
- if (len < -1 || off < 0)
- throw BOOST_IOSTREAMS_FAILURE("bad offset");
- iostreams::skip(this->component(), off);
-}
-
-template<typename Device>
-inline std::streamsize restricted_indirect_device<Device>::read
- (char_type* s, std::streamsize n)
-{
- using namespace std;
- streamsize amt =
- end_ != -1 ?
- (std::min) (n, static_cast<streamsize>(end_ - pos_)) :
- n;
- streamsize result = iostreams::read(this->component(), s, amt);
- if (result != -1)
- pos_ += result;
- return result;
-}
-
-template<typename Device>
-inline std::streamsize restricted_indirect_device<Device>::write
- (const char_type* s, std::streamsize n)
-{
- if (end_ != -1 && pos_ + n >= end_)
- bad_write();
- std::streamsize result = iostreams::write(this->component(), s, n);
- pos_ += result;
- return result;
-}
-
-template<typename Device>
-std::streampos restricted_indirect_device<Device>::seek
- (stream_offset off, BOOST_IOS::seekdir way)
-{
- stream_offset next;
- if (way == BOOST_IOS::beg) {
- next = beg_ + off;
- } else if (way == BOOST_IOS::cur) {
- next = pos_ + off;
- } else if (end_ != -1) {
- next = end_ + off;
- } else {
- // Restriction is half-open; seek relative to the actual end.
- pos_ = iostreams::seek(this->component(), off, BOOST_IOS::end);
- if (pos_ < beg_)
- bad_seek();
- return offset_to_position(pos_ - beg_);
- }
- if (next < beg_ || end_ != -1 && next >= end_)
- bad_seek();
- pos_ = iostreams::seek(this->component(), next - pos_, BOOST_IOS::cur);
- return offset_to_position(pos_ - beg_);
-}
-
-//--------------Implementation of restricted_direct_device--------------------//
-
-template<typename Device>
-restricted_direct_device<Device>::restricted_direct_device
- (const Device& dev, stream_offset off, stream_offset len)
- : device_adapter<Device>(dev), beg_(0), end_(0)
-{
- std::pair<char_type*, char_type*> seq =
- sequence(is_convertible<category, input>());
- if ( off < 0 || len < -1 ||
- len != -1 && off + len > seq.second - seq.first )
- {
- throw BOOST_IOSTREAMS_FAILURE("bad offset");
- }
- beg_ = seq.first + off;
- end_ = len != -1 ?
- seq.first + off + len :
- seq.second;
-}
-
-template<typename Device>
-typename restricted_direct_device<Device>::pair_type
-restricted_direct_device<Device>::input_sequence()
-{
- BOOST_STATIC_ASSERT((is_convertible<category, input>::value));
- return std::make_pair(beg_, end_);
-}
-
-template<typename Device>
-typename restricted_direct_device<Device>::pair_type
-restricted_direct_device<Device>::output_sequence()
-{
- BOOST_STATIC_ASSERT((is_convertible<category, output>::value));
- return std::make_pair(beg_, end_);
-}
-
-template<typename Device>
-typename restricted_direct_device<Device>::pair_type
-restricted_direct_device<Device>::sequence(mpl::true_)
-{ return iostreams::input_sequence(this->component()); }
-
-template<typename Device>
-typename restricted_direct_device<Device>::pair_type
-restricted_direct_device<Device>::sequence(mpl::false_)
-{ return iostreams::output_sequence(this->component()); }
-
-//--------------Implementation of restricted_filter---------------------------//
-
-template<typename Filter>
-restricted_filter<Filter>::restricted_filter
- (const Filter& flt, stream_offset off, stream_offset len)
- : filter_adapter<Filter>(flt), beg_(off),
- pos_(off), end_(len != -1 ? off + len : -1), open_(false)
-{
- if (len < -1 || off < 0)
- throw BOOST_IOSTREAMS_FAILURE("bad offset");
-}
-
-} // End namespace detail.
-
-} } // End namespaces iostreams, boost.
-
+#include <boost/iostreams/detail/restrict_impl.hpp>
+#define BOOST_IOSTREAMS_RESTRICT restrict
+#include <boost/iostreams/detail/restrict_impl.hpp>
+#undef BOOST_IOSTREAMS_RESTRICT
 
 #endif // #ifndef BOOST_IOSTREAMS_RESTRICT_HPP_INCLUDED

Modified: branches/fix-links/boost/math/distributions/poisson.hpp
==============================================================================
--- branches/fix-links/boost/math/distributions/poisson.hpp (original)
+++ branches/fix-links/boost/math/distributions/poisson.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -334,22 +334,7 @@
       { // mean ^ k = 1, and k! = 1, so can simplify.
         return exp(-mean);
       }
- using boost::math::unchecked_factorial;
- RealType floork = floor(k);
- if ((floork == k) // integral
- && k < max_factorial<RealType>::value)
- { // k is small enough (for float 34, double 170 ...) to use factorial(k).
- return exp(-mean) * pow(mean, k) /
- unchecked_factorial<RealType>(tools::real_cast<unsigned int>(floork));
- }
- else
- { // Need to use log(factorial(k)) = lgamma(k+1)
- // (e ^ -mean * mean ^ k) / k!
- // == exp(log(e ^ -mean) + log (mean ^ k) - lgamma(k+1))
- // exp( -mean + log(mean) * k - lgamma(k+1))
- return exp(-mean + log(mean) * k - boost::math::lgamma(k+1, Policy()));
- // return gamma_p_derivative(k+1, mean); // equivalent & also passes tests.
- }
+ return boost::math::gamma_p_derivative(k+1, mean, Policy());
     } // pdf
 
     template <class RealType, class Policy>

Modified: branches/fix-links/boost/math/tools/test_data.hpp
==============================================================================
--- branches/fix-links/boost/math/tools/test_data.hpp (original)
+++ branches/fix-links/boost/math/tools/test_data.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -27,6 +27,7 @@
 
 #include <set>
 #include <vector>
+#include <iostream>
 
 #ifdef BOOST_MSVC
 # pragma warning(push)

Modified: branches/fix-links/boost/mpi/config.hpp
==============================================================================
--- branches/fix-links/boost/mpi/config.hpp (original)
+++ branches/fix-links/boost/mpi/config.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -20,6 +20,11 @@
 #include <mpi.h>
 #include <boost/config.hpp>
 
+/** @brief Define this macro to avoid expensice MPI_Pack/Unpack calls on
+ * homogeneous machines.
+*/
+//#define BOOST_MPI_HOMOGENEOUS
+
 // If this is an MPI-2 implementation, define configuration macros for
 // the features we are interested in.
 #if defined(MPI_VERSION) && MPI_VERSION == 2

Modified: branches/fix-links/boost/mpi/datatype.hpp
==============================================================================
--- branches/fix-links/boost/mpi/datatype.hpp (original)
+++ branches/fix-links/boost/mpi/datatype.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -23,6 +23,7 @@
 #include <boost/config.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/or.hpp>
+#include <boost/mpl/and.hpp>
 #include <boost/mpi/detail/mpi_datatype_cache.hpp>
 #include <boost/mpl/assert.hpp>
 #include <utility> // for std::pair
@@ -199,6 +200,9 @@
 {}
 
 /// INTERNAL ONLY
+BOOST_MPI_DATATYPE(packed, MPI_PACKED, builtin);
+
+/// INTERNAL ONLY
 BOOST_MPI_DATATYPE(char, MPI_CHAR, builtin);
 
 /// INTERNAL ONLY
@@ -252,6 +256,14 @@
 BOOST_MPI_DATATYPE(std::pair<BOOST_MPI_LIST2(int, int>), MPI_2INT, builtin);
 #undef BOOST_MPI_LIST2
 
+/// specialization of is_mpi_datatype for pairs
+template <class T, class U>
+struct is_mpi_datatype<std::pair<T,U> >
+ : public mpl::and_<is_mpi_datatype<T>,is_mpi_datatype<U> >
+{
+};
+
+
 #if 0
 #ifndef BOOST_NO_INTRINSIC_WCHAR_T
 BOOST_MPI_DATATYPE(wchar_t, MPI_WCHAR, builtin);
@@ -265,6 +277,11 @@
 
 #endif // Doxygen
 
+#if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN)
+BOOST_MPI_DATATYPE(__int64, MPI_LONG_LONG_INT, builtin);
+BOOST_MPI_DATATYPE(unsigned __int64, MPI_UNSIGNED_LONG_LONG, builtin);
+#endif
+
 namespace detail {
   inline MPI_Datatype build_mpi_datatype_for_bool()
   {
@@ -290,11 +307,16 @@
   : boost::mpl::bool_<true>
 {};
 
-/// INTERNAL ONLY
-template<typename T, typename U>
-struct is_mpi_datatype<std::pair<T, U> >
- : mpl::and_<is_mpi_datatype<T>, is_mpi_datatype<U> > { };
-
 } } // end namespace boost::mpi
 
+// define a macro to make explicit designation of this more transparent
+#define BOOST_IS_MPI_DATATYPE(T) \
+namespace boost { \
+namespace mpi { \
+template<> \
+struct is_mpi_datatype< T > : mpl::true_ {}; \
+}} \
+/**/
+
+
 #endif // BOOST_MPI_MPI_DATATYPE_HPP

Modified: branches/fix-links/boost/mpi/datatype_fwd.hpp
==============================================================================
--- branches/fix-links/boost/mpi/datatype_fwd.hpp (original)
+++ branches/fix-links/boost/mpi/datatype_fwd.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -27,6 +27,8 @@
 template<typename T> struct is_mpi_datatype;
 template<typename T> MPI_Datatype get_mpi_datatype(const T& x = T());
 
+/// a dummy data type giving MPI_PACKED as its MPI_Datatype
+struct packed {};
 } } // end namespace boost::mpi
 
 #endif // BOOST_MPI_MPI_DATATYPE_FWD_HPP

Modified: branches/fix-links/boost/mpi/detail/packed_iprimitive.hpp
==============================================================================
--- branches/fix-links/boost/mpi/detail/packed_iprimitive.hpp (original)
+++ branches/fix-links/boost/mpi/detail/packed_iprimitive.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -65,20 +65,19 @@
 
     // fast saving of arrays of fundamental types
     template<class T>
- void load_array(serialization::array<T> & x, unsigned int /* file_version */)
+ void load_array(serialization::array<T> const& x, unsigned int /* file_version */)
     {
       if (x.count())
         load_impl(x.address(), get_mpi_datatype(*x.address()), x.count());
     }
 
- typedef is_mpi_datatype<mpl::_1> use_array_optimization;
+ template<class T>
+ void load(serialization::array<T> const& x)
+ {
+ load_array(x,0u);
+ }
 
-#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
- friend class archive::load_access;
-protected:
-#else
-public:
-#endif
+ typedef is_mpi_datatype<mpl::_1> use_array_optimization;
 
     // default saving of primitives.
     template<class T>

Modified: branches/fix-links/boost/mpi/packed_iarchive.hpp
==============================================================================
--- branches/fix-links/boost/mpi/packed_iarchive.hpp (original)
+++ branches/fix-links/boost/mpi/packed_iarchive.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -23,10 +23,17 @@
 #include <boost/archive/basic_binary_iarchive.hpp>
 #include <boost/archive/shared_ptr_helper.hpp>
 #include <boost/mpi/detail/packed_iprimitive.hpp>
+#include <boost/mpi/detail/binary_buffer_iprimitive.hpp>
 #include <boost/assert.hpp>
 
 namespace boost { namespace mpi {
 
+#ifdef BOOST_MPI_HOMOGENEOUS
+ typedef binary_buffer_iprimitive iprimitive;
+#else
+ typedef packed_iprimitive iprimitive;
+#endif
+
 /** @brief An archive that packs binary data into an MPI buffer.
  *
  * The @c packed_iarchive class is an Archiver (as in the
@@ -36,7 +43,7 @@
  * implementation to perform serialization.
  */
 class BOOST_MPI_DECL packed_iarchive
- : public packed_iprimitive
+ : public iprimitive
   , public archive::basic_binary_iarchive<packed_iarchive>
   , public archive::detail::shared_ptr_helper
 {
@@ -59,7 +66,7 @@
    * deserialization will begin.
    */
   packed_iarchive(MPI_Comm const & comm, buffer_type & b, unsigned int flags = boost::archive::no_header, int position = 0)
- : packed_iprimitive(b,comm,position),
+ : iprimitive(b,comm,position),
           archive::basic_binary_iarchive<packed_iarchive>(flags)
         {}
 
@@ -70,16 +77,44 @@
    * @param comm The communicator over which this archive will be
    * sent.
    *
+ * @param s The size of the buffer to be received.
+ *
    * @param flags Control the serialization of the data types. Refer
    * to the Boost.Serialization documentation before changing the
    * default flags.
    */
   packed_iarchive
- ( MPI_Comm const & comm , unsigned int flags = boost::archive::no_header)
- : packed_iprimitive(internal_buffer_,comm),
- archive::basic_binary_iarchive<packed_iarchive>(flags)
+ ( MPI_Comm const & comm , std::size_t s=0,
+ unsigned int flags = boost::archive::no_header)
+ : iprimitive(internal_buffer_,comm)
+ , archive::basic_binary_iarchive<packed_iarchive>(flags)
+ , internal_buffer_(s)
         {}
 
+ // Load everything else in the usual way, forwarding on to the Base class
+ template<class T>
+ void load_override(T& x, int version, mpl::false_)
+ {
+ archive::basic_binary_iarchive<packed_iarchive>::load_override(x,version);
+ }
+
+ // Load it directly using the primnivites
+ template<class T>
+ void load_override(T& x, int version, mpl::true_)
+ {
+ iprimitive::load(x);
+ }
+
+ // Load all supported datatypes directly
+ template<class T>
+ void load_override(T& x, int version)
+ {
+ typedef typename mpl::apply1<use_array_optimization
+ , BOOST_DEDUCED_TYPENAME remove_const<T>::type
+ >::type use_optimized;
+ load_override(x, version, use_optimized());
+ }
+
 private:
   /// An internal buffer to be used when the user does not supply his
   /// own buffer.

Modified: branches/fix-links/boost/mpi/packed_oarchive.hpp
==============================================================================
--- branches/fix-links/boost/mpi/packed_oarchive.hpp (original)
+++ branches/fix-links/boost/mpi/packed_oarchive.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -22,9 +22,16 @@
 #include <boost/archive/detail/auto_link_archive.hpp>
 #include <boost/archive/basic_binary_oarchive.hpp>
 #include <boost/mpi/detail/packed_oprimitive.hpp>
+#include <boost/mpi/detail/binary_buffer_oprimitive.hpp>
 
 namespace boost { namespace mpi {
 
+#ifdef BOOST_MPI_HOMOGENEOUS
+ typedef binary_buffer_oprimitive oprimitive;
+#else
+ typedef packed_oprimitive oprimitive;
+#endif
+
 /** @brief An archive that unpacks binary data from an MPI buffer.
  *
  * The @c packed_oarchive class is an Archiver (as in the
@@ -33,8 +40,9 @@
  * type and will use the @c MPI_Unpack function of the underlying MPI
  * implementation to perform deserialization.
  */
+
 class BOOST_MPI_DECL packed_oarchive
- : public packed_oprimitive,
+ : public oprimitive,
     public archive::basic_binary_oarchive<packed_oarchive>
 {
 public:
@@ -53,7 +61,7 @@
    * default flags.
    */
   packed_oarchive( MPI_Comm const & comm, buffer_type & b, unsigned int flags = boost::archive::no_header)
- : packed_oprimitive(b,comm),
+ : oprimitive(b,comm),
            archive::basic_binary_oarchive<packed_oarchive>(flags)
         {}
 
@@ -69,10 +77,31 @@
    * default flags.
    */
   packed_oarchive ( MPI_Comm const & comm, unsigned int flags = boost::archive::no_header)
- : packed_oprimitive(internal_buffer_,comm),
+ : oprimitive(internal_buffer_,comm),
            archive::basic_binary_oarchive<packed_oarchive>(flags)
         {}
 
+ // Save everything else in the usual way, forwarding on to the Base class
+ template<class T>
+ void save_override(T const& x, int version, mpl::false_)
+ {
+ archive::basic_binary_oarchive<packed_oarchive>::save_override(x,version);
+ }
+
+ // Save it directly using the primnivites
+ template<class T>
+ void save_override(T const& x, int version, mpl::true_)
+ {
+ oprimitive::save(x);
+ }
+
+ // Save all supported datatypes directly
+ template<class T>
+ void save_override(T const& x, int version)
+ {
+ typedef typename mpl::apply1<use_array_optimization,T>::type use_optimized;
+ save_override(x, version, use_optimized());
+ }
 
 private:
   /// An internal buffer to be used when the user does not supply his
@@ -86,4 +115,5 @@
 BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::mpi::packed_oarchive)
 
 
+
 #endif // BOOST_MPI_PACKED_OARCHIVE_HPP

Modified: branches/fix-links/boost/mpi/status.hpp
==============================================================================
--- branches/fix-links/boost/mpi/status.hpp (original)
+++ branches/fix-links/boost/mpi/status.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -34,6 +34,8 @@
 {
  public:
   status() : m_count(-1) { }
+
+ status(MPI_Status const& s) : m_status(s), m_count(-1) {}
 
   /**
    * Retrieve the source of the message.

Modified: branches/fix-links/boost/parameter/aux_/arg_list.hpp
==============================================================================
--- branches/fix-links/boost/parameter/aux_/arg_list.hpp (original)
+++ branches/fix-links/boost/parameter/aux_/arg_list.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,6 +24,7 @@
 #include <boost/type_traits/is_same.hpp>
 #include <boost/type_traits/is_base_and_derived.hpp>
 #include <boost/preprocessor/repetition/enum_params.hpp>
+#include <boost/preprocessor/repetition/enum_binary_params.hpp>
 #include <boost/preprocessor/facilities/intercept.hpp>
 
 namespace boost { namespace parameter {

Modified: branches/fix-links/boost/parameter/aux_/cast.hpp
==============================================================================
--- branches/fix-links/boost/parameter/aux_/cast.hpp (original)
+++ branches/fix-links/boost/parameter/aux_/cast.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,6 +5,8 @@
 #ifndef BOOST_PARAMETER_CAST_060902_HPP
 # define BOOST_PARAMETER_CAST_060902_HPP
 
+# include <boost/detail/workaround.hpp>
+
 # if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
   && !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
 # include <boost/type_traits/add_reference.hpp>

Modified: branches/fix-links/boost/parameter/aux_/default.hpp
==============================================================================
--- branches/fix-links/boost/parameter/aux_/default.hpp (original)
+++ branches/fix-links/boost/parameter/aux_/default.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,9 @@
 // http://www.boost.org/LICENSE_1_0.txt)
 
 #ifndef DEFAULT_050329_HPP
-#define DEFAULT_050329_HPP
+# define DEFAULT_050329_HPP
+
+# include <boost/detail/workaround.hpp>
 
 namespace boost { namespace parameter { namespace aux {
 
@@ -27,7 +29,7 @@
 // the user when resolving the value of the parameter with the
 // given keyword
 //
-#if BOOST_WORKAROUND(__EDG_VERSION__, <= 300)
+# if BOOST_WORKAROUND(__EDG_VERSION__, <= 300)
 // These compilers need a little extra help with overload
 // resolution; we have empty_arg_list's operator[] accept a base
 // class to make that overload less preferable.
@@ -48,8 +50,8 @@
         : lazy_default_base<KW,DefaultComputer>(x)
       {}
   };
-# define BOOST_PARAMETER_lazy_default_fallback lazy_default_base
-#else
+# define BOOST_PARAMETER_lazy_default_fallback lazy_default_base
+# else
 template <class KW, class DefaultComputer>
 struct lazy_default
 {
@@ -58,8 +60,8 @@
     {}
     DefaultComputer const& compute_default;
 };
-# define BOOST_PARAMETER_lazy_default_fallback lazy_default
-#endif
+# define BOOST_PARAMETER_lazy_default_fallback lazy_default
+# endif
 
 }}} // namespace boost::parameter::aux
 

Modified: branches/fix-links/boost/parameter/aux_/python/invoker.hpp
==============================================================================
--- branches/fix-links/boost/parameter/aux_/python/invoker.hpp (original)
+++ branches/fix-links/boost/parameter/aux_/python/invoker.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -8,6 +8,7 @@
 # include <boost/mpl/begin.hpp>
 # include <boost/mpl/next.hpp>
 # include <boost/mpl/deref.hpp>
+# include <boost/mpl/size.hpp>
 # include <boost/parameter/keyword.hpp>
 # include <boost/preprocessor/iteration/iterate.hpp>
 

Modified: branches/fix-links/boost/parameter/aux_/set.hpp
==============================================================================
--- branches/fix-links/boost/parameter/aux_/set.hpp (original)
+++ branches/fix-links/boost/parameter/aux_/set.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,6 +5,8 @@
 #ifndef BOOST_PARAMETER_SET_060912_HPP
 # define BOOST_PARAMETER_SET_060912_HPP
 
+# include <boost/detail/workaround.hpp>
+
 # if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) \
   && !BOOST_WORKAROUND(__GNUC__, < 3)
 # include <boost/mpl/insert.hpp>

Modified: branches/fix-links/boost/parameter/macros.hpp
==============================================================================
--- branches/fix-links/boost/parameter/macros.hpp (original)
+++ branches/fix-links/boost/parameter/macros.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -15,6 +15,7 @@
 #include <boost/preprocessor/repetition/enum_params.hpp>
 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
 #include <boost/preprocessor/cat.hpp>
+#include <boost/detail/workaround.hpp>
 
 #define BOOST_PARAMETER_FUN_TEMPLATE_HEAD1(n) \
     template<BOOST_PP_ENUM_PARAMS(n, class T)>

Modified: branches/fix-links/boost/parameter/preprocessor.hpp
==============================================================================
--- branches/fix-links/boost/parameter/preprocessor.hpp (original)
+++ branches/fix-links/boost/parameter/preprocessor.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -14,6 +14,7 @@
 # include <boost/parameter/aux_/preprocessor/flatten.hpp>
 
 # include <boost/preprocessor/repetition/repeat_from_to.hpp>
+# include <boost/preprocessor/comparison/equal.hpp>
 # include <boost/preprocessor/control/if.hpp>
 # include <boost/preprocessor/control/expr_if.hpp>
 # include <boost/preprocessor/repetition/enum_params.hpp>
@@ -23,9 +24,11 @@
 # include <boost/preprocessor/seq/for_each_product.hpp>
 # include <boost/preprocessor/seq/for_each_i.hpp>
 # include <boost/preprocessor/tuple/elem.hpp>
+# include <boost/preprocessor/tuple/eat.hpp>
 # include <boost/preprocessor/seq/fold_left.hpp>
 # include <boost/preprocessor/seq/size.hpp>
 # include <boost/preprocessor/seq/enum.hpp>
+# include <boost/preprocessor/seq/push_back.hpp>
 
 # include <boost/preprocessor/detail/is_nullary.hpp>
 

Modified: branches/fix-links/boost/range/as_literal.hpp
==============================================================================
--- branches/fix-links/boost/range/as_literal.hpp (original)
+++ branches/fix-links/boost/range/as_literal.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -15,7 +15,7 @@
 # pragma once
 #endif
 
-#if BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+#ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
 #include <boost/range/detail/as_literal.hpp>
 #else
 
@@ -116,14 +116,14 @@
 
     
     template< class Char, std::size_t sz >
- inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )
+ inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )
     {
 #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590)) && __BORLANDC__ >= 0x590
         return boost::make_iterator_range<const Char*>( arr, arr + sz - 1 );
 #else
         return boost::make_iterator_range( arr, arr + sz - 1 );
 #endif
- }
+ }
 }
 
 #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING

Modified: branches/fix-links/boost/regex/concepts.hpp
==============================================================================
--- branches/fix-links/boost/regex/concepts.hpp (original)
+++ branches/fix-links/boost/regex/concepts.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -235,7 +235,7 @@
 struct BaseRegexConcept
 {
    typedef typename Regex::value_type value_type;
- typedef typename Regex::size_type size_type;
+ //typedef typename Regex::size_type size_type;
    typedef typename Regex::flag_type flag_type;
    typedef typename Regex::locale_type locale_type;
    typedef input_iterator_archetype<value_type> input_iterator_type;
@@ -370,7 +370,7 @@
       const Regex ce;
       bool b = ce.empty();
       ignore_unused_variable_warning(b);
- size_type i = ce.mark_count();
+ unsigned i = ce.mark_count();
       ignore_unused_variable_warning(i);
       m_flags = ce.flags();
       e.imbue(ce.getloc());
@@ -533,7 +533,7 @@
 
    pointer_type m_pointer;
    flag_type m_flags;
- size_type m_size;
+ std::size_t m_size;
    input_iterator_type in1, in2;
    const sub_match_type m_sub;
    const value_type m_char;
@@ -557,7 +557,7 @@
 struct RegexConcept
 {
    typedef typename Regex::value_type value_type;
- typedef typename Regex::size_type size_type;
+ //typedef typename Regex::size_type size_type;
    typedef typename Regex::flag_type flag_type;
    typedef typename Regex::locale_type locale_type;
 

Modified: branches/fix-links/boost/regex/v4/basic_regex_parser.hpp
==============================================================================
--- branches/fix-links/boost/regex/v4/basic_regex_parser.hpp (original)
+++ branches/fix-links/boost/regex/v4/basic_regex_parser.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -784,6 +784,7 @@
       case syntax_element_restart_continue:
       case syntax_element_jump:
       case syntax_element_startmark:
+ case syntax_element_backstep:
          // can't legally repeat any of the above:
          fail(regex_constants::error_badrepeat, m_position - m_base);
          return false;
@@ -1869,6 +1870,7 @@
    if(markid == -4)
    {
       re_syntax_base* b = this->getaddress(expected_alt_point);
+ // Make sure we have exactly one alternative following this state:
       if(b->type != syntax_element_alt)
       {
          re_alt* alt = static_cast<re_alt*>(this->insert_state(expected_alt_point, syntax_element_alt, sizeof(re_alt)));
@@ -1879,6 +1881,15 @@
          fail(regex_constants::error_bad_pattern, m_position - m_base);
          return false;
       }
+ // check for invalid repetition of next state:
+ b = this->getaddress(expected_alt_point);
+ b = this->getaddress(static_cast<re_alt*>(b)->next.i, b);
+ if((b->type != syntax_element_assert_backref)
+ && (b->type != syntax_element_startmark))
+ {
+ fail(regex_constants::error_badrepeat, m_position - m_base);
+ return false;
+ }
    }
    //
    // append closing parenthesis state:

Modified: branches/fix-links/boost/serialization/complex.hpp
==============================================================================
--- branches/fix-links/boost/serialization/complex.hpp (original)
+++ branches/fix-links/boost/serialization/complex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -22,6 +22,7 @@
 
 #include <boost/serialization/nvp.hpp>
 #include <boost/serialization/is_bitwise_serializable.hpp>
+#include <boost/serialization/split_free.hpp>
 
 namespace boost {
 namespace serialization {

Modified: branches/fix-links/boost/serialization/utility.hpp
==============================================================================
--- branches/fix-links/boost/serialization/utility.hpp (original)
+++ branches/fix-links/boost/serialization/utility.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -50,9 +50,9 @@
 {
 };
 
-template <class T, class U>
-struct implementation_level<std::pair<T,U> >
- : mpl::int_<object_serializable> {} ;
+//template <class T, class U>
+//struct implementation_level<std::pair<T,U> >
+// : mpl::int_<object_serializable> {} ;
 
 } // serialization
 } // namespace boost

Modified: branches/fix-links/boost/spirit/core/primitives/primitives.hpp
==============================================================================
--- branches/fix-links/boost/spirit/core/primitives/primitives.hpp (original)
+++ branches/fix-links/boost/spirit/core/primitives/primitives.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -609,7 +609,7 @@
 
     ///////////////////////////////////////////////////////////////////////////
     //
- // end_parser class (suggested by Markus Schöpflin)
+ // end_parser class (suggested by Markus Schoepflin)
     //
     ///////////////////////////////////////////////////////////////////////////
     struct end_parser : public parser<end_parser>

Modified: branches/fix-links/boost/statechart/detail/rtti_policy.hpp
==============================================================================
--- branches/fix-links/boost/statechart/detail/rtti_policy.hpp (original)
+++ branches/fix-links/boost/statechart/detail/rtti_policy.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_DETAIL_RTTI_POLICY_HPP_INCLUDED
 #define BOOST_STATECHART_DETAIL_RTTI_POLICY_HPP_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -16,15 +16,6 @@
 
 
 
-#ifdef BOOST_MSVC
-// We permanently turn off the following level 4 warnings because users will
-// have to do so themselves anyway if we turn them back on
-# pragma warning( disable: 4511 ) // copy constructor could not be generated
-# pragma warning( disable: 4512 ) // assignment operator could not be generated
-#endif
-
-
-
 namespace boost
 {
 namespace statechart

Modified: branches/fix-links/boost/statechart/detail/state_base.hpp
==============================================================================
--- branches/fix-links/boost/statechart/detail/state_base.hpp (original)
+++ branches/fix-links/boost/statechart/detail/state_base.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_DETAIL_STATE_BASE_HPP_INCLUDED
 #define BOOST_STATECHART_DETAIL_STATE_BASE_HPP_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -34,15 +34,6 @@
 
 
 
-#ifdef BOOST_MSVC
-// We permanently turn off the following level 4 warnings because users will
-// have to do so themselves anyway if we turn them back on
-# pragma warning( disable: 4511 ) // copy constructor could not be generated
-# pragma warning( disable: 4512 ) // assignment operator could not be generated
-#endif
-
-
-
 namespace boost
 {
 namespace statechart

Modified: branches/fix-links/boost/statechart/event.hpp
==============================================================================
--- branches/fix-links/boost/statechart/event.hpp (original)
+++ branches/fix-links/boost/statechart/event.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_EVENT_HPP_INCLUDED
 #define BOOST_STATECHART_EVENT_HPP_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2007 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////

Modified: branches/fix-links/boost/statechart/event_processor.hpp
==============================================================================
--- branches/fix-links/boost/statechart/event_processor.hpp (original)
+++ branches/fix-links/boost/statechart/event_processor.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_EVENT_PROCESSOR_INCLUDED
 #define BOOST_STATECHART_EVENT_PROCESSOR_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -70,6 +70,9 @@
     virtual void process_event_impl( const event_base & evt ) = 0;
     virtual void terminate_impl() = 0;
 
+ // avoids C4512 (assignment operator could not be generated)
+ event_processor & operator=( const event_processor & );
+
     Scheduler & myScheduler_;
     const processor_handle myHandle_;
 };

Modified: branches/fix-links/boost/statechart/fifo_worker.hpp
==============================================================================
--- branches/fix-links/boost/statechart/fifo_worker.hpp (original)
+++ branches/fix-links/boost/statechart/fifo_worker.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_FIFO_WORKER_HPP_INCLUDED
 #define BOOST_STATECHART_FIFO_WORKER_HPP_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -20,7 +20,17 @@
 #ifdef BOOST_HAS_THREADS
 # ifdef BOOST_MSVC
 # pragma warning( push )
-# pragma warning( disable: 4275 ) // non-dll class used as base for dll class
+ // "conditional expression is constant" in basic_timed_mutex.hpp
+# pragma warning( disable: 4127 )
+ // "conversion from 'int' to 'unsigned short'" in microsec_time_clock.hpp
+# pragma warning( disable: 4244 )
+ // "... needs to have dll-interface to be used by clients of class ..."
+# pragma warning( disable: 4251 )
+ // "... assignment operator could not be generated"
+# pragma warning( disable: 4512 )
+ // "Function call with parameters that may be unsafe" in
+ // condition_variable.hpp
+# pragma warning( disable: 4996 )
 # endif
 
 # include <boost/thread/mutex.hpp>

Modified: branches/fix-links/boost/statechart/in_state_reaction.hpp
==============================================================================
--- branches/fix-links/boost/statechart/in_state_reaction.hpp (original)
+++ branches/fix-links/boost/statechart/in_state_reaction.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_IN_STATE_REACTION_HPP_INCLUDED
 #define BOOST_STATECHART_IN_STATE_REACTION_HPP_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2005-2006 Andreas Huber Doenni
+// Copyright 2005-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -10,10 +10,7 @@
 
 #include <boost/statechart/result.hpp>
 
-#include <boost/mpl/if.hpp>
-
-#include <boost/cast.hpp> // boost::polymorphic_downcast
-#include <boost/type_traits/is_same.hpp>
+#include <boost/statechart/detail/reaction_dispatcher.hpp>
 
 
 
@@ -27,40 +24,26 @@
 class event_base;
 
 //////////////////////////////////////////////////////////////////////////////
-template< class Event,
- class ReactionContext,
- void ( ReactionContext::*pAction )( const Event & ) >
+template< class Event,
+ class ReactionContext = detail::no_context< Event >,
+ void ( ReactionContext::*pAction )( const Event & ) =
+ &detail::no_context< Event >::no_function >
 class in_state_reaction
 {
   private:
     //////////////////////////////////////////////////////////////////////////
- struct react_base
+ template< class State >
+ struct reactions
     {
- template< class State, class EventBase, class IdType >
- static detail::reaction_result react(
- State & stt, const EventBase & evt, const IdType & )
+ static result react_without_action( State & stt )
       {
- ( stt.template context< ReactionContext >().*pAction )( evt );
- return detail::do_discard_event;
+ return stt.discard_event();
       }
- };
 
- struct react_derived
- {
- template< class State, class EventBase, class IdType >
- static detail::reaction_result react(
- State & stt, const EventBase & evt, const IdType & eventType )
+ static result react_with_action( State & stt, const Event & evt )
       {
- if ( eventType == Event::static_type() )
- {
- ( stt.template context< ReactionContext >().*pAction )(
- *polymorphic_downcast< const Event * >( &evt ) );
- return detail::do_discard_event;
- }
- else
- {
- return detail::no_reaction;
- }
+ ( stt.template context< ReactionContext >().*pAction )( evt );
+ return react_without_action( stt );
       }
     };
 
@@ -73,11 +56,10 @@
     static detail::reaction_result react(
       State & stt, const EventBase & evt, const IdType & eventType )
     {
- typedef typename mpl::if_<
- is_same< Event, event_base >, react_base, react_derived
- >::type impl;
-
- return impl::react( stt, evt, eventType );
+ typedef detail::reaction_dispatcher<
+ reactions< State >, State, EventBase, Event, ReactionContext, IdType
+ > dispatcher;
+ return dispatcher::react( stt, evt, eventType );
     }
 };
 

Modified: branches/fix-links/boost/statechart/processor_container.hpp
==============================================================================
--- branches/fix-links/boost/statechart/processor_container.hpp (original)
+++ branches/fix-links/boost/statechart/processor_container.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_PROCESSOR_CONTAINER_HPP_INCLUDED
 #define BOOST_STATECHART_PROCESSOR_CONTAINER_HPP_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -70,6 +70,9 @@
       private:
       #endif
 
+ // avoids C4512 (assignment operator could not be generated)
+ processor_context & operator=( const processor_context & );
+
         Scheduler & scheduler_;
         const processor_handle handle_;
 

Modified: branches/fix-links/boost/statechart/simple_state.hpp
==============================================================================
--- branches/fix-links/boost/statechart/simple_state.hpp (original)
+++ branches/fix-links/boost/statechart/simple_state.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_SIMPLE_STATE_HPP_INCLUDED
 #define BOOST_STATECHART_SIMPLE_STATE_HPP_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -128,6 +128,9 @@
     }
 
   private:
+ // avoids C4512 (assignment operator could not be generated)
+ transition_function & operator=( const transition_function & );
+
     void ( TransitionContext::*pTransitionAction_ )( const Event & );
     const Event & evt_;
 };

Modified: branches/fix-links/boost/statechart/state_machine.hpp
==============================================================================
--- branches/fix-links/boost/statechart/state_machine.hpp (original)
+++ branches/fix-links/boost/statechart/state_machine.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_STATE_MACHINE_HPP_INCLUDED
 #define BOOST_STATECHART_STATE_MACHINE_HPP_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -57,15 +57,6 @@
 
 
 
-#ifdef BOOST_MSVC
-// We permanently turn off the following level 4 warnings because users will
-// have to do so themselves anyway if we turn them back on
-# pragma warning( disable: 4511 ) // copy constructor could not be generated
-# pragma warning( disable: 4512 ) // assignment op could not be generated
-#endif
-
-
-
 namespace boost
 {
 namespace statechart
@@ -98,6 +89,9 @@
 
   private:
     //////////////////////////////////////////////////////////////////////////
+ // avoids C4512 (assignment operator could not be generated)
+ send_function & operator=( const send_function & );
+
     StateBaseType & toState_;
     const EventBaseType & evt_;
     IdType eventType_;
@@ -220,6 +214,9 @@
     {
     }
 
+ // avoids C4512 (assignment operator could not be generated)
+ history_key & operator=( const history_key & );
+
     const typename RttiPolicy::id_type historyContextType_;
     const orthogonal_position_type historizedOrthogonalRegion_;
 };
@@ -720,6 +717,10 @@
 
       private:
         //////////////////////////////////////////////////////////////////////
+ // avoids C4512 (assignment operator could not be generated)
+ initial_construct_function & operator=(
+ const initial_construct_function & );
+
         state_machine & machine_;
     };
     friend class initial_construct_function;
@@ -739,6 +740,9 @@
 
       private:
         //////////////////////////////////////////////////////////////////////
+ // avoids C4512 (assignment operator could not be generated)
+ terminate_function & operator=( const terminate_function & );
+
         state_machine & machine_;
     };
     friend class terminate_function;
@@ -814,6 +818,10 @@
 
       private:
         //////////////////////////////////////////////////////////////////////
+ // avoids C4512 (assignment operator could not be generated)
+ exception_event_handler & operator=(
+ const exception_event_handler & );
+
         state_machine & machine_;
         state_base_type * pCurrentState_;
     };
@@ -822,6 +830,7 @@
     class terminator
     {
       public:
+ //////////////////////////////////////////////////////////////////////
         terminator( state_machine & machine ) :
           machine_( machine ), dismissed_( false ) {}
         ~terminator()
@@ -831,6 +840,10 @@
         void dismiss() { dismissed_ = true; }
 
       private:
+ //////////////////////////////////////////////////////////////////////
+ // avoids C4512 (assignment operator could not be generated)
+ terminator & operator=( const terminator & );
+
         state_machine & machine_;
         bool dismissed_;
     };

Modified: branches/fix-links/boost/statechart/transition.hpp
==============================================================================
--- branches/fix-links/boost/statechart/transition.hpp (original)
+++ branches/fix-links/boost/statechart/transition.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 #ifndef BOOST_STATECHART_TRANSITION_HPP_INCLUDED
 #define BOOST_STATECHART_TRANSITION_HPP_INCLUDED
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -10,10 +10,7 @@
 
 #include <boost/statechart/result.hpp>
 
-#include <boost/mpl/if.hpp>
-
-#include <boost/cast.hpp> // boost::polymorphic_downcast
-#include <boost/type_traits/is_same.hpp>
+#include <boost/statechart/detail/reaction_dispatcher.hpp>
 
 
 
@@ -21,27 +18,10 @@
 {
 namespace statechart
 {
-namespace detail
-{
 
 
 
 //////////////////////////////////////////////////////////////////////////////
-template< class Event >
-struct no_context
-{
- void no_function( const Event & );
-};
-
-
-
-} // namespace detail
-
-
-
-class event_base;
-
-//////////////////////////////////////////////////////////////////////////////
 template< class Event, class Destination,
           class TransitionContext = detail::no_context< Event >,
           void ( TransitionContext::*pTransitionAction )( const Event & ) =
@@ -50,74 +30,17 @@
 {
   private:
     //////////////////////////////////////////////////////////////////////////
- struct react_without_transition_action_impl
- {
- template< class State, class EventBase >
- static detail::reaction_result react( State & stt, const EventBase & )
- {
- return detail::result_utility::get_result(
- stt.template transit< Destination >() );
- }
- };
-
- struct react_base_with_transition_action_impl
+ template< class State >
+ struct reactions
     {
- template< class State, class EventBase >
- static detail::reaction_result react(
- State & stt, const EventBase & toEvent )
+ static result react_without_action( State & stt )
       {
- return detail::result_utility::get_result(
- stt.template transit< Destination >( pTransitionAction, toEvent ) );
+ return stt.template transit< Destination >();
       }
- };
 
- struct react_base
- {
- template< class State, class EventBase, class IdType >
- static detail::reaction_result react(
- State & stt, const EventBase & evt, const IdType & )
+ static result react_with_action( State & stt, const Event & evt )
       {
- typedef typename mpl::if_<
- is_same< TransitionContext, detail::no_context< Event > >,
- react_without_transition_action_impl,
- react_base_with_transition_action_impl
- >::type impl;
- return impl::react( stt, evt );
- }
- };
-
- struct react_derived_with_transition_action_impl
- {
- template< class State, class EventBase >
- static detail::reaction_result react(
- State & stt, const EventBase & toEvent )
- {
- return detail::result_utility::get_result(
- stt.template transit< Destination >(
- pTransitionAction,
- *polymorphic_downcast< const Event * >( &toEvent ) ) );
- }
- };
-
- struct react_derived
- {
- template< class State, class EventBase, class IdType >
- static detail::reaction_result react(
- State & stt, const EventBase & evt, const IdType & eventType )
- {
- if ( eventType == Event::static_type() )
- {
- typedef typename mpl::if_<
- is_same< TransitionContext, detail::no_context< Event > >,
- react_without_transition_action_impl,
- react_derived_with_transition_action_impl
- >::type impl;
- return impl::react( stt, evt );
- }
- else
- {
- return detail::no_reaction;
- }
+ return stt.template transit< Destination >( pTransitionAction, evt );
       }
     };
 
@@ -130,11 +53,10 @@
     static detail::reaction_result react(
       State & stt, const EventBase & evt, const IdType & eventType )
     {
- typedef typename mpl::if_<
- is_same< Event, event_base >, react_base, react_derived
- >::type impl;
-
- return impl::react( stt, evt, eventType );
+ typedef detail::reaction_dispatcher<
+ reactions< State >, State, EventBase, Event, TransitionContext, IdType
+ > dispatcher;
+ return dispatcher::react( stt, evt, eventType );
     }
 };
 

Modified: branches/fix-links/boost/test/impl/debug.ipp
==============================================================================
--- branches/fix-links/boost/test/impl/debug.ipp (original)
+++ branches/fix-links/boost/test/impl/debug.ipp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -32,6 +32,7 @@
 # include <windows.h>
 # include <winreg.h>
 # include <cstdio>
+# include <cstring>
 
 # if !defined(NDEBUG) && defined(_MSC_VER)
 # define BOOST_MS_CRT_BASED_DEBUG
@@ -58,6 +59,7 @@
 // STL
 #include <cstring>
 #include <map>
+#include <cstdio>
 #include <stdarg.h> // !! ?? cstdarg
 
 // SYSTEM API
@@ -964,3 +966,4 @@
 #include <boost/test/detail/enable_warnings.hpp>
 
 #endif // BOOST_TEST_DEBUG_API_IPP_112006GER
+

Modified: branches/fix-links/boost/test/impl/execution_monitor.ipp
==============================================================================
--- branches/fix-links/boost/test/impl/execution_monitor.ipp (original)
+++ branches/fix-links/boost/test/impl/execution_monitor.ipp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -65,7 +65,7 @@
 
 # include <windows.h>
 
-# if defined(__MWERKS__)
+# if defined(__MWERKS__) || defined(BOOST_MSVC)
 # include <eh.h>
 # endif
 
@@ -1149,3 +1149,4 @@
 #include <boost/test/detail/enable_warnings.hpp>
 
 #endif // BOOST_TEST_EXECUTION_MONITOR_IPP_012205GER
+

Modified: branches/fix-links/boost/test/test_tools.hpp
==============================================================================
--- branches/fix-links/boost/test/test_tools.hpp (original)
+++ branches/fix-links/boost/test/test_tools.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -377,6 +377,16 @@
 //____________________________________________________________________________//
 
 template<>
+struct BOOST_TEST_DECL print_log_value<bool> {
+ void operator()( std::ostream& ostr, bool t )
+ {
+ ostr << std::boolalpha << t;
+ }
+};
+
+//____________________________________________________________________________//
+
+template<>
 struct BOOST_TEST_DECL print_log_value<char> {
     void operator()( std::ostream& ostr, char t );
 };

Modified: branches/fix-links/boost/thread/win32/once.hpp
==============================================================================
--- branches/fix-links/boost/thread/win32/once.hpp (original)
+++ branches/fix-links/boost/thread/win32/once.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -94,9 +94,9 @@
             detail::int_to_string(win32::GetCurrentProcessId(), mutex_name + once_mutex_name_fixed_length + sizeof(void*)*2);
 
 #ifdef BOOST_NO_ANSI_APIS
- return win32::CreateMutexW(NULL, 0, mutex_name);
+ return win32::CreateMutexW(0, 0, mutex_name);
 #else
- return win32::CreateMutexA(NULL, 0, mutex_name);
+ return win32::CreateMutexA(0, 0, mutex_name);
 #endif
         }
 

Modified: branches/fix-links/boost/thread/win32/shared_mutex.hpp
==============================================================================
--- branches/fix-links/boost/thread/win32/shared_mutex.hpp (original)
+++ branches/fix-links/boost/thread/win32/shared_mutex.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -57,12 +57,12 @@
         {
             if(old_state.exclusive_waiting)
             {
- BOOST_VERIFY(detail::win32::ReleaseSemaphore(exclusive_sem,1,NULL)!=0);
+ BOOST_VERIFY(detail::win32::ReleaseSemaphore(exclusive_sem,1,0)!=0);
             }
                         
             if(old_state.shared_waiting || old_state.exclusive_waiting)
             {
- BOOST_VERIFY(detail::win32::ReleaseSemaphore(unlock_sem,old_state.shared_waiting + (old_state.exclusive_waiting?1:0),NULL)!=0);
+ BOOST_VERIFY(detail::win32::ReleaseSemaphore(unlock_sem,old_state.shared_waiting + (old_state.exclusive_waiting?1:0),0)!=0);
             }
         }
         
@@ -215,7 +215,7 @@
                     {
                         if(old_state.upgrade)
                         {
- BOOST_VERIFY(detail::win32::ReleaseSemaphore(upgrade_sem,1,NULL)!=0);
+ BOOST_VERIFY(detail::win32::ReleaseSemaphore(upgrade_sem,1,0)!=0);
                         }
                         else
                         {

Modified: branches/fix-links/boost/thread/win32/thread_primitives.hpp
==============================================================================
--- branches/fix-links/boost/thread/win32/thread_primitives.hpp (original)
+++ branches/fix-links/boost/thread/win32/thread_primitives.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -181,9 +181,9 @@
             inline handle create_anonymous_semaphore(long initial_count,long max_count)
             {
 #if !defined(BOOST_NO_ANSI_APIS)
- handle const res=CreateSemaphoreA(NULL,initial_count,max_count,NULL);
+ handle const res=CreateSemaphoreA(0,initial_count,max_count,0);
 #else
- handle const res=CreateSemaphoreW(NULL,initial_count,max_count,NULL);
+ handle const res=CreateSemaphoreW(0,initial_count,max_count,0);
 #endif
                 if(!res)
                 {

Modified: branches/fix-links/boost/tr1/detail/config.hpp
==============================================================================
--- branches/fix-links/boost/tr1/detail/config.hpp (original)
+++ branches/fix-links/boost/tr1/detail/config.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -112,13 +112,34 @@
 #if defined(_MSC_VER) && (_MSC_VER >= 1500) \
    && defined(_MSC_FULL_VER) && \
    !defined(__SGI_STL_PORT) && \
- !defined(_STLPORT_VERSION)
+ !defined(_STLPORT_VERSION) && \
+ !defined(_RWSTD_VER_STR) && \
+ !defined(_RWSTD_VER)
 //
 // MSVC-9.0 defines a not-quite TR1 conforming hash
 // function object in <functional>, so we must define
-// this here:
+// this here, in addition the feature pack for VC9
+// provides a more or less full TR1 implementation:
 //
+#if defined(_HAS_TR1) && (_HAS_TR1 + 0)
+# define BOOST_HAS_TR1_ARRAY
+# define BOOST_HAS_TR1_REFERENCE_WRAPPER
+# define BOOST_HAS_TR1_RESULT_OF
+# define BOOST_HAS_TR1_MEM_FN
+# define BOOST_HAS_TR1_BIND
+# define BOOST_HAS_TR1_FUNCTION
 # define BOOST_HAS_TR1_HASH
+# define BOOST_HAS_TR1_SHARED_PTR
+# define BOOST_HAS_TR1_RANDOM
+# define BOOST_HAS_TR1_REGEX
+# define BOOST_HAS_TR1_TUPLE
+# define BOOST_HAS_TR1_TYPE_TRAITS
+# define BOOST_HAS_TR1_UTILITY
+# define BOOST_HAS_TR1_UNORDERED_MAP
+# define BOOST_HAS_TR1_UNORDERED_SET
+#else
+# define BOOST_HAS_TR1_HASH
+#endif
 #endif
 
 #include <boost/config.hpp>

Modified: branches/fix-links/boost/type_traits/make_signed.hpp
==============================================================================
--- branches/fix-links/boost/type_traits/make_signed.hpp (original)
+++ branches/fix-links/boost/type_traits/make_signed.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -72,7 +72,7 @@
                      is_same<t_no_cv, unsigned long>,
                      long,
 #if defined(BOOST_HAS_LONG_LONG)
- long long
+ boost::long_long_type
 #elif defined(BOOST_HAS_MS_INT64)
                      __int64
 #else
@@ -96,7 +96,7 @@
                      sizeof(t_no_cv) == sizeof(unsigned long),
                      long,
 #if defined(BOOST_HAS_LONG_LONG)
- long long
+ boost::long_long_type
 #elif defined(BOOST_HAS_MS_INT64)
                      __int64
 #else

Modified: branches/fix-links/boost/type_traits/make_unsigned.hpp
==============================================================================
--- branches/fix-links/boost/type_traits/make_unsigned.hpp (original)
+++ branches/fix-links/boost/type_traits/make_unsigned.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -72,7 +72,7 @@
                      is_same<t_no_cv, long>,
                      unsigned long,
 #if defined(BOOST_HAS_LONG_LONG)
- unsigned long long
+ boost::ulong_long_type
 #elif defined(BOOST_HAS_MS_INT64)
                      unsigned __int64
 #else
@@ -96,7 +96,7 @@
                      sizeof(t_no_cv) == sizeof(unsigned long),
                      unsigned long,
 #if defined(BOOST_HAS_LONG_LONG)
- unsigned long long
+ boost::ulong_long_type
 #elif defined(BOOST_HAS_MS_INT64)
                      unsigned __int64
 #else

Modified: branches/fix-links/boost/utility/value_init.hpp
==============================================================================
--- branches/fix-links/boost/utility/value_init.hpp (original)
+++ branches/fix-links/boost/utility/value_init.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,31 +1,20 @@
-// (C) Copyright 2002-2007, Fernando Luis Cacciola Carballal.
+// (C) Copyright 2002-2008, Fernando Luis Cacciola Carballal.
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 //
 // 21 Ago 2002 (Created) Fernando Cacciola
-// 24 Dec 2007 (Refactored and worked around various compiler bugs) Fernando Cacciola, Niels Dekker
+// 19 Jan 2008 (Worked around compiler bugs, added initialized_value) Fernando Cacciola, Niels Dekker
 //
 #ifndef BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
 #define BOOST_UTILITY_VALUE_INIT_21AGO2002_HPP
 
 // Note: The implementation of boost::value_initialized had to deal with the
-// fact that various compilers haven't fully implemented value-initialization:
-// Microsoft Feedback ID 100744 - Value-initialization in new-expression
-// Reported by Pavel Kuznetsov (MetaCommunications Engineering), 2005-07-28
-// https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=100744
-// GCC Bug 30111 - Value-initialization of POD base class doesn't initialize members
-// Reported by Jonathan Wakely, 2006-12-07
-// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111
-// GCC Bug 33916 - Default constructor fails to initialize array members
-// Reported by Michael Elizabeth Chastain, 2007-10-26
-// http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916
-// Borland Report 51854 - Value-initialization: POD struct should be zero-initialized
-// Reported by Niels Dekker (LKEB, Leiden University Medical Center), 2007-11-09
-// http://qc.codegear.com/wc/qcmain.aspx?d=51854
-// The constructor of boost::value_initialized<T> works around these issues, by
-// clearing the bytes of T, before constructing the T object it contains.
+// fact that various compilers haven't fully implemented value-initialization.
+// The constructor of boost::value_initialized<T> works around these compiler
+// issues, by clearing the bytes of T, before constructing the T object it
+// contains. More details on these issues are at libs/utility/value_init.htm
 
 #include <boost/aligned_storage.hpp>
 #include <boost/detail/workaround.hpp>
@@ -60,7 +49,7 @@
 #if _MSC_VER >= 1310
 // When using MSVC 7.1 or higher, the following placement new expression may trigger warning C4345:
 // "behavior change: an object of POD type constructed with an initializer of the form ()
-// will be default-initialized". There is no need to worry about this, though.
+// will be default-initialized". It is safe to ignore this warning when using value_initialized.
 #pragma warning(disable: 4345)
 #endif
 #endif
@@ -77,9 +66,8 @@
 
     value_initialized & operator=(value_initialized const & arg)
     {
- T & this_data = this->data();
       T const & arg_data = arg.data();
- this_data = arg_data;
+ this->data() = arg_data;
       return *this;
     }
 
@@ -110,6 +98,18 @@
   return x.data() ;
 }
 
+
+class initialized_value
+{
+ public :
+
+ template <class T> operator T() const
+ {
+ return get( value_initialized<T>() );
+ }
+};
+
+
 } // namespace boost
 
 

Modified: branches/fix-links/boost/wave.hpp
==============================================================================
--- branches/fix-links/boost/wave.hpp (original)
+++ branches/fix-links/boost/wave.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
 
     See http://www.boost.org/libs/wave for documentation
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpp_context.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpp_context.hpp (original)
+++ branches/fix-links/boost/wave/cpp_context.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
@@ -50,7 +50,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 //
-// The C preprocessor context template class
+// The C/C++ preprocessor context template class
 //
 // The boost::wave::context template is the main interface class to
 // control the behavior of the preprocessing engine.

Modified: branches/fix-links/boost/wave/cpp_exceptions.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpp_exceptions.hpp (original)
+++ branches/fix-links/boost/wave/cpp_exceptions.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpp_iteration_context.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpp_iteration_context.hpp (original)
+++ branches/fix-links/boost/wave/cpp_iteration_context.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpp_throw.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpp_throw.hpp (original)
+++ branches/fix-links/boost/wave/cpp_throw.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/convert_trigraphs.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/convert_trigraphs.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/convert_trigraphs.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/cpp_lex_interface.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/cpp_lex_interface.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/cpp_lex_interface.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/cpp_lex_interface_generator.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/cpp_lex_interface_generator.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/cpp_lex_interface_generator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/cpp_lex_iterator.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/cpp_lex_iterator.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/cpp_lex_iterator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/cpp_lex_token.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/cpp_lex_token.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/cpp_lex_token.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/cpplexer_exceptions.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/cpplexer_exceptions.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/cpplexer_exceptions.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/detect_include_guards.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/detect_include_guards.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/detect_include_guards.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -22,7 +22,7 @@
     will work as well). The code allows for any whitespace, newline and single
     '#' tokens before the #if/#ifndef and after the final #endif.
     
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/re2clex/aq.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/re2clex/aq.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/re2clex/aq.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     http://www.boost.org/
     
     Copyright (c) 2001 Daniel C. Nuffer.
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re2c_lexer.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/re2clex/scanner.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/re2clex/scanner.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/re2clex/scanner.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     http://www.boost.org/
     
     Copyright (c) 2001 Daniel C. Nuffer.
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/token_cache.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/token_cache.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/token_cache.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/cpplexer/validate_universal_char.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/validate_universal_char.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/validate_universal_char.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_chlit_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_chlit_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_chlit_grammar.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_defined_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_defined_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_defined_grammar.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_defined_grammar_gen.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_defined_grammar_gen.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_defined_grammar_gen.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_expression_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_expression_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_expression_grammar.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_expression_grammar_gen.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_expression_grammar_gen.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_expression_grammar_gen.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_expression_value.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_expression_value.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_expression_value.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_grammar.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_grammar_gen.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_grammar_gen.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_grammar_gen.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_intlit_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_intlit_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_intlit_grammar.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_literal_grammar_gen.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_literal_grammar_gen.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_literal_grammar_gen.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_predef_macros_gen.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_predef_macros_gen.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_predef_macros_gen.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_predef_macros_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_predef_macros_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_predef_macros_grammar.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/grammars/cpp_value_error.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_value_error.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_value_error.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/language_support.hpp
==============================================================================
--- branches/fix-links/boost/wave/language_support.hpp (original)
+++ branches/fix-links/boost/wave/language_support.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/preprocessing_hooks.hpp
==============================================================================
--- branches/fix-links/boost/wave/preprocessing_hooks.hpp (original)
+++ branches/fix-links/boost/wave/preprocessing_hooks.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/token_ids.hpp
==============================================================================
--- branches/fix-links/boost/wave/token_ids.hpp (original)
+++ branches/fix-links/boost/wave/token_ids.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
@@ -167,125 +167,124 @@
     T_CONSTCAST = TOKEN_FROM_ID(316, KeywordTokenType),
     T_CONTINUE = TOKEN_FROM_ID(317, KeywordTokenType),
     T_DEFAULT = TOKEN_FROM_ID(318, KeywordTokenType),
- T_DEFINED = TOKEN_FROM_ID(319, KeywordTokenType),
- T_DELETE = TOKEN_FROM_ID(320, KeywordTokenType),
- T_DO = TOKEN_FROM_ID(321, KeywordTokenType),
- T_DOUBLE = TOKEN_FROM_ID(322, KeywordTokenType),
- T_DYNAMICCAST = TOKEN_FROM_ID(323, KeywordTokenType),
- T_ELSE = TOKEN_FROM_ID(324, KeywordTokenType),
- T_ENUM = TOKEN_FROM_ID(325, KeywordTokenType),
- T_EXPLICIT = TOKEN_FROM_ID(326, KeywordTokenType),
- T_EXPORT = TOKEN_FROM_ID(327, KeywordTokenType),
- T_EXTERN = TOKEN_FROM_ID(328, KeywordTokenType),
- T_FLOAT = TOKEN_FROM_ID(329, KeywordTokenType),
- T_FOR = TOKEN_FROM_ID(330, KeywordTokenType),
- T_FRIEND = TOKEN_FROM_ID(331, KeywordTokenType),
- T_GOTO = TOKEN_FROM_ID(332, KeywordTokenType),
- T_IF = TOKEN_FROM_ID(333, KeywordTokenType),
- T_INLINE = TOKEN_FROM_ID(334, KeywordTokenType),
- T_INT = TOKEN_FROM_ID(335, KeywordTokenType),
- T_LONG = TOKEN_FROM_ID(336, KeywordTokenType),
- T_MUTABLE = TOKEN_FROM_ID(337, KeywordTokenType),
- T_NAMESPACE = TOKEN_FROM_ID(338, KeywordTokenType),
- T_NEW = TOKEN_FROM_ID(339, KeywordTokenType),
- T_OPERATOR = TOKEN_FROM_ID(340, KeywordTokenType),
- T_PRIVATE = TOKEN_FROM_ID(341, KeywordTokenType),
- T_PROTECTED = TOKEN_FROM_ID(342, KeywordTokenType),
- T_PUBLIC = TOKEN_FROM_ID(343, KeywordTokenType),
- T_REGISTER = TOKEN_FROM_ID(344, KeywordTokenType),
- T_REINTERPRETCAST = TOKEN_FROM_ID(345, KeywordTokenType),
- T_RETURN = TOKEN_FROM_ID(346, KeywordTokenType),
- T_SHORT = TOKEN_FROM_ID(347, KeywordTokenType),
- T_SIGNED = TOKEN_FROM_ID(348, KeywordTokenType),
- T_SIZEOF = TOKEN_FROM_ID(349, KeywordTokenType),
- T_STATIC = TOKEN_FROM_ID(350, KeywordTokenType),
- T_STATICCAST = TOKEN_FROM_ID(351, KeywordTokenType),
- T_STRUCT = TOKEN_FROM_ID(352, KeywordTokenType),
- T_SWITCH = TOKEN_FROM_ID(353, KeywordTokenType),
- T_TEMPLATE = TOKEN_FROM_ID(354, KeywordTokenType),
- T_THIS = TOKEN_FROM_ID(355, KeywordTokenType),
- T_THROW = TOKEN_FROM_ID(356, KeywordTokenType),
- T_TRY = TOKEN_FROM_ID(357, KeywordTokenType),
- T_TYPEDEF = TOKEN_FROM_ID(358, KeywordTokenType),
- T_TYPEID = TOKEN_FROM_ID(359, KeywordTokenType),
- T_TYPENAME = TOKEN_FROM_ID(360, KeywordTokenType),
- T_UNION = TOKEN_FROM_ID(361, KeywordTokenType),
- T_UNSIGNED = TOKEN_FROM_ID(362, KeywordTokenType),
- T_USING = TOKEN_FROM_ID(363, KeywordTokenType),
- T_VIRTUAL = TOKEN_FROM_ID(364, KeywordTokenType),
- T_VOID = TOKEN_FROM_ID(365, KeywordTokenType),
- T_VOLATILE = TOKEN_FROM_ID(366, KeywordTokenType),
- T_WCHART = TOKEN_FROM_ID(367, KeywordTokenType),
- T_WHILE = TOKEN_FROM_ID(368, KeywordTokenType),
- T_PP_DEFINE = TOKEN_FROM_ID(369, PPTokenType),
- T_PP_IF = TOKEN_FROM_ID(370, PPConditionalTokenType),
- T_PP_IFDEF = TOKEN_FROM_ID(371, PPConditionalTokenType),
- T_PP_IFNDEF = TOKEN_FROM_ID(372, PPConditionalTokenType),
- T_PP_ELSE = TOKEN_FROM_ID(373, PPConditionalTokenType),
- T_PP_ELIF = TOKEN_FROM_ID(374, PPConditionalTokenType),
- T_PP_ENDIF = TOKEN_FROM_ID(375, PPConditionalTokenType),
- T_PP_ERROR = TOKEN_FROM_ID(376, PPTokenType),
- T_PP_LINE = TOKEN_FROM_ID(377, PPTokenType),
- T_PP_PRAGMA = TOKEN_FROM_ID(378, PPTokenType),
- T_PP_UNDEF = TOKEN_FROM_ID(379, PPTokenType),
- T_PP_WARNING = TOKEN_FROM_ID(380, PPTokenType),
- T_IDENTIFIER = TOKEN_FROM_ID(381, IdentifierTokenType),
- T_OCTALINT = TOKEN_FROM_ID(382, IntegerLiteralTokenType),
- T_DECIMALINT = TOKEN_FROM_ID(383, IntegerLiteralTokenType),
- T_HEXAINT = TOKEN_FROM_ID(384, IntegerLiteralTokenType),
- T_INTLIT = TOKEN_FROM_ID(385, IntegerLiteralTokenType),
- T_LONGINTLIT = TOKEN_FROM_ID(386, IntegerLiteralTokenType),
- T_FLOATLIT = TOKEN_FROM_ID(387, FloatingLiteralTokenType),
- T_FIXEDPOINTLIT = TOKEN_FROM_ID(387, FloatingLiteralTokenType|AltTokenType), // IDL specific
- T_CCOMMENT = TOKEN_FROM_ID(388, WhiteSpaceTokenType|AltTokenType),
- T_CPPCOMMENT = TOKEN_FROM_ID(389, WhiteSpaceTokenType|AltTokenType),
- T_CHARLIT = TOKEN_FROM_ID(390, CharacterLiteralTokenType),
- T_STRINGLIT = TOKEN_FROM_ID(391, StringLiteralTokenType),
- T_CONTLINE = TOKEN_FROM_ID(392, EOLTokenType),
- T_SPACE = TOKEN_FROM_ID(393, WhiteSpaceTokenType),
- T_SPACE2 = TOKEN_FROM_ID(394, WhiteSpaceTokenType),
- T_NEWLINE = TOKEN_FROM_ID(395, EOLTokenType),
- T_GENERATEDNEWLINE = TOKEN_FROM_ID(395, EOLTokenType|AltTokenType),
- T_POUND_POUND = TOKEN_FROM_ID(396, OperatorTokenType),
- T_POUND_POUND_ALT = TOKEN_FROM_ID(396, OperatorTokenType|AltTokenType),
- T_POUND_POUND_TRIGRAPH = TOKEN_FROM_ID(396, OperatorTokenType|TriGraphTokenType),
- T_POUND = TOKEN_FROM_ID(397, OperatorTokenType),
- T_POUND_ALT = TOKEN_FROM_ID(397, OperatorTokenType|AltTokenType),
- T_POUND_TRIGRAPH = TOKEN_FROM_ID(397, OperatorTokenType|TriGraphTokenType),
- T_ANY = TOKEN_FROM_ID(398, UnknownTokenType),
- T_ANY_TRIGRAPH = TOKEN_FROM_ID(398, UnknownTokenType|TriGraphTokenType),
- T_PP_INCLUDE = TOKEN_FROM_ID(399, PPTokenType),
- T_PP_QHEADER = TOKEN_FROM_ID(400, PPTokenType),
- T_PP_HHEADER = TOKEN_FROM_ID(401, PPTokenType),
- T_PP_INCLUDE_NEXT = TOKEN_FROM_ID(399, PPTokenType|AltTokenType),
- T_PP_QHEADER_NEXT = TOKEN_FROM_ID(400, PPTokenType|AltTokenType),
- T_PP_HHEADER_NEXT = TOKEN_FROM_ID(401, PPTokenType|AltTokenType),
- T_EOF = TOKEN_FROM_ID(402, EOFTokenType), // end of file reached
- T_EOI = TOKEN_FROM_ID(403, EOFTokenType), // end of input reached
- T_PP_NUMBER = TOKEN_FROM_ID(404, InternalTokenType),
+ T_DELETE = TOKEN_FROM_ID(319, KeywordTokenType),
+ T_DO = TOKEN_FROM_ID(320, KeywordTokenType),
+ T_DOUBLE = TOKEN_FROM_ID(321, KeywordTokenType),
+ T_DYNAMICCAST = TOKEN_FROM_ID(322, KeywordTokenType),
+ T_ELSE = TOKEN_FROM_ID(323, KeywordTokenType),
+ T_ENUM = TOKEN_FROM_ID(324, KeywordTokenType),
+ T_EXPLICIT = TOKEN_FROM_ID(325, KeywordTokenType),
+ T_EXPORT = TOKEN_FROM_ID(326, KeywordTokenType),
+ T_EXTERN = TOKEN_FROM_ID(327, KeywordTokenType),
+ T_FLOAT = TOKEN_FROM_ID(328, KeywordTokenType),
+ T_FOR = TOKEN_FROM_ID(329, KeywordTokenType),
+ T_FRIEND = TOKEN_FROM_ID(330, KeywordTokenType),
+ T_GOTO = TOKEN_FROM_ID(331, KeywordTokenType),
+ T_IF = TOKEN_FROM_ID(332, KeywordTokenType),
+ T_INLINE = TOKEN_FROM_ID(333, KeywordTokenType),
+ T_INT = TOKEN_FROM_ID(334, KeywordTokenType),
+ T_LONG = TOKEN_FROM_ID(335, KeywordTokenType),
+ T_MUTABLE = TOKEN_FROM_ID(336, KeywordTokenType),
+ T_NAMESPACE = TOKEN_FROM_ID(337, KeywordTokenType),
+ T_NEW = TOKEN_FROM_ID(338, KeywordTokenType),
+ T_OPERATOR = TOKEN_FROM_ID(339, KeywordTokenType),
+ T_PRIVATE = TOKEN_FROM_ID(340, KeywordTokenType),
+ T_PROTECTED = TOKEN_FROM_ID(341, KeywordTokenType),
+ T_PUBLIC = TOKEN_FROM_ID(342, KeywordTokenType),
+ T_REGISTER = TOKEN_FROM_ID(343, KeywordTokenType),
+ T_REINTERPRETCAST = TOKEN_FROM_ID(344, KeywordTokenType),
+ T_RETURN = TOKEN_FROM_ID(345, KeywordTokenType),
+ T_SHORT = TOKEN_FROM_ID(346, KeywordTokenType),
+ T_SIGNED = TOKEN_FROM_ID(347, KeywordTokenType),
+ T_SIZEOF = TOKEN_FROM_ID(348, KeywordTokenType),
+ T_STATIC = TOKEN_FROM_ID(349, KeywordTokenType),
+ T_STATICCAST = TOKEN_FROM_ID(350, KeywordTokenType),
+ T_STRUCT = TOKEN_FROM_ID(351, KeywordTokenType),
+ T_SWITCH = TOKEN_FROM_ID(352, KeywordTokenType),
+ T_TEMPLATE = TOKEN_FROM_ID(353, KeywordTokenType),
+ T_THIS = TOKEN_FROM_ID(354, KeywordTokenType),
+ T_THROW = TOKEN_FROM_ID(355, KeywordTokenType),
+ T_TRY = TOKEN_FROM_ID(356, KeywordTokenType),
+ T_TYPEDEF = TOKEN_FROM_ID(357, KeywordTokenType),
+ T_TYPEID = TOKEN_FROM_ID(358, KeywordTokenType),
+ T_TYPENAME = TOKEN_FROM_ID(359, KeywordTokenType),
+ T_UNION = TOKEN_FROM_ID(360, KeywordTokenType),
+ T_UNSIGNED = TOKEN_FROM_ID(361, KeywordTokenType),
+ T_USING = TOKEN_FROM_ID(362, KeywordTokenType),
+ T_VIRTUAL = TOKEN_FROM_ID(363, KeywordTokenType),
+ T_VOID = TOKEN_FROM_ID(364, KeywordTokenType),
+ T_VOLATILE = TOKEN_FROM_ID(365, KeywordTokenType),
+ T_WCHART = TOKEN_FROM_ID(366, KeywordTokenType),
+ T_WHILE = TOKEN_FROM_ID(367, KeywordTokenType),
+ T_PP_DEFINE = TOKEN_FROM_ID(368, PPTokenType),
+ T_PP_IF = TOKEN_FROM_ID(369, PPConditionalTokenType),
+ T_PP_IFDEF = TOKEN_FROM_ID(370, PPConditionalTokenType),
+ T_PP_IFNDEF = TOKEN_FROM_ID(371, PPConditionalTokenType),
+ T_PP_ELSE = TOKEN_FROM_ID(372, PPConditionalTokenType),
+ T_PP_ELIF = TOKEN_FROM_ID(373, PPConditionalTokenType),
+ T_PP_ENDIF = TOKEN_FROM_ID(374, PPConditionalTokenType),
+ T_PP_ERROR = TOKEN_FROM_ID(375, PPTokenType),
+ T_PP_LINE = TOKEN_FROM_ID(376, PPTokenType),
+ T_PP_PRAGMA = TOKEN_FROM_ID(377, PPTokenType),
+ T_PP_UNDEF = TOKEN_FROM_ID(378, PPTokenType),
+ T_PP_WARNING = TOKEN_FROM_ID(379, PPTokenType),
+ T_IDENTIFIER = TOKEN_FROM_ID(380, IdentifierTokenType),
+ T_OCTALINT = TOKEN_FROM_ID(381, IntegerLiteralTokenType),
+ T_DECIMALINT = TOKEN_FROM_ID(382, IntegerLiteralTokenType),
+ T_HEXAINT = TOKEN_FROM_ID(383, IntegerLiteralTokenType),
+ T_INTLIT = TOKEN_FROM_ID(384, IntegerLiteralTokenType),
+ T_LONGINTLIT = TOKEN_FROM_ID(385, IntegerLiteralTokenType),
+ T_FLOATLIT = TOKEN_FROM_ID(386, FloatingLiteralTokenType),
+ T_FIXEDPOINTLIT = TOKEN_FROM_ID(386, FloatingLiteralTokenType|AltTokenType), // IDL specific
+ T_CCOMMENT = TOKEN_FROM_ID(387, WhiteSpaceTokenType|AltTokenType),
+ T_CPPCOMMENT = TOKEN_FROM_ID(388, WhiteSpaceTokenType|AltTokenType),
+ T_CHARLIT = TOKEN_FROM_ID(389, CharacterLiteralTokenType),
+ T_STRINGLIT = TOKEN_FROM_ID(390, StringLiteralTokenType),
+ T_CONTLINE = TOKEN_FROM_ID(391, EOLTokenType),
+ T_SPACE = TOKEN_FROM_ID(392, WhiteSpaceTokenType),
+ T_SPACE2 = TOKEN_FROM_ID(393, WhiteSpaceTokenType),
+ T_NEWLINE = TOKEN_FROM_ID(394, EOLTokenType),
+ T_GENERATEDNEWLINE = TOKEN_FROM_ID(394, EOLTokenType|AltTokenType),
+ T_POUND_POUND = TOKEN_FROM_ID(395, OperatorTokenType),
+ T_POUND_POUND_ALT = TOKEN_FROM_ID(395, OperatorTokenType|AltTokenType),
+ T_POUND_POUND_TRIGRAPH = TOKEN_FROM_ID(395, OperatorTokenType|TriGraphTokenType),
+ T_POUND = TOKEN_FROM_ID(396, OperatorTokenType),
+ T_POUND_ALT = TOKEN_FROM_ID(396, OperatorTokenType|AltTokenType),
+ T_POUND_TRIGRAPH = TOKEN_FROM_ID(396, OperatorTokenType|TriGraphTokenType),
+ T_ANY = TOKEN_FROM_ID(397, UnknownTokenType),
+ T_ANY_TRIGRAPH = TOKEN_FROM_ID(397, UnknownTokenType|TriGraphTokenType),
+ T_PP_INCLUDE = TOKEN_FROM_ID(398, PPTokenType),
+ T_PP_QHEADER = TOKEN_FROM_ID(399, PPTokenType),
+ T_PP_HHEADER = TOKEN_FROM_ID(400, PPTokenType),
+ T_PP_INCLUDE_NEXT = TOKEN_FROM_ID(398, PPTokenType|AltTokenType),
+ T_PP_QHEADER_NEXT = TOKEN_FROM_ID(399, PPTokenType|AltTokenType),
+ T_PP_HHEADER_NEXT = TOKEN_FROM_ID(400, PPTokenType|AltTokenType),
+ T_EOF = TOKEN_FROM_ID(401, EOFTokenType), // end of file reached
+ T_EOI = TOKEN_FROM_ID(402, EOFTokenType), // end of input reached
+ T_PP_NUMBER = TOKEN_FROM_ID(403, InternalTokenType),
     
 // MS extensions
- T_MSEXT_INT8 = TOKEN_FROM_ID(405, KeywordTokenType),
- T_MSEXT_INT16 = TOKEN_FROM_ID(406, KeywordTokenType),
- T_MSEXT_INT32 = TOKEN_FROM_ID(407, KeywordTokenType),
- T_MSEXT_INT64 = TOKEN_FROM_ID(408, KeywordTokenType),
- T_MSEXT_BASED = TOKEN_FROM_ID(409, KeywordTokenType),
- T_MSEXT_DECLSPEC = TOKEN_FROM_ID(410, KeywordTokenType),
- T_MSEXT_CDECL = TOKEN_FROM_ID(411, KeywordTokenType),
- T_MSEXT_FASTCALL = TOKEN_FROM_ID(412, KeywordTokenType),
- T_MSEXT_STDCALL = TOKEN_FROM_ID(413, KeywordTokenType),
- T_MSEXT_TRY = TOKEN_FROM_ID(414, KeywordTokenType),
- T_MSEXT_EXCEPT = TOKEN_FROM_ID(415, KeywordTokenType),
- T_MSEXT_FINALLY = TOKEN_FROM_ID(416, KeywordTokenType),
- T_MSEXT_LEAVE = TOKEN_FROM_ID(417, KeywordTokenType),
- T_MSEXT_INLINE = TOKEN_FROM_ID(418, KeywordTokenType),
- T_MSEXT_ASM = TOKEN_FROM_ID(419, KeywordTokenType),
+ T_MSEXT_INT8 = TOKEN_FROM_ID(404, KeywordTokenType),
+ T_MSEXT_INT16 = TOKEN_FROM_ID(405, KeywordTokenType),
+ T_MSEXT_INT32 = TOKEN_FROM_ID(406, KeywordTokenType),
+ T_MSEXT_INT64 = TOKEN_FROM_ID(407, KeywordTokenType),
+ T_MSEXT_BASED = TOKEN_FROM_ID(408, KeywordTokenType),
+ T_MSEXT_DECLSPEC = TOKEN_FROM_ID(409, KeywordTokenType),
+ T_MSEXT_CDECL = TOKEN_FROM_ID(410, KeywordTokenType),
+ T_MSEXT_FASTCALL = TOKEN_FROM_ID(411, KeywordTokenType),
+ T_MSEXT_STDCALL = TOKEN_FROM_ID(412, KeywordTokenType),
+ T_MSEXT_TRY = TOKEN_FROM_ID(413, KeywordTokenType),
+ T_MSEXT_EXCEPT = TOKEN_FROM_ID(414, KeywordTokenType),
+ T_MSEXT_FINALLY = TOKEN_FROM_ID(415, KeywordTokenType),
+ T_MSEXT_LEAVE = TOKEN_FROM_ID(416, KeywordTokenType),
+ T_MSEXT_INLINE = TOKEN_FROM_ID(417, KeywordTokenType),
+ T_MSEXT_ASM = TOKEN_FROM_ID(418, KeywordTokenType),
 
- T_MSEXT_PP_REGION = TOKEN_FROM_ID(420, PPTokenType),
- T_MSEXT_PP_ENDREGION = TOKEN_FROM_ID(421, PPTokenType),
+ T_MSEXT_PP_REGION = TOKEN_FROM_ID(419, PPTokenType),
+ T_MSEXT_PP_ENDREGION = TOKEN_FROM_ID(420, PPTokenType),
 
 // import is needed to be a keyword for the C++ module Standards proposal
- T_IMPORT = TOKEN_FROM_ID(422, KeywordTokenType),
+ T_IMPORT = TOKEN_FROM_ID(421, KeywordTokenType),
 
     T_LAST_TOKEN_ID,
     T_LAST_TOKEN = ID_FROM_TOKEN(T_LAST_TOKEN_ID),

Modified: branches/fix-links/boost/wave/util/cpp_ifblock.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/cpp_ifblock.hpp (original)
+++ branches/fix-links/boost/wave/util/cpp_ifblock.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/cpp_include_paths.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/cpp_include_paths.hpp (original)
+++ branches/fix-links/boost/wave/util/cpp_include_paths.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/cpp_iterator.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/cpp_iterator.hpp (original)
+++ branches/fix-links/boost/wave/util/cpp_iterator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/cpp_macromap.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/cpp_macromap.hpp (original)
+++ branches/fix-links/boost/wave/util/cpp_macromap.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/cpp_macromap_predef.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/cpp_macromap_predef.hpp (original)
+++ branches/fix-links/boost/wave/util/cpp_macromap_predef.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/cpp_macromap_utils.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/cpp_macromap_utils.hpp (original)
+++ branches/fix-links/boost/wave/util/cpp_macromap_utils.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/file_position.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/file_position.hpp (original)
+++ branches/fix-links/boost/wave/util/file_position.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/functor_input.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/functor_input.hpp (original)
+++ branches/fix-links/boost/wave/util/functor_input.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/insert_whitespace_detection.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/insert_whitespace_detection.hpp (original)
+++ branches/fix-links/boost/wave/util/insert_whitespace_detection.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/interpret_pragma.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/interpret_pragma.hpp (original)
+++ branches/fix-links/boost/wave/util/interpret_pragma.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/iteration_context.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/iteration_context.hpp (original)
+++ branches/fix-links/boost/wave/util/iteration_context.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/macro_definition.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/macro_definition.hpp (original)
+++ branches/fix-links/boost/wave/util/macro_definition.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/macro_helpers.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/macro_helpers.hpp (original)
+++ branches/fix-links/boost/wave/util/macro_helpers.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/pattern_parser.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/pattern_parser.hpp (original)
+++ branches/fix-links/boost/wave/util/pattern_parser.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/symbol_table.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/symbol_table.hpp (original)
+++ branches/fix-links/boost/wave/util/symbol_table.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/time_conversion_helper.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/time_conversion_helper.hpp (original)
+++ branches/fix-links/boost/wave/util/time_conversion_helper.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/transform_iterator.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/transform_iterator.hpp (original)
+++ branches/fix-links/boost/wave/util/transform_iterator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/util/unput_queue_iterator.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/unput_queue_iterator.hpp (original)
+++ branches/fix-links/boost/wave/util/unput_queue_iterator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/wave_config.hpp
==============================================================================
--- branches/fix-links/boost/wave/wave_config.hpp (original)
+++ branches/fix-links/boost/wave/wave_config.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/wave_config_constant.hpp
==============================================================================
--- branches/fix-links/boost/wave/wave_config_constant.hpp (original)
+++ branches/fix-links/boost/wave/wave_config_constant.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/wave_version.hpp
==============================================================================
--- branches/fix-links/boost/wave/wave_version.hpp (original)
+++ branches/fix-links/boost/wave/wave_version.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/wave/whitespace_handling.hpp
==============================================================================
--- branches/fix-links/boost/wave/whitespace_handling.hpp (original)
+++ branches/fix-links/boost/wave/whitespace_handling.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     http://www.boost.org/
 
     Copyright (c) 2003 Paul Mensonides
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/boost/xpressive/detail/core/linker.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/linker.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/linker.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -159,7 +159,7 @@
         this->back_stack_.push(next);
     }
 
- template<bool Greedy>
+ template<typename Greedy>
     void accept(repeat_end_matcher<Greedy> const &matcher, void const *)
     {
         matcher.back_ = this->back_stack_.top();
@@ -179,14 +179,14 @@
         this->back_stack_.pop();
     }
 
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     void accept(optional_matcher<Xpr, Greedy> const &matcher, void const *next)
     {
         this->back_stack_.push(next);
         matcher.xpr_.link(*this);
     }
 
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     void accept(optional_mark_matcher<Xpr, Greedy> const &matcher, void const *next)
     {
         this->back_stack_.push(next);
@@ -211,7 +211,7 @@
         matcher.xpr_.link(*this);
     }
 
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     void accept(simple_repeat_matcher<Xpr, Greedy> const &matcher, void const *)
     {
         matcher.xpr_.link(*this);

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/action_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/action_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/action_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -75,7 +75,7 @@
         typedef
             fusion::transform_view<
                 typename fusion::result_of::push_front<
- typename fusion::result_of::pop_front<proto::children<right_type> >::type const
+ typename fusion::result_of::pop_front<right_type>::type const
                   , reference_wrapper<left_type>
>::type const
               , proto::eval_fun<Context>
@@ -91,7 +91,7 @@
             return fusion::invoke<function_type>(
                 proto::arg(proto::arg_c<0>(proto::right(expr)))
               , evaluated_args(
- fusion::push_front(fusion::pop_front(proto::children_of(proto::right(expr))), boost::ref(proto::left(expr)))
+ fusion::push_front(fusion::pop_front(proto::right(expr)), boost::ref(proto::left(expr)))
                   , proto::eval_fun<Context>(ctx)
                 )
             );
@@ -263,20 +263,19 @@
     ///////////////////////////////////////////////////////////////////////////////
     // subreg_transform
     //
- template<typename Grammar>
- struct subreg_transform
- : Grammar
+ struct subreg_transform : proto::callable
     {
- subreg_transform();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
           : proto::terminal<sub_match<typename State::iterator> >
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &, State const &state, Visitor &visitor) const
         {
             sub_match<typename State::iterator> const &sub = state.sub_matches_[ visitor ];
             return proto::as_expr(sub);
@@ -286,20 +285,19 @@
     ///////////////////////////////////////////////////////////////////////////////
     // mark_transform
     //
- template<typename Grammar>
- struct mark_transform
- : Grammar
+ struct mark_transform : proto::callable
     {
- mark_transform();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
           : proto::terminal<sub_match<typename State::iterator> >
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &) const
         {
             sub_match<typename State::iterator> const &sub = state.sub_matches_[ proto::arg(expr).mark_number_ ];
             return proto::as_expr(sub);
@@ -331,22 +329,21 @@
     ///////////////////////////////////////////////////////////////////////////////
     // attr_transform
     //
- template<typename Grammar>
- struct attr_transform
- : Grammar
+ struct attr_transform : proto::callable
     {
- attr_transform();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
           : proto::result_of::as_expr<
                 opt<typename Expr::proto_arg0::matcher_type::value_type::second_type>
>
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &, State const &state, Visitor &)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &, State const &state, Visitor &) const
         {
             typedef typename Expr::proto_arg0::matcher_type::value_type::second_type attr_type;
             int slot = typename Expr::proto_arg0::nbr_type();
@@ -358,26 +355,26 @@
     ///////////////////////////////////////////////////////////////////////////////
     // attr_with_default_transform
     //
- template<typename Grammar>
+ template<typename Grammar, typename Callable = proto::callable>
     struct attr_with_default_transform
- : Grammar
     {
- attr_with_default_transform();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
           : proto::unary_expr<
                 attr_with_default_tag
- , typename Grammar::template apply<Expr, State, Visitor>::type
+ , typename Grammar::template result<void(Expr, State, Visitor)>::type
>
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
- typename apply<Expr, State, Visitor>::type that = {
- Grammar::call(expr, state, visitor)
+ typename result<void(Expr, State, Visitor)>::type that = {
+ Grammar()(expr, state, visitor)
             };
             return that;
         }
@@ -386,22 +383,21 @@
     ///////////////////////////////////////////////////////////////////////////////
     // by_ref_transform
     //
- template<typename Grammar>
- struct by_ref_transform
- : Grammar
+ struct by_ref_transform : proto::callable
     {
- by_ref_transform();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
           : proto::terminal<typename proto::result_of::arg<Expr>::const_reference>
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &) const
         {
- return apply<Expr, State, Visitor>::type::make(proto::arg(expr));
+ return result<void(Expr, State, Visitor)>::type::make(proto::arg(expr));
         }
     };
 
@@ -410,17 +406,15 @@
     //
     struct BindActionArgs
       : proto::or_<
- subreg_transform<proto::terminal<any_matcher> >
- , mark_transform<proto::terminal<mark_placeholder> >
- , attr_transform<proto::terminal<read_attr<proto::_, proto::_> > >
- , by_ref_transform<proto::terminal<proto::_> >
- , attr_with_default_transform<
- proto::bitwise_or<
- attr_transform<proto::terminal<read_attr<proto::_, proto::_> > >
- , BindActionArgs
- >
+ proto::when<proto::terminal<any_matcher>, subreg_transform>
+ , proto::when<proto::terminal<mark_placeholder>, mark_transform>
+ , proto::when<proto::terminal<read_attr<proto::_, proto::_> >, attr_transform>
+ , proto::when<proto::terminal<proto::_>, by_ref_transform>
+ , proto::when<
+ proto::bitwise_or<proto::terminal<read_attr<proto::_, proto::_> >, BindActionArgs>
+ , attr_with_default_transform<proto::bitwise_or<attr_transform, BindActionArgs> >
>
- , proto::nary_expr<proto::_, proto::vararg<BindActionArgs> >
+ , proto::otherwise<proto::nary_expr<proto::_, proto::vararg<BindActionArgs> > >
>
     {};
 
@@ -444,8 +438,9 @@
         bool match(match_state<BidiIter> &state, Next const &next) const
         {
             // Bind the arguments
- typedef typename BindActionArgs::apply<Actor, match_state<BidiIter>, int>::type action_type;
- action<action_type> actor(BindActionArgs::call(this->actor_, state, this->sub_));
+ int sub = this->sub_; // BUGBUG this is a hack
+ typedef typename BindActionArgs::result<void(Actor, match_state<BidiIter>, int)>::type action_type;
+ action<action_type> actor(BindActionArgs()(this->actor_, state, sub));
 
             // Put the action in the action list
             actionable const **action_list_tail = state.action_list_tail_;

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/assert_word_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,7 +24,7 @@
     ///////////////////////////////////////////////////////////////////////////////
     // word_boundary
     //
- template<bool IsBoundary>
+ template<typename IsBoundary>
     struct word_boundary
     {
         template<typename BidiIter>
@@ -32,10 +32,10 @@
         {
             if((state.flags_.match_not_bow_ && state.bos()) || (state.flags_.match_not_eow_ && state.eos()))
             {
- return !IsBoundary;
+ return !IsBoundary::value;
             }
 
- return IsBoundary == (prevword != thisword);
+ return IsBoundary::value == (prevword != thisword);
         }
     };
 

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/attr_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/attr_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/attr_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -65,7 +65,7 @@
     ///////////////////////////////////////////////////////////////////////////////
     // attr_matcher
     // Note: the Matcher is a std::map
- template<typename Matcher, typename Traits, bool ICase>
+ template<typename Matcher, typename Traits, typename ICase>
     struct attr_matcher
       : quant_style<quant_none, 0, false>
     {
@@ -74,7 +74,7 @@
         attr_matcher(int slot, Matcher const &matcher, Traits const& traits)
           : slot_(slot-1)
         {
- char_translate<Traits, ICase> trans(traits);
+ char_translate<Traits, ICase::value> trans(traits);
             this->sym_.load(matcher, trans);
         }
 
@@ -82,7 +82,7 @@
         bool match(match_state<BidiIter> &state, Next const &next) const
         {
             BidiIter tmp = state.cur_;
- char_translate<Traits, ICase> trans(traits_cast<Traits>(state));
+ char_translate<Traits, ICase::value> trans(traits_cast<Traits>(state));
             result_type const &result = this->sym_(state.cur_, state.end_, trans);
             if(result)
             {

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/charset_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/charset_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/charset_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -23,13 +23,13 @@
     ///////////////////////////////////////////////////////////////////////////////
     // charset_matcher
     //
- template<typename Traits, bool ICase, typename CharSet>
+ template<typename Traits, typename ICase, typename CharSet>
     struct charset_matcher
       : quant_style_fixed_width<1>
     {
         typedef typename Traits::char_type char_type;
         typedef Traits traits_type;
- typedef mpl::bool_<ICase> icase_type;
+ typedef ICase icase_type;
 
         charset_matcher(CharSet const &charset = CharSet())
           : charset_(charset)

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/literal_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/literal_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/literal_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,18 +24,17 @@
     ///////////////////////////////////////////////////////////////////////////////
     // literal_matcher
     //
- template<typename Traits, bool ICase, bool Not>
+ template<typename Traits, typename ICase, typename Not>
     struct literal_matcher
       : quant_style_fixed_width<1>
     {
         typedef typename Traits::char_type char_type;
- typedef mpl::bool_<Not> not_type;
- typedef mpl::bool_<ICase> icase_type;
+ typedef Not not_type;
+ typedef ICase icase_type;
         char_type ch_;
 
- typedef literal_matcher<Traits, ICase, !Not> inverse_type;
- explicit literal_matcher(inverse_type that)
- : ch_(that.ch_)
+ explicit literal_matcher(char_type ch)
+ : ch_(ch)
         {}
 
         literal_matcher(char_type ch, Traits const &traits)
@@ -45,7 +44,7 @@
         template<typename BidiIter, typename Next>
         bool match(match_state<BidiIter> &state, Next const &next) const
         {
- if(state.eos() || Not ==
+ if(state.eos() || Not::value ==
                 (detail::translate(*state.cur_, traits_cast<Traits>(state), icase_type()) == this->ch_))
             {
                 return false;

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/mark_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/mark_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/mark_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,11 +28,11 @@
     ///////////////////////////////////////////////////////////////////////////////
     // mark_matcher
     //
- template<typename Traits, bool ICase>
+ template<typename Traits, typename ICase>
     struct mark_matcher
       : quant_style_variable_width
     {
- typedef mpl::bool_<ICase> icase_type;
+ typedef ICase icase_type;
         int mark_number_;
 
         mark_matcher(int mark_number, Traits const &)

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/optional_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/optional_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/optional_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -23,7 +23,7 @@
 
     ///////////////////////////////////////////////////////////////////////////////
     // optional_matcher
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     struct optional_matcher
       : quant_style<quant_variable_width, unknown_width::value, Xpr::pure>
     {
@@ -37,7 +37,7 @@
         template<typename BidiIter, typename Next>
         bool match(match_state<BidiIter> &state, Next const &next) const
         {
- return this->match_(state, next, mpl::bool_<Greedy>());
+ return this->match_(state, next, Greedy());
         }
 
     private:
@@ -79,7 +79,7 @@
 
     ///////////////////////////////////////////////////////////////////////////////
     // optional_mark_matcher
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     struct optional_mark_matcher
       : quant_style<quant_variable_width, unknown_width::value, Xpr::pure>
     {
@@ -95,7 +95,7 @@
         template<typename BidiIter, typename Next>
         bool match(match_state<BidiIter> &state, Next const &next) const
         {
- return this->match_(state, next, mpl::bool_<Greedy>());
+ return this->match_(state, next, Greedy());
         }
 
     private:

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/range_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/range_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/range_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -26,12 +26,12 @@
     ///////////////////////////////////////////////////////////////////////////////
     // range_matcher
     //
- template<typename Traits, bool ICase>
+ template<typename Traits, typename ICase>
     struct range_matcher
       : quant_style_fixed_width<1>
     {
         typedef typename Traits::char_type char_type;
- typedef mpl::bool_<ICase> icase_type;
+ typedef ICase icase_type;
         char_type ch_min_;
         char_type ch_max_;
         bool not_;

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/repeat_end_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,11 +24,11 @@
     ///////////////////////////////////////////////////////////////////////////////
     // repeat_end_matcher
     //
- template<bool Greedy>
+ template<typename Greedy>
     struct repeat_end_matcher
       : quant_style<quant_none, 0, false>
     {
- typedef mpl::bool_<Greedy> greedy_type;
+ typedef Greedy greedy_type;
         int mark_number_;
         unsigned int min_, max_;
         mutable void const *back_;

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/set_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/set_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/set_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -30,12 +30,12 @@
 ///////////////////////////////////////////////////////////////////////////////
 // set_matcher
 //
-template<typename Traits, int Size>
+template<typename Traits, typename Size>
 struct set_matcher
   : quant_style_fixed_width<1>
 {
     typedef typename Traits::char_type char_type;
- char_type set_[ Size ];
+ char_type set_[ Size::value ];
     bool not_;
     bool icase_;
 
@@ -55,7 +55,7 @@
     {
         this->icase_ = true;
 
- for(int i = 0; i < Size; ++i)
+ for(int i = 0; i < Size::value; ++i)
         {
             this->set_[i] = traits.translate_nocase(this->set_[i]);
         }
@@ -63,7 +63,7 @@
 
     bool in_set(Traits const &traits, char_type ch) const
     {
- char_type const *begin = &this->set_[0], *end = begin + Size;
+ char_type const *begin = &this->set_[0], *end = begin + Size::value;
         ch = this->icase_ ? traits.translate_nocase(ch) : traits.translate(ch);
         return end != std::find(begin, end, ch);
     }

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -55,12 +55,12 @@
     ///////////////////////////////////////////////////////////////////////////////
     // simple_repeat_matcher
     //
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     struct simple_repeat_matcher
       : quant_style_variable_width
     {
         typedef Xpr xpr_type;
- typedef mpl::bool_<Greedy> greedy_type;
+ typedef Greedy greedy_type;
 
         Xpr xpr_;
         unsigned int min_, max_;

Modified: branches/fix-links/boost/xpressive/detail/core/matcher/string_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/matcher/string_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/matcher/string_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -26,13 +26,13 @@
     ///////////////////////////////////////////////////////////////////////////////
     // string_matcher
     //
- template<typename Traits, bool ICase>
+ template<typename Traits, typename ICase>
     struct string_matcher
       : quant_style_fixed_unknown_width
     {
         typedef typename Traits::char_type char_type;
         typedef typename Traits::string_type string_type;
- typedef mpl::bool_<ICase> icase_type;
+ typedef ICase icase_type;
         string_type str_;
         char_type const *end_;
 

Modified: branches/fix-links/boost/xpressive/detail/core/peeker.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/peeker.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/peeker.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -142,20 +142,20 @@
         return mpl::true_();
     }
 
- template<typename Traits, bool ICase>
- mpl::false_ accept(literal_matcher<Traits, ICase, false> const &xpr)
+ template<typename Traits, typename ICase>
+ mpl::false_ accept(literal_matcher<Traits, ICase, mpl::false_> const &xpr)
     {
- this->bset_.set_char(xpr.ch_, ICase, this->get_traits_<Traits>());
+ this->bset_.set_char(xpr.ch_, ICase(), this->get_traits_<Traits>());
         return mpl::false_();
     }
 
- template<typename Traits, bool ICase>
+ template<typename Traits, typename ICase>
     mpl::false_ accept(string_matcher<Traits, ICase> const &xpr)
     {
- this->bset_.set_char(xpr.str_[0], ICase, this->get_traits_<Traits>());
+ this->bset_.set_char(xpr.str_[0], ICase(), this->get_traits_<Traits>());
         this->str_.begin_ = detail::data_begin(xpr.str_);
         this->str_.end_ = detail::data_end(xpr.str_);
- this->str_.icase_ = ICase;
+ this->str_.icase_ = ICase::value;
         return mpl::false_();
     }
 
@@ -167,35 +167,35 @@
         return mpl::false_();
     }
 
- template<typename Matcher, typename Traits, bool ICase>
+ template<typename Matcher, typename Traits, typename ICase>
     mpl::false_ accept(attr_matcher<Matcher, Traits, ICase> const &xpr)
     {
- xpr.sym_.peek(char_sink<Traits, ICase>(this->bset_, this->get_traits_<Traits>()));
+ xpr.sym_.peek(char_sink<Traits, ICase::value>(this->bset_, this->get_traits_<Traits>()));
         return mpl::false_();
     }
 
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     mpl::false_ accept(optional_matcher<Xpr, Greedy> const &)
     {
         this->fail(); // a union of xpr and next
         return mpl::false_();
     }
 
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     mpl::false_ accept(optional_mark_matcher<Xpr, Greedy> const &)
     {
         this->fail(); // a union of xpr and next
         return mpl::false_();
     }
 
- //template<typename Xpr, bool Greedy>
+ //template<typename Xpr, typename Greedy>
     //mpl::true_ accept(optional_matcher<Xpr, Greedy> const &xpr)
     //{
     // xpr.xpr_.peek(*this); // a union of xpr and next
     // return mpl::true_();
     //}
 
- //template<typename Xpr, bool Greedy>
+ //template<typename Xpr, typename Greedy>
     //mpl::true_ accept(optional_mark_matcher<Xpr, Greedy> const &xpr)
     //{
     // xpr.xpr_.peek(*this); // a union of xpr and next
@@ -209,23 +209,23 @@
         return mpl::false_();
     }
 
- template<bool ICase, typename Traits>
+ template<typename ICase, typename Traits>
     typename enable_if<is_narrow_char<typename Traits::char_type>, mpl::false_>::type
     accept(charset_matcher<Traits, ICase, basic_chset<Char> > const &xpr)
     {
         BOOST_ASSERT(0 != xpr.charset_.base().count());
- this->bset_.set_charset(xpr.charset_, ICase);
+ this->bset_.set_charset(xpr.charset_, ICase());
         return mpl::false_();
     }
 
- template<typename Traits, bool ICase>
+ template<typename Traits, typename ICase>
     mpl::false_ accept(range_matcher<Traits, ICase> const &xpr)
     {
- this->bset_.set_range(xpr.ch_min_, xpr.ch_max_, xpr.not_, ICase, this->get_traits_<Traits>());
+ this->bset_.set_range(xpr.ch_min_, xpr.ch_max_, xpr.not_, ICase(), this->get_traits_<Traits>());
         return mpl::false_();
     }
 
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     mpl::false_ accept(simple_repeat_matcher<Xpr, Greedy> const &xpr)
     {
         0 != xpr.min_ ? xpr.xpr_.peek(*this) : this->fail(); // could be a union of xpr and next

Modified: branches/fix-links/boost/xpressive/detail/core/results_cache.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/core/results_cache.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/core/results_cache.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -14,6 +14,7 @@
 #endif
 
 #include <list>
+#include <boost/detail/workaround.hpp>
 #include <boost/assert.hpp>
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/core/access.hpp>

Modified: branches/fix-links/boost/xpressive/detail/detail_fwd.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/detail_fwd.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/detail_fwd.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -95,7 +95,7 @@
     template<typename BidiIter>
     struct sequence;
 
- template<typename Traits, bool ICase>
+ template<typename Traits, typename ICase>
     struct mark_matcher;
 
     struct mark_begin_matcher;
@@ -111,27 +111,27 @@
     template<typename Traits>
     struct compound_charset;
 
- template<typename Traits, bool ICase, typename CharSet = compound_charset<Traits> >
+ template<typename Traits, typename ICase, typename CharSet = compound_charset<Traits> >
     struct charset_matcher;
 
- template<typename Traits, bool ICase>
+ template<typename Traits, typename ICase>
     struct range_matcher;
 
- template<typename Traits, int Size>
+ template<typename Traits, typename Size>
     struct set_matcher;
 
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     struct simple_repeat_matcher;
 
     struct repeat_begin_matcher;
 
- template<bool Greedy>
+ template<typename Greedy>
     struct repeat_end_matcher;
 
- template<typename Traits, bool ICase, bool Not>
+ template<typename Traits, typename ICase, typename Not>
     struct literal_matcher;
 
- template<typename Traits, bool ICase>
+ template<typename Traits, typename ICase>
     struct string_matcher;
 
     template<typename Actor>
@@ -140,13 +140,13 @@
     template<typename Predicate>
     struct predicate_matcher;
 
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     struct optional_matcher;
 
- template<typename Xpr, bool Greedy>
+ template<typename Xpr, typename Greedy>
     struct optional_mark_matcher;
 
- template<typename Matcher, typename Traits, bool ICase>
+ template<typename Matcher, typename Traits, typename ICase>
     struct attr_matcher;
 
     template<typename Nbr>
@@ -188,7 +188,7 @@
     template<typename Xpr>
     struct lookbehind_matcher;
 
- template<bool IsBoundary>
+ template<typename IsBoundary>
     struct word_boundary;
 
     template<typename BidiIter, typename Matcher>
@@ -386,6 +386,46 @@
 
 }}} // namespace boost::xpressive::detail
 
+namespace boost { namespace xpressive { namespace grammar_detail
+{
+ using proto::_;
+ using proto::or_;
+ using proto::if_;
+ using proto::call;
+ using proto::when;
+ using proto::otherwise;
+ using proto::switch_;
+ using proto::make;
+ using proto::_arg;
+ using proto::_left;
+ using proto::_right;
+ using proto::not_;
+ using proto::_state;
+ using proto::_visitor;
+ using proto::callable;
+ using proto::fold;
+ using proto::reverse_fold;
+ using proto::fold_tree;
+ using proto::reverse_fold_tree;
+ using proto::terminal;
+ using proto::shift_right;
+ using proto::bitwise_or;
+ using proto::logical_not;
+ using proto::dereference;
+ using proto::posit;
+ using proto::negate;
+ using proto::complement;
+ using proto::comma;
+ using proto::assign;
+ using proto::subscript;
+ using proto::nary_expr;
+ using proto::unary_expr;
+ using proto::binary_expr;
+ using proto::_deep_copy;
+ using proto::vararg;
+ namespace tag = proto::tag;
+}}}
+
 namespace boost { namespace xpressive { namespace op
 {
     struct push;

Modified: branches/fix-links/boost/xpressive/detail/dynamic/dynamic.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/dynamic/dynamic.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/dynamic/dynamic.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -213,12 +213,12 @@
 {
     if(spec.greedy_)
     {
- simple_repeat_matcher<Xpr, true> quant(xpr, spec.min_, spec.max_, seq.width().value());
+ simple_repeat_matcher<Xpr, mpl::true_> quant(xpr, spec.min_, spec.max_, seq.width().value());
         seq = make_dynamic<BidiIter>(quant);
     }
     else
     {
- simple_repeat_matcher<Xpr, false> quant(xpr, spec.min_, spec.max_, seq.width().value());
+ simple_repeat_matcher<Xpr, mpl::false_> quant(xpr, spec.min_, spec.max_, seq.width().value());
         seq = make_dynamic<BidiIter>(quant);
     }
 }
@@ -243,12 +243,12 @@
     seq += make_dynamic<BidiIter>(alternate_end_matcher());
     if(spec.greedy_)
     {
- optional_matcher<xpr_type, true> opt(seq.xpr());
+ optional_matcher<xpr_type, mpl::true_> opt(seq.xpr());
         seq = make_dynamic<BidiIter>(opt);
     }
     else
     {
- optional_matcher<xpr_type, false> opt(seq.xpr());
+ optional_matcher<xpr_type, mpl::false_> opt(seq.xpr());
         seq = make_dynamic<BidiIter>(opt);
     }
 }
@@ -263,12 +263,12 @@
     seq += make_dynamic<BidiIter>(alternate_end_matcher());
     if(spec.greedy_)
     {
- optional_mark_matcher<xpr_type, true> opt(seq.xpr(), mark_nbr);
+ optional_mark_matcher<xpr_type, mpl::true_> opt(seq.xpr(), mark_nbr);
         seq = make_dynamic<BidiIter>(opt);
     }
     else
     {
- optional_mark_matcher<xpr_type, false> opt(seq.xpr(), mark_nbr);
+ optional_mark_matcher<xpr_type, mpl::false_> opt(seq.xpr(), mark_nbr);
         seq = make_dynamic<BidiIter>(opt);
     }
 }
@@ -313,13 +313,13 @@
         repeat_begin_matcher repeat_begin(mark_nbr);
         if(spec.greedy_)
         {
- repeat_end_matcher<true> repeat_end(mark_nbr, min, spec.max_);
+ repeat_end_matcher<mpl::true_> repeat_end(mark_nbr, min, spec.max_);
             seq = make_dynamic<BidiIter>(repeat_begin) + seq
                 + make_dynamic<BidiIter>(repeat_end);
         }
         else
         {
- repeat_end_matcher<false> repeat_end(mark_nbr, min, spec.max_);
+ repeat_end_matcher<mpl::false_> repeat_end(mark_nbr, min, spec.max_);
             seq = make_dynamic<BidiIter>(repeat_begin) + seq
                 + make_dynamic<BidiIter>(repeat_end);
         }

Modified: branches/fix-links/boost/xpressive/detail/dynamic/parser.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/dynamic/parser.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/dynamic/parser.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -57,12 +57,12 @@
 {
     if(0 != (regex_constants::icase_ & flags))
     {
- literal_matcher<Traits, true, false> matcher(ch, traits);
+ literal_matcher<Traits, mpl::true_, mpl::false_> matcher(ch, traits);
         return make_dynamic<BidiIter>(matcher);
     }
     else
     {
- literal_matcher<Traits, false, false> matcher(ch, traits);
+ literal_matcher<Traits, mpl::false_, mpl::false_> matcher(ch, traits);
         return make_dynamic<BidiIter>(matcher);
     }
 }
@@ -79,8 +79,8 @@
 {
     using namespace regex_constants;
     typedef typename iterator_value<BidiIter>::type char_type;
- typedef set_matcher<Traits, 2> set_matcher;
- typedef literal_matcher<Traits, false, true> literal_matcher;
+ typedef detail::set_matcher<Traits, mpl::int_<2> > set_matcher;
+ typedef literal_matcher<Traits, mpl::false_, mpl::true_> literal_matcher;
 
     char_type const newline = traits.widen('\n');
     set_matcher s;
@@ -123,12 +123,12 @@
 
     if(0 != (regex_constants::icase_ & flags))
     {
- string_matcher<Traits, true> matcher(literal, traits);
+ string_matcher<Traits, mpl::true_> matcher(literal, traits);
         return make_dynamic<BidiIter>(matcher);
     }
     else
     {
- string_matcher<Traits, false> matcher(literal, traits);
+ string_matcher<Traits, mpl::false_> matcher(literal, traits);
         return make_dynamic<BidiIter>(matcher);
     }
 }
@@ -148,14 +148,14 @@
     {
         return make_dynamic<BidiIter>
         (
- mark_matcher<Traits, true>(mark_nbr, traits)
+ mark_matcher<Traits, mpl::true_>(mark_nbr, traits)
         );
     }
     else
     {
         return make_dynamic<BidiIter>
         (
- mark_matcher<Traits, false>(mark_nbr, traits)
+ mark_matcher<Traits, mpl::false_>(mark_nbr, traits)
         );
     }
 }
@@ -226,13 +226,13 @@
         charset_type charset(chset.base());
         if(icase)
         {
- charset_matcher<Traits, true, charset_type> matcher(charset);
+ charset_matcher<Traits, mpl::true_, charset_type> matcher(charset);
             merge_charset(matcher.charset_, chset, traits);
             return make_dynamic<BidiIter>(matcher);
         }
         else
         {
- charset_matcher<Traits, false, charset_type> matcher(charset);
+ charset_matcher<Traits, mpl::false_, charset_type> matcher(charset);
             merge_charset(matcher.charset_, chset, traits);
             return make_dynamic<BidiIter>(matcher);
         }
@@ -251,12 +251,12 @@
     {
         if(icase)
         {
- charset_matcher<Traits, true> matcher(chset);
+ charset_matcher<Traits, mpl::true_> matcher(chset);
             return make_dynamic<BidiIter>(matcher);
         }
         else
         {
- charset_matcher<Traits, false> matcher(chset);
+ charset_matcher<Traits, mpl::false_> matcher(chset);
             return make_dynamic<BidiIter>(matcher);
         }
     }

Modified: branches/fix-links/boost/xpressive/detail/static/compile.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/compile.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/compile.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -41,7 +41,7 @@
         // "compile" the regex and wrap it in an xpression_adaptor.
         xpression_visitor<BidiIter, mpl::false_, Traits> visitor(traits, impl);
         intrusive_ptr<matchable_ex<BidiIter> const> adxpr = make_adaptor<matchable_ex<BidiIter> >(
- Grammar<char_type>::call(xpr, end_xpression(), visitor)
+ Grammar<char_type>()(xpr, end_xpression(), visitor)
         );
 
         // Link and optimize the regex

Modified: branches/fix-links/boost/xpressive/detail/static/grammar.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/grammar.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/grammar.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,11 +16,8 @@
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/mpl/assert.hpp>
-#include <boost/xpressive/detail/static/is_pure.hpp>
 #include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/fold.hpp>
-#include <boost/xpressive/proto/transform/compose.hpp>
+#include <boost/xpressive/detail/static/is_pure.hpp>
 #include <boost/xpressive/detail/static/transforms/as_matcher.hpp>
 #include <boost/xpressive/detail/static/transforms/as_alternate.hpp>
 #include <boost/xpressive/detail/static/transforms/as_sequence.hpp>
@@ -61,7 +58,7 @@
     template<typename Char>
     struct ActionableGrammar;
 
- namespace detail
+ namespace grammar_detail
     {
         ///////////////////////////////////////////////////////////////////////////
         // CharLiteral
@@ -75,43 +72,43 @@
 
         ///////////////////////////////////////////////////////////////////////////
         // as_repeat
- template<typename Char, typename Gram, typename Tag, bool Greedy>
+ template<typename Char, typename Gram, typename Greedy>
         struct as_repeat
- : proto::if_<
- use_simple_repeat<proto::result_of::arg<mpl::_>, Char>
- , as_simple_quantifier<proto::unary_expr<Tag, Gram>, Greedy>
- , as_default_quantifier<proto::unary_expr<Tag, Gram>, Greedy>
+ : if_<
+ make<detail::use_simple_repeat<_arg, Char> >
+ , as_simple_quantifier<Gram, Greedy>
+ , as_default_quantifier<Greedy>
>
         {};
 
         ///////////////////////////////////////////////////////////////////////////
         // NonGreedyRepeatCases
- template<typename Char, typename Gram>
+ template<typename Gram>
         struct NonGreedyRepeatCases
         {
             template<typename Tag, typename Dummy = void>
             struct case_
- : proto::not_<proto::_>
+ : not_<_>
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::dereference, Dummy>
- : as_repeat<Char, Gram, proto::tag::dereference, false>
+ struct case_<tag::dereference, Dummy>
+ : dereference<Gram>
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::posit, Dummy>
- : as_repeat<Char, Gram, proto::tag::posit, false>
+ struct case_<tag::posit, Dummy>
+ : posit<Gram>
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::logical_not, Dummy>
- : as_repeat<Char, Gram, proto::tag::logical_not, false>
+ struct case_<tag::logical_not, Dummy>
+ : logical_not<Gram>
             {};
 
             template<uint_t Min, uint_t Max, typename Dummy>
- struct case_<generic_quant_tag<Min, Max>, Dummy>
- : as_repeat<Char, Gram, generic_quant_tag<Min, Max>, false>
+ struct case_<detail::generic_quant_tag<Min, Max>, Dummy>
+ : unary_expr<detail::generic_quant_tag<Min, Max>, Gram>
             {};
         };
 
@@ -122,42 +119,51 @@
         {
             template<typename Tag, typename Dummy = void>
             struct case_
- : proto::not_<proto::_>
+ : not_<_>
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::comma, Dummy>
- : as_list_set<ListSet<Char> >
+ struct case_<tag::comma, Dummy>
+ : when<ListSet<Char>, as_list_set_matcher<Char> >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::assign, Dummy>
- : as_list_set<ListSet<Char> >
+ struct case_<tag::assign, Dummy>
+ : when<ListSet<Char>, as_list_set_matcher<Char> >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::subscript, Dummy>
- : proto::transform::right<proto::subscript<set_initializer_type, as_set<Gram> > >
+ struct case_<tag::subscript, Dummy>
+ : when<subscript<detail::set_initializer_type, Gram>, call<as_set_matcher<Gram>(_right)> >
             {};
 
             template<typename Dummy>
- struct case_<lookahead_tag, Dummy>
- : proto::transform::arg<proto::unary_expr<lookahead_tag, as_lookahead<Gram> > >
+ struct case_<detail::lookahead_tag, Dummy>
+ : when<
+ unary_expr<detail::lookahead_tag, Gram>
+ , as_lookahead<Gram>
+ >
             {};
 
             template<typename Dummy>
- struct case_<lookbehind_tag, Dummy>
- : proto::transform::arg<proto::unary_expr<lookbehind_tag, as_lookbehind<Gram> > >
+ struct case_<detail::lookbehind_tag, Dummy>
+ : when<
+ unary_expr<detail::lookbehind_tag, Gram>
+ , as_lookbehind<Gram>
+ >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::terminal, Dummy>
- : proto::or_<
- as_matcher<CharLiteral<Char> >
- , as_matcher<proto::terminal<posix_charset_placeholder> >
- , as_matcher<proto::terminal<range_placeholder<proto::_> > >
- , as_matcher<proto::terminal<logical_newline_placeholder> >
- , as_matcher<proto::terminal<assert_word_placeholder<word_boundary<true> > > >
+ struct case_<tag::terminal, Dummy>
+ : when<
+ or_<
+ CharLiteral<Char>
+ , terminal<detail::posix_charset_placeholder>
+ , terminal<detail::range_placeholder<_> >
+ , terminal<detail::logical_newline_placeholder>
+ , terminal<detail::assert_word_placeholder<detail::word_boundary<mpl::true_> > >
+ >
+ , as_matcher
>
             {};
         };
@@ -169,102 +175,140 @@
         {
             template<typename Tag, typename Dummy = void>
             struct case_
- : proto::not_<proto::_>
+ : not_<_>
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::shift_right, Dummy>
- : proto::transform::reverse_fold<proto::shift_right<Gram, Gram> >
+ struct case_<tag::terminal, Dummy>
+ : when<
+ _
+ , in_sequence<as_matcher>
+ >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::terminal, Dummy>
- : in_sequence<as_matcher<proto::terminal<proto::_> > >
+ struct case_<tag::shift_right, Dummy>
+ : when<
+ shift_right<Gram, Gram>
+ , reverse_fold<_, _state, Gram>
+ >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::bitwise_or, Dummy>
- : in_sequence<as_alternate<proto::bitwise_or<Gram, Gram> > >
+ struct case_<tag::bitwise_or, Dummy>
+ : when<
+ bitwise_or<Gram, Gram>
+ , in_sequence<
+ as_alternate_matcher<
+ reverse_fold_tree<_, make<fusion::nil>, in_alternate_list<Gram> >
+ >
+ >
+ >
             {};
 
- template<typename Dummy, bool Greedy>
+ template<typename Dummy, typename Greedy>
             struct case_<optional_tag<Greedy> , Dummy>
- : in_sequence<proto::transform::arg<proto::unary_expr<optional_tag<Greedy>, as_optional<Gram, Greedy> > > >
+ : when<
+ unary_expr<optional_tag<Greedy>, Gram>
+ , in_sequence<call<as_optional<Gram, Greedy>(_arg)> >
+ >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::dereference, Dummy>
- : proto::transform::compose<as_repeat<Char, Gram, proto::tag::dereference, true>, Gram>
+ struct case_<tag::dereference, Dummy>
+ : when<
+ dereference<Gram>
+ , call<Gram(as_repeat<Char, Gram, mpl::true_>)>
+ >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::posit, Dummy>
- : proto::transform::compose<as_repeat<Char, Gram, proto::tag::posit, true>, Gram>
+ struct case_<tag::posit, Dummy>
+ : when<
+ posit<Gram>
+ , call<Gram(as_repeat<Char, Gram, mpl::true_>)>
+ >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::logical_not, Dummy>
- : proto::transform::compose<as_repeat<Char, Gram, proto::tag::logical_not, true>, Gram>
+ struct case_<tag::logical_not, Dummy>
+ : when<
+ logical_not<Gram>
+ , call<Gram(as_repeat<Char, Gram, mpl::true_>)>
+ >
             {};
 
             template<uint_t Min, uint_t Max, typename Dummy>
- struct case_<generic_quant_tag<Min, Max> , Dummy>
- : proto::transform::compose<as_repeat<Char, Gram, generic_quant_tag<Min, Max>, true>, Gram>
+ struct case_<detail::generic_quant_tag<Min, Max>, Dummy>
+ : when<
+ unary_expr<detail::generic_quant_tag<Min, Max>, Gram>
+ , call<Gram(as_repeat<Char, Gram, mpl::true_>)>
+ >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::negate, Dummy>
- : proto::transform::compose<
- proto::transform::arg<proto::negate<proto::switch_<NonGreedyRepeatCases<Char, Gram> > > >
- , Gram
+ struct case_<tag::negate, Dummy>
+ : when<
+ negate<switch_<NonGreedyRepeatCases<Gram> > >
+ , call<Gram(call<as_repeat<Char, Gram, mpl::false_>(_arg)>)>
>
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::complement, Dummy>
- : in_sequence<as_inverse<
- proto::transform::arg<proto::complement<proto::switch_<InvertibleCases<Char, Gram> > > >
- > >
+ struct case_<tag::complement, Dummy>
+ : when<
+ complement<switch_<InvertibleCases<Char, Gram> > >
+ , in_sequence<call<as_inverse(call<switch_<InvertibleCases<Char, Gram> >(_arg)>)> >
+ >
             {};
 
             template<typename Dummy>
- struct case_<modifier_tag, Dummy>
- : as_modifier<proto::binary_expr<modifier_tag, proto::_, Gram> >
+ struct case_<detail::modifier_tag, Dummy>
+ : when<binary_expr<detail::modifier_tag, _, Gram>, as_modifier<Gram> >
             {};
 
             template<typename Dummy>
- struct case_<lookahead_tag, Dummy>
- : in_sequence<proto::transform::arg<proto::unary_expr<lookahead_tag, as_lookahead<Gram> > > >
+ struct case_<detail::lookahead_tag, Dummy>
+ : when<
+ unary_expr<detail::lookahead_tag, Gram>
+ , in_sequence<as_lookahead<Gram> >
+ >
             {};
 
             template<typename Dummy>
- struct case_<lookbehind_tag, Dummy>
- : in_sequence<proto::transform::arg<proto::unary_expr<lookbehind_tag, as_lookbehind<Gram> > > >
+ struct case_<detail::lookbehind_tag, Dummy>
+ : when<
+ unary_expr<detail::lookbehind_tag, Gram>
+ , in_sequence<as_lookbehind<Gram> >
+ >
             {};
 
             template<typename Dummy>
- struct case_<keeper_tag, Dummy>
- : in_sequence<proto::transform::arg<proto::unary_expr<keeper_tag, as_keeper<Gram> > > >
+ struct case_<detail::keeper_tag, Dummy>
+ : when<
+ unary_expr<detail::keeper_tag, Gram>
+ , in_sequence<as_keeper<Gram> >
+ >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::comma, Dummy>
- : in_sequence<as_list_set<ListSet<Char> > >
+ struct case_<tag::comma, Dummy>
+ : when<ListSet<Char>, in_sequence<as_list_set_matcher<Char> > >
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::assign, Dummy>
- : proto::or_<
- proto::transform::compose<as_marker<proto::assign<basic_mark_tag, Gram> >, Gram>
- , in_sequence<as_list_set<ListSet<Char> > >
+ struct case_<tag::assign, Dummy>
+ : or_<
+ when<assign<detail::basic_mark_tag, Gram>, call<Gram(as_marker)> >
+ , when<ListSet<Char>, in_sequence<as_list_set_matcher<Char> > >
>
             {};
 
             template<typename Dummy>
- struct case_<proto::tag::subscript, Dummy>
- : proto::or_<
- in_sequence<proto::transform::right<proto::subscript<set_initializer_type, as_set<Gram> > > >
- , proto::transform::compose<as_action<proto::subscript<ActionableGrammar<Char>, proto::_> >, ActionableGrammar<Char> >
+ struct case_<tag::subscript, Dummy>
+ : or_<
+ when<subscript<detail::set_initializer_type, Gram>, in_sequence<call<as_set_matcher<Gram>(_right)> > >
+ , when<subscript<ActionableGrammar<Char>, _>, call<ActionableGrammar<Char>(as_action)> >
>
             {};
         };
@@ -282,9 +326,9 @@
             // Only in sub-expressions with actions attached do we allow attribute assignements
             template<typename Dummy>
             struct case_<proto::tag::assign, Dummy>
- : proto::or_<
+ : or_<
                     typename Cases<Char, Gram>::template case_<proto::tag::assign>
- , in_sequence<as_attr_matcher<proto::assign<proto::terminal<attribute_placeholder<proto::_> >, proto::_> > >
+ , when<proto::assign<terminal<detail::attribute_placeholder<_> >, _>, in_sequence<as_attr_matcher> >
>
             {};
         };
@@ -295,12 +339,12 @@
     // Grammar
     template<typename Char>
     struct Grammar
- : proto::switch_<detail::Cases<Char, Grammar<Char> > >
+ : proto::switch_<grammar_detail::Cases<Char, Grammar<Char> > >
     {};
 
     template<typename Char>
     struct ActionableGrammar
- : proto::switch_<detail::ActionableCases<Char, ActionableGrammar<Char> > >
+ : proto::switch_<grammar_detail::ActionableCases<Char, ActionableGrammar<Char> > >
     {};
 
     ///////////////////////////////////////////////////////////////////////////

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_action.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_action.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_action.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,53 +24,11 @@
 #include <boost/xpressive/detail/static/static.hpp>
 #include <boost/xpressive/detail/static/transforms/as_quantifier.hpp>
 #include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/fold.hpp>
+#include <boost/xpressive/proto/transform.hpp>
 
 namespace boost { namespace xpressive { namespace detail
 {
     ///////////////////////////////////////////////////////////////////////////////
- // FindAttr
- // Look for patterns like (a1= terminal<RHS>) and return the type of the RHS.
- template<typename Nbr>
- struct FindAttr
- : proto::or_<
- proto::transform::state< proto::terminal<proto::_> >
- // Ignore nested actions, because attributes are scoped:
- , proto::transform::state< proto::subscript<proto::_, proto::_> >
- , proto::transform::arg<
- proto::transform::right<
- proto::assign<
- proto::terminal<xpressive::detail::attribute_placeholder<Nbr> >
- , proto::_
- >
- >
- >
- , proto::transform::fold<proto::nary_expr<proto::_, proto::vararg<FindAttr<Nbr> > > >
- >
- {};
-
- ///////////////////////////////////////////////////////////////////////////////
- // by_value
- // Store all terminals within an action by value to avoid dangling references.
- template<typename Terminal>
- struct by_value
- : Terminal
- {
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : proto::result_of::as_expr<typename proto::result_of::arg<Expr>::type>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &)
- {
- return proto::as_expr(proto::arg(expr));
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////////
     // read_attr
     // Placeholder that knows the slot number of an attribute as well as the type
     // of the object stored in it.
@@ -81,112 +39,155 @@
         typedef Matcher matcher_type;
     };
 
+}}}
+
+namespace boost { namespace xpressive { namespace grammar_detail
+{
+ ///////////////////////////////////////////////////////////////////////////////
+ // FindAttr
+ // Look for patterns like (a1= terminal<RHS>) and return the type of the RHS.
+ template<typename Nbr>
+ struct FindAttr
+ : or_<
+ // Ignore nested actions, because attributes are scoped
+ when< subscript<_, _>, _state >
+ , when< terminal<_>, _state >
+ , when< proto::assign<terminal<detail::attribute_placeholder<Nbr> >, _>, call<_arg(_right)> >
+ , otherwise< fold<_, _state, FindAttr<Nbr> > >
+ >
+ {};
+
     ///////////////////////////////////////////////////////////////////////////////
     // as_read_attr
     // For patterns like (a1 = RHS)[ref(i) = a1], transform to
     // (a1 = RHS)[ref(i) = read_attr<1, RHS>] so that when reading the attribute
     // we know what type is stored in the attribute slot.
- template<typename Grammar>
- struct as_read_attr
- : Grammar
+ struct as_read_attr : callable
     {
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
           : proto::result_of::as_expr<
- read_attr<
+ detail::read_attr<
                     typename Expr::proto_arg0::nbr_type
                   , typename FindAttr<typename Expr::proto_arg0::nbr_type>
- ::template apply<State, mpl::void_, int>::type
+ ::template result<void(State, mpl::void_, int)>::type
>
>
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &, State const &, Visitor &)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &, State const &, Visitor &) const
         {
- typename apply<Expr, State, Visitor>::type that = {{}};
+ typename result<void(Expr, State, Visitor)>::type that = {{}};
             return that;
         }
     };
 
     ///////////////////////////////////////////////////////////////////////////////
+ // by_value
+ // Store all terminals within an action by value to avoid dangling references.
+ struct by_value : callable
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : proto::result_of::as_expr<typename proto::result_of::arg<Expr>::type>
+ {};
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &) const
+ {
+ return proto::as_expr(proto::arg(expr));
+ }
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
     // DeepCopy
     // Turn all refs into values, and also bind all attribute placeholders with
     // the types from which they are being assigned.
     struct DeepCopy
- : proto::or_<
- as_read_attr<proto::terminal<xpressive::detail::attribute_placeholder<proto::_> > >
- , by_value<proto::terminal<proto::_> >
- , proto::nary_expr<proto::_, proto::vararg<DeepCopy> >
+ : or_<
+ when< terminal<detail::attribute_placeholder<_> >, as_read_attr>
+ , when< terminal<_>, by_value >
+ , otherwise< nary_expr<_, vararg<DeepCopy> > >
>
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
- // max_attr
- // Take the maximum of the current attr slot number and the state.
- template<typename Grammar>
- struct max_attr
- : Grammar
- {
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : mpl::max<State, typename Grammar::template apply<Expr, State, Visitor>::type>
- {};
- };
-
- ///////////////////////////////////////////////////////////////////////////////
     // attr_nbr
     // For an attribute placeholder, return the attribute's slot number.
- template<typename Grammar>
- struct attr_nbr
- : Grammar
+ struct attr_nbr : callable
     {
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
           : Expr::proto_arg0::nbr_type
         {};
     };
 
+ struct max_attr;
+
     ///////////////////////////////////////////////////////////////////////////////
     // MaxAttr
     // In an action (rx)[act], find the largest attribute slot being used.
     struct MaxAttr
- : proto::or_<
- attr_nbr< proto::terminal< xpressive::detail::attribute_placeholder<proto::_> > >
- , proto::transform::state< proto::terminal<proto::_> >
+ : or_<
+ when< terminal<detail::attribute_placeholder<_> >, attr_nbr>
+ , when< terminal<_>, make<mpl::int_<0> > >
             // Ignore nested actions, because attributes are scoped:
- , proto::transform::state< proto::subscript<proto::_, proto::_> >
- , proto::transform::fold<proto::nary_expr<proto::_, max_attr<proto::vararg<MaxAttr> > > >
+ , when< subscript<_, _>, make<mpl::int_<0> > >
+ , otherwise< fold<_, make<mpl::int_<0> >, max_attr> >
>
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
+ // max_attr
+ // Take the maximum of the current attr slot number and the state.
+ struct max_attr : callable
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : mpl::max<State, typename MaxAttr::result<void(Expr, State, Visitor)>::type>
+ {};
+ };
+
+ ///////////////////////////////////////////////////////////////////////////////
     // as_attr_matcher
     // turn a1=matcher into attr_matcher<Matcher>(1)
- template<typename Grammar>
- struct as_attr_matcher
- : Grammar
+ struct as_attr_matcher : callable
     {
- as_attr_matcher();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
             typedef
- attr_matcher<
+ detail::attr_matcher<
                     typename proto::result_of::arg<typename Expr::proto_arg1>::type
                   , typename Visitor::traits_type
- , Visitor::icase_type::value
+ , typename Visitor::icase_type
>
             type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &visitor) const
         {
- return typename apply<Expr, State, Visitor>::type(
+ return typename result<void(Expr, State, Visitor)>::type(
                 Expr::proto_arg0::proto_base_expr::proto_arg0::nbr_type::value
               , proto::arg(proto::right(expr))
               , visitor.traits()
@@ -197,32 +198,31 @@
     ///////////////////////////////////////////////////////////////////////////////
     // add_attrs
     // Wrap an expression in attr_begin_matcher/attr_end_matcher pair
- template<typename Grammar>
- struct add_attrs
- : Grammar
+ struct add_attrs : callable
     {
- add_attrs();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename, typename>
- struct apply
- : proto::shift_right<
- typename proto::terminal<
- attr_begin_matcher<typename MaxAttr::apply<Expr, mpl::int_<0>, int>::type>
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : shift_right<
+ typename terminal<
+ detail::attr_begin_matcher<typename MaxAttr::result<void(Expr, mpl::int_<0>, int)>::type>
>::type
- , typename proto::shift_right<
+ , typename shift_right<
                     Expr
- , proto::terminal<attr_end_matcher>::type
+ , terminal<detail::attr_end_matcher>::type
>::type
>
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &) const
         {
- attr_begin_matcher<typename MaxAttr::apply<Expr, mpl::int_<0>, int>::type> begin;
- attr_end_matcher end;
- typename apply<Expr, State, Visitor>::type that = {{begin}, {expr, {end}}};
+ detail::attr_begin_matcher<typename MaxAttr::result<void(Expr, mpl::int_<0>, int)>::type> begin;
+ detail::attr_end_matcher end;
+ typename result<void(Expr, State, Visitor)>::type that = {{begin}, {expr, {end}}};
             return that;
         }
     };
@@ -230,19 +230,13 @@
     ///////////////////////////////////////////////////////////////////////////////
     // InsertAttrs
     struct InsertAttrs
- : proto::or_<
- add_attrs<proto::if_<mpl::apply_wrap3<MaxAttr, mpl::_, mpl::int_<0>, int> > >
- , proto::_
- >
+ : if_<MaxAttr, add_attrs, _>
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
     // CheckAssertion
     struct CheckAssertion
- : proto::function<
- proto::terminal<check_tag>
- , proto::_
- >
+ : proto::function<terminal<detail::check_tag>, _>
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
@@ -251,28 +245,27 @@
     // If A and B use attributes, wrap the above expression in
     // a attr_begin_matcher<Count> / attr_end_matcher pair, where Count is
     // the number of attribute slots used by the pattern/action.
- template<typename Grammar>
- struct as_action
- : Grammar
+ struct as_action : callable
     {
- as_action();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
             typedef typename proto::result_of::left<Expr>::type expr_type;
             typedef typename proto::result_of::right<Expr>::type action_type;
- typedef typename DeepCopy::apply<action_type, expr_type, int>::type action_copy_type;
+ typedef typename DeepCopy::result<void(action_type, expr_type, int)>::type action_copy_type;
 
             typedef
- typename InsertMark::apply<expr_type, State, Visitor>::type
+ typename InsertMark::result<void(expr_type, State, Visitor)>::type
             marked_expr_type;
 
             typedef
                 typename mpl::if_<
                     proto::matches<action_type, CheckAssertion>
- , predicate_matcher<action_copy_type>
- , action_matcher<action_copy_type>
+ , detail::predicate_matcher<action_copy_type>
+ , detail::action_matcher<action_copy_type>
>::type
             matcher_type;
 
@@ -284,20 +277,20 @@
             no_attr_type;
 
             typedef
- typename InsertAttrs::apply<no_attr_type, State, Visitor>::type
+ typename InsertAttrs::result<void(no_attr_type, State, Visitor)>::type
             type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
- typedef apply<Expr, State, Visitor> apply_type;
+ typedef result<void(Expr, State, Visitor)> apply_type;
             typedef typename apply_type::matcher_type matcher_type;
 
             int dummy = 0;
             typename apply_type::marked_expr_type marked_expr =
- InsertMark::call(proto::left(expr), state, visitor);
+ InsertMark()(proto::left(expr), state, visitor);
 
             typename apply_type::no_attr_type that =
             {
@@ -305,13 +298,13 @@
               , {
                     matcher_type
                     (
- DeepCopy::call(proto::right(expr), proto::left(expr), dummy)
+ DeepCopy()(proto::right(expr), proto::left(expr), dummy)
                       , proto::arg(proto::left(marked_expr)).mark_number_
                     )
                 }
             };
 
- return InsertAttrs::call(that, state, visitor);
+ return InsertAttrs()(that, state, visitor);
         }
     };
 

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_alternate.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_alternate.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_alternate.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,124 +16,114 @@
 #include <boost/config.hpp>
 #include <boost/mpl/assert.hpp>
 #include <boost/type_traits/is_same.hpp>
-#include <boost/xpressive/proto/traits.hpp>
-#include <boost/xpressive/proto/matches.hpp>
-#include <boost/xpressive/proto/transform/fold.hpp>
-#include <boost/xpressive/proto/transform/branch.hpp>
-#include <boost/xpressive/proto/transform/fold_tree.hpp>
+#include <boost/xpressive/proto/proto.hpp>
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/static/static.hpp>
 #include <boost/xpressive/detail/core/matcher/alternate_matcher.hpp>
 #include <boost/xpressive/detail/utility/cons.hpp>
 
-namespace boost { namespace xpressive { namespace detail
-{
-
- ///////////////////////////////////////////////////////////////////////////////
- // alternates_list
- // a fusion-compatible sequence of alternate expressions, that also keeps
- // track of the list's width and purity.
- template<typename Head, typename Tail>
- struct alternates_list
- : fusion::cons<Head, Tail>
- {
- BOOST_STATIC_CONSTANT(std::size_t, width = Head::width == Tail::width ? Head::width : unknown_width::value);
- BOOST_STATIC_CONSTANT(bool, pure = Head::pure && Tail::pure);
-
- alternates_list(Head const &head, Tail const &tail)
- : fusion::cons<Head, Tail>(head, tail)
- {
- }
- };
-
- template<typename Head>
- struct alternates_list<Head, fusion::nil>
- : fusion::cons<Head, fusion::nil>
- {
- BOOST_STATIC_CONSTANT(std::size_t, width = Head::width);
- BOOST_STATIC_CONSTANT(bool, pure = Head::pure);
-
- alternates_list(Head const &head, fusion::nil const &tail)
- : fusion::cons<Head, fusion::nil>(head, tail)
- {
- }
- };
+#define UNCV(x) typename remove_const<x>::type
+#define UNREF(x) typename remove_reference<x>::type
+#define UNCVREF(x) UNCV(UNREF(x))
 
- ///////////////////////////////////////////////////////////////////////////////
- // in_alternate
- template<typename Grammar>
- struct in_alternate
- : Grammar
+namespace boost { namespace xpressive
+{
+ namespace detail
     {
- in_alternate();
+ ///////////////////////////////////////////////////////////////////////////////
+ // alternates_list
+ // a fusion-compatible sequence of alternate expressions, that also keeps
+ // track of the list's width and purity.
+ template<typename Head, typename Tail>
+ struct alternates_list
+ : fusion::cons<Head, Tail>
+ {
+ BOOST_STATIC_CONSTANT(std::size_t, width = Head::width == Tail::width ? Head::width : detail::unknown_width::value);
+ BOOST_STATIC_CONSTANT(bool, pure = Head::pure && Tail::pure);
+
+ alternates_list(Head const &head, Tail const &tail)
+ : fusion::cons<Head, Tail>(head, tail)
+ {
+ }
+ };
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- {
- typedef alternates_list<
- typename Grammar::template apply<Expr, alternate_end_xpression, Visitor>::type
- , State
- > type;
+ template<typename Head>
+ struct alternates_list<Head, fusion::nil>
+ : fusion::cons<Head, fusion::nil>
+ {
+ BOOST_STATIC_CONSTANT(std::size_t, width = Head::width);
+ BOOST_STATIC_CONSTANT(bool, pure = Head::pure);
+
+ alternates_list(Head const &head, fusion::nil const &tail)
+ : fusion::cons<Head, fusion::nil>(head, tail)
+ {
+ }
         };
+ }
 
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return typename apply<Expr, State, Visitor>::type(
- Grammar::call(expr, alternate_end_xpression(), visitor)
- , state
- );
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////////
- // as_alternate_matcher
- template<typename Grammar>
- struct as_alternate_matcher
- : Grammar
+ namespace grammar_detail
     {
- as_alternate_matcher();
+ ///////////////////////////////////////////////////////////////////////////////
+ // in_alternate_list
+ template<typename Grammar>
+ struct in_alternate_list : callable
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ {
+ typedef detail::alternates_list<
+ typename Grammar::template result<void(Expr, detail::alternate_end_xpression, Visitor)>::type
+ , State
+ > type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ return typename result<void(Expr, State, Visitor)>::type(
+ Grammar()(expr, detail::alternate_end_xpression(), visitor)
+ , state
+ );
+ }
+ };
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- {
- typedef alternate_matcher<
- typename Grammar::template apply<Expr, State, Visitor>::type
- , typename Visitor::traits_type
- > type;
+ ///////////////////////////////////////////////////////////////////////////////
+ // as_alternate_matcher
+ template<typename Grammar>
+ struct as_alternate_matcher : callable
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ {
+ typedef detail::alternate_matcher<
+ typename Grammar::template result<void(Expr, State, Visitor)>::type
+ , typename Visitor::traits_type
+ > type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ return typename result<void(Expr, State, Visitor)>::type(
+ Grammar()(expr, state, visitor)
+ );
+ }
         };
 
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return typename apply<Expr, State, Visitor>::type(
- Grammar::call(expr, state, visitor)
- );
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////////
- // as_alternate
- template<typename Grammar>
- struct as_alternate
- : as_alternate_matcher<
- proto::transform::reverse_fold_tree<
- typename Grammar::proto_tag
- , in_alternate<typename Grammar::proto_arg0>
- , fusion::nil
- >
- >
- {
- BOOST_MPL_ASSERT((
- is_same<
- typename Grammar::proto_arg0
- , typename Grammar::proto_arg1
- >
- ));
- };
+ }
+
+}}
 
-}}}
+#undef UNCV
+#undef UNREF
+#undef UNCVREF
 
 #endif

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_independent.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_independent.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_independent.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -17,7 +17,7 @@
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/static/static.hpp>
 #include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
+#include <boost/xpressive/proto/transform.hpp>
 
 namespace boost { namespace xpressive { namespace detail
 {
@@ -29,77 +29,87 @@
 
     struct lookbehind_tag
     {};
+}}}
+
+namespace boost { namespace xpressive { namespace grammar_detail
+{
 
     template<typename Grammar>
- struct as_lookahead
- : Grammar
+ struct as_lookahead : callable
     {
- as_lookahead();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
- typedef lookahead_matcher<
- typename Grammar::template apply<Expr, true_xpression, Visitor>::type
+ typedef typename proto::result_of::arg<Expr>::type arg_type;
+ typedef detail::lookahead_matcher<
+ typename Grammar::template result<void(arg_type, detail::true_xpression, Visitor)>::type
> type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &visitor) const
         {
- return typename apply<Expr, State, Visitor>::type(
- Grammar::call(expr, true_xpression(), visitor)
+ return typename result<void(Expr, State, Visitor)>::type(
+ Grammar()(proto::arg(expr), detail::true_xpression(), visitor)
               , false
             );
         }
     };
 
     template<typename Grammar>
- struct as_lookbehind
- : Grammar
+ struct as_lookbehind : callable
     {
- as_lookbehind();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
- typedef lookbehind_matcher<
- typename Grammar::template apply<Expr, true_xpression, Visitor>::type
+ typedef typename proto::result_of::arg<Expr>::type arg_type;
+ typedef detail::lookbehind_matcher<
+ typename Grammar::template result<void(arg_type, detail::true_xpression, Visitor)>::type
> type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &visitor) const
         {
- typename Grammar::template apply<Expr, true_xpression, Visitor>::type const &
- expr2 = Grammar::call(expr, true_xpression(), visitor);
+ typedef typename proto::result_of::arg<Expr>::type arg_type;
+ typedef
+ typename Grammar::template result<void(arg_type, detail::true_xpression, Visitor)>::type
+ xpr_type;
+ xpr_type const &expr2 = Grammar()(proto::arg(expr), detail::true_xpression(), visitor);
             std::size_t width = expr2.get_width().value();
- return typename apply<Expr, State, Visitor>::type(expr2, width, false);
+ return detail::lookbehind_matcher<xpr_type>(expr2, width, false);
         }
     };
 
     template<typename Grammar>
- struct as_keeper
- : Grammar
+ struct as_keeper : callable
     {
- as_keeper();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
- typedef keeper_matcher<
- typename Grammar::template apply<Expr, true_xpression, Visitor>::type
+ typedef typename proto::result_of::arg<Expr>::type arg_type;
+ typedef detail::keeper_matcher<
+ typename Grammar::template result<void(arg_type, detail::true_xpression, Visitor)>::type
> type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &visitor) const
         {
- return typename apply<Expr, State, Visitor>::type(
- Grammar::call(expr, true_xpression(), visitor)
+ return typename result<void(Expr, State, Visitor)>::type(
+ Grammar()(proto::arg(expr), detail::true_xpression(), visitor)
             );
         }
     };

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_inverse.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_inverse.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_inverse.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -14,11 +14,16 @@
 #endif
 
 #include <boost/mpl/sizeof.hpp>
+#include <boost/mpl/not.hpp>
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/static/static.hpp>
 #include <boost/xpressive/proto/proto.hpp>
 
-namespace boost { namespace xpressive { namespace detail
+#define UNCV(x) typename remove_const<x>::type
+#define UNREF(x) typename remove_reference<x>::type
+#define UNCVREF(x) UNCV(UNREF(x))
+
+namespace boost { namespace xpressive { namespace grammar_detail
 {
 
     template<typename T>
@@ -32,62 +37,58 @@
         }
     };
 
- template<typename Traits, bool ICase, bool Not>
- struct inverter<literal_matcher<Traits, ICase, Not> >
+ template<typename Traits, typename ICase, typename Not>
+ struct inverter<detail::literal_matcher<Traits, ICase, Not> >
     {
- typedef literal_matcher<Traits, ICase, !Not> type;
- static type call(literal_matcher<Traits, ICase, Not> t)
+ typedef detail::literal_matcher<Traits, ICase, typename mpl::not_<Not>::type> type;
+ static type call(detail::literal_matcher<Traits, ICase, Not> t)
         {
- return type(t);
+ return type(t.ch_);
         }
     };
 
     template<typename Traits>
- struct inverter<logical_newline_matcher<Traits> >
+ struct inverter<detail::logical_newline_matcher<Traits> >
     {
         // ~_ln matches any one character that is not in the "newline" character class
- typedef posix_charset_matcher<Traits> type;
- static type call(logical_newline_matcher<Traits> t)
+ typedef detail::posix_charset_matcher<Traits> type;
+ static type call(detail::logical_newline_matcher<Traits> t)
         {
             return type(t.newline(), true);
         }
     };
 
     template<typename Traits>
- struct inverter<assert_word_matcher<word_boundary<true>, Traits> >
+ struct inverter<detail::assert_word_matcher<detail::word_boundary<mpl::true_>, Traits> >
     {
- typedef assert_word_matcher<word_boundary<false>, Traits> type;
- static type call(assert_word_matcher<word_boundary<true>, Traits> t)
+ typedef detail::assert_word_matcher<detail::word_boundary<mpl::false_>, Traits> type;
+ static type call(detail::assert_word_matcher<detail::word_boundary<mpl::true_>, Traits> t)
         {
             return type(t.word());
         }
     };
 
- template<typename T>
- typename inverter<T>::type invert(T const &t)
+ struct as_inverse : callable
     {
- return inverter<T>::call(t);
- }
+ template<typename Sig>
+ struct result;
 
- template<typename Grammar>
- struct as_inverse
- : Grammar
- {
- as_inverse();
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : inverter<typename Grammar::template apply<Expr, State, Visitor>::type>
+ template<typename This, typename Matcher>
+ struct result<This(Matcher)>
+ : inverter<UNCVREF(Matcher)>
         {};
 
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ template<typename Matcher>
+ typename inverter<Matcher>::type operator ()(Matcher const &matcher) const
         {
- return detail::invert(Grammar::call(expr, state, visitor));
+ return inverter<Matcher>::call(matcher);
         }
     };
 
 }}}
 
+#undef UNCV
+#undef UNREF
+#undef UNCVREF
+
 #endif

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_marker.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_marker.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_marker.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -17,67 +17,38 @@
 #include <boost/xpressive/detail/static/static.hpp>
 #include <boost/xpressive/proto/proto.hpp>
 
-//#include <boost/xpressive/proto/transform/construct.hpp>
-
-namespace boost { namespace xpressive { namespace detail
+namespace boost { namespace xpressive { namespace grammar_detail
 {
 
- //template<typename Grammar>
- //struct as_marker
- // : proto::transform::construct<
- // proto::transform::identity<Grammar>
- // , proto::shift_right<
- // proto::terminal<mark_begin_matcher>::type
- // , proto::shift_right<
- // proto::transform::right<proto::_>
- // , proto::terminal<mark_end_matcher>::type
- // >
- // >(
- // proto::terminal<mark_begin_matcher>::type(
- // mark_begin_matcher(proto::transform::arg<proto::transform::left<proto::_> > )
- // )
- // , proto::shift_right<
- // proto::transform::right<proto::_>
- // , proto::terminal<mark_end_matcher>::type
- // >(
- // proto::transform::right<proto::_>
- // , proto::terminal<mark_end_matcher>::type(
- // mark_end_matcher(proto::transform::arg<proto::transform::left<proto::_> > )
- // )
- // )
- // )
- // >
- //{};
-
     ///////////////////////////////////////////////////////////////////////////////
     // as_marker
     // Insert mark tags before and after the expression
- template<typename Grammar>
- struct as_marker
- : Grammar
+ struct as_marker : callable
     {
- as_marker();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename, typename>
- struct apply
- : proto::shift_right<
- proto::terminal<mark_begin_matcher>::type
- , typename proto::shift_right<
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : shift_right<
+ terminal<detail::mark_begin_matcher>::type
+ , typename shift_right<
                     typename proto::result_of::right<Expr>::type
- , proto::terminal<mark_end_matcher>::type
+ , terminal<detail::mark_end_matcher>::type
>::type
>
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &) const
         {
- int mark_nbr = get_mark_number(proto::left(expr));
- mark_begin_matcher begin(mark_nbr);
- mark_end_matcher end(mark_nbr);
+ int mark_nbr = detail::get_mark_number(proto::left(expr));
+ detail::mark_begin_matcher begin(mark_nbr);
+ detail::mark_end_matcher end(mark_nbr);
 
- typename apply<Expr, State, Visitor>::type that = {{begin}, {proto::right(expr), {end}}};
+ typename result<void(Expr, State, Visitor)>::type that
+ = {{begin}, {proto::right(expr), {end}}};
             return that;
         }
     };

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_matcher.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_matcher.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_matcher.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -14,29 +14,29 @@
 #endif
 
 #include <boost/mpl/assert.hpp>
-#include <boost/type_traits/is_same.hpp>
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/static/static.hpp>
 
-namespace boost { namespace xpressive { namespace detail
+namespace boost { namespace xpressive { namespace grammar_detail
 {
-
- template<typename Grammar>
- struct as_matcher
- : Grammar
+ struct as_matcher : callable
     {
- as_matcher();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : Visitor::template apply<
- typename proto::result_of::arg<Expr>::type
- >
- {};
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ {
+ typedef
+ typename Visitor::template apply<
+ typename proto::result_of::arg<Expr>::type
+ >::type
+ type;
+ };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &visitor) const
         {
             return visitor.call(proto::arg(expr));
         }

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_modifier.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_modifier.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_modifier.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -17,57 +17,54 @@
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/static/static.hpp>
 #include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
+
+#define UNCV(x) typename remove_const<x>::type
+#define UNREF(x) typename remove_reference<x>::type
+#define UNCVREF(x) UNCV(UNREF(x))
 
 namespace boost { namespace xpressive { namespace detail
 {
-
     ///////////////////////////////////////////////////////////////////////////////
     // regex operator tags
     struct modifier_tag
- {
- };
+ {};
 
- ///////////////////////////////////////////////////////////////////////////////
- // scoped_swap
- // for swapping state back after proto::compile returns
- template<typename Old, typename New>
- struct scoped_swap
- {
- ~scoped_swap() { this->old_->swap(*this->new_); }
- Old *old_;
- New *new_;
- };
+}}}
+
+namespace boost { namespace xpressive { namespace grammar_detail
+{
 
     ///////////////////////////////////////////////////////////////////////////////
     // as_modifier
     template<typename Grammar>
- struct as_modifier
- : Grammar
+ struct as_modifier : callable
     {
- as_modifier();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
             typedef typename proto::result_of::arg<typename proto::result_of::left<Expr>::type>::type modifier_type;
             typedef typename modifier_type::BOOST_NESTED_TEMPLATE apply<Visitor>::type visitor_type;
- typedef typename proto::transform::right<Grammar>::template apply<Expr, State, visitor_type>::type type;
+ typedef typename Grammar::template result<void(typename proto::result_of::right<Expr>::type, State, visitor_type)>::type type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
- typedef typename apply<Expr, State, Visitor>::visitor_type new_visitor_type;
+ typedef result<void(Expr, State, Visitor)> result_;
+ typedef typename result_::visitor_type new_visitor_type;
             new_visitor_type new_visitor(proto::arg(proto::left(expr)).call(visitor));
- new_visitor.swap(visitor);
- scoped_swap<Visitor, new_visitor_type> const undo = {&visitor, &new_visitor};
- detail::ignore_unused(undo);
- return proto::transform::right<Grammar>::call(expr, state, new_visitor);
+ return Grammar()(proto::right(expr), state, new_visitor);
         }
     };
 
 }}}
 
+#undef UNCV
+#undef UNREF
+#undef UNCVREF
+
 #endif

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_quantifier.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_quantifier.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_quantifier.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -17,12 +17,17 @@
 #include <boost/type_traits/is_same.hpp>
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/static/static.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/compose.hpp>
+#include <boost/xpressive/proto/proto.hpp>
+
+#define CV(x) typename add_const<x>::type
+#define REF(x) typename add_reference<x>::type
+#define CVREF(x) REF(CV(x))
+#define UNCV(x) typename remove_const<x>::type
+#define UNREF(x) typename remove_reference<x>::type
+#define UNCVREF(x) UNCV(UNREF(x))
 
 namespace boost { namespace xpressive { namespace detail
 {
-
     ///////////////////////////////////////////////////////////////////////////////
     // generic_quant_tag
     template<uint_t Min, uint_t Max>
@@ -31,6 +36,11 @@
         typedef mpl::integral_c<uint_t, Min> min_type;
         typedef mpl::integral_c<uint_t, Max> max_type;
     };
+}}}
+
+namespace boost { namespace xpressive { namespace grammar_detail
+{
+ using detail::uint_t;
 
     ///////////////////////////////////////////////////////////////////////////////
     // min_type / max_type
@@ -60,67 +70,65 @@
 
     ///////////////////////////////////////////////////////////////////////////////
     // as_simple_quantifier
- template<typename Grammar, bool Greedy>
- struct as_simple_quantifier
- : Grammar
+ template<typename Grammar, typename Greedy>
+ struct as_simple_quantifier : callable
     {
- typedef proto::transform::arg<Grammar> grammar_type;
- as_simple_quantifier();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
- typedef typename grammar_type::template apply<Expr, true_xpression, Visitor>::type xpr_type;
- typedef simple_repeat_matcher<xpr_type, Greedy> matcher_type;
+ typedef typename proto::result_of::arg<Expr>::type arg_type;
+ typedef typename Grammar::template result<void(arg_type, detail::true_xpression, Visitor)>::type xpr_type;
+ typedef detail::simple_repeat_matcher<xpr_type, Greedy> matcher_type;
             typedef typename proto::terminal<matcher_type>::type type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
- typename apply<Expr, State, Visitor>::xpr_type const &xpr =
- grammar_type::call(expr, true_xpression(), visitor);
- return apply<Expr, State, Visitor>::type::make(
- typename apply<Expr, State, Visitor>::matcher_type(
- xpr
- , min_type<typename Expr::proto_tag>::value
- , max_type<typename Expr::proto_tag>::value
- , xpr.get_width().value()
- )
- );
+ typedef typename proto::result_of::arg<Expr>::type arg_type;
+ typedef typename Grammar::template result<void(arg_type, detail::true_xpression, Visitor)>::type xpr_type;
+ typedef detail::simple_repeat_matcher<xpr_type, Greedy> matcher_type;
+ typedef typename Expr::proto_tag tag;
+
+ xpr_type const &xpr = Grammar()(proto::arg(expr), detail::true_xpression(), visitor);
+ matcher_type matcher(xpr, min_type<tag>(), max_type<tag>(), xpr.get_width().value());
+ return proto::terminal<matcher_type>::type::make(matcher);
         }
     };
 
     ///////////////////////////////////////////////////////////////////////////////
     // add_hidden_mark
- template<typename Grammar>
- struct add_hidden_mark
- : Grammar
+ struct add_hidden_mark : callable
     {
- add_hidden_mark();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename, typename>
- struct apply
- : proto::shift_right<
- proto::terminal<mark_begin_matcher>::type
- , typename proto::shift_right<
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : shift_right<
+ terminal<detail::mark_begin_matcher>::type
+ , typename shift_right<
                     Expr
- , proto::terminal<mark_end_matcher>::type
+ , terminal<detail::mark_end_matcher>::type
>::type
>
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
             // we're inserting a hidden mark ... so grab the next hidden mark number.
             int mark_nbr = visitor.get_hidden_mark();
- mark_begin_matcher begin(mark_nbr);
- mark_end_matcher end(mark_nbr);
+ detail::mark_begin_matcher begin(mark_nbr);
+ detail::mark_end_matcher end(mark_nbr);
 
- typename apply<Expr, State, Visitor>::type that = {{begin}, {expr, {end}}};
+ typename result<void(Expr, State, Visitor)>::type that
+ = {{begin}, {expr, {end}}};
             return that;
         }
     };
@@ -128,109 +136,113 @@
     ///////////////////////////////////////////////////////////////////////////////
     // InsertMark
     struct InsertMark
- : proto::or_<
- proto::assign<basic_mark_tag, proto::_>
- , add_hidden_mark<proto::_>
+ : or_<
+ when<proto::assign<detail::basic_mark_tag, _>, _>
+ , otherwise<add_hidden_mark>
>
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
     // as_default_quantifier_impl
- template<bool Greedy, uint_t Min, uint_t Max>
- struct as_default_quantifier_impl
+ template<typename Greedy, uint_t Min, uint_t Max>
+ struct as_default_quantifier_impl : callable
     {
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : proto::shift_right<
- proto::terminal<repeat_begin_matcher>::type
- , typename proto::shift_right<
- typename InsertMark::apply<typename proto::result_of::arg<Expr>::type, State, Visitor>::type
- , typename proto::terminal<repeat_end_matcher<Greedy> >::type
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : shift_right<
+ terminal<detail::repeat_begin_matcher>::type
+ , typename shift_right<
+ typename InsertMark::template result<void(typename proto::result_of::arg<Expr>::type, State, Visitor)>::type
+ , typename terminal<detail::repeat_end_matcher<Greedy> >::type
>::type
>
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
             // Ensure this sub-expression is book-ended with mark matchers
             typedef typename proto::result_of::arg<Expr>::type arg_type;
- typename InsertMark::apply<arg_type, State, Visitor>::type const &
- marked_sub = InsertMark::call(proto::arg(expr), state, visitor);
+ typename InsertMark::template result<void(arg_type, State, Visitor)>::type const &
+ marked_sub = InsertMark()(proto::arg(expr), state, visitor);
 
             // Get the mark_number from the begin_mark_matcher
             int mark_number = proto::arg(proto::left(marked_sub)).mark_number_;
             BOOST_ASSERT(0 != mark_number);
 
- unsigned min_ = min_type<typename Expr::proto_tag>::value;
- unsigned max_ = max_type<typename Expr::proto_tag>::value;
+ unsigned min_ = min_type<typename Expr::proto_tag>();
+ unsigned max_ = max_type<typename Expr::proto_tag>();
 
- repeat_begin_matcher begin(mark_number);
- repeat_end_matcher<Greedy> end(mark_number, min_, max_);
+ detail::repeat_begin_matcher begin(mark_number);
+ detail::repeat_end_matcher<Greedy> end(mark_number, min_, max_);
 
- typename apply<Expr, State, Visitor>::type that = {{begin}, {marked_sub, {end}}};
+ typename result<void(Expr, State, Visitor)>::type that
+ = {{begin}, {marked_sub, {end}}};
             return that;
         }
     };
 
     ///////////////////////////////////////////////////////////////////////////////
     // optional_tag
- template<bool Greedy>
+ template<typename Greedy>
     struct optional_tag
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
     // as_default_optional
- template<typename Grammar, bool Greedy>
- struct as_default_optional
- : Grammar
+ template<typename Grammar, typename Greedy>
+ struct as_default_optional : callable
     {
- as_default_optional();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
- typedef optional_matcher<
- typename Grammar::template apply<Expr, alternate_end_xpression, Visitor>::type
+ typedef detail::optional_matcher<
+ typename Grammar::template result<void(Expr, detail::alternate_end_xpression, Visitor)>::type
               , Greedy
> type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
- return typename apply<Expr, State, Visitor>::type(
- Grammar::call(expr, alternate_end_xpression(), visitor)
+ return typename result<void(Expr, State, Visitor)>::type(
+ Grammar()(expr, detail::alternate_end_xpression(), visitor)
             );
         }
     };
 
     ///////////////////////////////////////////////////////////////////////////////
     // as_mark_optional
- template<typename Grammar, bool Greedy>
- struct as_mark_optional
- : Grammar
+ template<typename Grammar, typename Greedy>
+ struct as_mark_optional : callable
     {
- as_mark_optional();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
- typedef optional_mark_matcher<
- typename Grammar::template apply<Expr, alternate_end_xpression, Visitor>::type
+ typedef detail::optional_mark_matcher<
+ typename Grammar::template result<void(Expr, detail::alternate_end_xpression, Visitor)>::type
               , Greedy
> type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
             int mark_number = proto::arg(proto::left(expr)).mark_number_;
- return typename apply<Expr, State, Visitor>::type(
- Grammar::call(expr, alternate_end_xpression(), visitor)
+ return typename result<void(Expr, State, Visitor)>::type(
+ Grammar()(expr, detail::alternate_end_xpression(), visitor)
               , mark_number
             );
         }
@@ -239,93 +251,96 @@
     ///////////////////////////////////////////////////////////////////////////////
     // IsMarkerOrRepeater
     struct IsMarkerOrRepeater
- : proto::or_<
- proto::shift_right<proto::terminal<repeat_begin_matcher>, proto::_>
- , proto::assign<proto::terminal<mark_placeholder>, proto::_>
+ : or_<
+ shift_right<terminal<detail::repeat_begin_matcher>, _>
+ , assign<terminal<detail::mark_placeholder>, _>
>
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
     // as_optional
- template<typename Grammar, bool Greedy>
+ template<typename Grammar, typename Greedy>
     struct as_optional
- : proto::if_<
- proto::matches<mpl::_, IsMarkerOrRepeater>
- , as_mark_optional<Grammar, Greedy>
- , as_default_optional<Grammar, Greedy>
+ : or_<
+ when<IsMarkerOrRepeater, as_mark_optional<Grammar, Greedy> >
+ , otherwise<as_default_optional<Grammar, Greedy> >
>
- {
- as_optional();
- };
+ {};
 
     ///////////////////////////////////////////////////////////////////////////////
     // make_optional_
- template<bool Greedy>
- struct make_optional_
+ template<typename Greedy>
+ struct make_optional_ : callable
     {
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : proto::unary_expr<optional_tag<Greedy>, Expr>
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : unary_expr<optional_tag<Greedy>, Expr>
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &)
+ typename unary_expr<optional_tag<Greedy>, Expr>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
- typename apply<Expr, State, Visitor>::type that = {expr};
+ typename unary_expr<optional_tag<Greedy>, Expr>::type that = {expr};
             return that;
         }
     };
 
     ///////////////////////////////////////////////////////////////////////////////
     // as_default_quantifier_impl
- template<bool Greedy, uint_t Max>
+ template<typename Greedy, uint_t Max>
     struct as_default_quantifier_impl<Greedy, 0, Max>
- : proto::transform::compose<
- as_default_quantifier_impl<Greedy, 1, Max>
- , make_optional_<Greedy>
- >
+ : call<make_optional_<Greedy>(as_default_quantifier_impl<Greedy, 1, Max>)>
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
     // as_default_quantifier_impl
- template<bool Greedy>
+ template<typename Greedy>
     struct as_default_quantifier_impl<Greedy, 0, 1>
- : proto::transform::compose<
- proto::transform::arg<proto::_>
- , make_optional_<Greedy>
- >
+ : call<make_optional_<Greedy>(_arg)>
     {};
 
     ///////////////////////////////////////////////////////////////////////////////
     // as_default_quantifier
- template<typename Grammar, bool Greedy>
- struct as_default_quantifier
- : Grammar
+ template<typename Greedy>
+ struct as_default_quantifier : callable
     {
- as_default_quantifier();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : as_default_quantifier_impl<
- Greedy
- , min_type<typename Expr::proto_tag>::value
- , max_type<typename Expr::proto_tag>::value
- >::template apply<Expr, State, Visitor>
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : boost::result_of<
+ as_default_quantifier_impl<
+ Greedy
+ , min_type<typename Expr::proto_tag>::value
+ , max_type<typename Expr::proto_tag>::value
+ >(Expr, State, Visitor)
+ >
         {};
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
             return as_default_quantifier_impl<
                 Greedy
               , min_type<typename Expr::proto_tag>::value
               , max_type<typename Expr::proto_tag>::value
- >::call(expr, state, visitor);
+ >()(expr, state, visitor);
         }
     };
 
 }}}
 
+#undef CV
+#undef REF
+#undef CVREF
+#undef UNCV
+#undef UNREF
+#undef UNCVREF
+
 #endif

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_sequence.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_sequence.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_sequence.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -18,30 +18,33 @@
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/static/static.hpp>
 
-namespace boost { namespace xpressive { namespace detail
-{
+#define UNCV(x) typename remove_const<x>::type
+#define UNREF(x) typename remove_reference<x>::type
+#define UNCVREF(x) UNCV(UNREF(x))
 
+namespace boost { namespace xpressive { namespace grammar_detail
+{
     template<typename Grammar>
- struct in_sequence
- : Grammar
+ struct in_sequence : callable
     {
- in_sequence();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
- typedef static_xpression<
- typename Grammar::template apply<Expr, State, Visitor>::type
+ typedef detail::static_xpression<
+ typename Grammar::template result<void(Expr, State, Visitor)>::type
               , State
> type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
         {
- return typename apply<Expr, State, Visitor>::type(
- Grammar::call(expr, state, visitor)
+ return typename result<void(Expr, State, Visitor)>::type(
+ Grammar()(expr, state, visitor)
               , state
             );
         }
@@ -49,4 +52,8 @@
 
 }}}
 
+#undef UNCV
+#undef UNREF
+#undef UNCVREF
+
 #endif

Modified: branches/fix-links/boost/xpressive/detail/static/transforms/as_set.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transforms/as_set.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transforms/as_set.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -15,214 +15,155 @@
 
 #include <boost/mpl/assert.hpp>
 #include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/apply.hpp>
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/static/static.hpp>
 #include <boost/xpressive/detail/utility/chset/chset.hpp>
 #include <boost/xpressive/detail/utility/traits_utils.hpp>
 
-namespace boost { namespace xpressive { namespace detail
-{
-
- template<typename I>
- typename I::next next_(I)
- {
- return typename I::next();
- }
-
- template<typename Grammar>
- struct next
- : Grammar
- {
- next();
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : Grammar::template apply<Expr, State, Visitor>::type::next
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return detail::next_(Grammar::call(expr, state, visitor));
- }
- };
-
- template<typename Grammar>
- struct push_back
- : Grammar
- {
- push_back();
+#define UNCV(x) typename remove_const<x>::type
+#define UNREF(x) typename remove_reference<x>::type
+#define UNCVREF(x) UNCV(UNREF(x))
 
- template<typename Expr, typename State, typename Visitor>
- static typename Grammar::template apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- visitor.accept(proto::arg(expr));
- return Grammar::call(expr, state, visitor);
- }
- };
+namespace boost { namespace xpressive { namespace grammar_detail
+{
 
     ///////////////////////////////////////////////////////////////////////////
     // CharLiteral
     template<typename Char>
     struct CharLiteral
- : proto::or_<
- proto::terminal<char>
- , proto::terminal<Char>
+ : or_<
+ terminal<char>
+ , terminal<Char>
>
     {};
 
     template<>
     struct CharLiteral<char>
- : proto::terminal<char>
+ : terminal<char>
     {};
 
     ///////////////////////////////////////////////////////////////////////////
     // ListSet
     // matches expressions like (set= 'a','b','c')
     // calculates the size of the set
- // populates an array of characters
     template<typename Char>
     struct ListSet
- : proto::transform::left<
- proto::or_<
- proto::comma<
- next<ListSet<Char> >
- , push_back<CharLiteral<Char> >
- >
- , proto::assign<
- proto::transform::always<set_initializer_type, mpl::int_<1> >
- , push_back<CharLiteral<Char> >
- >
+ : or_<
+ when<
+ comma<ListSet<Char>, CharLiteral<Char> >
+ , make<mpl::next<call<ListSet<Char>(_left)> > > // TODO make a custom transform for this...
+ >
+ , when<
+ assign<detail::set_initializer_type, CharLiteral<Char> >
+ , make<mpl::int_<1> >
>
>
     {};
 
- ///////////////////////////////////////////////////////////////////////////
- // set_fill_visitor
- template<typename Traits>
- struct set_fill_visitor
- {
- typedef typename Traits::char_type char_type;
-
- set_fill_visitor(char_type *buffer, Traits const &traits)
- : buffer_(buffer)
- , traits_(traits)
- {}
-
- template<typename Char>
- void accept(Char ch)
- {
- *this->buffer_++ = this->traits_.translate(
- char_cast<typename Traits::char_type>(ch, this->traits_)
- );
- }
+ template<typename Char, typename Traits>
+ void fill_list_set(Char *&, detail::set_initializer_type, Traits const &)
+ {}
 
- char_type *buffer_;
- Traits const &traits_;
- };
+ template<typename Char, typename Expr, typename Traits>
+ void fill_list_set(Char *&buffer, Expr const &expr, Traits const &traits)
+ {
+ fill_list_set(buffer, proto::left(expr), traits);
+ *buffer++ = traits.translate(detail::char_cast<Char>(proto::arg(proto::right(expr)), traits));
+ }
 
     ///////////////////////////////////////////////////////////////////////////////
- // as_list_set
- template<typename Grammar>
- struct as_list_set
- : Grammar
+ // as_list_set_matcher
+ template<typename Char>
+ struct as_list_set_matcher
     {
- as_list_set();
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
- typedef typename Visitor::traits_type traits_type;
- typedef set_matcher<
- traits_type
- , Grammar::template apply<Expr, State, set_fill_visitor<traits_type> >::type::value
+ typedef detail::set_matcher<
+ typename Visitor::traits_type
+ , typename ListSet<Char>::template result<void(Expr, State, Visitor)>::type
> type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &visitor) const
         {
- typename apply<Expr, State, Visitor>::type set;
- set_fill_visitor<typename Visitor::traits_type> filler(set.set_, visitor.traits());
- Grammar::call(expr, state, filler);
+ detail::set_matcher<
+ typename Visitor::traits_type
+ , typename ListSet<Char>::template result<void(Expr, State, Visitor)>::type
+ > set;
+ typename Visitor::char_type *buffer = set.set_;
+ fill_list_set(buffer, expr, visitor.traits());
             return set;
         }
     };
 
     ///////////////////////////////////////////////////////////////////////////////
- // charset_context
+ // merge_charset
     //
     template<typename Grammar, typename CharSet, typename Visitor>
- struct charset_context
+ struct merge_charset
     {
- template<typename Expr, typename Tag>
- struct eval_
- {
- typedef void result_type;
- void operator()(Expr const &expr, charset_context const &ctx) const
- {
- ctx.set(Grammar::call(expr, end_xpression(), ctx.visitor_));
- }
- };
-
- template<typename Expr>
- struct eval_<Expr, proto::tag::bitwise_or>
- {
- typedef void result_type;
- void operator()(Expr const &expr, charset_context const &ctx) const
- {
- proto::eval(proto::left(expr), ctx);
- proto::eval(proto::right(expr), ctx);
- }
- };
-
- // Gah, this is to work around a MSVC bug.
- template<typename Expr>
- struct eval
- : eval_<Expr, typename Expr::proto_tag>
- {};
-
         typedef typename Visitor::traits_type traits_type;
         typedef typename CharSet::char_type char_type;
         typedef typename CharSet::icase_type icase_type;
 
- explicit charset_context(CharSet &charset, Visitor &visitor)
+ merge_charset(CharSet &charset, Visitor &visitor)
           : charset_(charset)
           , visitor_(visitor)
         {}
 
- template<bool Not>
- void set(literal_matcher<traits_type, icase_type::value, Not> const &ch) const
+ template<typename Expr>
+ void operator ()(Expr const &expr) const
+ {
+ this->call_(expr, typename Expr::proto_tag());
+ }
+
+ private:
+ template<typename Expr, typename Tag>
+ void call_(Expr const &expr, Tag) const
+ {
+ this->set_(Grammar()(expr, detail::end_xpression(), this->visitor_));
+ }
+
+ template<typename Expr>
+ void call_(Expr const &expr, tag::bitwise_or) const
+ {
+ (*this)(proto::left(expr));
+ (*this)(proto::right(expr));
+ }
+
+ template<typename Not>
+ void set_(detail::literal_matcher<traits_type, icase_type, Not> const &ch) const
         {
             // BUGBUG fixme!
- BOOST_MPL_ASSERT_NOT((mpl::bool_<Not>));
+ BOOST_MPL_ASSERT_NOT((Not));
             set_char(this->charset_.charset_, ch.ch_, this->visitor_.traits(), icase_type());
         }
 
- void set(range_matcher<traits_type, icase_type::value> const &rg) const
+ void set_(detail::range_matcher<traits_type, icase_type> const &rg) const
         {
             // BUGBUG fixme!
             BOOST_ASSERT(!rg.not_);
             set_range(this->charset_.charset_, rg.ch_min_, rg.ch_max_, this->visitor_.traits(), icase_type());
         }
 
- template<int Size>
- void set(set_matcher<traits_type, Size> const &set_) const
+ template<typename Size>
+ void set_(detail::set_matcher<traits_type, Size> const &set_) const
         {
             // BUGBUG fixme!
             BOOST_ASSERT(!set_.not_);
- for(int i=0; i<Size; ++i)
+ for(int i = 0; i < Size::value; ++i)
             {
- set_char(this->charset_.charset_, set_.set_[i], this->visitor_.traits(), icase_type::value);
+ set_char(this->charset_.charset_, set_.set_[i], this->visitor_.traits(), icase_type());
             }
         }
 
- void set(posix_charset_matcher<traits_type> const &posix) const
+ void set_(detail::posix_charset_matcher<traits_type> const &posix) const
         {
             set_class(this->charset_.charset_, posix.mask_, posix.not_, this->visitor_.traits());
         }
@@ -234,44 +175,47 @@
     ///////////////////////////////////////////////////////////////////////////////
     //
     template<typename Grammar>
- struct as_set
- : Grammar
+ struct as_set_matcher
     {
- as_set();
+ template<typename Sig>
+ struct result;
 
- template<typename, typename, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
             typedef typename Visitor::char_type char_type;
 
             // if sizeof(char_type)==1, merge everything into a basic_chset
             // BUGBUG this is not optimal.
             typedef typename mpl::if_<
- is_narrow_char<char_type>
- , basic_chset<char_type>
- , compound_charset<typename Visitor::traits_type>
+ detail::is_narrow_char<char_type>
+ , detail::basic_chset<char_type>
+ , detail::compound_charset<typename Visitor::traits_type>
>::type charset_type;
 
- typedef charset_matcher<
+ typedef detail::charset_matcher<
                 typename Visitor::traits_type
- , Visitor::icase_type::value
+ , typename Visitor::icase_type
               , charset_type
> type;
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &, Visitor &visitor) const
         {
- typedef typename apply<Expr, State, Visitor>::type set_type;
+ typedef typename result<void(Expr, State, Visitor)>::type set_type;
             set_type matcher;
- charset_context<Grammar, set_type, Visitor> ctx(matcher, visitor);
- // Walks the tree and fills in the charset
- proto::eval(expr, ctx);
+ merge_charset<Grammar, set_type, Visitor> merge(matcher, visitor);
+ merge(expr); // Walks the tree and fills in the charset
             return matcher;
         }
     };
 
 }}}
 
+#undef UNCV
+#undef UNREF
+#undef UNCVREF
+
 #endif

Modified: branches/fix-links/boost/xpressive/detail/static/transmogrify.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/static/transmogrify.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/static/transmogrify.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -44,8 +44,8 @@
         typedef typename mpl::if_
         <
             is_char_literal<Matcher, char_type>
- , literal_matcher<Traits, ICase::value, false>
- , string_matcher<Traits, ICase::value>
+ , literal_matcher<Traits, ICase, mpl::false_>
+ , string_matcher<Traits, ICase>
>::type type;
 
         template<typename Matcher2, typename Visitor>
@@ -128,7 +128,7 @@
         // By design, we don't widen character ranges.
         typedef typename iterator_value<BidiIter>::type char_type;
         BOOST_MPL_ASSERT((is_same<Char, char_type>));
- typedef range_matcher<Traits, ICase::value> type;
+ typedef range_matcher<Traits, ICase> type;
 
         template<typename Matcher2, typename Visitor>
         static type call(Matcher2 const &m, Visitor &visitor)
@@ -140,7 +140,7 @@
     template<typename BidiIter, typename ICase, typename Traits>
     struct transmogrify<BidiIter, ICase, Traits, mark_placeholder >
     {
- typedef mark_matcher<Traits, ICase::value> type;
+ typedef mark_matcher<Traits, ICase> type;
 
         template<typename Matcher2, typename Visitor>
         static type call(Matcher2 const &m, Visitor &visitor)
@@ -162,7 +162,7 @@
         }
     };
 
- template<typename BidiIter, typename Traits, int Size>
+ template<typename BidiIter, typename Traits, typename Size>
     struct transmogrify<BidiIter, mpl::true_, Traits, set_matcher<Traits, Size> >
     {
         typedef set_matcher<Traits, Size> type;

Modified: branches/fix-links/boost/xpressive/detail/utility/symbols.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/utility/symbols.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/utility/symbols.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -21,6 +21,7 @@
 # pragma once
 #endif
 
+#include <boost/noncopyable.hpp>
 #include <boost/range/begin.hpp>
 #include <boost/range/end.hpp>
 #include <boost/range/value_type.hpp>

Modified: branches/fix-links/boost/xpressive/detail/utility/tracking_ptr.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/detail/utility/tracking_ptr.hpp (original)
+++ branches/fix-links/boost/xpressive/detail/utility/tracking_ptr.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,6 +24,7 @@
 #include <boost/shared_ptr.hpp>
 #include <boost/mpl/assert.hpp>
 #include <boost/intrusive_ptr.hpp>
+#include <boost/detail/workaround.hpp>
 #include <boost/detail/atomic_count.hpp>
 #include <boost/iterator/iterator_facade.hpp>
 #include <boost/iterator/filter_iterator.hpp>

Modified: branches/fix-links/boost/xpressive/match_results.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/match_results.hpp (original)
+++ branches/fix-links/boost/xpressive/match_results.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -8,7 +8,7 @@
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
-// Acknowledgements: Thanks to Markus Sch\:opflin for helping to track down
+// Acknowledgements: Thanks to Markus Schoepflin for helping to track down
 // a tricky formatting bug on HP Tru64, and to Steven Watanabe for suggesting
 // the fix.
 

Modified: branches/fix-links/boost/xpressive/proto/context/default.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/context/default.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/context/default.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -14,33 +14,30 @@
 
     #include <boost/xpressive/proto/detail/prefix.hpp> // must be first include
     #include <boost/config.hpp>
- #include <boost/detail/workaround.hpp>
     #include <boost/preprocessor/cat.hpp>
     #include <boost/preprocessor/iteration/iterate.hpp>
- #include <boost/preprocessor/facilities/intercept.hpp>
     #include <boost/preprocessor/repetition/enum_shifted.hpp>
- #include <boost/preprocessor/repetition/enum_params.hpp>
- #include <boost/preprocessor/repetition/enum_trailing.hpp>
- #include <boost/preprocessor/arithmetic/inc.hpp>
- #include <boost/preprocessor/tuple/elem.hpp>
+ #include <boost/preprocessor/selection/max.hpp>
     #include <boost/mpl/if.hpp>
     #include <boost/typeof/typeof.hpp>
     #include <boost/utility/result_of.hpp>
     #include <boost/type_traits/is_const.hpp>
     #include <boost/type_traits/is_function.hpp>
- #include <boost/type_traits/remove_cv.hpp>
+ #include <boost/type_traits/remove_reference.hpp>
     #include <boost/xpressive/proto/proto_fwd.hpp>
     #include <boost/xpressive/proto/tags.hpp>
     #include <boost/xpressive/proto/eval.hpp>
     #include <boost/xpressive/proto/traits.hpp> // for proto::arg_c()
     #include <boost/xpressive/proto/detail/suffix.hpp> // must be last include
 
+ namespace boost { namespace proto
+ {
     // If we're generating doxygen documentation, hide all the nasty
     // Boost.Typeof gunk.
     #ifndef BOOST_PROTO_DOXYGEN_INVOKED
         #define BOOST_PROTO_DECLTYPE_NESTED_TYPEDEF_TPL_(Nested, Expr)\
             BOOST_TYPEOF_NESTED_TYPEDEF_TPL(BOOST_PP_CAT(nested_and_hidden_, Nested), Expr)\
- static int const sz = sizeof(detail::check_reference(Expr)); \
+ static int const sz = sizeof(proto::detail::check_reference(Expr));\
             struct Nested\
               : mpl::if_c<\
                     1==sz\
@@ -62,8 +59,10 @@
             typedef detail::unspecified Type;
     #endif
 
- namespace boost { namespace proto
- {
+ /// INTERNAL ONLY
+ ///
+ #define UNREF(x) typename boost::remove_reference<x>::type
+
         namespace detail
         {
             template<typename T> T make();
@@ -77,7 +76,7 @@
             template<typename A0, typename A1>
             struct comma_result
             {
- BOOST_PROTO_DECLTYPE_((detail::make<A0>(), detail::make<A1>()), type)
+ BOOST_PROTO_DECLTYPE_((proto::detail::make<A0>(), proto::detail::make<A1>()), type)
             };
 
             template<typename A0>
@@ -129,14 +128,7 @@
             //BOOST_MPL_ASSERT((is_same<void(*)(), result_of_fixup<void(* const &)()>::type>));
             //BOOST_MPL_ASSERT((is_same<void(*)(), result_of_fixup<void(&)()>::type>));
 
- #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
- template<typename T> T &make_ref_(T &t);
- template<typename T> T const &make_ref_(T const &t);
- #define BOOST_PROTO_REF(x) detail::make_ref_(x)
- #else
- #define BOOST_PROTO_REF(x) x
- #endif
- }
+ } // namespace detail
 
         namespace context
         {
@@ -151,11 +143,11 @@
             struct default_eval<Expr, Context, Tag, 1> \
             { \
             private: \
- static Expr &sexpr; \
- static Context &sctx; \
+ typedef typename proto::result_of::arg_c<Expr, 0>::type e0; \
+ typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0; \
             public: \
- BOOST_PROTO_DECLTYPE_(Op proto::eval(BOOST_PROTO_REF(proto::arg_c<0>(sexpr)), sctx), result_type)\
- result_type operator()(Expr &expr, Context &ctx) const \
+ BOOST_PROTO_DECLTYPE_(Op proto::detail::make<r0>(), result_type) \
+ result_type operator ()(Expr &expr, Context &ctx) const \
                 { \
                     return Op proto::eval(proto::arg_c<0>(expr), ctx); \
                 } \
@@ -169,11 +161,13 @@
             struct default_eval<Expr, Context, Tag, 2> \
             { \
             private: \
- static Expr &sexpr; \
- static Context &sctx; \
+ typedef typename proto::result_of::arg_c<Expr, 0>::type e0; \
+ typedef typename proto::result_of::arg_c<Expr, 1>::type e1; \
+ typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0; \
+ typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1; \
             public: \
- BOOST_PROTO_DECLTYPE_(proto::eval(BOOST_PROTO_REF(proto::arg_c<0>(sexpr)), sctx) Op proto::eval(BOOST_PROTO_REF(proto::arg_c<1>(sexpr)), sctx), result_type)\
- result_type operator()(Expr &expr, Context &ctx) const \
+ BOOST_PROTO_DECLTYPE_(proto::detail::make<r0>() Op proto::detail::make<r1>(), result_type)\
+ result_type operator ()(Expr &expr, Context &ctx) const \
                 { \
                     return proto::eval(proto::arg_c<0>(expr), ctx) Op proto::eval(proto::arg_c<1>(expr), ctx);\
                 } \
@@ -232,7 +226,7 @@
>::type
                 result_type;
 
- result_type operator()(Expr &expr, Context &) const
+ result_type operator ()(Expr &expr, Context &) const
                 {
                     return proto::arg(expr);
                 }
@@ -243,11 +237,11 @@
             struct default_eval<Expr, Context, proto::tag::post_inc, 1>
             {
             private:
- static Expr &sexpr;
- static Context &sctx;
+ typedef typename proto::result_of::arg_c<Expr, 0>::type e0;
+ typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
             public:
- BOOST_PROTO_DECLTYPE_(proto::eval(BOOST_PROTO_REF(proto::arg_c<0>(sexpr)), sctx) ++, result_type)
- result_type operator()(Expr &expr, Context &ctx) const
+ BOOST_PROTO_DECLTYPE_(proto::detail::make<r0>() ++, result_type)
+ result_type operator ()(Expr &expr, Context &ctx) const
                 {
                     return proto::eval(proto::arg_c<0>(expr), ctx) ++;
                 }
@@ -258,11 +252,11 @@
             struct default_eval<Expr, Context, proto::tag::post_dec, 1>
             {
             private:
- static Expr &sexpr;
- static Context &sctx;
+ typedef typename proto::result_of::arg_c<Expr, 0>::type e0;
+ typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
             public:
- BOOST_PROTO_DECLTYPE_(proto::eval(BOOST_PROTO_REF(proto::arg_c<0>(sexpr)), sctx) --, result_type)
- result_type operator()(Expr &expr, Context &ctx) const
+ BOOST_PROTO_DECLTYPE_(proto::detail::make<r0>() --, result_type)
+ result_type operator ()(Expr &expr, Context &ctx) const
                 {
                     return proto::eval(proto::arg_c<0>(expr), ctx) --;
                 }
@@ -273,11 +267,13 @@
             struct default_eval<Expr, Context, proto::tag::subscript, 2>
             {
             private:
- static Expr &sexpr;
- static Context &sctx;
+ typedef typename proto::result_of::arg_c<Expr, 0>::type e0;
+ typedef typename proto::result_of::arg_c<Expr, 1>::type e1;
+ typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+ typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1;
             public:
- BOOST_PROTO_DECLTYPE_(proto::eval(BOOST_PROTO_REF(proto::arg_c<0>(sexpr)), sctx)[proto::eval(BOOST_PROTO_REF(proto::arg_c<1>(sexpr)), sctx)], result_type)
- result_type operator()(Expr &expr, Context &ctx) const
+ BOOST_PROTO_DECLTYPE_(proto::detail::make<r0>()[proto::detail::make<r1>()], result_type)
+ result_type operator ()(Expr &expr, Context &ctx) const
                 {
                     return proto::eval(proto::arg_c<0>(expr), ctx)[proto::eval(proto::arg_c<1>(expr), ctx)];
                 }
@@ -288,16 +284,20 @@
             struct default_eval<Expr, Context, proto::tag::if_else_, 3>
             {
             private:
- static Expr &sexpr;
- static Context &sctx;
+ typedef typename proto::result_of::arg_c<Expr, 0>::type e0;
+ typedef typename proto::result_of::arg_c<Expr, 1>::type e1;
+ typedef typename proto::result_of::arg_c<Expr, 2>::type e2;
+ typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+ typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1;
+ typedef typename proto::result_of::eval<UNREF(e2), Context>::type r2;
             public:
                 BOOST_PROTO_DECLTYPE_(
- proto::eval(BOOST_PROTO_REF(proto::arg_c<0>(sexpr)), sctx)
- ? proto::eval(BOOST_PROTO_REF(proto::arg_c<1>(sexpr)), sctx)
- : proto::eval(BOOST_PROTO_REF(proto::arg_c<2>(sexpr)), sctx)
+ proto::detail::make<r0>()
+ ? proto::detail::make<r1>()
+ : proto::detail::make<r2>()
                   , result_type
                 )
- result_type operator()(Expr &expr, Context &ctx) const
+ result_type operator ()(Expr &expr, Context &ctx) const
                 {
                     return proto::eval(proto::arg_c<0>(expr), ctx)
                          ? proto::eval(proto::arg_c<1>(expr), ctx)
@@ -309,29 +309,34 @@
             template<typename Expr, typename Context>
             struct default_eval<Expr, Context, proto::tag::comma, 2>
             {
- typedef typename proto::result_of::eval<typename proto::result_of::arg_c<Expr, 0>::type, Context>::type proto_arg0;
- typedef typename proto::result_of::eval<typename proto::result_of::arg_c<Expr, 1>::type, Context>::type proto_arg1;
- typedef typename detail::comma_result<proto_arg0, proto_arg1>::type result_type;
- result_type operator()(Expr &expr, Context &ctx) const
+ private:
+ typedef typename proto::result_of::arg_c<Expr, 0>::type e0;
+ typedef typename proto::result_of::arg_c<Expr, 1>::type e1;
+ typedef typename proto::result_of::eval<UNREF(e0), Context>::type r0;
+ typedef typename proto::result_of::eval<UNREF(e1), Context>::type r1;
+ public:
+ typedef typename proto::detail::comma_result<r0, r1>::type result_type;
+ result_type operator ()(Expr &expr, Context &ctx) const
                 {
                     return proto::eval(proto::arg_c<0>(expr), ctx), proto::eval(proto::arg_c<1>(expr), ctx);
                 }
             };
 
- #define BOOST_PROTO_EVAL_N_TYPE(Z, N, Data)\
- typename proto::result_of::eval<\
- typename proto::result_of::arg_c<BOOST_PP_TUPLE_ELEM(2, 0, Data), N>::type\
- , BOOST_PP_TUPLE_ELEM(2, 1, Data)\
- >::type
+ // Handle function specially
+ #define EVAL_TYPE(Z, N, DATA) \
+ typename proto::result_of::eval< \
+ typename remove_reference<typename proto::result_of::arg_c<DATA, N>::type>::type\
+ , Context \
+ >::type
 
- #define BOOST_PROTO_EVAL_N(Z, N, Data)\
- proto::eval(proto::arg_c<N>(BOOST_PP_TUPLE_ELEM(2, 0, Data)), BOOST_PP_TUPLE_ELEM(2, 1, Data))
+ #define EVAL(Z, N, DATA) \
+ proto::eval(proto::arg_c<N>(DATA), context)
 
- #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/xpressive/proto/context/default.hpp>))
- #include BOOST_PP_ITERATE()
+ #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PROTO_MAX_ARITY, <boost/xpressive/proto/context/default.hpp>))
+ #include BOOST_PP_ITERATE()
 
- #undef BOOST_PROTO_EVAL_N_TYPE
- #undef BOOST_PROTO_EVAL_N
+ #undef EVAL_TYPE
+ #undef EVAL
 
             /// default_context
             ///
@@ -349,8 +354,7 @@
 
     }} // namespace boost::proto
 
- #undef BOOST_PROTO_DECLTYPE_NESTED_TYPEDEF_TPL_
- #undef BOOST_PROTO_DECLTYPE_
+ #undef UNREF
 
     #endif
 
@@ -358,29 +362,22 @@
 
     #define N BOOST_PP_ITERATION()
 
- // Handle function specially
         template<typename Expr, typename Context>
         struct default_eval<Expr, Context, proto::tag::function, N>
         {
             typedef
- typename detail::result_of_fixup<
- BOOST_PROTO_EVAL_N_TYPE(1, 0, (Expr, Context))
- >::type
+ typename proto::detail::result_of_fixup<EVAL_TYPE(~, 0, Expr)>::type
             function_type;
 
             typedef
                 typename boost::result_of<
- function_type(
- BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_EVAL_N_TYPE, (Expr, Context))
- )
+ function_type(BOOST_PP_ENUM_SHIFTED(BOOST_PP_MAX(N, 1), EVAL_TYPE, Expr))
>::type
             result_type;
 
             result_type operator ()(Expr &expr, Context &context) const
             {
- return BOOST_PROTO_EVAL_N(1, 0, (expr, context))(
- BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_EVAL_N, (expr, context))
- );
+ return EVAL(~, 0, expr)(BOOST_PP_ENUM_SHIFTED(BOOST_PP_MAX(N, 1), EVAL, expr));
             }
         };
 

Modified: branches/fix-links/boost/xpressive/proto/debug.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/debug.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/debug.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -20,7 +20,7 @@
 #include <boost/xpressive/proto/expr.hpp>
 #include <boost/xpressive/proto/traits.hpp>
 #else
-/// INTERNAL ONLY
+/// INTERNAL <> ONLY
 /// Needed to work around doxygen bug
 struct a_dummy_global;
 #endif
@@ -127,7 +127,7 @@
             {}
 
             template<typename Args>
- void operator()(expr<tag::terminal, Args, 0> const &expr) const
+ void operator()(proto::expr<tag::terminal, Args, 0> const &expr) const
             {
                 this->sout_ << std::setw(this->depth_) << (this->first_? "" : ", ")
                     << "terminal(" << proto::arg(expr) << ")\n";
@@ -140,7 +140,7 @@
 
         #define BOOST_PP_LOCAL_MACRO(N) \
             template<typename Tag, typename Args> \
- void operator()(expr<Tag, Args, N> const &expr) const \
+ void operator()(proto::expr<Tag, Args, N> const &expr) const \
             { \
                 using namespace tag; \
                 this->sout_ << std::setw(this->depth_) << (this->first_? "" : ", ") \

Modified: branches/fix-links/boost/xpressive/proto/deep_copy.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/deep_copy.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/deep_copy.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -12,8 +12,8 @@
 
     #include <boost/xpressive/proto/detail/prefix.hpp>
     #include <boost/preprocessor/cat.hpp>
- #include <boost/preprocessor/enum.hpp>
- #include <boost/preprocessor/iterate.hpp>
+ #include <boost/preprocessor/repetition/enum.hpp>
+ #include <boost/preprocessor/iteration/iterate.hpp>
     #include <boost/call_traits.hpp>
     #include <boost/xpressive/proto/proto_fwd.hpp>
     #include <boost/xpressive/proto/expr.hpp>
@@ -98,7 +98,7 @@
             template<typename Expr>
             struct deep_copy_impl<Expr, N>
             {
- typedef expr<typename Expr::proto_tag, BOOST_PP_CAT(args, N)<
+ typedef proto::expr<typename Expr::proto_tag, BOOST_PP_CAT(args, N)<
                     BOOST_PP_ENUM(N, BOOST_PROTO_DEFINE_DEEP_COPY_TYPE, ~)
> > expr_type;
                 typedef typename Expr::proto_domain::template apply<expr_type>::type type;

Modified: branches/fix-links/boost/xpressive/proto/detail/funop.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/detail/funop.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/detail/funop.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -13,7 +13,7 @@
     template<typename Expr BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_ITERATION(), typename A)>
     struct BOOST_PP_CAT(funop, BOOST_PP_ITERATION())
     {
- typedef expr<
+ typedef proto::expr<
             tag::function
           , BOOST_PP_CAT(args, BOOST_PP_INC(BOOST_PP_ITERATION()))<
                 ref_<Expr>

Modified: branches/fix-links/boost/xpressive/proto/expr.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/expr.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/expr.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -172,7 +172,7 @@
             typedef void proto_is_expr_;
             typedef expr proto_derived_expr;
 
- BOOST_PROTO_IDENTITY_TRANSFORM();
+ //BOOST_PROTO_IDENTITY_TRANSFORM();
             BOOST_PP_REPEAT(ARG_COUNT, BOOST_PROTO_ARG, ~)
             BOOST_PP_REPEAT_FROM_TO(ARG_COUNT, BOOST_PROTO_MAX_ARITY, BOOST_PROTO_VOID, ~)
 
@@ -255,20 +255,20 @@
             /// \param a The rhs.
             /// \return A new \c expr\<\> node representing an assignment of \c a to \c *this.
             template<typename A>
- expr<tag::assign, args2<ref_<expr const>, typename result_of::as_arg<A>::type> > const
+ proto::expr<tag::assign, args2<ref_<expr const>, typename result_of::as_arg<A>::type> > const
             operator =(A &a) const
             {
- expr<tag::assign, args2<ref_<expr const>, typename result_of::as_arg<A>::type> > that = {{*this}, proto::as_arg(a)};
+ proto::expr<tag::assign, args2<ref_<expr const>, typename result_of::as_arg<A>::type> > that = {{*this}, proto::as_arg(a)};
                 return that;
             }
 
             /// \overload
             ///
             template<typename A>
- expr<tag::assign, args2<ref_<expr const>, typename result_of::as_arg<A const>::type> > const
+ proto::expr<tag::assign, args2<ref_<expr const>, typename result_of::as_arg<A const>::type> > const
             operator =(A const &a) const
             {
- expr<tag::assign, args2<ref_<expr const>, typename result_of::as_arg<A const>::type> > that = {{*this}, proto::as_arg(a)};
+ proto::expr<tag::assign, args2<ref_<expr const>, typename result_of::as_arg<A const>::type> > that = {{*this}, proto::as_arg(a)};
                 return that;
             }
 
@@ -276,20 +276,20 @@
             /// \overload
             ///
             template<typename A>
- expr<tag::assign, args2<ref_<expr>, typename result_of::as_arg<A>::type> > const
+ proto::expr<tag::assign, args2<ref_<expr>, typename result_of::as_arg<A>::type> > const
             operator =(A &a)
             {
- expr<tag::assign, args2<ref_<expr>, typename result_of::as_arg<A>::type> > that = {{*this}, proto::as_arg(a)};
+ proto::expr<tag::assign, args2<ref_<expr>, typename result_of::as_arg<A>::type> > that = {{*this}, proto::as_arg(a)};
                 return that;
             }
 
             /// \overload
             ///
             template<typename A>
- expr<tag::assign, args2<ref_<expr>, typename result_of::as_arg<A const>::type> > const
+ proto::expr<tag::assign, args2<ref_<expr>, typename result_of::as_arg<A const>::type> > const
             operator =(A const &a)
             {
- expr<tag::assign, args2<ref_<expr>, typename result_of::as_arg<A const>::type> > that = {{*this}, proto::as_arg(a)};
+ proto::expr<tag::assign, args2<ref_<expr>, typename result_of::as_arg<A const>::type> > that = {{*this}, proto::as_arg(a)};
                 return that;
             }
         #endif
@@ -299,20 +299,20 @@
             /// \param a The rhs.
             /// \return A new \c expr\<\> node representing \c *this subscripted with \c a.
             template<typename A>
- expr<tag::subscript, args2<ref_<expr const>, typename result_of::as_arg<A>::type> > const
+ proto::expr<tag::subscript, args2<ref_<expr const>, typename result_of::as_arg<A>::type> > const
             operator [](A &a) const
             {
- expr<tag::subscript, args2<ref_<expr const>, typename result_of::as_arg<A>::type> > that = {{*this}, proto::as_arg(a)};
+ proto::expr<tag::subscript, args2<ref_<expr const>, typename result_of::as_arg<A>::type> > that = {{*this}, proto::as_arg(a)};
                 return that;
             }
 
             /// \overload
             ///
             template<typename A>
- expr<tag::subscript, args2<ref_<expr const>, typename result_of::as_arg<A const>::type> > const
+ proto::expr<tag::subscript, args2<ref_<expr const>, typename result_of::as_arg<A const>::type> > const
             operator [](A const &a) const
             {
- expr<tag::subscript, args2<ref_<expr const>, typename result_of::as_arg<A const>::type> > that = {{*this}, proto::as_arg(a)};
+ proto::expr<tag::subscript, args2<ref_<expr const>, typename result_of::as_arg<A const>::type> > that = {{*this}, proto::as_arg(a)};
                 return that;
             }
 
@@ -320,20 +320,20 @@
             /// \overload
             ///
             template<typename A>
- expr<tag::subscript, args2<ref_<expr>, typename result_of::as_arg<A>::type> > const
+ proto::expr<tag::subscript, args2<ref_<expr>, typename result_of::as_arg<A>::type> > const
             operator [](A &a)
             {
- expr<tag::subscript, args2<ref_<expr>, typename result_of::as_arg<A>::type> > that = {{*this}, proto::as_arg(a)};
+ proto::expr<tag::subscript, args2<ref_<expr>, typename result_of::as_arg<A>::type> > that = {{*this}, proto::as_arg(a)};
                 return that;
             }
 
             /// \overload
             ///
             template<typename A>
- expr<tag::subscript, args2<ref_<expr>, typename result_of::as_arg<A const>::type> > const
+ proto::expr<tag::subscript, args2<ref_<expr>, typename result_of::as_arg<A const>::type> > const
             operator [](A const &a)
             {
- expr<tag::subscript, args2<ref_<expr>, typename result_of::as_arg<A const>::type> > that = {{*this}, proto::as_arg(a)};
+ proto::expr<tag::subscript, args2<ref_<expr>, typename result_of::as_arg<A const>::type> > that = {{*this}, proto::as_arg(a)};
                 return that;
             }
         #endif
@@ -349,20 +349,20 @@
             /// Function call
             ///
             /// \return A new \c expr\<\> node representing the function invocation of \c (*this)().
- expr<tag::function, args1<ref_<expr const> > > const
+ proto::expr<tag::function, args1<ref_<expr const> > > const
             operator ()() const
             {
- expr<tag::function, args1<ref_<expr const> > > that = {{*this}};
+ proto::expr<tag::function, args1<ref_<expr const> > > that = {{*this}};
                 return that;
             }
 
         #if IS_TERMINAL
             /// \overload
             ///
- expr<tag::function, args1<ref_<expr> > > const
+ proto::expr<tag::function, args1<ref_<expr> > > const
             operator ()()
             {
- expr<tag::function, args1<ref_<expr> > > that = {{*this}};
+ proto::expr<tag::function, args1<ref_<expr> > > that = {{*this}};
                 return that;
             }
         #endif

Modified: branches/fix-links/boost/xpressive/proto/fusion.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/fusion.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/fusion.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,88 +1,162 @@
 ///////////////////////////////////////////////////////////////////////////////
 /// \file fusion.hpp
-/// Make any Proto parse tree a valid Fusion sequence
+/// Make any Proto expression a valid Fusion sequence
 //
 // Copyright 2007 Eric Niebler. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
-#ifndef BOOST_PROTO_FUSION_HPP_EAN_04_29_2006
-#define BOOST_PROTO_FUSION_HPP_EAN_04_29_2006
+#ifndef BOOST_PROTO_FUSION_HPP_EAN_11_04_2006
+#define BOOST_PROTO_FUSION_HPP_EAN_11_04_2006
 
 #include <boost/xpressive/proto/detail/prefix.hpp>
-#include <boost/xpressive/proto/proto.hpp>
-#include <boost/mpl/if.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/mpl/deref.hpp>
-#include <boost/mpl/advance.hpp>
-#include <boost/mpl/distance.hpp>
-#include <boost/mpl/begin_end.hpp>
-#include <boost/mpl/next_prior.hpp>
-#include <boost/type_traits/remove_const.hpp>
 #include <boost/type_traits/remove_reference.hpp>
+#include <boost/mpl/long.hpp>
 #include <boost/fusion/include/is_view.hpp>
 #include <boost/fusion/include/tag_of_fwd.hpp>
 #include <boost/fusion/include/category_of.hpp>
 #include <boost/fusion/include/iterator_base.hpp>
-#include <boost/fusion/include/mpl.hpp>
 #include <boost/fusion/include/intrinsic.hpp>
+#include <boost/fusion/include/pop_front.hpp>
+#include <boost/fusion/include/reverse.hpp>
 #include <boost/fusion/include/single_view.hpp>
 #include <boost/fusion/include/transform_view.hpp>
 #include <boost/fusion/support/ext_/is_segmented.hpp>
 #include <boost/fusion/sequence/intrinsic/ext_/segments.hpp>
 #include <boost/fusion/sequence/intrinsic/ext_/size_s.hpp>
 #include <boost/fusion/view/ext_/segmented_iterator.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+#include <boost/xpressive/proto/traits.hpp>
+#include <boost/xpressive/proto/eval.hpp>
 #include <boost/xpressive/proto/detail/suffix.hpp>
 
-#define UNREF(x) typename remove_reference<x>::type
-#define UNCVREF(x) typename remove_cv<typename remove_reference<x>::type>::type
-
 namespace boost { namespace proto
 {
+
+/// INTERNAL MACRO
+///
+#define UNREF(x) typename boost::remove_reference<x>::type
+
     namespace detail
     {
- template<typename Expr, int Pos>
- struct ref_iterator
- : fusion::iterator_base<ref_iterator<Expr, Pos> >
+
+ template<typename Expr, long Pos>
+ struct expr_iterator
+ : fusion::iterator_base<expr_iterator<Expr, Pos> >
         {
             typedef Expr expr_type;
- typedef mpl::long_<Pos> index;
- typedef fusion::forward_traversal_tag category;
- typedef tag::proto_ref_iterator fusion_tag;
+ static long const index = Pos;
+ typedef fusion::random_access_traversal_tag category;
+ typedef tag::proto_expr_iterator fusion_tag;
 
- ref_iterator(Expr const &expr)
- : expr_(expr)
+ expr_iterator(Expr const &e)
+ : expr(e)
             {}
 
- Expr expr_;
+ Expr const &expr;
         };
+
     }
 
     template<typename Expr>
- struct children
- : proto::ref_<Expr>
+ struct flat_view
     {
- children(Expr &expr)
- : proto::ref_<Expr>(proto::ref_<Expr>::make(expr))
+ typedef Expr expr_type;
+ typedef typename Expr::proto_tag proto_tag;
+ typedef fusion::forward_traversal_tag category;
+ typedef tag::proto_flat_view fusion_tag;
+
+ explicit flat_view(Expr &expr)
+ : expr_(expr)
         {}
+
+ Expr &expr_;
     };
 
- template<typename Expr>
- children<Expr> children_of(Expr &expr)
+ namespace functional
     {
- return children<Expr>(expr);
+ struct flatten
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr>
+ struct result<This(Expr)>
+ {
+ typedef flat_view<UNREF(Expr) const> type;
+ };
+
+ template<typename Expr>
+ flat_view<Expr const> operator ()(Expr const &expr) const
+ {
+ return flat_view<Expr const>(expr);
+ }
+ };
+
+ struct pop_front
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr>
+ struct result<This(Expr)>
+ : fusion::result_of::pop_front<UNREF(Expr) const>
+ {};
+
+ template<typename Expr>
+ typename fusion::result_of::pop_front<Expr const>::type
+ operator ()(Expr const &expr) const
+ {
+ return fusion::pop_front(expr);
+ }
+ };
+
+ struct reverse
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr>
+ struct result<This(Expr)>
+ : fusion::result_of::reverse<UNREF(Expr) const>
+ {};
+
+ template<typename Expr>
+ typename fusion::result_of::reverse<Expr const>::type
+ operator ()(Expr const &expr) const
+ {
+ return fusion::reverse(expr);
+ }
+ };
+
     }
 
+ template<>
+ struct is_callable<functional::flatten>
+ : mpl::true_
+ {};
+
+ template<>
+ struct is_callable<functional::pop_front>
+ : mpl::true_
+ {};
+
+ template<>
+ struct is_callable<functional::reverse>
+ : mpl::true_
+ {};
+
+ functional::flatten const flatten = {};
+
     template<typename Context>
     struct eval_fun
     {
- eval_fun(Context &ctx)
+ explicit eval_fun(Context &ctx)
           : ctx_(ctx)
         {}
 
         template<typename Sig>
- struct result {};
+ struct result;
 
         template<typename This, typename Expr>
         struct result<This(Expr)>
@@ -91,7 +165,7 @@
 
         template<typename Expr>
         typename proto::result_of::eval<Expr, Context>::type
- operator()(Expr &expr) const
+ operator ()(Expr &expr) const
         {
             return proto::eval(expr, this->ctx_);
         }
@@ -103,13 +177,15 @@
 
 namespace boost { namespace fusion
 {
+
     namespace extension
     {
+
         template<typename Tag>
         struct is_view_impl;
 
         template<>
- struct is_view_impl<proto::tag::proto_ref>
+ struct is_view_impl<proto::tag::proto_flat_view>
         {
             template<typename Iterator>
             struct apply
@@ -130,11 +206,14 @@
         struct value_of_impl;
 
         template<>
- struct value_of_impl<proto::tag::proto_ref_iterator>
+ struct value_of_impl<proto::tag::proto_expr_iterator>
         {
             template<typename Iterator>
             struct apply
- : proto::result_of::arg<typename Iterator::expr_type, typename Iterator::index>
+ : proto::result_of::arg_c<
+ typename Iterator::expr_type
+ , Iterator::index
+ >
             {};
         };
 
@@ -142,19 +221,21 @@
         struct deref_impl;
 
         template<>
- struct deref_impl<proto::tag::proto_ref_iterator>
+ struct deref_impl<proto::tag::proto_expr_iterator>
         {
             template<typename Iterator>
             struct apply
             {
- typedef typename proto::result_of::arg<
- typename Iterator::expr_type
- , typename Iterator::index
- >::type const &type;
+ typedef
+ typename proto::result_of::arg_c<
+ typename Iterator::expr_type const
+ , Iterator::index
+ >::type const &
+ type;
 
                 static type call(Iterator const &iter)
                 {
- return proto::arg<typename Iterator::index>(iter.expr_);
+ return proto::arg_c<Iterator::index>(iter.expr);
                 }
             };
         };
@@ -163,19 +244,21 @@
         struct advance_impl;
 
         template<>
- struct advance_impl<proto::tag::proto_ref_iterator>
+ struct advance_impl<proto::tag::proto_expr_iterator>
         {
             template<typename Iterator, typename N>
             struct apply
             {
- typedef typename proto::detail::ref_iterator<
- typename Iterator::expr_type
- , Iterator::index::value + N::value
- > type;
+ typedef
+ typename proto::detail::expr_iterator<
+ typename Iterator::expr_type
+ , Iterator::index + N::value
+ >
+ type;
 
                 static type call(Iterator const &iter)
                 {
- return type(iter.expr_);
+ return type(iter.expr);
                 }
             };
         };
@@ -184,11 +267,11 @@
         struct distance_impl;
 
         template<>
- struct distance_impl<proto::tag::proto_ref_iterator>
+ struct distance_impl<proto::tag::proto_expr_iterator>
         {
             template<typename IteratorFrom, typename IteratorTo>
             struct apply
- : mpl::long_<IteratorTo::index::value - IteratorFrom::index::value>
+ : mpl::long_<IteratorTo::index - IteratorFrom::index>
             {};
         };
 
@@ -196,11 +279,11 @@
         struct next_impl;
 
         template<>
- struct next_impl<proto::tag::proto_ref_iterator>
+ struct next_impl<proto::tag::proto_expr_iterator>
         {
             template<typename Iterator>
             struct apply
- : advance_impl<proto::tag::proto_ref_iterator>::template apply<Iterator, mpl::long_<1> >
+ : advance_impl<proto::tag::proto_expr_iterator>::template apply<Iterator, mpl::long_<1> >
             {};
         };
 
@@ -208,11 +291,11 @@
         struct prior_impl;
 
         template<>
- struct prior_impl<proto::tag::proto_ref_iterator>
+ struct prior_impl<proto::tag::proto_expr_iterator>
         {
             template<typename Iterator>
             struct apply
- : advance_impl<proto::tag::proto_ref_iterator>::template apply<Iterator, mpl::long_<-1> >
+ : advance_impl<proto::tag::proto_expr_iterator>::template apply<Iterator, mpl::long_<-1> >
             {};
         };
 
@@ -220,7 +303,7 @@
         struct category_of_impl;
 
         template<>
- struct category_of_impl<proto::tag::proto_ref>
+ struct category_of_impl<proto::tag::proto_expr>
         {
             template<typename Sequence>
             struct apply
@@ -233,11 +316,11 @@
         struct size_impl;
 
         template<>
- struct size_impl<proto::tag::proto_ref>
+ struct size_impl<proto::tag::proto_expr>
         {
             template<typename Sequence>
             struct apply
- : Sequence::proto_arity
+ : mpl::long_<0 == Sequence::proto_arity::value ? 1 : Sequence::proto_arity::value>
             {};
         };
 
@@ -245,14 +328,14 @@
         struct begin_impl;
 
         template<>
- struct begin_impl<proto::tag::proto_ref>
+ struct begin_impl<proto::tag::proto_expr>
         {
             template<typename Sequence>
             struct apply
             {
- typedef proto::detail::ref_iterator<Sequence const, 0> type;
+ typedef proto::detail::expr_iterator<Sequence, 0> type;
 
- static type call(Sequence& seq)
+ static type call(Sequence const &seq)
                 {
                     return type(seq);
                 }
@@ -263,14 +346,19 @@
         struct end_impl;
 
         template<>
- struct end_impl<proto::tag::proto_ref>
+ struct end_impl<proto::tag::proto_expr>
         {
             template<typename Sequence>
             struct apply
             {
- typedef proto::detail::ref_iterator<Sequence const, Sequence::proto_arity::value> type;
+ typedef
+ proto::detail::expr_iterator<
+ Sequence
+ , 0 == Sequence::proto_arity::value ? 1 : Sequence::proto_arity::value
+ >
+ type;
 
- static type call(Sequence& seq)
+ static type call(Sequence const &seq)
                 {
                     return type(seq);
                 }
@@ -281,29 +369,28 @@
         struct value_at_impl;
 
         template<>
- struct value_at_impl<proto::tag::proto_ref>
+ struct value_at_impl<proto::tag::proto_expr>
         {
- template<typename Sequence, typename N>
+ template<typename Sequence, typename Index>
             struct apply
- {
- typedef typename proto::result_of::arg<Sequence, N>::type type;
- };
+ : proto::result_of::arg_c<Sequence, Index::value>
+ {};
         };
 
         template<typename Tag>
         struct at_impl;
 
         template<>
- struct at_impl<proto::tag::proto_ref>
+ struct at_impl<proto::tag::proto_expr>
         {
- template<typename Sequence, typename N>
+ template<typename Sequence, typename Index>
             struct apply
             {
- typedef typename proto::result_of::arg<Sequence, N>::type const &type;
+ typedef typename proto::result_of::arg_c<Sequence, Index::value>::type const &type;
 
                 static type call(Sequence &seq)
                 {
- return proto::arg_c<N::value>(seq);
+ return proto::arg_c<Index::value>(seq);
                 }
             };
         };
@@ -312,7 +399,7 @@
         struct is_segmented_impl;
 
         template<>
- struct is_segmented_impl<proto::tag::proto_expr>
+ struct is_segmented_impl<proto::tag::proto_flat_view>
         {
             template<typename Iterator>
             struct apply
@@ -324,22 +411,22 @@
         struct as_element
         {
             template<typename Sig>
- struct result {};
+ struct result;
 
             template<typename This, typename Expr>
             struct result<This(Expr)>
               : mpl::if_<
                     is_same<Tag, UNREF(Expr)::proto_tag>
- , UNCVREF(Expr) const &
- , fusion::single_view<UNCVREF(Expr) const &>
+ , proto::flat_view<UNREF(Expr) const>
+ , fusion::single_view<UNREF(Expr) const &>
>
             {};
 
             template<typename Expr>
- typename result<as_element(Expr)>::type
- operator()(Expr &expr) const
+ typename result<as_element(Expr const &)>::type
+ operator ()(Expr const &expr) const
             {
- return typename result<as_element(Expr)>::type(expr);
+ return typename result<as_element(Expr const &)>::type(expr);
             }
         };
 
@@ -347,7 +434,7 @@
         struct segments_impl;
 
         template<>
- struct segments_impl<proto::tag::proto_expr>
+ struct segments_impl<proto::tag::proto_flat_view>
         {
             template<typename Sequence>
             struct apply
@@ -355,20 +442,19 @@
                 typedef typename Sequence::proto_tag proto_tag;
 
                 typedef fusion::transform_view<
- proto::ref_<Sequence>
+ typename Sequence::expr_type
                   , as_element<proto_tag>
> type;
 
                 static type call(Sequence &sequence)
                 {
- proto::ref_<Sequence> r = {sequence};
- return type(r, as_element<proto_tag>());
+ return type(sequence.expr_, as_element<proto_tag>());
                 }
             };
         };
 
         template<>
- struct category_of_impl<proto::tag::proto_expr>
+ struct category_of_impl<proto::tag::proto_flat_view>
         {
             template<typename Sequence>
             struct apply
@@ -378,7 +464,7 @@
         };
 
         template<>
- struct begin_impl<proto::tag::proto_expr>
+ struct begin_impl<proto::tag::proto_flat_view>
         {
             template<typename Sequence>
             struct apply
@@ -387,7 +473,7 @@
         };
 
         template<>
- struct end_impl<proto::tag::proto_expr>
+ struct end_impl<proto::tag::proto_flat_view>
         {
             template<typename Sequence>
             struct apply
@@ -396,159 +482,18 @@
         };
 
         template<>
- struct size_impl<proto::tag::proto_expr>
+ struct size_impl<proto::tag::proto_flat_view>
         {
             template<typename Sequence>
             struct apply
               : fusion::segmented_size<Sequence>
             {};
         };
+
     }
-}}
 
-//namespace boost { namespace mpl
-//{
- //template<>
- //struct begin_impl<proto::tag::proto_expr>
- //{
- // template<typename Sequence>
- // struct apply
- // : begin_impl<typename sequence_tag<typename Sequence::proto_args>::type>
- // ::template apply<typename Sequence::proto_args>
- // {};
- //};
-
- //template<>
- //struct end_impl<proto::tag::proto_expr>
- //{
- // template<typename Sequence>
- // struct apply
- // : end_impl<typename sequence_tag<typename Sequence::proto_args>::type>
- // ::template apply<typename Sequence::proto_args>
- // {};
- //};
-
- //template<>
- //struct size_impl<proto::tag::proto_expr>
- //{
- // template<typename Sequence>
- // struct apply
- // {
- // typedef typename Sequence::proto_arity type;
- // };
- //};
-
- //template<>
- //struct at_impl<proto::tag::proto_expr>
- //{
- // template<typename Sequence, typename N>
- // struct apply
- // : at_impl<typename sequence_tag<typename Sequence::proto_args>::type>
- // ::template apply<typename Sequence::proto_args, N>
- // {};
- //};
-
-
- //template<>
- //struct begin_impl<proto::tag::proto_ref>
- //{
- // template<typename Sequence>
- // struct apply
- // : begin_impl<typename sequence_tag<typename Sequence::proto_args>::type>
- // ::template apply<typename Sequence::proto_args>
- // {};
- //};
-
- //template<>
- //struct end_impl<proto::tag::proto_ref>
- //{
- // template<typename Sequence>
- // struct apply
- // : end_impl<typename sequence_tag<typename Sequence::proto_args>::type>
- // ::template apply<typename Sequence::proto_args>
- // {};
- //};
-
- //template<>
- //struct size_impl<proto::tag::proto_ref>
- //{
- // template<typename Sequence>
- // struct apply
- // {
- // typedef typename Sequence::proto_arity type;
- // };
- //};
-
- //template<>
- //struct at_impl<proto::tag::proto_ref>
- //{
- // template<typename Sequence, typename N>
- // struct apply
- // : at_impl<typename sequence_tag<typename Sequence::proto_args>::type>
- // ::template apply<typename Sequence::proto_args, N>
- // {};
- //};
-
-
-//}} // namespace boost::mpl
-
-//namespace boost { namespace mpl
-//{
-// template<typename Tag, typename Args, long Arity>
-// struct sequence_tag<proto::expr<Tag, Args, Arity> >
-// {
-// typedef proto::tag::proto_expr type;
-// };
-//
-// template<typename Expr>
-// struct sequence_tag<proto::ref_<Expr> >
-// {
-// typedef proto::tag::proto_expr type;
-// };
-//
-// template<>
-// struct begin_impl<proto::tag::proto_expr>
-// {
-// template<typename Sequence>
-// struct apply
-// : begin_impl<typename sequence_tag<typename Sequence::proto_args>::type>
-// ::template apply<typename Sequence::proto_args>
-// {};
-// };
-//
-// template<>
-// struct end_impl<proto::tag::proto_expr>
-// {
-// template<typename Sequence>
-// struct apply
-// : end_impl<typename sequence_tag<typename Sequence::proto_args>::type>
-// ::template apply<typename Sequence::proto_args>
-// {};
-// };
-//
-// template<>
-// struct size_impl<proto::tag::proto_expr>
-// {
-// template<typename Sequence>
-// struct apply
-// {
-// typedef typename Sequence::proto_arity type;
-// };
-// };
-//
-// template<>
-// struct at_impl<proto::tag::proto_expr>
-// {
-// template<typename Sequence, typename N>
-// struct apply
-// : at_impl<typename sequence_tag<typename Sequence::proto_args>::type>
-// ::template apply<typename Sequence::proto_args, N>
-// {};
-// };
-//
-//}} // namespace boost::mpl
+}}
 
 #undef UNREF
-#undef UNCVREF
 
 #endif

Modified: branches/fix-links/boost/xpressive/proto/generate.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/generate.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/generate.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -45,7 +45,7 @@
             struct arity_;
 
             template<typename Tag, typename Args, long N>
- struct arity_<expr<Tag, Args, N> >
+ struct arity_<proto::expr<Tag, Args, N> >
               : mpl::long_<N>
             {};
 
@@ -53,7 +53,7 @@
             struct tag_;
 
             template<typename Tag, typename Args, long N>
- struct tag_<expr<Tag, Args, N> >
+ struct tag_<proto::expr<Tag, Args, N> >
             {
                 typedef Tag type;
             };
@@ -62,7 +62,7 @@
             struct args_;
 
             template<typename Tag, typename Args, long N>
- struct args_<expr<Tag, Args, N> >
+ struct args_<proto::expr<Tag, Args, N> >
             {
                 typedef Args type;
             };
@@ -163,7 +163,7 @@
             template<typename Expr>
             struct by_value_generator_<Expr, N>
             {
- typedef expr<
+ typedef proto::expr<
                     typename tag_<Expr>::type
                   , BOOST_PP_CAT(args, N)<
                         // typename result_of::unref<typename args_<Expr>::type::arg0>::type, ...

Modified: branches/fix-links/boost/xpressive/proto/make_expr.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/make_expr.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/make_expr.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -20,7 +20,7 @@
     #include <boost/preprocessor/arithmetic/dec.hpp>
     #include <boost/preprocessor/arithmetic/sub.hpp>
     #include <boost/preprocessor/punctuation/comma_if.hpp>
- #include <boost/preprocessor/iterate.hpp>
+ #include <boost/preprocessor/iteration/iterate.hpp>
     #include <boost/preprocessor/facilities/intercept.hpp>
     #include <boost/preprocessor/comparison/greater.hpp>
     #include <boost/preprocessor/tuple/elem.hpp>
@@ -77,6 +77,14 @@
     #endif
     #include <boost/xpressive/proto/detail/suffix.hpp>
 
+ namespace boost { namespace fusion
+ {
+ template<typename Function>
+ class unfused_generic;
+ }}
+
+ namespace boost { namespace proto
+ {
     /// INTERNAL ONLY
     ///
     #define BOOST_PROTO_AS_ARG_TYPE(Z, N, DATA) \
@@ -332,14 +340,6 @@
         ) \
         /**/
 
- namespace boost { namespace fusion
- {
- template<typename Function>
- class unfused_generic;
- }}
-
- namespace boost { namespace proto
- {
         namespace detail
         {
             template<
@@ -379,7 +379,7 @@
             template<typename Domain, typename Sequence>
             struct unpack_expr_<tag::terminal, Domain, Sequence, 1u>
             {
- typedef expr<
+ typedef proto::expr<
                     tag::terminal
                   , args0<typename fusion_::result_of::value_at_c<Sequence, 0>::type>
> expr_type;
@@ -416,7 +416,7 @@
                 BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, void BOOST_PP_INTERCEPT)>
             {
                 typedef typename add_reference<A>::type reference;
- typedef expr<tag::terminal, args0<reference> > expr_type;
+ typedef proto::expr<tag::terminal, args0<reference> > expr_type;
                 typedef typename Domain::template apply<expr_type>::type type;
 
                 static type const call(reference a)
@@ -513,6 +513,8 @@
             template<typename Tag, typename Domain>
             struct make_expr
             {
+ BOOST_PROTO_CALLABLE()
+
                 template<typename Sig>
                 struct result
                 {};
@@ -534,6 +536,8 @@
             template<typename Domain>
             struct make_expr<tag::terminal, Domain>
             {
+ BOOST_PROTO_CALLABLE()
+
                 template<typename Sig>
                 struct result
                 {};
@@ -561,6 +565,8 @@
             template<typename Tag, typename Domain>
             struct unpack_expr
             {
+ BOOST_PROTO_CALLABLE()
+
                 template<typename Sig>
                 struct result
                 {};
@@ -585,6 +591,8 @@
             template<typename Tag, typename Domain>
             struct unfused_expr_fun
             {
+ BOOST_PROTO_CALLABLE()
+
                 template<typename Sequence>
                 struct result
                   : result_of::unpack_expr<Tag, Domain, Sequence>
@@ -601,7 +609,9 @@
             template<typename Tag, typename Domain>
             struct unfused_expr
               : fusion::unfused_generic<unfused_expr_fun<Tag, Domain> >
- {};
+ {
+ BOOST_PROTO_CALLABLE()
+ };
         }
 
         /// unpack_expr
@@ -651,6 +661,22 @@
         /**/
 
     #include BOOST_PP_ITERATE()
+
+ template<typename Tag, typename Domain>
+ struct is_callable<functional::make_expr<Tag, Domain> >
+ : mpl::true_
+ {};
+
+ template<typename Tag, typename Domain>
+ struct is_callable<functional::unpack_expr<Tag, Domain> >
+ : mpl::true_
+ {};
+
+ template<typename Tag, typename Domain>
+ struct is_callable<functional::unfused_expr<Tag, Domain> >
+ : mpl::true_
+ {};
+
     }}
 
     #undef BOOST_PROTO_AT
@@ -669,7 +695,7 @@
         struct make_expr_<Tag, Domain BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
             BOOST_PP_ENUM_TRAILING_PARAMS(M, void BOOST_PP_INTERCEPT), void>
         {
- typedef expr<
+ typedef proto::expr<
                 Tag
               , BOOST_PP_CAT(args, N)<BOOST_PP_ENUM(N, BOOST_PROTO_AS_ARG_TYPE, (A, Domain)) >
> expr_type;
@@ -688,7 +714,7 @@
         template<typename Tag, typename Domain, typename Sequence>
         struct unpack_expr_<Tag, Domain, Sequence, N>
         {
- typedef expr<
+ typedef proto::expr<
                 Tag
               , BOOST_PP_CAT(args, N)<
                     BOOST_PP_ENUM(N, BOOST_PROTO_AS_ARG_AT_TYPE, (Sequence const, Domain))

Modified: branches/fix-links/boost/xpressive/proto/matches.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/matches.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/matches.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -12,6 +12,7 @@
     #define BOOST_PROTO_MATCHES_HPP_EAN_11_03_2006
 
     #include <boost/xpressive/proto/detail/prefix.hpp> // must be first include
+ #include <boost/detail/workaround.hpp>
     #include <boost/preprocessor/cat.hpp>
     #include <boost/preprocessor/arithmetic/dec.hpp>
     #include <boost/preprocessor/arithmetic/sub.hpp>
@@ -35,6 +36,7 @@
     #include <boost/type_traits/is_pointer.hpp>
     #include <boost/xpressive/proto/proto_fwd.hpp>
     #include <boost/xpressive/proto/traits.hpp>
+ #include <boost/xpressive/proto/transform/when.hpp>
     #include <boost/xpressive/proto/detail/suffix.hpp> // must be last include
 
     // Some compilers (like GCC) need extra help figuring out a template's arity.
@@ -59,10 +61,10 @@
 
         namespace detail
         {
- struct _;
+ struct ignore;
 
             template<typename Expr, typename Grammar>
- struct matches_impl;
+ struct matches_;
 
             // and_ and or_ implementation
             template<bool B, typename Expr, typename G0>
@@ -83,6 +85,26 @@
             template<typename And>
             struct last;
 
+ template<typename T, typename U>
+ struct array_matches
+ : mpl::false_
+ {};
+
+ template<typename T, std::size_t M>
+ struct array_matches<T[M], T *>
+ : mpl::true_
+ {};
+
+ template<typename T, std::size_t M>
+ struct array_matches<T[M], T const *>
+ : mpl::true_
+ {};
+
+ template<typename T, std::size_t M>
+ struct array_matches<T[M], T[proto::N]>
+ : mpl::true_
+ {};
+
             template<typename T, typename U
                 BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(long Arity = mpl::aux::template_arity<U>::value)
>
@@ -100,6 +122,16 @@
               : mpl::true_
             {};
 
+ template<typename T, std::size_t M, typename U>
+ struct lambda_matches<T[M], U BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(-1)>
+ : array_matches<T[M], U>
+ {};
+
+ template<typename T, std::size_t M>
+ struct lambda_matches<T[M], T[M] BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(-1)>
+ : mpl::true_
+ {};
+
             template<template<typename> class T, typename Expr0, typename Grammar0>
             struct lambda_matches<T<Expr0>, T<Grammar0> BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(1) >
               : lambda_matches<Expr0, Grammar0>
@@ -117,13 +149,13 @@
 
             template<typename Args1, typename Args2, typename Back>
             struct vararg_matches<Args1, Args2, Back, true, true, typename Back::proto_is_vararg_>
- : matches_impl<expr<_, Args1, Args1::size>, expr<_, Args2, Args1::size> >
+ : matches_<proto::expr<ignore, Args1, Args1::size>, proto::expr<ignore, Args2, Args1::size> >
             {};
 
             template<typename Args1, typename Args2, typename Back>
             struct vararg_matches<Args1, Args2, Back, true, false, typename Back::proto_is_vararg_>
               : and2<
- matches_impl<expr<_, Args1, Args2::size>, expr<_, Args2, Args2::size> >::value
+ matches_<proto::expr<ignore, Args1, Args2::size>, proto::expr<ignore, Args2, Args2::size> >::value
                   , vararg_matches_impl<Args1, typename Back::proto_base_expr, Args2::size + 1, Args1::size>
>
             {};
@@ -254,55 +286,55 @@
               : is_convertible<T, U>
             {};
 
- // matches_impl
+ // matches_
             template<typename Expr, typename Grammar>
- struct matches_impl
+ struct matches_
               : mpl::false_
             {};
 
             template<typename Expr>
- struct matches_impl< Expr, proto::_ >
+ struct matches_< Expr, proto::_ >
               : mpl::true_
             {};
 
             template<typename Tag, typename Args1, long N1, typename Args2, long N2>
- struct matches_impl< expr<Tag, Args1, N1>, expr<Tag, Args2, N2> >
+ struct matches_< proto::expr<Tag, Args1, N1>, proto::expr<Tag, Args2, N2> >
               : vararg_matches< Args1, Args2, typename Args2::back_, (N1+2 > N2), (N2 > N1) >
             {};
 
             template<typename Tag, typename Args1, long N1, typename Args2, long N2>
- struct matches_impl< expr<Tag, Args1, N1>, expr<proto::_, Args2, N2> >
+ struct matches_< proto::expr<Tag, Args1, N1>, proto::expr<proto::_, Args2, N2> >
               : vararg_matches< Args1, Args2, typename Args2::back_, (N1+2 > N2), (N2 > N1) >
             {};
 
             template<typename Args1, typename Args2, long N2>
- struct matches_impl< expr<tag::terminal, Args1, 0>, expr<proto::_, Args2, N2> >
+ struct matches_< proto::expr<tag::terminal, Args1, 0>, proto::expr<proto::_, Args2, N2> >
               : mpl::false_
             {};
 
             template<typename Tag, typename Args1, typename Args2>
- struct matches_impl< expr<Tag, Args1, 1>, expr<Tag, Args2, 1> >
- : matches_impl<typename Args1::arg0::proto_base_expr, typename Args2::arg0::proto_base_expr>
+ struct matches_< proto::expr<Tag, Args1, 1>, proto::expr<Tag, Args2, 1> >
+ : matches_<typename Args1::arg0::proto_base_expr, typename Args2::arg0::proto_base_expr>
             {};
 
             template<typename Tag, typename Args1, typename Args2>
- struct matches_impl< expr<Tag, Args1, 1>, expr<proto::_, Args2, 1> >
- : matches_impl<typename Args1::arg0::proto_base_expr, typename Args2::arg0::proto_base_expr>
+ struct matches_< proto::expr<Tag, Args1, 1>, proto::expr<proto::_, Args2, 1> >
+ : matches_<typename Args1::arg0::proto_base_expr, typename Args2::arg0::proto_base_expr>
             {};
 
             template<typename Args1, typename Args2>
- struct matches_impl< expr<tag::terminal, Args1, 0>, expr<tag::terminal, Args2, 0> >
+ struct matches_< proto::expr<tag::terminal, Args1, 0>, proto::expr<tag::terminal, Args2, 0> >
               : terminal_matches<typename Args1::arg0, typename Args2::arg0>
             {};
 
         #define BOOST_PROTO_MATCHES_N_FUN(z, n, data)\
- matches_impl<\
+ matches_<\
                 typename Args1::BOOST_PP_CAT(arg, n)::proto_base_expr\
               , typename Args2::BOOST_PP_CAT(arg, n)::proto_base_expr\
>
 
         #define BOOST_PROTO_DEFINE_MATCHES(z, n, data)\
- matches_impl<\
+ matches_<\
                 typename Expr::proto_base_expr\
               , typename BOOST_PP_CAT(G, n)::proto_base_expr\
>
@@ -328,21 +360,30 @@
         #undef BOOST_PROTO_DEFINE_LAMBDA_MATCHES
 
             // handle proto::if_
- template<typename Expr, typename Condition>
- struct matches_impl<Expr, if_<Condition> >
- : mpl::apply1<Condition, Expr>::type
+ template<typename Expr, typename If, typename Then, typename Else>
+ struct matches_<Expr, proto::if_<If, Then, Else> >
+ : mpl::eval_if<
+ typename when<_, If>::template result<void(Expr, mpl::void_, mpl::void_)>::type
+ , matches_<Expr, typename Then::proto_base_expr>
+ , matches_<Expr, typename Else::proto_base_expr>
+ >::type
+ {};
+
+ template<typename Expr, typename If>
+ struct matches_<Expr, proto::if_<If> >
+ : when<_, If>::template result<void(Expr, mpl::void_, mpl::void_)>::type
             {};
 
             // handle proto::not_
             template<typename Expr, typename Grammar>
- struct matches_impl<Expr, not_<Grammar> >
- : mpl::not_<matches_impl<Expr, typename Grammar::proto_base_expr> >
+ struct matches_<Expr, not_<Grammar> >
+ : mpl::not_<matches_<Expr, typename Grammar::proto_base_expr> >
             {};
 
             // handle proto::switch_
             template<typename Expr, typename Cases>
- struct matches_impl<Expr, switch_<Cases> >
- : matches_impl<
+ struct matches_<Expr, switch_<Cases> >
+ : matches_<
                     Expr
                   , typename Cases::template case_<typename Expr::proto_tag>::proto_base_expr
>
@@ -353,7 +394,7 @@
         {
             template<typename Expr, typename Grammar>
             struct matches
- : detail::matches_impl<typename Expr::proto_base_expr, typename Grammar::proto_base_expr>
+ : detail::matches_<typename Expr::proto_base_expr, typename Grammar::proto_base_expr>
             {};
         }
 
@@ -362,12 +403,9 @@
             struct _
               : has_identity_transform
             {
+ BOOST_PROTO_CALLABLE()
                 typedef _ proto_base_expr;
- typedef void proto_is_wildcard_;
             };
-
- template<typename T>
- transform::detail::yes_type is_wildcard_expression_fun(T const *);
         }
 
         namespace control
@@ -377,90 +415,113 @@
             struct not_
               : has_identity_transform
             {
+ BOOST_PROTO_CALLABLE()
                 typedef not_ proto_base_expr;
             };
 
             // if_
- template<typename Condition, typename Then, typename Else>
- struct if_
- : or_<
- and_<if_<Condition>, Then>
- , and_<not_<if_<Condition> >, Else>
- >
- {};
-
- template<typename Condition, typename Then>
- struct if_<Condition, Then, void>
- : and_<if_<Condition>, Then>
- {};
-
- template<typename Condition>
- struct if_<Condition, void, void>
- : has_identity_transform
+ template<typename If, typename Then, typename Else>
+ struct if_ : callable
             {
                 typedef if_ proto_base_expr;
+
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : mpl::eval_if<
+ typename when<_, If>::template result<void(Expr, State, Visitor)>::type
+ , typename when<_, Then>::template result<void(Expr, State, Visitor)>
+ , typename when<_, Else>::template result<void(Expr, State, Visitor)>
+ >
+ {};
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ typedef
+ typename mpl::if_<
+ typename when<_, If>::template result<void(Expr, State, Visitor)>::type
+ , when<_, Then>
+ , when<_, Else>
+ >::type
+ branch;
+
+ return branch()(expr, state, visitor);
+ }
             };
 
             // or_
             template<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G)>
- struct or_
+ struct or_ : callable
             {
                 typedef or_ proto_base_expr;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
                 {
- typedef typename detail::matches_impl<Expr, or_>::which which;
- typedef typename which::template apply<Expr, State, Visitor>::type type;
+ typedef typename detail::matches_<Expr, or_>::which which;
+ typedef typename which::template result<void(Expr, State, Visitor)>::type type;
                 };
 
                 template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
                 {
- typedef typename detail::matches_impl<Expr, or_>::which which;
- return which::call(expr, state, visitor);
+ typedef typename detail::matches_<Expr, or_>::which which;
+ return which()(expr, state, visitor);
                 }
             };
 
             // and_
             template<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G)>
- struct and_
+ struct and_ : callable
             {
                 typedef and_ proto_base_expr;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
                 {
                     typedef typename detail::last<and_>::type which;
- typedef typename which::template apply<Expr, State, Visitor>::type type;
+ typedef typename which::template result<void(Expr, State, Visitor)>::type type;
                 };
 
                 template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
                 {
                     typedef typename detail::last<and_>::type which;
- return which::call(expr, state, visitor);
+ return which()(expr, state, visitor);
                 }
             };
 
             // switch_
             template<typename Cases>
- struct switch_
+ struct switch_ : callable
             {
                 typedef switch_ proto_base_expr;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : Cases::template case_<typename Expr::proto_tag>::template apply<Expr, State, Visitor>
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : Cases::template case_<typename Expr::proto_tag>::template result<void(Expr, State, Visitor)>
                 {};
 
                 template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
                 {
- return Cases::template case_<typename Expr::proto_tag>::call(expr, state, visitor);
+ return typename Cases::template case_<typename Expr::proto_tag>()(expr, state, visitor);
                 }
             };
 
@@ -479,6 +540,32 @@
                 typedef void proto_is_vararg_;
             };
         }
+
+ template<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G)>
+ struct is_callable<or_<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, G)> >
+ : mpl::true_
+ {};
+
+ template<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, typename G)>
+ struct is_callable<and_<BOOST_PP_ENUM_PARAMS(BOOST_PROTO_MAX_LOGICAL_ARITY, G)> >
+ : mpl::true_
+ {};
+
+ template<typename Grammar>
+ struct is_callable<not_<Grammar> >
+ : mpl::true_
+ {};
+
+ template<typename If, typename Then, typename Else>
+ struct is_callable<if_<If, Then, Else> >
+ : mpl::true_
+ {};
+
+ template<typename Grammar>
+ struct is_callable<vararg<Grammar> >
+ : mpl::true_
+ {};
+
     }}
 
     #if defined(_MSC_VER) && (_MSC_VER >= 1020)
@@ -514,7 +601,7 @@
             template<bool B, typename Expr, BOOST_PP_ENUM_PARAMS(N, typename G)>
             struct BOOST_PP_CAT(or, N)
               : BOOST_PP_CAT(or, BOOST_PP_DEC(N))<
- matches_impl<Expr, typename G1::proto_base_expr>::value
+ matches_<Expr, typename G1::proto_base_expr>::value
                   , Expr, BOOST_PP_ENUM_SHIFTED_PARAMS(N, G)
>
             {};
@@ -528,16 +615,16 @@
 
             // handle proto::or_
             template<typename Expr, BOOST_PP_ENUM_PARAMS(N, typename G)>
- struct matches_impl<Expr, proto::or_<BOOST_PP_ENUM_PARAMS(N, G)> >
+ struct matches_<Expr, proto::or_<BOOST_PP_ENUM_PARAMS(N, G)> >
               : BOOST_PP_CAT(or, N)<
- matches_impl<typename Expr::proto_base_expr, typename G0::proto_base_expr>::value,
+ matches_<typename Expr::proto_base_expr, typename G0::proto_base_expr>::value,
                     typename Expr::proto_base_expr, BOOST_PP_ENUM_PARAMS(N, G)
>
             {};
 
             // handle proto::and_
             template<typename Expr, BOOST_PP_ENUM_PARAMS(N, typename G)>
- struct matches_impl<Expr, proto::and_<BOOST_PP_ENUM_PARAMS(N, G)> >
+ struct matches_<Expr, proto::and_<BOOST_PP_ENUM_PARAMS(N, G)> >
               : detail::BOOST_PP_CAT(and, N)<
                     BOOST_PROTO_DEFINE_MATCHES(~, 0, ~)::value,
                     BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_DEFINE_MATCHES, ~)
@@ -554,14 +641,14 @@
             template<typename Args, typename Back, long To>
             struct vararg_matches_impl<Args, Back, N, To>
               : and2<
- matches_impl<typename Args::BOOST_PP_CAT(arg, BOOST_PP_DEC(N))::proto_base_expr, Back>::value
+ matches_<typename Args::BOOST_PP_CAT(arg, BOOST_PP_DEC(N))::proto_base_expr, Back>::value
                   , vararg_matches_impl<Args, Back, N + 1, To>
>
             {};
 
             template<typename Args, typename Back>
             struct vararg_matches_impl<Args, Back, N, N>
- : matches_impl<typename Args::BOOST_PP_CAT(arg, BOOST_PP_DEC(N))::proto_base_expr, Back>
+ : matches_<typename Args::BOOST_PP_CAT(arg, BOOST_PP_DEC(N))::proto_base_expr, Back>
             {};
 
             template<
@@ -577,7 +664,7 @@
             {};
 
             template<typename Tag, typename Args1, typename Args2>
- struct matches_impl< expr<Tag, Args1, N>, expr<Tag, Args2, N> >
+ struct matches_< proto::expr<Tag, Args1, N>, proto::expr<Tag, Args2, N> >
               : BOOST_PP_CAT(and, N)<
                     BOOST_PROTO_MATCHES_N_FUN(~, 0, ~)::value,
                     BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_MATCHES_N_FUN, ~)
@@ -585,7 +672,7 @@
             {};
 
             template<typename Tag, typename Args1, typename Args2>
- struct matches_impl< expr<Tag, Args1, N>, expr<proto::_, Args2, N> >
+ struct matches_< proto::expr<Tag, Args1, N>, proto::expr<proto::_, Args2, N> >
               : BOOST_PP_CAT(and, N)<
                     BOOST_PROTO_MATCHES_N_FUN(~, 0, ~)::value,
                     BOOST_PP_ENUM_SHIFTED(N, BOOST_PROTO_MATCHES_N_FUN, ~)

Modified: branches/fix-links/boost/xpressive/proto/operators.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/operators.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/operators.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -35,17 +35,17 @@
         struct as_expr_if2<Tag, Left, Right, typename Left::proto_is_expr_, void>
           : generate_if<
                 typename Left::proto_domain
- , expr<
+ , proto::expr<
                     Tag
                   , args2<
                         ref_<Left>
- , typename Left::proto_domain::template apply<expr<tag::terminal, args0<Right &> > >::type
+ , typename Left::proto_domain::template apply<proto::expr<tag::terminal, args0<Right &> > >::type
>
>
>
         {
- typedef expr<tag::terminal, args0<Right &> > term_type;
- typedef expr<Tag, args2<ref_<Left>, typename Left::proto_domain::template apply<term_type>::type> > expr_type;
+ typedef proto::expr<tag::terminal, args0<Right &> > term_type;
+ typedef proto::expr<Tag, args2<ref_<Left>, typename Left::proto_domain::template apply<term_type>::type> > expr_type;
 
             static typename Left::proto_domain::template apply<expr_type>::type
             make(Left &left, Right &right)
@@ -60,17 +60,17 @@
         struct as_expr_if2<Tag, Left, Right, void, typename Right::proto_is_expr_>
           : generate_if<
                 typename Right::proto_domain
- , expr<
+ , proto::expr<
                     Tag
                   , args2<
- typename Right::proto_domain::template apply<expr<tag::terminal, args0<Left &> > >::type
+ typename Right::proto_domain::template apply<proto::expr<tag::terminal, args0<Left &> > >::type
                       , ref_<Right>
>
>
>
         {
- typedef expr<tag::terminal, args0<Left &> > term_type;
- typedef expr<Tag, args2<typename Right::proto_domain::template apply<term_type>::type, ref_<Right> > > expr_type;
+ typedef proto::expr<tag::terminal, args0<Left &> > term_type;
+ typedef proto::expr<Tag, args2<typename Right::proto_domain::template apply<term_type>::type, ref_<Right> > > expr_type;
 
             static typename Right::proto_domain::template apply<expr_type>::type
             make(Left &left, Right &right)
@@ -90,10 +90,10 @@
         struct as_expr_if<Tag, Left, Right, typename Left::proto_is_expr_, typename Right::proto_is_expr_>
           : generate_if<
                 typename Left::proto_domain
- , expr<Tag, args2<ref_<Left>, ref_<Right> > >
+ , proto::expr<Tag, args2<ref_<Left>, ref_<Right> > >
>
         {
- typedef expr<Tag, args2<ref_<Left>, ref_<Right> > > expr_type;
+ typedef proto::expr<Tag, args2<ref_<Left>, ref_<Right> > > expr_type;
             BOOST_MPL_ASSERT((is_same<typename Left::proto_domain, typename Right::proto_domain>));
 
             static typename Left::proto_domain::template apply<expr_type>::type
@@ -179,22 +179,22 @@
     template<typename Arg> \
     typename detail::generate_if< \
         typename Arg::proto_domain \
- , expr<TAG, args1<ref_<typename Arg::proto_derived_expr> > > \
+ , proto::expr<TAG, args1<ref_<typename Arg::proto_derived_expr> > > \
>::type const \
     operator OP(Arg &arg BOOST_PROTO_UNARY_OP_IS_POSTFIX_ ## POST) \
     { \
- typedef expr<TAG, args1<ref_<typename Arg::proto_derived_expr> > > that_type; \
+ typedef proto::expr<TAG, args1<ref_<typename Arg::proto_derived_expr> > > that_type; \
         that_type that = {{arg}}; \
         return Arg::proto_domain::make(that); \
     } \
     template<typename Arg> \
     typename detail::generate_if< \
         typename Arg::proto_domain \
- , expr<TAG, args1<ref_<typename Arg::proto_derived_expr const> > > \
+ , proto::expr<TAG, args1<ref_<typename Arg::proto_derived_expr const> > > \
>::type const \
     operator OP(Arg const &arg BOOST_PROTO_UNARY_OP_IS_POSTFIX_ ## POST) \
     { \
- typedef expr<TAG, args1<ref_<typename Arg::proto_derived_expr const> > > that_type; \
+ typedef proto::expr<TAG, args1<ref_<typename Arg::proto_derived_expr const> > > that_type; \
         that_type that = {{arg}}; \
         return Arg::proto_domain::make(that); \
     } \

Modified: branches/fix-links/boost/xpressive/proto/proto_fwd.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/proto_fwd.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/proto_fwd.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -52,10 +52,7 @@
         typedef char yes_type;
         typedef char (&no_type)[2];
 
- struct dont_care
- {
- dont_care(...);
- };
+ struct dont_care;
 
         template<typename T>
         struct remove_cv_ref
@@ -117,8 +114,8 @@
 
         // Fusion tags
         struct proto_expr;
- struct proto_ref;
- struct proto_ref_iterator;
+ struct proto_expr_iterator;
+ struct proto_flat_view;
     }
 
     namespace wildcardns_
@@ -205,15 +202,15 @@
>
         struct and_;
 
- template<typename Condition, typename Then = void, typename Else = void>
+ template<typename Grammar>
+ struct not_;
+
+ template<typename Condition, typename Then = _, typename Else = not_<_> >
         struct if_;
 
         template<typename Cases>
         struct switch_;
 
- template<typename Grammar>
- struct not_;
-
         template<typename T>
         struct exact;
 
@@ -329,9 +326,6 @@
         template<typename T, typename EnableIf = void>
         struct domain_of;
 
- template<typename Expr>
- struct id;
-
         template<typename Expr, typename Grammar>
         struct matches;
     }
@@ -341,7 +335,6 @@
     using proto::result_of::is_domain;
     using proto::result_of::tag_of;
     using proto::result_of::domain_of;
- using proto::result_of::id;
     using proto::result_of::matches;
 
     namespace op
@@ -440,124 +433,328 @@
 
         template<typename Tag, typename Domain = deduce_domain>
         struct unfused_expr;
+
+ typedef make_expr<tag::terminal> make_terminal;
+ typedef make_expr<tag::posit> make_posit;
+ typedef make_expr<tag::negate> make_negate;
+ typedef make_expr<tag::dereference> make_dereference;
+ typedef make_expr<tag::complement> make_complement;
+ typedef make_expr<tag::address_of> make_address_of;
+ typedef make_expr<tag::logical_not> make_logical_not;
+ typedef make_expr<tag::pre_inc> make_pre_inc;
+ typedef make_expr<tag::pre_dec> make_pre_dec;
+ typedef make_expr<tag::post_inc> make_post_inc;
+ typedef make_expr<tag::post_dec> make_post_dec;
+ typedef make_expr<tag::shift_left> make_shift_left;
+ typedef make_expr<tag::shift_right> make_shift_right;
+ typedef make_expr<tag::multiplies> make_multiplies;
+ typedef make_expr<tag::divides> make_divides;
+ typedef make_expr<tag::modulus> make_modulus;
+ typedef make_expr<tag::plus> make_plus;
+ typedef make_expr<tag::minus> make_minus;
+ typedef make_expr<tag::less> make_less;
+ typedef make_expr<tag::greater> make_greater;
+ typedef make_expr<tag::less_equal> make_less_equal;
+ typedef make_expr<tag::greater_equal> make_greater_equal;
+ typedef make_expr<tag::equal_to> make_equal_to;
+ typedef make_expr<tag::not_equal_to> make_not_equal_to;
+ typedef make_expr<tag::logical_or> make_logical_or;
+ typedef make_expr<tag::logical_and> make_logical_and;
+ typedef make_expr<tag::bitwise_and> make_bitwise_and;
+ typedef make_expr<tag::bitwise_or> make_bitwise_or;
+ typedef make_expr<tag::bitwise_xor> make_bitwise_xor;
+ typedef make_expr<tag::comma> make_comma;
+ typedef make_expr<tag::mem_ptr> make_mem_ptr;
+ typedef make_expr<tag::assign> make_assign;
+ typedef make_expr<tag::shift_left_assign> make_shift_left_assign;
+ typedef make_expr<tag::shift_right_assign> make_shift_right_assign;
+ typedef make_expr<tag::multiplies_assign> make_multiplies_assign;
+ typedef make_expr<tag::divides_assign> make_divides_assign;
+ typedef make_expr<tag::modulus_assign> make_modulus_assign;
+ typedef make_expr<tag::plus_assign> make_plus_assign;
+ typedef make_expr<tag::minus_assign> make_minus_assign;
+ typedef make_expr<tag::bitwise_and_assign> make_bitwise_and_assign;
+ typedef make_expr<tag::bitwise_or_assign> make_bitwise_or_assign;
+ typedef make_expr<tag::bitwise_xor_assign> make_bitwise_xor_assign;
+ typedef make_expr<tag::subscript> make_subscript;
+ typedef make_expr<tag::if_else_> make_if_else;
+ typedef make_expr<tag::function> make_function;
+
+ //typedef make_expr_ref<tag::terminal> make_terminal_ref;
+ //typedef make_expr_ref<tag::posit> make_posit_ref;
+ //typedef make_expr_ref<tag::negate> make_negate_ref;
+ //typedef make_expr_ref<tag::dereference> make_dereference_ref;
+ //typedef make_expr_ref<tag::complement> make_complement_ref;
+ //typedef make_expr_ref<tag::address_of> make_address_of_ref;
+ //typedef make_expr_ref<tag::logical_not> make_logical_not_ref;
+ //typedef make_expr_ref<tag::pre_inc> make_pre_inc_ref;
+ //typedef make_expr_ref<tag::pre_dec> make_pre_dec_ref;
+ //typedef make_expr_ref<tag::post_inc> make_post_inc_ref;
+ //typedef make_expr_ref<tag::post_dec> make_post_dec_ref;
+ //typedef make_expr_ref<tag::shift_left> make_shift_left_ref;
+ //typedef make_expr_ref<tag::shift_right> make_shift_right_ref;
+ //typedef make_expr_ref<tag::multiplies> make_multiplies_ref;
+ //typedef make_expr_ref<tag::divides> make_divides_ref;
+ //typedef make_expr_ref<tag::modulus> make_modulus_ref;
+ //typedef make_expr_ref<tag::plus> make_plus_ref;
+ //typedef make_expr_ref<tag::minus> make_minus_ref;
+ //typedef make_expr_ref<tag::less> make_less_ref;
+ //typedef make_expr_ref<tag::greater> make_greater_ref;
+ //typedef make_expr_ref<tag::less_equal> make_less_equal_ref;
+ //typedef make_expr_ref<tag::greater_equal> make_greater_equal_ref;
+ //typedef make_expr_ref<tag::equal_to> make_equal_to_ref;
+ //typedef make_expr_ref<tag::not_equal_to> make_not_equal_to_ref;
+ //typedef make_expr_ref<tag::logical_or> make_logical_or_ref;
+ //typedef make_expr_ref<tag::logical_and> make_logical_and_ref;
+ //typedef make_expr_ref<tag::bitwise_and> make_bitwise_and_ref;
+ //typedef make_expr_ref<tag::bitwise_or> make_bitwise_or_ref;
+ //typedef make_expr_ref<tag::bitwise_xor> make_bitwise_xor_ref;
+ //typedef make_expr_ref<tag::comma> make_comma_ref;
+ //typedef make_expr_ref<tag::mem_ptr> make_mem_ptr_ref;
+ //typedef make_expr_ref<tag::assign> make_assign_ref;
+ //typedef make_expr_ref<tag::shift_left_assign> make_shift_left_assign_ref;
+ //typedef make_expr_ref<tag::shift_right_assign> make_shift_right_assign_ref;
+ //typedef make_expr_ref<tag::multiplies_assign> make_multiplies_assign_ref;
+ //typedef make_expr_ref<tag::divides_assign> make_divides_assign_ref;
+ //typedef make_expr_ref<tag::modulus_assign> make_modulus_assign_ref;
+ //typedef make_expr_ref<tag::plus_assign> make_plus_assign_ref;
+ //typedef make_expr_ref<tag::minus_assign> make_minus_assign_ref;
+ //typedef make_expr_ref<tag::bitwise_and_assign> make_bitwise_and_assign_ref;
+ //typedef make_expr_ref<tag::bitwise_or_assign> make_bitwise_or_assign_ref;
+ //typedef make_expr_ref<tag::bitwise_xor_assign> make_bitwise_xor_assign_ref;
+ //typedef make_expr_ref<tag::subscript> make_subscript_ref;
+ //typedef make_expr_ref<tag::if_else_> make_if_else_ref;
+ //typedef make_expr_ref<tag::function> make_function_ref;
+
+ struct flatten;
+ struct pop_front;
+ struct reverse;
+ }
+
+ typedef functional::make_terminal _make_terminal;
+ typedef functional::make_posit _make_posit;
+ typedef functional::make_negate _make_negate;
+ typedef functional::make_dereference _make_dereference;
+ typedef functional::make_complement _make_complement;
+ typedef functional::make_address_of _make_address_of;
+ typedef functional::make_logical_not _make_logical_not;
+ typedef functional::make_pre_inc _make_pre_inc;
+ typedef functional::make_pre_dec _make_pre_dec;
+ typedef functional::make_post_inc _make_post_inc;
+ typedef functional::make_post_dec _make_post_dec;
+ typedef functional::make_shift_left _make_shift_left;
+ typedef functional::make_shift_right _make_shift_right;
+ typedef functional::make_multiplies _make_multiplies;
+ typedef functional::make_divides _make_divides;
+ typedef functional::make_modulus _make_modulus;
+ typedef functional::make_plus _make_plus;
+ typedef functional::make_minus _make_minus;
+ typedef functional::make_less _make_less;
+ typedef functional::make_greater _make_greater;
+ typedef functional::make_less_equal _make_less_equal;
+ typedef functional::make_greater_equal _make_greater_equal;
+ typedef functional::make_equal_to _make_equal_to;
+ typedef functional::make_not_equal_to _make_not_equal_to;
+ typedef functional::make_logical_or _make_logical_or;
+ typedef functional::make_logical_and _make_logical_and;
+ typedef functional::make_bitwise_and _make_bitwise_and;
+ typedef functional::make_bitwise_or _make_bitwise_or;
+ typedef functional::make_bitwise_xor _make_bitwise_xor;
+ typedef functional::make_comma _make_comma;
+ typedef functional::make_mem_ptr _make_mem_ptr;
+ typedef functional::make_assign _make_assign;
+ typedef functional::make_shift_left_assign _make_shift_left_assign;
+ typedef functional::make_shift_right_assign _make_shift_right_assign;
+ typedef functional::make_multiplies_assign _make_multiplies_assign;
+ typedef functional::make_divides_assign _make_divides_assign;
+ typedef functional::make_modulus_assign _make_modulus_assign;
+ typedef functional::make_plus_assign _make_plus_assign;
+ typedef functional::make_minus_assign _make_minus_assign;
+ typedef functional::make_bitwise_and_assign _make_bitwise_and_assign;
+ typedef functional::make_bitwise_or_assign _make_bitwise_or_assign;
+ typedef functional::make_bitwise_xor_assign _make_bitwise_xor_assign;
+ typedef functional::make_subscript _make_subscript;
+ typedef functional::make_if_else _make_if_else;
+ typedef functional::make_function _make_function;
+
+ //typedef functional::make_terminal_ref _make_terminal_ref;
+ //typedef functional::make_posit_ref _make_posit_ref;
+ //typedef functional::make_negate_ref _make_negate_ref;
+ //typedef functional::make_dereference_ref _make_dereference_ref;
+ //typedef functional::make_complement_ref _make_complement_ref;
+ //typedef functional::make_address_of_ref _make_address_of_ref;
+ //typedef functional::make_logical_not_ref _make_logical_not_ref;
+ //typedef functional::make_pre_inc_ref _make_pre_inc_ref;
+ //typedef functional::make_pre_dec_ref _make_pre_dec_ref;
+ //typedef functional::make_post_inc_ref _make_post_inc_ref;
+ //typedef functional::make_post_dec_ref _make_post_dec_ref;
+ //typedef functional::make_shift_left_ref _make_shift_left_ref;
+ //typedef functional::make_shift_right_ref _make_shift_right_ref;
+ //typedef functional::make_multiplies_ref _make_multiplies_ref;
+ //typedef functional::make_divides_ref _make_divides_ref;
+ //typedef functional::make_modulus_ref _make_modulus_ref;
+ //typedef functional::make_plus_ref _make_plus_ref;
+ //typedef functional::make_minus_ref _make_minus_ref;
+ //typedef functional::make_less_ref _make_less_ref;
+ //typedef functional::make_greater_ref _make_greater_ref;
+ //typedef functional::make_less_equal_ref _make_less_equal_ref;
+ //typedef functional::make_greater_equal_ref _make_greater_equal_ref;
+ //typedef functional::make_equal_to_ref _make_equal_to_ref;
+ //typedef functional::make_not_equal_to_ref _make_not_equal_to_ref;
+ //typedef functional::make_logical_or_ref _make_logical_or_ref;
+ //typedef functional::make_logical_and_ref _make_logical_and_ref;
+ //typedef functional::make_bitwise_and_ref _make_bitwise_and_ref;
+ //typedef functional::make_bitwise_or_ref _make_bitwise_or_ref;
+ //typedef functional::make_bitwise_xor_ref _make_bitwise_xor_ref;
+ //typedef functional::make_comma_ref _make_comma_ref;
+ //typedef functional::make_mem_ptr_ref _make_mem_ptr_ref;
+ //typedef functional::make_assign_ref _make_assign_ref;
+ //typedef functional::make_shift_left_assign_ref _make_shift_left_assign_ref;
+ //typedef functional::make_shift_right_assign_ref _make_shift_right_assign_ref;
+ //typedef functional::make_multiplies_assign_ref _make_multiplies_assign_ref;
+ //typedef functional::make_divides_assign_ref _make_divides_assign_ref;
+ //typedef functional::make_modulus_assign_ref _make_modulus_assign_ref;
+ //typedef functional::make_plus_assign_ref _make_plus_assign_ref;
+ //typedef functional::make_minus_assign_ref _make_minus_assign_ref;
+ //typedef functional::make_bitwise_and_assign_ref _make_bitwise_and_assign_ref;
+ //typedef functional::make_bitwise_or_assign_ref _make_bitwise_or_assign_ref;
+ //typedef functional::make_bitwise_xor_assign_ref _make_bitwise_xor_assign_ref;
+ //typedef functional::make_subscript_ref _make_subscript_ref;
+ //typedef functional::make_if_else_ref _make_if_else_ref;
+ //typedef functional::make_function_ref _make_function_ref;
+
+ typedef functional::flatten _flatten;
+ typedef functional::pop_front _pop_front;
+ typedef functional::reverse _reverse;
+ typedef functional::deep_copy _deep_copy;
+
+#define BOOST_PROTO_IDENTITY_TRANSFORM() \
+ template<typename Expr_, typename State_, typename Visitor_> \
+ Expr_ const &operator ()(Expr_ const &expr_, State_ const &, Visitor_ &) const \
+ { \
+ return expr_; \
+ } \
+ \
+ template<typename Sig> \
+ struct result; \
+ \
+ template<typename This, typename Expr_, typename State_, typename Visitor_> \
+ struct result<This(Expr_,State_,Visitor_)> \
+ { \
+ typedef Expr_ type; \
     }
 
-#define BOOST_PROTO_IDENTITY_TRANSFORM()\
- template<typename Expr_, typename State_, typename Visitor_>\
- static Expr_ const &call(Expr_ const &expr_, State_ const &, Visitor_ &)\
- {\
- return expr_;\
- }\
- template<typename Expr_, typename, typename>\
- struct apply\
- {\
- typedef Expr_ type;\
- }
-
- namespace transform
+ namespace has_transformns_
     {
- namespace detail
+ struct has_identity_transform
         {
- using proto::detail::yes_type;
- using proto::detail::no_type;
-
- struct default_factory;
-
- no_type is_wildcard_expression_fun(...);
-
- template<typename T>
- struct is_wildcard_expression;
- }
-
- template<typename Grammar, typename N = mpl::long_<0> >
- struct arg;
-
- template<typename Grammar, long N>
- struct arg_c;
+ BOOST_PROTO_IDENTITY_TRANSFORM();
+ };
+ }
 
- template<typename Grammar>
- struct left;
+ using has_transformns_::has_identity_transform;
 
- template<typename Grammar>
- struct right;
+ template<typename T>
+ struct is_callable;
 
- template<typename Grammar>
- struct state;
+ template<typename T>
+ struct is_aggregate;
 
- template<typename Grammar>
- struct visitor;
+ namespace transform
+ {
+ #define BOOST_PROTO_CALLABLE() typedef void proto_is_callable_;
+ #define BOOST_PROTO_NOT_CALLABLE() typedef int proto_is_callable_;
 
- template<typename Grammar>
- struct identity;
+ struct callable
+ {
+ BOOST_PROTO_CALLABLE()
+ };
 
- template<typename Grammar, typename Always, typename Factory = detail::default_factory>
- struct always;
+ template<typename Grammar, typename Fun = Grammar>
+ struct when;
 
- template<typename Grammar, typename Lambda, typename Factory = detail::default_factory>
- struct apply1;
+ template<typename Fun>
+ struct otherwise;
 
- template<typename Grammar, typename Lambda, typename Factory = detail::default_factory>
- struct apply2;
+ template<typename Fun>
+ struct call;
 
- template<typename Grammar, typename Lambda, typename Factory = detail::default_factory>
- struct apply3;
+ template<typename Fun>
+ struct make;
 
- template<typename Grammar, typename State>
- struct branch;
+ template<typename Fun>
+ struct bind;
 
- template<typename Grammar, typename State = void>
+ template<typename Sequence, typename State, typename Fun>
         struct fold;
 
- template<typename Grammar, typename State = void>
+ template<typename Sequence, typename State, typename Fun>
         struct reverse_fold;
 
- template<typename Tag, typename Grammar, typename State = void>
+ // BUGBUG can we replace fold_tree with fold<flatten(_), state, fun> ?
+ template<typename Sequence, typename State, typename Fun>
         struct fold_tree;
 
- template<typename Tag, typename Grammar, typename State = void>
+ template<typename Sequence, typename State, typename Fun>
         struct reverse_fold_tree;
 
- template<typename Grammar, typename Function1>
- struct function1;
-
- template<typename Grammar, typename Function2>
- struct function2;
-
- template<typename Grammar, typename Function3>
- struct function3;
-
- template<typename Grammar>
- struct list;
-
- template<typename Grammar>
- struct tail;
-
         template<typename Grammar>
         struct pass_through;
 
- template<typename Grammar, typename ConstructorFun>
- struct construct;
-
- template<typename Grammar, typename ConstructorFun>
- struct pod_construct;
- }
-
- namespace has_transformns_
- {
- template<typename Grammar>
- struct has_pass_through_transform;
+ struct expr;
+ struct state;
+ struct visitor;
 
- struct has_identity_transform
- {
- BOOST_PROTO_IDENTITY_TRANSFORM();
- };
- }
+ template<int I>
+ struct arg_c;
 
- using has_transformns_::has_identity_transform;
- using has_transformns_::has_pass_through_transform;
+ typedef arg_c<0> arg0;
+ typedef arg_c<1> arg1;
+ typedef arg_c<2> arg2;
+ typedef arg_c<3> arg3;
+ typedef arg_c<4> arg4;
+ typedef arg_c<5> arg5;
+ typedef arg_c<6> arg6;
+ typedef arg_c<7> arg7;
+ typedef arg_c<8> arg8;
+ typedef arg_c<9> arg9;
+
+ typedef arg0 arg;
+ typedef arg0 left;
+ typedef arg1 right;
+ }
+
+ using transform::when;
+ using transform::call;
+ using transform::make;
+ using transform::bind;
+ using transform::fold;
+ using transform::otherwise;
+ using transform::reverse_fold;
+ using transform::fold_tree;
+ using transform::reverse_fold_tree;
+ using transform::callable;
+ using transform::pass_through;
+
+ typedef transform::expr _expr;
+ typedef transform::state _state;
+ typedef transform::visitor _visitor;
+ typedef transform::arg0 _arg0;
+ typedef transform::arg1 _arg1;
+ typedef transform::arg2 _arg2;
+ typedef transform::arg3 _arg3;
+ typedef transform::arg4 _arg4;
+ typedef transform::arg5 _arg5;
+ typedef transform::arg6 _arg6;
+ typedef transform::arg7 _arg7;
+ typedef transform::arg8 _arg8;
+ typedef transform::arg9 _arg9;
+ typedef transform::arg _arg;
+ typedef transform::left _left;
+ typedef transform::right _right;
 
- template<typename T>
- struct is_transform;
+ template<int I>
+ struct _arg_c;
 
     template<typename T>
     struct is_extension;

Modified: branches/fix-links/boost/xpressive/proto/ref.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/ref.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/ref.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -43,7 +43,7 @@
             typedef typename Expr::proto_args proto_args;
             typedef typename Expr::proto_arity proto_arity;
             typedef typename Expr::proto_domain proto_domain;
- typedef tag::proto_ref fusion_tag;
+ //typedef tag::proto_expr fusion_tag;
             typedef void proto_is_ref_;
             typedef void proto_is_expr_;
             typedef Expr proto_derived_expr;
@@ -137,7 +137,7 @@
         struct unref
         {
             template<typename T>
- struct result {};
+ struct result;
 
             template<typename This, typename T>
             struct result<This(T)>

Modified: branches/fix-links/boost/xpressive/proto/traits.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/traits.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/traits.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -29,8 +29,12 @@
     #include <boost/mpl/or.hpp>
     #include <boost/mpl/bool.hpp>
     #include <boost/mpl/eval_if.hpp>
+ #include <boost/mpl/aux_/template_arity.hpp>
+ #include <boost/mpl/aux_/lambda_arity_param.hpp>
     #include <boost/static_assert.hpp>
     #include <boost/utility/result_of.hpp>
+ #include <boost/type_traits/is_pod.hpp>
+ #include <boost/type_traits/is_same.hpp>
     #include <boost/type_traits/is_array.hpp>
     #include <boost/type_traits/is_function.hpp>
     #include <boost/type_traits/remove_cv.hpp>
@@ -56,13 +60,56 @@
 
     namespace boost { namespace proto
     {
+ namespace detail
+ {
+ template<typename T, typename EnableIf = void>
+ struct is_callable2_
+ : mpl::false_
+ {};
+
+ template<typename T>
+ struct is_callable2_<T, typename T::proto_is_callable_>
+ : mpl::true_
+ {};
+
+ template<typename T BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(long Arity = mpl::aux::template_arity<T>::value)>
+ struct is_callable_
+ : is_callable2_<T>
+ {};
+ }
+
         template<typename T>
- struct is_transform
- : mpl::false_
+ struct is_callable
+ : proto::detail::is_callable_<T>
+ {};
+
+ template<>
+ struct is_callable<proto::_>
+ : mpl::true_
         {};
 
         template<>
- struct is_transform<proto::_>
+ struct is_callable<proto::callable>
+ : mpl::false_
+ {};
+
+ #if BOOST_WORKAROUND(__GNUC__, == 3)
+ // work around GCC bug
+ template<typename Tag, typename Args, long N>
+ struct is_callable<proto::expr<Tag, Args, N> >
+ : mpl::false_
+ {};
+ #endif
+
+ /// is_aggregate
+ ///
+ template<typename T>
+ struct is_aggregate
+ : is_pod<T>
+ {};
+
+ template<typename Tag, typename Args, long N>
+ struct is_aggregate<proto::expr<Tag, Args, N> >
           : mpl::true_
         {};
 
@@ -97,12 +144,6 @@
                 typedef typename Expr::proto_tag type;
             };
 
- // id
- template<typename Expr>
- struct id
- : result_of::deep_copy<Expr>
- {};
-
             // as_expr
             template<typename T, typename Domain, typename EnableIf>
             struct as_expr
@@ -113,7 +154,7 @@
                   , remove_cv<T>
>::type proto_arg0;
 
- typedef expr<proto::tag::terminal, args0<proto_arg0> > expr_type;
+ typedef proto::expr<proto::tag::terminal, args0<proto_arg0> > expr_type;
                 typedef typename Domain::template apply<expr_type>::type type;
                 typedef type const result_type;
 
@@ -141,7 +182,7 @@
             template<typename T, typename Domain, typename EnableIf>
             struct as_arg
             {
- typedef expr<proto::tag::terminal, args0<T &> > expr_type;
+ typedef proto::expr<proto::tag::terminal, args0<T &> > expr_type;
                 typedef typename Domain::template apply<expr_type>::type type;
 
                 template<typename T2>
@@ -170,8 +211,8 @@
 
             // left
                 // BUGBUG this forces the instantiation of Expr. Couldn't we
- // partially specialize left<> on expr< T, A > and
- // ref_< expr< T, A > > and return A::arg0 ?
+ // partially specialize left<> on proto::expr< T, A > and
+ // ref_< proto::expr< T, A > > and return A::arg0 ?
             template<typename Expr>
             struct left
               : unref<typename Expr::proto_arg0>
@@ -202,8 +243,8 @@
             template<typename T>
             struct terminal : has_identity_transform
             {
- terminal();
- typedef expr<proto::tag::terminal, args0<T> > type;
+ BOOST_PROTO_NOT_CALLABLE()
+ typedef proto::expr<proto::tag::terminal, args0<T> > type;
                 typedef type proto_base_expr;
                 typedef proto::tag::terminal proto_tag;
                 typedef T proto_arg0;
@@ -211,10 +252,10 @@
 
             // if_else
             template<typename T, typename U, typename V>
- struct if_else_ : has_pass_through_transform<if_else_<T, U, V> >
+ struct if_else_ : pass_through<if_else_<T, U, V> >
             {
- if_else_();
- typedef expr<proto::tag::if_else_, args3<T, U, V> > type;
+ BOOST_PROTO_NOT_CALLABLE()
+ typedef proto::expr<proto::tag::if_else_, args3<T, U, V> > type;
                 typedef type proto_base_expr;
                 typedef proto::tag::if_else_ proto_tag;
                 typedef T proto_arg0;
@@ -224,10 +265,10 @@
 
             // unary_expr
             template<typename Tag, typename T>
- struct unary_expr : has_pass_through_transform<unary_expr<Tag, T> >
+ struct unary_expr : pass_through<unary_expr<Tag, T> >
             {
- unary_expr();
- typedef expr<Tag, args1<T> > type;
+ BOOST_PROTO_NOT_CALLABLE()
+ typedef proto::expr<Tag, args1<T> > type;
                 typedef type proto_base_expr;
                 typedef Tag proto_tag;
                 typedef T proto_arg0;
@@ -235,10 +276,10 @@
 
             // binary_expr
             template<typename Tag, typename T, typename U>
- struct binary_expr : has_pass_through_transform<binary_expr<Tag, T, U> >
+ struct binary_expr : pass_through<binary_expr<Tag, T, U> >
             {
- binary_expr();
- typedef expr<Tag, args2<T, U> > type;
+ BOOST_PROTO_NOT_CALLABLE()
+ typedef proto::expr<Tag, args2<T, U> > type;
                 typedef type proto_base_expr;
                 typedef Tag proto_tag;
                 typedef T proto_arg0;
@@ -247,10 +288,10 @@
 
         #define BOOST_PROTO_UNARY_GENERATOR(Name) \
             template<typename T> \
- struct Name : has_pass_through_transform<Name<T> > \
+ struct Name : pass_through<Name<T> > \
             { \
- Name(); \
- typedef expr<proto::tag::Name, args1<T> > type; \
+ BOOST_PROTO_NOT_CALLABLE() \
+ typedef proto::expr<proto::tag::Name, args1<T> > type; \
                 typedef type proto_base_expr; \
                 typedef proto::tag::Name proto_tag; \
                 typedef T proto_arg0; \
@@ -259,10 +300,10 @@
 
         #define BOOST_PROTO_BINARY_GENERATOR(Name) \
             template<typename T, typename U> \
- struct Name : has_pass_through_transform<Name<T, U> > \
+ struct Name : pass_through<Name<T, U> > \
             { \
- Name(); \
- typedef expr<proto::tag::Name, args2<T, U> > type; \
+ BOOST_PROTO_NOT_CALLABLE() \
+ typedef proto::expr<proto::tag::Name, args2<T, U> > type; \
                 typedef type proto_base_expr; \
                 typedef proto::tag::Name proto_tag; \
                 typedef T proto_arg0; \
@@ -347,7 +388,7 @@
             struct as_expr
             {
                 template<typename Sig>
- struct result {};
+ struct result;
 
                 template<typename This, typename T>
                 struct result<This(T)>
@@ -389,7 +430,7 @@
             struct as_arg
             {
                 template<typename Sig>
- struct result {};
+ struct result;
 
                 template<typename This, typename T>
                 struct result<This(T)>
@@ -415,7 +456,7 @@
             struct arg_c
             {
                 template<typename Sig>
- struct result {};
+ struct result;
 
                 template<typename This, typename Expr>
                 struct result<This(Expr)>
@@ -439,7 +480,7 @@
             struct arg
             {
                 template<typename Sig>
- struct result {};
+ struct result;
 
                 template<typename This, typename Expr>
                 struct result<This(Expr)>
@@ -462,7 +503,7 @@
             struct left
             {
                 template<typename Sig>
- struct result {};
+ struct result;
 
                 template<typename This, typename Expr>
                 struct result<This(Expr)>
@@ -485,7 +526,7 @@
             struct right
             {
                 template<typename Sig>
- struct result {};
+ struct result;
 
                 template<typename This, typename Expr>
                 struct result<This(Expr)>
@@ -654,14 +695,15 @@
                 BOOST_PP_ENUM_PARAMS(N, A)
                 BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void BOOST_PP_INTERCEPT), void
>
- : has_pass_through_transform<
+ : pass_through<
                     function<
                         BOOST_PP_ENUM_PARAMS(N, A)
                         BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void BOOST_PP_INTERCEPT), void
>
>
             {
- typedef expr<proto::tag::function, BOOST_PP_CAT(args, N)<BOOST_PP_ENUM_PARAMS(N, A)> > type;
+ BOOST_PROTO_NOT_CALLABLE()
+ typedef proto::expr<proto::tag::function, BOOST_PP_CAT(args, N)<BOOST_PP_ENUM_PARAMS(N, A)> > type;
                 typedef type proto_base_expr;
                 typedef proto::tag::function proto_tag;
                 BOOST_PP_REPEAT(N, BOOST_PROTO_ARG, A)
@@ -674,7 +716,7 @@
                 BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
                 BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_SUB(BOOST_PROTO_MAX_ARITY, N), void BOOST_PP_INTERCEPT), void
>
- : has_pass_through_transform<
+ : pass_through<
                     nary_expr<
                         Tag
                         BOOST_PP_ENUM_TRAILING_PARAMS(N, A)
@@ -682,7 +724,8 @@
>
>
             {
- typedef expr<Tag, BOOST_PP_CAT(args, N)<BOOST_PP_ENUM_PARAMS(N, A)> > type;
+ BOOST_PROTO_NOT_CALLABLE()
+ typedef proto::expr<Tag, BOOST_PP_CAT(args, N)<BOOST_PP_ENUM_PARAMS(N, A)> > type;
                 typedef type proto_base_expr;
                 typedef Tag proto_tag;
                 BOOST_PP_REPEAT(N, BOOST_PROTO_ARG, A)
@@ -698,12 +741,20 @@
                 BOOST_PP_REPEAT(N, BOOST_PROTO_IMPLICIT_ARG, A)
 
                 template<typename Tag, typename Args, long Arity>
- operator expr<Tag, Args, Arity> () const
+ operator proto::expr<Tag, Args, Arity> () const
                 {
- expr<Tag, Args, Arity> that = {BOOST_PP_ENUM_PARAMS(N, a)};
+ proto::expr<Tag, Args, Arity> that = {BOOST_PP_ENUM_PARAMS(N, a)};
                     return that;
                 }
             };
+
+ template<
+ template<BOOST_PP_ENUM_PARAMS(N, typename BOOST_PP_INTERCEPT)> class T
+ , BOOST_PP_ENUM_PARAMS(N, typename A)
+ >
+ struct is_callable_<T<BOOST_PP_ENUM_PARAMS(N, A)> BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(N)>
+ : is_same<BOOST_PP_CAT(A, BOOST_PP_DEC(N)), callable>
+ {};
         }
 
         template<BOOST_PP_ENUM_PARAMS(N, typename A)>

Modified: branches/fix-links/boost/xpressive/proto/transform.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/transform.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -10,16 +10,14 @@
 #define BOOST_PROTO_TRANSFORM_HPP_EAN_06_23_2007
 
 #include <boost/xpressive/proto/detail/prefix.hpp> // must be first include
-#include <boost/xpressive/proto/transform/apply.hpp>
 #include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/branch.hpp>
-#include <boost/xpressive/proto/transform/compose.hpp>
-#include <boost/xpressive/proto/transform/construct.hpp>
+#include <boost/xpressive/proto/transform/bind.hpp>
+#include <boost/xpressive/proto/transform/call.hpp>
 #include <boost/xpressive/proto/transform/fold.hpp>
 #include <boost/xpressive/proto/transform/fold_tree.hpp>
-#include <boost/xpressive/proto/transform/function.hpp>
-#include <boost/xpressive/proto/transform/list.hpp>
+#include <boost/xpressive/proto/transform/make.hpp>
 #include <boost/xpressive/proto/transform/pass_through.hpp>
+#include <boost/xpressive/proto/transform/when.hpp>
 #include <boost/xpressive/proto/detail/suffix.hpp> // must be last include
 
 #endif

Deleted: branches/fix-links/boost/xpressive/proto/transform/apply.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/apply.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
+++ (empty file)
@@ -1,167 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-/// \file apply.hpp
-/// Proto transforms for applying MPL placeholder expressions.
-//
-// Copyright 2007 Eric Niebler. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_PROTO_TRANSFORM_APPLY_HPP_EAN_06_23_2007
-#define BOOST_PROTO_TRANSFORM_APPLY_HPP_EAN_06_23_2007
-
-#include <boost/xpressive/proto/detail/prefix.hpp>
-#include <boost/mpl/apply.hpp>
-#include <boost/xpressive/proto/proto_fwd.hpp> // is_transform
-#include <boost/xpressive/proto/detail/suffix.hpp>
-
-namespace boost { namespace proto { namespace transform
-{
- namespace detail
- {
- struct any
- {
- template<typename T>
- any(T const &)
- {}
- };
-
- struct default_factory
- {
- default_factory()
- {}
-
- default_factory const &operator()() const
- {
- return *this;
- }
-
- default_factory const &operator()(any) const
- {
- return *this;
- }
-
- default_factory const &operator()(any, any) const
- {
- return *this;
- }
-
- default_factory const &operator()(any, any, any) const
- {
- return *this;
- }
-
- template<typename T>
- operator T() const
- {
- return T();
- }
- };
- }
-
- // Always return the specified type/object
- template<typename Grammar, typename Always, typename Factory>
- struct always
- : Grammar
- {
- always() {}
-
- template<typename, typename, typename>
- struct apply
- {
- typedef Always type;
- };
-
- template<typename Expr, typename State, typename Visitor>
- static Always
- call(Expr const &, State const &, Visitor &)
- {
- return Factory()();
- }
- };
-
- // Apply an MPL lambda, passing just Expr
- template<typename Grammar, typename Lambda, typename Factory>
- struct apply1
- : Grammar
- {
- apply1() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : mpl::apply1<Lambda, typename Grammar::template apply<Expr, State, Visitor>::type>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return Factory()(Grammar::call(expr, state, visitor));
- }
- };
-
- // Apply an MPL lambda, passing Expr and State
- template<typename Grammar, typename Lambda, typename Factory>
- struct apply2
- : Grammar
- {
- apply2() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : mpl::apply2<Lambda, typename Grammar::template apply<Expr, State, Visitor>::type, State>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return Factory()(Grammar::call(expr, state, visitor), state);
- }
- };
-
- // Apply an MPL lambda, passing Expr, State and Visitor
- template<typename Grammar, typename Lambda, typename Factory>
- struct apply3
- : Grammar
- {
- apply3() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : mpl::apply3<Lambda, typename Grammar::template apply<Expr, State, Visitor>::type, State, Visitor>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return Factory()(Grammar::call(expr, state, visitor), state, visitor);
- }
- };
-
-}}}
-
-namespace boost { namespace proto
-{
- template<typename Grammar, typename Always, typename Factory>
- struct is_transform<transform::always<Grammar, Always, Factory> >
- : mpl::true_
- {};
-
- template<typename Grammar, typename Lambda, typename Factory>
- struct is_transform<transform::apply1<Grammar, Lambda, Factory> >
- : mpl::true_
- {};
-
- template<typename Grammar, typename Lambda, typename Factory>
- struct is_transform<transform::apply2<Grammar, Lambda, Factory> >
- : mpl::true_
- {};
-
- template<typename Grammar, typename Lambda, typename Factory>
- struct is_transform<transform::apply3<Grammar, Lambda, Factory> >
- : mpl::true_
- {};
-}}
-
-#endif

Modified: branches/fix-links/boost/xpressive/proto/transform/arg.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/arg.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/transform/arg.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,192 +1,132 @@
 ///////////////////////////////////////////////////////////////////////////////
 /// \file arg.hpp
-/// Proto transforms for extracting arguments from expressions.
+/// Contains definition of the argN transforms.
 //
 // Copyright 2007 Eric Niebler. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
-#ifndef BOOST_PROTO_TRANSFORM_ARG_HPP_EAN_12_16_2006
-#define BOOST_PROTO_TRANSFORM_ARG_HPP_EAN_12_16_2006
+#ifndef BOOST_PROTO_TRANSFORM_ARG_HPP_EAN_11_01_2007
+#define BOOST_PROTO_TRANSFORM_ARG_HPP_EAN_11_01_2007
 
 #include <boost/xpressive/proto/detail/prefix.hpp>
 #include <boost/xpressive/proto/proto_fwd.hpp>
 #include <boost/xpressive/proto/traits.hpp>
 #include <boost/xpressive/proto/detail/suffix.hpp>
 
-namespace boost { namespace proto { namespace transform
+namespace boost { namespace proto
 {
- // A transform that simply extracts the arg from an expression
- template<typename Grammar, typename N>
- struct arg
- : Grammar
- {
- arg() {}
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : proto::result_of::arg<typename Grammar::template apply<Expr, State, Visitor>::type, N>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type //reference
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- // NOTE Grammar::call could return a temporary!
- // Don't return a dangling reference
- return proto::arg<N>(Grammar::call(expr, state, visitor));
- }
- };
-
- // A transform that simply extracts the arg from an expression
- template<typename Grammar, long N>
- struct arg_c
- : Grammar
+ namespace transform
     {
- arg_c() {}
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : proto::result_of::arg_c<typename Grammar::template apply<Expr, State, Visitor>::type, N>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type //const &
- call(Expr const &expr, State const &state, Visitor &visitor)
+ struct expr : callable
         {
- return proto::arg_c<N>(Grammar::call(expr, state, visitor));
- }
- };
-
- // A transform that simply extracts the left arg from an expression
- template<typename Grammar>
- struct left
- : Grammar
- {
- left() {}
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : proto::result_of::left<typename Grammar::template apply<Expr, State, Visitor>::type>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type //const &
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return proto::left(Grammar::call(expr, state, visitor));
- }
- };
-
- // A transform that simply extracts the right arg from an expression
- template<typename Grammar>
- struct right
- : Grammar
- {
- right() {}
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ {
+ typedef Expr type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ Expr const &
+ operator ()(Expr const &expr_, State const &, Visitor &) const
+ {
+ return expr_;
+ }
+ };
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : proto::result_of::right<typename Grammar::template apply<Expr, State, Visitor>::type>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type //const &
- call(Expr const &expr, State const &state, Visitor &visitor)
+ struct state : callable
         {
- return proto::right(Grammar::call(expr, state, visitor));
- }
- };
-
- // Just return the passed in Expr
- template<typename Grammar>
- struct identity
- : Grammar
- {
- identity() {}
- BOOST_PROTO_IDENTITY_TRANSFORM();
- };
-
- // Just return the state
- template<typename Grammar>
- struct state
- : Grammar
- {
- state() {}
+ template<typename Sig>
+ struct result;
 
- template<typename, typename State, typename>
- struct apply
- {
- typedef State type;
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ {
+ typedef State type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ State const &
+ operator ()(Expr const &, State const &state_, Visitor &) const
+ {
+ return state_;
+ }
         };
 
- template<typename Expr, typename State, typename Visitor>
- static State const &
- call(Expr const &, State const &state_, Visitor &)
+ struct visitor : callable
         {
- return state_;
- }
- };
-
- // Just return the visitor
- template<typename Grammar>
- struct visitor
- : Grammar
- {
- visitor() {}
+ template<typename Sig>
+ struct result;
 
- template<typename, typename, typename Visitor>
- struct apply
- {
- typedef Visitor type;
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ {
+ typedef Visitor type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ Visitor &
+ operator ()(Expr const &, State const &, Visitor &visitor_) const
+ {
+ return visitor_;
+ }
         };
 
- template<typename Expr, typename State, typename Visitor>
- static Visitor &
- call(Expr const &, State const &, Visitor &visitor_)
+ template<int I>
+ struct arg_c : callable
         {
- return visitor_;
- }
- };
+ template<typename Sig>
+ struct result;
 
-}}}
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : proto::result_of::arg_c<Expr, I>
+ {};
+
+ template<typename Expr, typename State, typename Visitor>
+ typename proto::result_of::arg_c<Expr, I>::type
+ operator ()(Expr const &expr, State const &, Visitor &) const
+ {
+ return proto::arg_c<I>(expr);
+ }
+ };
+ }
 
-namespace boost { namespace proto
-{
- template<typename Grammar, typename N>
- struct is_transform<transform::arg<Grammar, N> >
- : mpl::true_
+ template<int I>
+ struct _arg_c
+ : transform::arg_c<I>
     {};
 
- template<typename Grammar, long N>
- struct is_transform<transform::arg_c<Grammar, N> >
+ template<>
+ struct is_callable<transform::expr>
       : mpl::true_
     {};
 
- template<typename Grammar>
- struct is_transform<transform::left<Grammar> >
+ template<>
+ struct is_callable<transform::state>
       : mpl::true_
     {};
 
- template<typename Grammar>
- struct is_transform<transform::right<Grammar> >
+ template<>
+ struct is_callable<transform::visitor>
       : mpl::true_
     {};
 
- template<typename Grammar>
- struct is_transform<transform::identity<Grammar> >
+ template<int I>
+ struct is_callable<transform::arg_c<I> >
       : mpl::true_
     {};
 
- template<typename Grammar>
- struct is_transform<transform::state<Grammar> >
+ template<int I>
+ struct is_callable<_arg_c<I> >
       : mpl::true_
     {};
 
- template<typename Grammar>
- struct is_transform<transform::visitor<Grammar> >
- : mpl::true_
- {};
 }}
 
 #endif

Deleted: branches/fix-links/boost/xpressive/proto/transform/branch.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/branch.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
+++ (empty file)
@@ -1,52 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-/// \file branch.hpp
-/// A special-purpose proto transform for transforming one branch of the expression
-/// tree separately from the rest. Given an expression and a new state, it
-/// transforms the expression using the new state.
-//
-// Copyright 2007 Eric Niebler. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_PROTO_TRANSFORM_BRANCH_HPP_EAN_12_16_2006
-#define BOOST_PROTO_TRANSFORM_BRANCH_HPP_EAN_12_16_2006
-
-#include <boost/xpressive/proto/detail/prefix.hpp>
-#include <boost/mpl/bool.hpp>
-#include <boost/xpressive/proto/proto_fwd.hpp>
-#include <boost/xpressive/proto/detail/suffix.hpp>
-
-namespace boost { namespace proto { namespace transform
-{
-
- // A branch compiler, for compiling a sub-tree with a specified state
- template<typename Grammar, typename BranchState>
- struct branch
- : Grammar
- {
- branch() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : Grammar::template apply<Expr, BranchState, Visitor>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &visitor)
- {
- return Grammar::call(expr, BranchState(), visitor);
- }
- };
-
-}}}
-
-namespace boost { namespace proto
-{
- template<typename Grammar, typename BranchState>
- struct is_transform<transform::branch<Grammar, BranchState> >
- : mpl::true_
- {};
-}}
-
-#endif

Deleted: branches/fix-links/boost/xpressive/proto/transform/compose.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/compose.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
+++ (empty file)
@@ -1,58 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-/// \file compose.hpp
-/// A special-purpose proto transform for composing two transfomations. Given
-/// two Grammars, expressions that match the first grammar are transformed
-/// according to that grammar, and the result is forwarded to the second
-/// for further transformation.
-//
-// Copyright 2007 Eric Niebler. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_PROTO_TRANSFORM_COMPOSE_HPP_EAN_04_01_2007
-#define BOOST_PROTO_TRANSFORM_COMPOSE_HPP_EAN_04_01_2007
-
-#include <boost/xpressive/proto/detail/prefix.hpp>
-#include <boost/mpl/bool.hpp> // mpl::true_
-#include <boost/xpressive/proto/proto_fwd.hpp>
-#include <boost/xpressive/proto/detail/suffix.hpp>
-
-namespace boost { namespace proto { namespace transform
-{
-
- // Composes two transforms
- template<typename Grammar1, typename Grammar2>
- struct compose
- : Grammar1
- {
- compose() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- {
- typedef typename Grammar2::template apply<
- typename Grammar1::template apply<Expr, State, Visitor>::type
- , State
- , Visitor
- >::type type;
- };
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return Grammar2::call(Grammar1::call(expr, state, visitor), state, visitor);
- }
- };
-
-}}}
-
-namespace boost { namespace proto
-{
- template<typename Grammar1, typename Grammar2>
- struct is_transform<transform::compose<Grammar1, Grammar2> >
- : mpl::true_
- {};
-}}
-
-#endif

Deleted: branches/fix-links/boost/xpressive/proto/transform/construct.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/construct.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
+++ (empty file)
@@ -1,270 +0,0 @@
-#ifndef BOOST_PP_IS_ITERATING
- ///////////////////////////////////////////////////////////////////////////////
- /// \file construct.hpp
- /// For constructing an arbitrary type from a bunch of transforms.
- //
- // Copyright 2007 Eric Niebler. Distributed under the Boost
- // Software License, Version 1.0. (See accompanying file
- // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
- #ifndef BOOST_PROTO_TRANSFORM_CONSTRUCT_HPP_EAN_12_26_2006
- #define BOOST_PROTO_TRANSFORM_CONSTRUCT_HPP_EAN_12_26_2006
-
- #include <boost/xpressive/proto/detail/prefix.hpp>
- #include <boost/preprocessor/iterate.hpp>
- #include <boost/preprocessor/facilities/intercept.hpp>
- #include <boost/preprocessor/repetition/enum.hpp>
- #include <boost/preprocessor/repetition/enum_params.hpp>
- #include <boost/preprocessor/repetition/enum_trailing.hpp>
- #include <boost/preprocessor/repetition/enum_binary_params.hpp>
- #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
- #include <boost/mpl/bool.hpp>
- #include <boost/mpl/aux_/has_type.hpp>
- #include <boost/mpl/aux_/lambda_arity_param.hpp>
- #include <boost/type_traits/is_pod.hpp>
- #include <boost/type_traits/is_function.hpp>
- #include <boost/type_traits/remove_pointer.hpp>
- #include <boost/xpressive/proto/proto_fwd.hpp>
- #include <boost/xpressive/proto/detail/suffix.hpp>
-
- namespace boost { namespace proto { namespace transform
- {
- namespace detail
- {
- template<typename T>
- struct is_aggregate
- : is_pod<T>
- {};
-
- template<typename Tag, typename Args, long N>
- struct is_aggregate<expr<Tag, Args, N> >
- : mpl::true_
- {};
-
- template<typename T, bool HasType = mpl::aux::has_type<T>::value>
- struct nested_type
- {
- typedef typename T::type type;
- };
-
- template<typename T>
- struct nested_type<T, false>
- {
- typedef T type;
- };
-
- template<typename T BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(BOOST_PROTO_MAX_ARITY, typename A, = no_type BOOST_PP_INTERCEPT)>
- struct nested_type_if
- : nested_type<T>
- {
- typedef yes_type proto_transform_applied;
- };
-
- template<typename T>
- struct nested_type_if<T BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PROTO_MAX_ARITY, no_type BOOST_PP_INTERCEPT)>
- {
- typedef T type;
- typedef no_type proto_transform_applied;
- };
-
- template<typename Arg, bool IsFunction = is_function<typename remove_pointer<Arg>::type>::value>
- struct as_transform
- {
- typedef Arg type;
- };
-
- template<typename Arg>
- struct as_transform<Arg, true>
- {
- typedef construct<_, typename remove_pointer<Arg>::type> type;
- };
-
- template<typename Arg, bool IsFunction = is_function<typename remove_pointer<Arg>::type>::value>
- struct as_pod_transform
- {
- typedef Arg type;
- };
-
- template<typename Arg>
- struct as_pod_transform<Arg, true>
- {
- typedef pod_construct<_, typename remove_pointer<Arg>::type> type;
- };
-
- template<typename R, typename Expr, typename State, typename Visitor
- BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(long Arity = mpl::aux::template_arity<R>::value)
- >
- struct apply_aux_
- {
- typedef R type;
- typedef no_type proto_transform_applied;
- };
-
- template<typename R, typename Expr, typename State, typename Visitor, bool IsTransform = is_transform<R>::value>
- struct apply_
- : apply_aux_<R, Expr, State, Visitor>
- {};
-
- template<typename R, typename Expr, typename State, typename Visitor>
- struct apply_<R, Expr, State, Visitor, true>
- : nested_type<typename R::template apply<Expr, State, Visitor>::type>
- {
- typedef yes_type proto_transform_applied;
- };
-
- // work around GCC bug
- template<typename Tag, typename Args, long N, typename Expr, typename State, typename Visitor>
- struct apply_<expr<Tag, Args, N>, Expr, State, Visitor, false>
- {
- typedef expr<Tag, Args, N> type;
- typedef no_type proto_transform_applied;
- };
-
- template<typename T>
- void ignore_unused(T const &)
- {}
- }
-
- template<typename Grammar, typename ConstructorFun>
- struct construct
- : Grammar
- {
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : ConstructorFun::template apply<typename Grammar::template apply<Expr, State, Visitor>::type, State, Visitor>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return ConstructorFun::call(Grammar::call(expr, state, visitor), state, visitor);
- }
- };
-
- #define BOOST_PROTO_APPLY_(Z, N, DATA) \
- typename apply_<BOOST_PP_CAT(DATA, N), Expr, State, Visitor>::type \
- /**/
-
- #define BOOST_PROTO_IS_APPLIED_(Z, N, DATA) \
- typename apply_<BOOST_PP_CAT(DATA, N), Expr, State, Visitor>::proto_transform_applied \
- /**/
-
- #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, BOOST_PROTO_MAX_ARITY, <boost/xpressive/proto/transform/construct.hpp>))
- #include BOOST_PP_ITERATE()
-
- #undef BOOST_PROTO_APPLY_
- #undef BOOST_PROTO_IS_APPLIED_
-
- }}}
-
- namespace boost { namespace proto
- {
- template<typename Grammar, typename ConstructorFun>
- struct is_transform<transform::construct<Grammar, ConstructorFun> >
- : mpl::true_
- {};
-
- template<typename Grammar, typename ConstructorFun>
- struct is_transform<transform::pod_construct<Grammar, ConstructorFun> >
- : mpl::true_
- {};
- }}
-
- #endif
-
-#else
-
- #define N BOOST_PP_ITERATION()
-
- #if N > 0
- namespace detail
- {
- template<
- template<BOOST_PP_ENUM_PARAMS(N, typename BOOST_PP_INTERCEPT)> class T
- BOOST_PP_ENUM_TRAILING_PARAMS(N, typename G),
- typename Expr, typename State, typename Visitor
- >
- struct apply_aux_<T<BOOST_PP_ENUM_PARAMS(N, G)>, Expr, State, Visitor BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(N)>
- : nested_type_if<
- T<BOOST_PP_ENUM(N, BOOST_PROTO_APPLY_, G)>
- BOOST_PP_ENUM_TRAILING(N, BOOST_PROTO_IS_APPLIED_, G)
- >
- {};
- }
- #endif
-
- template<typename Grammar, typename Result BOOST_PP_ENUM_TRAILING_PARAMS(N, typename Arg)>
- struct construct<Grammar, Result(BOOST_PP_ENUM_PARAMS(N, Arg))>
- : Grammar
- {
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : detail::apply_<Result, typename Grammar::template apply<Expr, State, Visitor>::type, State, Visitor>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- typedef typename apply<Expr, State, Visitor>::type result_type;
- return construct::call_(expr, state, visitor, detail::is_aggregate<result_type>());
- }
-
- private:
- /// INTERNAL ONLY
- ///
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call_(Expr const &expr, State const &state, Visitor &visitor, mpl::true_)
- {
- typename Grammar::template apply<Expr, State, Visitor>::type const &expr2
- = Grammar::call(expr, state, visitor);
- detail::ignore_unused(expr2);
- typename apply<Expr, State, Visitor>::type that = {
- BOOST_PP_ENUM_BINARY_PARAMS(N, detail::as_transform<Arg, >::type::call(expr2, state, visitor) BOOST_PP_INTERCEPT)
- };
- return that;
- }
-
- /// INTERNAL ONLY
- ///
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call_(Expr const &expr, State const &state, Visitor &visitor, mpl::false_)
- {
- typename Grammar::template apply<Expr, State, Visitor>::type const &expr2
- = Grammar::call(expr, state, visitor);
- detail::ignore_unused(expr2);
- return typename apply<Expr, State, Visitor>::type(
- BOOST_PP_ENUM_BINARY_PARAMS(N, detail::as_transform<Arg, >::type::call(expr2, state, visitor) BOOST_PP_INTERCEPT)
- );
- }
- };
-
- template<typename Grammar, typename Result BOOST_PP_ENUM_TRAILING_PARAMS(N, typename Arg)>
- struct pod_construct<Grammar, Result(BOOST_PP_ENUM_PARAMS(N, Arg))>
- : Grammar
- {
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : detail::apply_<Result, typename Grammar::template apply<Expr, State, Visitor>::type, State, Visitor>
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- typename Grammar::template apply<Expr, State, Visitor>::type const &expr2
- = Grammar::call(expr, state, visitor);
- detail::ignore_unused(expr2);
- typename apply<Expr, State, Visitor>::type that = {
- BOOST_PP_ENUM_BINARY_PARAMS(N, detail::as_pod_transform<Arg, >::type::call(expr2, state, visitor) BOOST_PP_INTERCEPT)
- };
- return that;
- }
- };
-
- #undef N
-
-#endif

Modified: branches/fix-links/boost/xpressive/proto/transform/fold.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/fold.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/transform/fold.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,145 +1,217 @@
 #ifndef BOOST_PP_IS_ITERATING
     ///////////////////////////////////////////////////////////////////////////////
     /// \file fold.hpp
- /// A special-purpose proto transform for merging sequences of binary operations.
- /// It transforms the right operand and passes the result as state while transforming
- /// the left. Or, it might do the left first, if you choose.
+ /// Contains definition of the fold<> and reverse_fold<> transforms.
     //
     // Copyright 2007 Eric Niebler. Distributed under the Boost
     // Software License, Version 1.0. (See accompanying file
     // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
- #ifndef BOOST_PROTO_TRANSFORM_FOLD_HPP_EAN_12_16_2006
- #define BOOST_PROTO_TRANSFORM_FOLD_HPP_EAN_12_16_2006
+ #ifndef BOOST_PROTO_TRANSFORM_FOLD_HPP_EAN_11_04_2007
+ #define BOOST_PROTO_TRANSFORM_FOLD_HPP_EAN_11_04_2007
 
     #include <boost/xpressive/proto/detail/prefix.hpp>
     #include <boost/preprocessor/cat.hpp>
+ #include <boost/preprocessor/iteration/iterate.hpp>
     #include <boost/preprocessor/arithmetic/inc.hpp>
     #include <boost/preprocessor/arithmetic/sub.hpp>
- #include <boost/preprocessor/iteration/iterate.hpp>
     #include <boost/preprocessor/repetition/repeat.hpp>
+ #include <boost/fusion/include/fold.hpp>
+ #include <boost/fusion/include/reverse.hpp>
     #include <boost/xpressive/proto/proto_fwd.hpp>
+ #include <boost/xpressive/proto/fusion.hpp>
     #include <boost/xpressive/proto/traits.hpp>
- #include <boost/xpressive/proto/transform/branch.hpp>
     #include <boost/xpressive/proto/detail/suffix.hpp>
 
- namespace boost { namespace proto { namespace transform
+ namespace boost { namespace proto
     {
 
- namespace detail
+ namespace transform
         {
- template<typename Grammar, typename Expr, typename State, typename Visitor, long Arity = Expr::proto_arity::value>
- struct fold_impl
- {};
 
- template<typename Grammar, typename Expr, typename State, typename Visitor, long Arity = Expr::proto_arity::value>
- struct reverse_fold_impl
- {};
+ namespace detail
+ {
 
- #define BOOST_PROTO_ARG_N_TYPE(n)\
- BOOST_PP_CAT(proto_arg, n)\
- /**/
-
- #define BOOST_PROTO_FOLD_STATE_TYPE(z, n, data)\
- typedef typename Grammar::BOOST_PROTO_ARG_N_TYPE(n)::template\
- apply<typename Expr::BOOST_PROTO_ARG_N_TYPE(n)::proto_base_expr, BOOST_PP_CAT(state, n), Visitor>::type\
- BOOST_PP_CAT(state, BOOST_PP_INC(n));\
- /**/
-
- #define BOOST_PROTO_FOLD_STATE(z, n, data)\
- BOOST_PP_CAT(state, BOOST_PP_INC(n)) const &BOOST_PP_CAT(s, BOOST_PP_INC(n)) =\
- Grammar::BOOST_PROTO_ARG_N_TYPE(n)::call(expr.BOOST_PP_CAT(arg, n).proto_base(), BOOST_PP_CAT(s, n), visitor);\
- /**/
-
- #define BOOST_PROTO_REVERSE_FOLD_STATE_TYPE(z, n, data)\
- typedef typename Grammar::BOOST_PROTO_ARG_N_TYPE(BOOST_PP_SUB(data, BOOST_PP_INC(n)))::template\
- apply<typename Expr::BOOST_PROTO_ARG_N_TYPE(BOOST_PP_SUB(data, BOOST_PP_INC(n)))::proto_base_expr, BOOST_PP_CAT(state, BOOST_PP_SUB(data, n)), Visitor>::type\
- BOOST_PP_CAT(state, BOOST_PP_SUB(data, BOOST_PP_INC(n)));\
- /**/
-
- #define BOOST_PROTO_REVERSE_FOLD_STATE(z, n, data)\
- BOOST_PP_CAT(state, BOOST_PP_SUB(data, BOOST_PP_INC(n))) const &BOOST_PP_CAT(s, BOOST_PP_SUB(data, BOOST_PP_INC(n))) =\
- Grammar::BOOST_PROTO_ARG_N_TYPE(BOOST_PP_SUB(data, BOOST_PP_INC(n)))::call(expr.BOOST_PP_CAT(arg, BOOST_PP_SUB(data, BOOST_PP_INC(n))).proto_base(), BOOST_PP_CAT(s, BOOST_PP_SUB(data, n)), visitor);\
- /**/
-
- #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/xpressive/proto/transform/fold.hpp>))
- #include BOOST_PP_ITERATE()
-
- #undef BOOST_PROTO_REVERSE_FOLD_STATE
- #undef BOOST_PROTO_REVERSE_FOLD_STATE_TYPE
- #undef BOOST_PROTO_FOLD_STATE
- #undef BOOST_PROTO_FOLD_STATE_TYPE
- #undef BOOST_PROTO_ARG_N_TYPE
- }
+ template<typename Transform, typename Visitor>
+ struct as_callable
+ {
+ as_callable(Visitor &v)
+ : v_(v)
+ {}
+
+ typedef when<_, Transform> Tfx;
+
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State>
+ struct result<This(Expr, State)>
+ : Tfx::template result<void(typename proto::detail::remove_cv_ref<Expr>::type
+ , typename proto::detail::remove_cv_ref<State>::type
+ , Visitor)>
+ {};
+
+ template<typename Expr, typename State>
+ typename Tfx::template result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state) const
+ {
+ return Tfx()(expr, state, this->v_);
+ }
+
+ private:
+ Visitor &v_;
+ };
+
+
+ template<typename Fun, typename Expr, typename State, typename Visitor, long Arity = Expr::proto_arity::value>
+ struct fold_impl
+ {};
+
+ template<typename Fun, typename Expr, typename State, typename Visitor, long Arity = Expr::proto_arity::value>
+ struct reverse_fold_impl
+ {};
+
+ #define BOOST_PROTO_ARG_N_TYPE(n)\
+ BOOST_PP_CAT(proto_arg, n)\
+ /**/
+
+ #define BOOST_PROTO_FOLD_STATE_TYPE(z, n, data)\
+ typedef typename when<_, Fun>::template\
+ result<void(typename Expr::BOOST_PROTO_ARG_N_TYPE(n)::proto_base_expr, BOOST_PP_CAT(state, n), Visitor)>::type\
+ BOOST_PP_CAT(state, BOOST_PP_INC(n));\
+ /**/
+
+ #define BOOST_PROTO_FOLD_STATE(z, n, data)\
+ BOOST_PP_CAT(state, BOOST_PP_INC(n)) const &BOOST_PP_CAT(s, BOOST_PP_INC(n)) =\
+ when<_, Fun>()(expr.BOOST_PP_CAT(arg, n).proto_base(), BOOST_PP_CAT(s, n), visitor);\
+ /**/
+
+ #define BOOST_PROTO_REVERSE_FOLD_STATE_TYPE(z, n, data)\
+ typedef typename when<_, Fun>::template\
+ result<void(typename Expr::BOOST_PROTO_ARG_N_TYPE(BOOST_PP_SUB(data, BOOST_PP_INC(n)))::proto_base_expr, BOOST_PP_CAT(state, BOOST_PP_SUB(data, n)), Visitor)>::type\
+ BOOST_PP_CAT(state, BOOST_PP_SUB(data, BOOST_PP_INC(n)));\
+ /**/
+
+ #define BOOST_PROTO_REVERSE_FOLD_STATE(z, n, data)\
+ BOOST_PP_CAT(state, BOOST_PP_SUB(data, BOOST_PP_INC(n))) const &BOOST_PP_CAT(s, BOOST_PP_SUB(data, BOOST_PP_INC(n))) =\
+ when<_, Fun>()(expr.BOOST_PP_CAT(arg, BOOST_PP_SUB(data, BOOST_PP_INC(n))).proto_base(), BOOST_PP_CAT(s, BOOST_PP_SUB(data, n)), visitor);\
+ /**/
+
+ #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PROTO_MAX_ARITY, <boost/xpressive/proto/transform/fold.hpp>))
+ #include BOOST_PP_ITERATE()
+
+ #undef BOOST_PROTO_REVERSE_FOLD_STATE
+ #undef BOOST_PROTO_REVERSE_FOLD_STATE_TYPE
+ #undef BOOST_PROTO_FOLD_STATE
+ #undef BOOST_PROTO_FOLD_STATE_TYPE
+ #undef BOOST_PROTO_ARG_N_TYPE
 
- // A fold transform that transforms the left sub-tree and
- // uses the result as state while transforming the right.
- template<typename Grammar>
- struct fold<Grammar, void>
- : Grammar
- {
- fold() {}
+ } // namespace detail
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : detail::fold_impl<Grammar, typename Expr::proto_base_expr, State, Visitor>
- {};
+ template<typename Sequence, typename State0, typename Fun>
+ struct fold : callable
+ {
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return apply<Expr, State, Visitor>::call(expr.proto_base(), state, visitor);
- }
- };
-
- // A reverse_fold compiler that compiles the right sub-tree and
- // uses the result as state while compiling the left.
- template<typename Grammar>
- struct reverse_fold<Grammar, void>
- : Grammar
- {
- reverse_fold() {}
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : fusion::result_of::fold<
+ typename when<_, Sequence>::template result<void(Expr, State, Visitor)>::type
+ , typename when<_, State0>::template result<void(Expr, State, Visitor)>::type
+ , detail::as_callable<Fun, Visitor>
+ >
+ {};
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ detail::as_callable<Fun, Visitor> fun(visitor);
+ return fusion::fold(
+ when<_, Sequence>()(expr, state, visitor)
+ , when<_, State0>()(expr, state, visitor)
+ , fun
+ );
+ }
+ };
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : detail::reverse_fold_impl<Grammar, typename Expr::proto_base_expr, State, Visitor>
+ template<typename Sequence, typename State, typename Fun>
+ struct reverse_fold
+ : fold<_reverse(Sequence), State, Fun>
             {};
 
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return apply<Expr, State, Visitor>::call(expr.proto_base(), state, visitor);
- }
- };
-
- // Causes Doxygen to crash. Sigh.
- #ifndef BOOST_PROTO_DOXYGEN_INVOKED
- template<typename Grammar, typename State>
- struct fold
- : branch<fold<Grammar, void>, State>
- {};
+ // A fold transform that transforms the left sub-tree and
+ // uses the result as state while transforming the right.
+ template<typename State0, typename Fun>
+ struct fold<_, State0, Fun> : callable
+ {
+ template<typename Sig>
+ struct result;
 
- template<typename Grammar, typename State>
- struct reverse_fold
- : branch<reverse_fold<Grammar, void>, State>
- {};
- #endif
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : detail::fold_impl<
+ Fun
+ , typename Expr::proto_base_expr
+ , typename when<_, State0>::template result<void(Expr, State, Visitor)>::type
+ , Visitor
+ >
+ {};
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ return result<void(Expr, State, Visitor)>::call(
+ expr.proto_base()
+ , when<_, State0>()(expr, state, visitor)
+ , visitor
+ );
+ }
+ };
 
- }}}
+ // A reverse_fold compiler that compiles the right sub-tree and
+ // uses the result as state while compiling the left.
+ template<typename State0, typename Fun>
+ struct reverse_fold<_, State0, Fun> : callable
+ {
+ template<typename Sig>
+ struct result;
 
- namespace boost { namespace proto
- {
- template<typename Grammar, typename State>
- struct is_transform<transform::fold<Grammar, State> >
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : detail::reverse_fold_impl<
+ Fun
+ , typename Expr::proto_base_expr
+ , typename when<_, State0>::template result<void(Expr, State, Visitor)>::type
+ , Visitor
+ >
+ {};
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ return result<void(Expr, State, Visitor)>::call(
+ expr.proto_base()
+ , when<_, State0>()(expr, state, visitor)
+ , visitor
+ );
+ }
+ };
+ }
+
+ template<typename Sequence, typename State, typename Fun>
+ struct is_callable<transform::fold<Sequence, State, Fun> >
           : mpl::true_
         {};
 
- template<typename Grammar, typename State>
- struct is_transform<transform::reverse_fold<Grammar, State> >
+ template<typename Sequence, typename State, typename Fun>
+ struct is_callable<transform::reverse_fold<Sequence, State, Fun> >
           : mpl::true_
         {};
+
     }}
 
     #endif
@@ -148,8 +220,8 @@
 
     #define N BOOST_PP_ITERATION()
 
- template<typename Grammar, typename Expr, typename state0, typename Visitor>
- struct fold_impl<Grammar, Expr, state0, Visitor, N>
+ template<typename Fun, typename Expr, typename state0, typename Visitor>
+ struct fold_impl<Fun, Expr, state0, Visitor, N>
             {
                 BOOST_PP_REPEAT(N, BOOST_PROTO_FOLD_STATE_TYPE, N)
                 typedef BOOST_PP_CAT(state, N) type;
@@ -161,8 +233,8 @@
                 }
             };
 
- template<typename Grammar, typename Expr, typename BOOST_PP_CAT(state, N), typename Visitor>
- struct reverse_fold_impl<Grammar, Expr, BOOST_PP_CAT(state, N), Visitor, N>
+ template<typename Fun, typename Expr, typename BOOST_PP_CAT(state, N), typename Visitor>
+ struct reverse_fold_impl<Fun, Expr, BOOST_PP_CAT(state, N), Visitor, N>
             {
                 BOOST_PP_REPEAT(N, BOOST_PROTO_REVERSE_FOLD_STATE_TYPE, N)
                 typedef state0 type;
@@ -173,6 +245,7 @@
                     return s0;
                 }
             };
+
     #undef N
 
 #endif

Modified: branches/fix-links/boost/xpressive/proto/transform/fold_tree.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/fold_tree.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/transform/fold_tree.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,76 +1,115 @@
 ///////////////////////////////////////////////////////////////////////////////
-/// \file fold_tree.hpp
-/// A higher-level transform that uses the fold, and branch transforms
-/// to recursively fold a tree.
+/// \file fold.hpp
+/// Contains definition of the fold_tree<> and reverse_fold_tree<> transforms.
 //
 // Copyright 2007 Eric Niebler. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 
-#ifndef BOOST_PROTO_TRANSFORM_FOLD_TREE_HPP_EAN_06_18_2007
-#define BOOST_PROTO_TRANSFORM_FOLD_TREE_HPP_EAN_06_18_2007
+#ifndef BOOST_PROTO_TRANSFORM_FOLD_TREE_HPP_EAN_11_05_2007
+#define BOOST_PROTO_TRANSFORM_FOLD_TREE_HPP_EAN_11_05_2007
 
 #include <boost/xpressive/proto/detail/prefix.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/xpressive/proto/proto_fwd.hpp>
+#include <boost/xpressive/proto/traits.hpp>
+#include <boost/xpressive/proto/matches.hpp>
 #include <boost/xpressive/proto/transform/fold.hpp>
 #include <boost/xpressive/proto/detail/suffix.hpp>
 
-namespace boost { namespace proto { namespace transform
+namespace boost { namespace proto
 {
-
- namespace detail
+ namespace transform
     {
- template<typename Tag, typename Grammar>
- struct fold_tree_
- : or_<
- transform::fold<
- nary_expr<Tag, vararg<fold_tree_<Tag, Grammar> > >
- >
- , Grammar
- >
- {};
-
- template<typename Tag, typename Grammar>
- struct reverse_fold_tree_
- : or_<
- transform::reverse_fold<
- nary_expr<Tag, vararg<reverse_fold_tree_<Tag, Grammar> > >
- >
- , Grammar
- >
- {};
+ namespace detail
+ {
+ template<typename Tag>
+ struct is_tag : callable
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : is_same<Tag, typename Expr::proto_tag>
+ {};
+ };
+
+ template<typename Tag, typename Fun>
+ struct fold_tree_
+ : if_<is_tag<Tag>, fold<_, _state, fold_tree_<Tag, Fun> >, Fun>
+ {};
+
+ template<typename Tag, typename Fun>
+ struct reverse_fold_tree_
+ : if_<is_tag<Tag>, reverse_fold<_, _state, reverse_fold_tree_<Tag, Fun> >, Fun>
+ {};
+ }
+
+ template<typename Sequence, typename State0, typename Fun>
+ struct fold_tree
+ : callable
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ {
+ typedef fold<
+ Sequence
+ , State0
+ , detail::fold_tree_<typename Expr::proto_tag, Fun>
+ > impl;
+
+ typedef typename impl::template result<void(Expr, State, Visitor)>::type type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<fold_tree(Expr const &, State const &, Visitor &)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ typedef typename result<void(Expr, State, Visitor)>::impl impl;
+ return impl()(expr, state, visitor);
+ }
+ };
+
+ template<typename Sequence, typename State0, typename Fun>
+ struct reverse_fold_tree
+ : callable
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ {
+ typedef reverse_fold<
+ Sequence
+ , State0
+ , detail::reverse_fold_tree_<typename Expr::proto_tag, Fun>
+ > impl;
+
+ typedef typename impl::template result<void(Expr, State, Visitor)>::type type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ typedef typename result<void(Expr, State, Visitor)>::impl impl;
+ return impl()(expr, state, visitor);
+ }
+ };
     }
 
- /// fold_tree
- ///
- template<typename Tag, typename Grammar, typename State>
- struct fold_tree
- : transform::fold<
- nary_expr<Tag, vararg<detail::fold_tree_<Tag, Grammar> > >
- , State
- >
- {};
-
- /// reverse_fold_tree
- ///
- template<typename Tag, typename Grammar, typename State>
- struct reverse_fold_tree
- : transform::reverse_fold<
- nary_expr<Tag, vararg<detail::reverse_fold_tree_<Tag, Grammar> > >
- , State
- >
- {};
-
-}}}
-
-namespace boost { namespace proto
-{
- template<typename Tag, typename Grammar, typename State>
- struct is_transform<transform::fold_tree<Tag, Grammar, State> >
+ template<typename Sequence, typename State0, typename Fun>
+ struct is_callable<transform::fold_tree<Sequence, State0, Fun> >
       : mpl::true_
     {};
 
- template<typename Tag, typename Grammar, typename State>
- struct is_transform<transform::reverse_fold_tree<Tag, Grammar, State> >
+ template<typename Sequence, typename State0, typename Fun>
+ struct is_callable<transform::reverse_fold_tree<Sequence, State0, Fun> >
       : mpl::true_
     {};
 }}

Deleted: branches/fix-links/boost/xpressive/proto/transform/function.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/function.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
+++ (empty file)
@@ -1,115 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-/// \file function.hpp
-/// Proto transforms for applying a function object.
-//
-// Copyright 2007 Eric Niebler. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_PROTO_TRANSFORM_FUNCTION_HPP_EAN_06_23_2007
-#define BOOST_PROTO_TRANSFORM_FUNCTION_HPP_EAN_06_23_2007
-
-#include <boost/xpressive/proto/detail/prefix.hpp>
-#include <boost/utility/result_of.hpp>
-#include <boost/xpressive/proto/proto_fwd.hpp>
-#include <boost/xpressive/proto/detail/suffix.hpp>
-
-namespace boost { namespace proto { namespace transform
-{
-
- // Apply a function object, passing just Expr
- template<typename Grammar, typename Function1>
- struct function1
- : Grammar
- {
- function1() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : boost::result_of<
- Function1(
- typename Grammar::template apply<Expr, State, Visitor>::type
- )
- >
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return Function1()(Grammar::call(expr, state, visitor));
- }
- };
-
- // Apply a function object, passing Expr and State
- template<typename Grammar, typename Function2>
- struct function2
- : Grammar
- {
- function2() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : boost::result_of<
- Function2(
- typename Grammar::template apply<Expr, State, Visitor>::type
- , State const &
- )
- >
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return Function2()(Grammar::call(expr, state, visitor), state);
- }
- };
-
- // Apply a function object, passing Expr, State and Visitor
- template<typename Grammar, typename Function3>
- struct function3
- : Grammar
- {
- function3() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : boost::result_of<
- Function3(
- typename Grammar::template apply<Expr, State, Visitor>::type
- , State const &
- , Visitor &
- )
- >
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return Function3()(Grammar::call(expr, state, visitor), state, visitor);
- }
- };
-
-}}}
-
-namespace boost { namespace proto
-{
- template<typename Grammar, typename Function1>
- struct is_transform<transform::function1<Grammar, Function1> >
- : mpl::true_
- {};
-
- template<typename Grammar, typename Function2>
- struct is_transform<transform::function2<Grammar, Function2> >
- : mpl::true_
- {};
-
- template<typename Grammar, typename Function3>
- struct is_transform<transform::function3<Grammar, Function3> >
- : mpl::true_
- {};
-}}
-
-#endif

Deleted: branches/fix-links/boost/xpressive/proto/transform/list.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/list.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
+++ (empty file)
@@ -1,87 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////
-/// \file list.hpp
-/// A special-purpose proto transform for putting things into a
-/// fusion::cons<> list.
-//
-// Copyright 2007 Eric Niebler. Distributed under the Boost
-// Software License, Version 1.0. (See accompanying file
-// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_PROTO_TRANSFORM_LIST_HPP_EAN_12_16_2006
-#define BOOST_PROTO_TRANSFORM_LIST_HPP_EAN_12_16_2006
-
-#include <boost/xpressive/proto/detail/prefix.hpp>
-#include <boost/version.hpp>
-#if BOOST_VERSION < 103500
-# include <boost/spirit/fusion/sequence/cons.hpp>
-#else
-# include <boost/fusion/include/cons.hpp>
-#endif
-#include <boost/xpressive/proto/proto_fwd.hpp>
-#include <boost/xpressive/proto/detail/suffix.hpp>
-
-namespace boost { namespace proto { namespace transform
-{
-
- // A list transform, that puts elements into a fusion cons-list
- template<typename Grammar>
- struct list
- : Grammar
- {
- list() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- {
- typedef fusion::cons<
- typename Grammar::template apply<Expr, State, Visitor>::type
- , State
- > type;
- };
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return typename apply<Expr, State, Visitor>::type
- (Grammar::call(expr, state, visitor), state);
- }
- };
-
- // A tail transform, that returns the tail of a fusion cons-list
- template<typename Grammar>
- struct tail
- : Grammar
- {
- tail() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- {
- typedef typename Grammar::template apply<Expr, State, Visitor>::type::cdr_type type;
- };
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return Grammar::call(expr, state, visitor).cdr;
- }
- };
-
-}}}
-
-namespace boost { namespace proto
-{
- template<typename Grammar>
- struct is_transform<transform::list<Grammar> >
- : mpl::true_
- {};
-
- template<typename Grammar>
- struct is_transform<transform::tail<Grammar> >
- : mpl::true_
- {};
-}}
-
-#endif

Modified: branches/fix-links/boost/xpressive/proto/transform/pass_through.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/transform/pass_through.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/transform/pass_through.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -12,8 +12,8 @@
 
     #include <boost/xpressive/proto/detail/prefix.hpp>
     #include <boost/preprocessor/cat.hpp>
- #include <boost/preprocessor/enum.hpp>
- #include <boost/preprocessor/iterate.hpp>
+ #include <boost/preprocessor/repetition/enum.hpp>
+ #include <boost/preprocessor/iteration/iterate.hpp>
     #include <boost/mpl/if.hpp>
     #include <boost/xpressive/proto/proto_fwd.hpp>
     #include <boost/xpressive/proto/args.hpp>
@@ -28,11 +28,11 @@
 
             #define BOOST_PROTO_DEFINE_TRANSFORM_TYPE(z, n, data)\
                 typename Grammar::BOOST_PP_CAT(proto_arg, n)\
- ::template apply<typename Expr::BOOST_PP_CAT(proto_arg, n)::proto_base_expr, State, Visitor>\
+ ::template result<void(typename Expr::BOOST_PP_CAT(proto_arg, n)::proto_base_expr, State, Visitor)>\
                 ::type
 
             #define BOOST_PROTO_DEFINE_TRANSFORM(z, n, data)\
- Grammar::BOOST_PP_CAT(proto_arg, n)::call(\
+ typename Grammar::BOOST_PP_CAT(proto_arg, n)()(\
                     expr.BOOST_PP_CAT(arg, n).proto_base(), state, visitor\
                 )
 
@@ -55,14 +55,14 @@
         } // namespace detail
 
         template<typename Grammar>
- struct pass_through
- : Grammar
+ struct pass_through : callable
         {
- pass_through() {}
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : detail::pass_through_impl<
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : transform::detail::pass_through_impl<
                     Grammar
                   , typename Expr::proto_base_expr
                   , State
@@ -72,47 +72,20 @@
             {};
 
             template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
             {
- return apply<Expr, State, Visitor>::call(expr.proto_base(), state, visitor);
+ return result<void(Expr, State, Visitor)>::call(expr.proto_base(), state, visitor);
             }
         };
+
     } // namespace transform
 
     template<typename Grammar>
- struct is_transform<transform::pass_through<Grammar> >
+ struct is_callable<transform::pass_through<Grammar> >
       : mpl::true_
     {};
 
- namespace has_transformns_
- {
- template<typename Grammar>
- struct has_pass_through_transform
- {
- has_pass_through_transform() {}
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : transform::detail::pass_through_impl<
- Grammar
- , typename Expr::proto_base_expr
- , State
- , Visitor
- , Expr::proto_arity::value
- >
- {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return apply<Expr, State, Visitor>::call(expr.proto_base(), state, visitor);
- }
- };
-
- } // namespace has_transformns_
-
     }} // namespace boost::proto
 
     #endif
@@ -124,7 +97,7 @@
             template<typename Grammar, typename Expr, typename State, typename Visitor>
             struct pass_through_impl<Grammar, Expr, State, Visitor, N>
             {
- typedef expr<
+ typedef proto::expr<
                     typename Expr::proto_tag
                   , BOOST_PP_CAT(args, N)<
                         BOOST_PP_ENUM(N, BOOST_PROTO_DEFINE_TRANSFORM_TYPE, ~)

Modified: branches/fix-links/boost/xpressive/regex_actions.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/regex_actions.hpp (original)
+++ branches/fix-links/boost/xpressive/regex_actions.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -40,7 +40,7 @@
 
 // Doxygen can't handle proto :-(
 #ifndef BOOST_XPRESSIVE_DOXYGEN_INVOKED
-# include <boost/xpressive/proto/transform/fold.hpp>
+# include <boost/xpressive/proto/transform.hpp>
 # include <boost/xpressive/detail/core/matcher/action_matcher.hpp>
 #endif
 
@@ -86,21 +86,15 @@
         struct check_tag
         {};
 
- template<typename Grammar>
- struct BindArg
- : Grammar
+ struct BindArg : proto::callable
         {
- template<typename Expr, typename State, typename Visitor>
- struct apply
- {
- typedef State type;
- };
+ typedef int result_type;
 
- template<typename Expr, typename State, typename Visitor>
- static State call(Expr const &expr, State const &state, Visitor &visitor)
+ template<typename Visitor, typename Expr>
+ int operator ()(Visitor &visitor, Expr const &expr) const
             {
                 visitor.let(expr);
- return state;
+ return 0;
             }
         };
 
@@ -108,10 +102,15 @@
         {};
 
         struct BindArgs
- : boost::proto::transform::fold<
- boost::proto::function<
- boost::proto::transform::state<boost::proto::terminal<let_tag> >
- , boost::proto::vararg< BindArg< boost::proto::assign<boost::proto::_, boost::proto::_> > >
+ : proto::when<
+ // let(_a = b, _c = d)
+ proto::function<
+ proto::terminal<let_tag>
+ , proto::vararg<proto::assign<proto::_, proto::_> >
+ >
+ , proto::function<
+ proto::_state // no-op
+ , proto::vararg<proto::call<BindArg(proto::_visitor, proto::_)> >
>
>
         {};
@@ -130,7 +129,7 @@
         template<typename Args, typename BidiIter>
         void bind_args(let_<Args> const &args, match_results<BidiIter> &what)
         {
- BindArgs::call(args, 0, what);
+ BindArgs()(args, 0, what);
         }
     }
 

Modified: branches/fix-links/boost/xpressive/regex_compiler.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/regex_compiler.hpp (original)
+++ branches/fix-links/boost/xpressive/regex_compiler.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -502,10 +502,10 @@
             return detail::make_assert_end_line<BidiIter>(this->traits_.flags(), this->rxtraits());
 
         case token_assert_word_boundary:
- return detail::make_assert_word<BidiIter>(detail::word_boundary<true>(), this->rxtraits());
+ return detail::make_assert_word<BidiIter>(detail::word_boundary<mpl::true_>(), this->rxtraits());
 
         case token_assert_not_word_boundary:
- return detail::make_assert_word<BidiIter>(detail::word_boundary<false>(), this->rxtraits());
+ return detail::make_assert_word<BidiIter>(detail::word_boundary<mpl::false_>(), this->rxtraits());
 
         case token_assert_word_begin:
             return detail::make_assert_word<BidiIter>(detail::word_begin(), this->rxtraits());

Modified: branches/fix-links/boost/xpressive/regex_primitives.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/regex_primitives.hpp (original)
+++ branches/fix-links/boost/xpressive/regex_primitives.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -11,9 +11,11 @@
 
 #include <vector>
 #include <climits>
+#include <boost/config.hpp>
 #include <boost/mpl/if.hpp>
 #include <boost/mpl/and.hpp>
 #include <boost/mpl/assert.hpp>
+#include <boost/detail/workaround.hpp>
 #include <boost/preprocessor/cat.hpp>
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/core/matchers.hpp>
@@ -22,7 +24,7 @@
 // Doxygen can't handle proto :-(
 #ifndef BOOST_XPRESSIVE_DOXYGEN_INVOKED
 # include <boost/xpressive/proto/proto.hpp>
-# include <boost/xpressive/proto/transform/arg.hpp>
+# include <boost/xpressive/proto/transform.hpp>
 # include <boost/xpressive/detail/core/icase.hpp>
 # include <boost/xpressive/detail/static/compile.hpp>
 # include <boost/xpressive/detail/static/modifier.hpp>
@@ -31,7 +33,7 @@
 namespace boost { namespace xpressive { namespace detail
 {
 
- typedef assert_word_placeholder<word_boundary<true> > assert_word_boundary;
+ typedef assert_word_placeholder<word_boundary<mpl::true_> > assert_word_boundary;
     typedef assert_word_placeholder<word_begin> assert_word_begin;
     typedef assert_word_placeholder<word_end> assert_word_end;
 
@@ -52,33 +54,44 @@
         using proto::extends<basic_mark_tag, mark_tag>::operator =;
     };
 
- template<typename Grammar>
- struct push_back_sub
- : proto::transform::identity<Grammar>
+ // workaround msvc-7.1 bug with function pointer types
+ // within function types:
+ #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+ #define mark_number(x) proto::call<mark_number(x)>
+ #define minus_one() proto::make<minus_one()>
+ #endif
+
+ struct push_back : proto::callable
     {
- template<typename Sub>
- static int to_sub(Sub const &sub, proto::tag::terminal)
- {
- return proto::arg(sub).mark_number_;
- }
+ typedef int result_type;
 
- template<typename Sub>
- static int to_sub(Sub const &, proto::tag::negate)
+ template<typename Subs>
+ int operator ()(Subs &subs, int i) const
         {
- return -1;
+ subs.push_back(i);
+ return i;
         }
+ };
 
- template<typename Expr, typename State, typename Visitor>
- static Expr const &call(Expr const &expr, State const &, Visitor &subs)
+ struct mark_number : proto::callable
+ {
+ typedef int result_type;
+
+ template<typename Expr>
+ int operator ()(Expr const &expr) const
         {
- subs.push_back(push_back_sub::to_sub(expr, typename Expr::proto_tag()));
- return expr;
+ return expr.mark_number_;
         }
     };
 
+ typedef mpl::int_<-1> minus_one;
+
     // s1 or -s1
     struct SubMatch
- : push_back_sub<proto::or_<basic_mark_tag, proto::negate<basic_mark_tag > > >
+ : proto::or_<
+ proto::when<basic_mark_tag, push_back(proto::_visitor, mark_number(proto::_arg)) >
+ , proto::when<proto::negate<basic_mark_tag>, push_back(proto::_visitor, minus_one()) >
+ >
     {};
 
     struct SubMatchList
@@ -93,10 +106,101 @@
     to_vector(Subs const &subs)
     {
         std::vector<int> subs_;
- SubMatchList::call(subs, 0, subs_);
+ SubMatchList()(subs, 0, subs_);
         return subs_;
     }
 
+ #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+ #undef mark_number
+ #undef minus_one
+ #endif
+
+ // replace "Expr" with "keep(*State) >> Expr"
+ struct skip_primitives : proto::callable
+ {
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : proto::shift_right<
+ typename proto::unary_expr<
+ keeper_tag
+ , typename proto::dereference<State>::type
+ >::type
+ , Expr
+ >
+ {};
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator ()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ typedef typename result<void(Expr, State, Visitor)>::type type;
+ type that = {{{state}}, expr};
+ return that;
+ }
+ };
+
+ struct Primitives
+ : proto::or_<
+ proto::terminal<proto::_>
+ , proto::comma<proto::_, proto::_>
+ , proto::subscript<proto::terminal<set_initializer>, proto::_>
+ , proto::assign<proto::terminal<set_initializer>, proto::_>
+ , proto::assign<proto::terminal<attribute_placeholder<proto::_> >, proto::_>
+ , proto::complement<Primitives>
+ >
+ {};
+
+ struct SkipGrammar
+ : proto::or_<
+ proto::when<Primitives, skip_primitives>
+ , proto::assign<proto::terminal<mark_placeholder>, SkipGrammar> // don't "skip" mark tags
+ , proto::subscript<SkipGrammar, proto::_> // don't put skips in actions
+ , proto::binary_expr<modifier_tag, proto::_, SkipGrammar> // don't skip modifiers
+ , proto::unary_expr<lookbehind_tag, proto::_> // don't skip lookbehinds
+ , proto::nary_expr<proto::_, proto::vararg<SkipGrammar> > // everything else is fair game!
+ >
+ {};
+
+ template<typename Skip>
+ struct skip_directive
+ {
+ typedef typename proto::result_of::as_expr<Skip>::type skip_type;
+
+ skip_directive(Skip const &skip)
+ : skip_(proto::as_expr(skip))
+ {}
+
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr>
+ struct result<This(Expr)>
+ : proto::shift_right<
+ typename SkipGrammar::result<void(
+ typename proto::result_of::as_expr<Expr>::type
+ , skip_type
+ , mpl::void_
+ )>::type
+ , typename proto::dereference<skip_type>::type
+ >
+ {};
+
+ template<typename Expr>
+ typename result<skip_directive(Expr)>::type
+ operator ()(Expr const &expr) const
+ {
+ mpl::void_ ignore;
+ typedef typename result<skip_directive(Expr)>::type result_type;
+ result_type result = {SkipGrammar()(proto::as_expr(expr), this->skip_, ignore), {skip_}};
+ return result;
+ }
+
+ private:
+ skip_type skip_;
+ };
 
 /*
 ///////////////////////////////////////////////////////////////////////////////
@@ -620,6 +724,48 @@
 proto::terminal<detail::attribute_placeholder<mpl::int_<8> > >::type const a8 = {{}};
 proto::terminal<detail::attribute_placeholder<mpl::int_<9> > >::type const a9 = {{}};
 
+///////////////////////////////////////////////////////////////////////////////
+/// \brief Specify which characters to skip when matching a regex.
+///
+/// <tt>skip()</tt> instructs the regex engine to skip certain characters when matching
+/// a regex. It is most useful for writing regexes that ignore whitespace.
+/// For instance, the following specifies a regex that skips whitespace and
+/// punctuation:
+///
+/// \code
+/// // A sentence is one or more words separated by whitespace
+/// // and punctuation.
+/// sregex word = +alpha;
+/// sregex sentence = skip(set[_s | punct])( +word );
+/// \endcode
+///
+/// The way it works in the above example is to insert
+/// <tt>keep(*set[_s | punct])</tt> before each primitive within the regex.
+/// A "primitive" includes terminals like strings, character sets and nested
+/// regexes. A final <tt>*set[_s | punct]</tt> is added to the end of the
+/// regex. The regex <tt>sentence</tt> specified above is equivalent to
+/// the following:
+///
+/// \code
+/// sregex sentence = +( keep(*set[_s | punct]) >> word )
+/// >> *set[_s | punct];
+/// \endcode
+///
+/// \attention Skipping does not affect how nested regexes are handles because
+/// they are treated atomically. String literals are also treated
+/// atomically; that is, no skipping is done within a string literal. So
+/// <tt>skip(_s)("this that")</tt> is not the same as
+/// <tt>skip(_s)("this" >> as_xpr("that"))</tt>. The first will only match
+/// when there is only one space between "this" and "that". The second will
+/// skip any and all whitespace between "this" and "that".
+///
+/// \param skip A regex that specifies which characters to skip.
+template<typename Skip>
+detail::skip_directive<Skip> skip(Skip const &skip)
+{
+ return detail::skip_directive<Skip>(skip);
+}
+
 namespace detail
 {
     inline void ignore_unused_regex_primitives()

Modified: branches/fix-links/boost/xpressive/traits/c_regex_traits.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/traits/c_regex_traits.hpp (original)
+++ branches/fix-links/boost/xpressive/traits/c_regex_traits.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,6 +16,7 @@
 # pragma once
 #endif
 
+#include <cstdlib>
 #include <boost/config.hpp>
 #include <boost/assert.hpp>
 #include <boost/xpressive/traits/detail/c_ctype.hpp>

Modified: branches/fix-links/boost/xpressive/traits/cpp_regex_traits.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/traits/cpp_regex_traits.hpp (original)
+++ branches/fix-links/boost/xpressive/traits/cpp_regex_traits.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,6 +16,7 @@
 # pragma once
 #endif
 
+#include <ios>
 #include <string>
 #include <locale>
 #include <sstream>
@@ -23,6 +24,7 @@
 #include <boost/assert.hpp>
 #include <boost/integer.hpp>
 #include <boost/mpl/assert.hpp>
+#include <boost/detail/workaround.hpp>
 #include <boost/type_traits/is_same.hpp>
 #include <boost/xpressive/detail/detail_fwd.hpp>
 #include <boost/xpressive/detail/utility/literals.hpp>

Modified: branches/fix-links/boost/xpressive/xpressive_typeof.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/xpressive_typeof.hpp (original)
+++ branches/fix-links/boost/xpressive/xpressive_typeof.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,6 +24,8 @@
 
 #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
 
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::mpl::bool_, (bool))
+
 ///////////////////////////////////////////////////////////////////////////////
 // Misc.
 //
@@ -38,7 +40,7 @@
 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::word_end)
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::generic_quant_tag, (unsigned int)(unsigned int))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::basic_regex, (typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::word_boundary, (bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::word_boundary, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::value, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::reference, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::local, (typename))
@@ -80,28 +82,28 @@
 BOOST_TYPEOF_REGISTER_TYPE(boost::xpressive::detail::attr_end_matcher)
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_bol_matcher, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_eol_matcher, (typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::literal_matcher, (typename)(bool)(bool))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::string_matcher, (typename)(bool))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::charset_matcher, (typename)(bool)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::literal_matcher, (typename)(typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::string_matcher, (typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::charset_matcher, (typename)(typename)(typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::logical_newline_matcher, (typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::mark_matcher, (typename)(bool))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::repeat_end_matcher, (bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::mark_matcher, (typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::repeat_end_matcher, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::alternate_matcher, (typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::optional_matcher, (typename)(bool))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::optional_mark_matcher, (typename)(bool))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::simple_repeat_matcher, (typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::optional_matcher, (typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::optional_mark_matcher, (typename)(typename))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::simple_repeat_matcher, (typename)(typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_byref_matcher, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::regex_matcher, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::posix_charset_matcher, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::assert_word_matcher, (typename)(typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::range_matcher, (typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::range_matcher, (typename)(typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::keeper_matcher, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookahead_matcher, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::lookbehind_matcher, (typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::set_matcher, (typename)(int))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::set_matcher, (typename)(typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::predicate_matcher, (typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::action_matcher, (typename))
-BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::attr_matcher, (typename)(typename)(bool))
+BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::attr_matcher, (typename)(typename)(typename))
 BOOST_TYPEOF_REGISTER_TEMPLATE(boost::xpressive::detail::attr_begin_matcher, (typename))
 
 ///////////////////////////////////////////////////////////////////////////////

Modified: branches/fix-links/doc/Jamfile.v2
==============================================================================
--- branches/fix-links/doc/Jamfile.v2 (original)
+++ branches/fix-links/doc/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -12,6 +12,10 @@
     :
     ## Build the various generated docs (Doxygen and QuickBook)...
 
+ <dependency>../libs/accumulators/doc//accdoc.xml
+ <dependency>../libs/accumulators/doc//statsdoc.xml
+ <dependency>../libs/accumulators/doc//opdoc.xml
+ <dependency>../libs/accumulators/doc//accumulators
     <dependency>../libs/program_options/doc//autodoc.xml
     <dependency>../libs/algorithm/string/doc//autodoc.xml
     <dependency>../libs/logic/doc//reference.xml
@@ -35,9 +39,11 @@
     <dependency>../libs/interprocess/doc//interprocess
     <dependency>../libs/intrusive/doc//autodoc.xml
     <dependency>../libs/intrusive/doc//intrusive
+ <dependency>../libs/unordered/doc//unordered
 
     ## Add path references to the QuickBook generated docs...
 
+ <implicit-dependency>../libs/accumulators/doc//accumulators
     <implicit-dependency>../libs/functional/hash/doc//hash
     #<implicit-dependency>../libs/type_traits/doc//type_traits
     <implicit-dependency>../libs/static_assert/doc//static_assert
@@ -50,6 +56,7 @@
     <implicit-dependency>../libs/mpi/doc//mpi
     <implicit-dependency>../libs/interprocess/doc//interprocess
     <implicit-dependency>../libs/intrusive/doc//intrusive
+ <implicit-dependency>../libs/unordered/doc//unordered
 
     <xsl:param>boost.libraries=../../libs/libraries.htm
 

Modified: branches/fix-links/doc/src/boost.xml
==============================================================================
--- branches/fix-links/doc/src/boost.xml (original)
+++ branches/fix-links/doc/src/boost.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -49,6 +49,8 @@
   <part id="libraries">
     <title>The Boost C++ Libraries (BoostBook Subset)</title>
 
+ <xi:include href="accumulators.xml"/>
+
     <xi:include href="../../libs/any/doc/any.xml"/>
     <xi:include href="../../libs/array/doc/array.xml"/>
 
@@ -707,6 +709,8 @@
      </libraryinfo>
    </library>
 
+ <xi:include href="unordered.xml"/>
+
    <library name="Utility" dirname="utility" html-only="1">
      <libraryinfo>
        <author>

Modified: branches/fix-links/libs/asio/example/buffers/reference_counted.cpp
==============================================================================
--- branches/fix-links/libs/asio/example/buffers/reference_counted.cpp (original)
+++ branches/fix-links/libs/asio/example/buffers/reference_counted.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -27,7 +27,7 @@
   {
   }
 
- // Implement the Const_Buffers concept.
+ // Implement the ConstBufferSequence requirements.
   typedef boost::asio::const_buffer value_type;
   typedef const boost::asio::const_buffer* const_iterator;
   const boost::asio::const_buffer* begin() const { return &buffer_; }

Modified: branches/fix-links/libs/bind/test/bind_lookup_problem_test.cpp
==============================================================================
--- branches/fix-links/libs/bind/test/bind_lookup_problem_test.cpp (original)
+++ branches/fix-links/libs/bind/test/bind_lookup_problem_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 //
 // bind_lookup_problem_test.cpp
 //
-// Copyright (C) Markus Schöpflin 2005.
+// Copyright (C) Markus Schoepflin 2005.
 //
 // Use, modification, and distribution are subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at

Modified: branches/fix-links/libs/function_types/example/fast_mem_fn_example.cpp
==============================================================================
--- branches/fix-links/libs/function_types/example/fast_mem_fn_example.cpp (original)
+++ branches/fix-links/libs/function_types/example/fast_mem_fn_example.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -101,7 +101,11 @@
 
   setup_test(v);
   t.restart();
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1400)
   do_test(v, BOOST_EXAMPLE_FAST_MEM_FN(& test::id));
+#else // MSVC<8 does not like the implementation of the deduction macro:
+ do_test(v, ::example::fast_mem_fn< int (test::*)() const, & test::id >());
+#endif
   time1 = t.elapsed();
   std::cout << "fast_mem_fn | " << time1 << std::endl;
 

Modified: branches/fix-links/libs/function_types/example/interface_example.cpp
==============================================================================
--- branches/fix-links/libs/function_types/example/interface_example.cpp (original)
+++ branches/fix-links/libs/function_types/example/interface_example.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -8,6 +8,7 @@
 // See interface.hpp in this directory for details.
 
 #include <iostream>
+#include <typeinfo>
 
 #include "interface.hpp"
 

Modified: branches/fix-links/libs/function_types/example/interpreter.hpp
==============================================================================
--- branches/fix-links/libs/function_types/example/interpreter.hpp (original)
+++ branches/fix-links/libs/function_types/example/interpreter.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -135,7 +135,7 @@
       typedef typename mpl::deref<From>::type arg_type;
       typedef typename mpl::next<From>::type next_iter_type;
 
- invoker<Function, next_iter_type, To>::apply
+ interpreter::invoker<Function, next_iter_type, To>::apply
           ( func, parser, fusion::push_back(args, parser.get<arg_type>()) );
     }
   };

Modified: branches/fix-links/libs/functional/hash/doc/intro.qbk
==============================================================================
--- branches/fix-links/libs/functional/hash/doc/intro.qbk (original)
+++ branches/fix-links/libs/functional/hash/doc/intro.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -11,10 +11,14 @@
 [def __tr1__
     [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf
     TR1]]
+[def __unordered__ [link unordered Boost.Unordered]]
+[def __intrusive__ [link intrusive.unordered_set_unordered_multiset Boost.Intrusive]]
 [def __multi-index__ [@../../libs/multi_index/doc/index.html
     Boost Multi-Index Containers Library]]
 [def __multi-index-short__ [@../../libs/multi_index/doc/index.html
     Boost.MultiIndex]]
+[def __bimap__ [@../../libs/bimap/doc/index.html
+ Boost.Bimap]]
 [def __issues__
     [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1837.pdf
     Library Extension Technical Report Issues List]]
@@ -22,8 +26,9 @@
 [def __hash-table__ [@http://en.wikipedia.org/wiki/Hash_table hash table]]
 
 [classref boost::hash] is an implementation of the __hash-function__ object
-specified by the __tr1-full__ (TR1). It is intended for use as the default hash function
-for unordered associative containers, and the __multi-index__'s hash indexes.
+specified by the __tr1-full__ (TR1). It is the default hash function for
+__unordered__, __intrusive__'s unordered associative containers, and
+__multi-index-short__'s hash indicies and __bimap__'s `unordered_set_of`.
 
 As it is compliant with __tr1__, it will work with:
 

Modified: branches/fix-links/libs/interprocess/doc/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/interprocess/doc/Jamfile.v2 (original)
+++ branches/fix-links/libs/interprocess/doc/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -26,8 +26,8 @@
         <doxygen:param>HIDE_UNDOC_MEMBERS=YES
         <doxygen:param>EXTRACT_PRIVATE=NO
         <doxygen:param>EXPAND_ONLY_PREDEF=YES
+ <doxygen:param>PREDEFINED=BOOST_INTERPROCESS_DOXYGEN_INVOKED
         <xsl:param>"boost.doxygen.reftitle=Boost.Interprocess Reference"
- <xsl:param>"boost.doxygen.refid=reference"
    ;
 
 xml interprocess : interprocess.qbk ;

Modified: branches/fix-links/libs/interprocess/doc/interprocess.qbk
==============================================================================
--- branches/fix-links/libs/interprocess/doc/interprocess.qbk (original)
+++ branches/fix-links/libs/interprocess/doc/interprocess.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6418,7 +6418,7 @@
    [classref boost::interprocess::named_mutex named_mutex].
 
 * Reduced template bloat for node and adaptive allocators extracting node
- implementation to a class taht only depends on the memory algorithm, instead of
+ implementation to a class that only depends on the memory algorithm, instead of
    the segment manager + node size + node number...
 
 * Fixed bug in `mapped_region` in UNIX when mapping address was provided but

Modified: branches/fix-links/libs/interprocess/proj/vc7ide/interprocesslib.vcproj
==============================================================================
--- branches/fix-links/libs/interprocess/proj/vc7ide/interprocesslib.vcproj (original)
+++ branches/fix-links/libs/interprocess/proj/vc7ide/interprocesslib.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -173,6 +173,9 @@
                                         RelativePath="..\..\..\..\boost\interprocess\allocators\detail\adaptive_node_pool.hpp">
                                 </File>
                                 <File
+ RelativePath="..\..\..\..\boost\interprocess\allocators\detail\allocator_common.hpp">
+ </File>
+ <File
                                         RelativePath="..\..\..\..\boost\interprocess\allocators\detail\node_pool.hpp">
                                 </File>
                                 <File
@@ -571,6 +574,9 @@
                         <File
                                 RelativePath="..\..\test\util.hpp">
                         </File>
+ <File
+ RelativePath="..\..\test\vector_test.hpp">
+ </File>
                 </Filter>
                 <Filter
                         Name="Proj"

Modified: branches/fix-links/libs/interprocess/test/adaptive_node_pool_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/adaptive_node_pool_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/adaptive_node_pool_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -17,7 +17,7 @@
    typedef managed_shared_memory::segment_manager segment_manager;
 
    typedef detail::private_adaptive_node_pool
- <segment_manager, 4, 64, 64> node_pool_t;
+ <segment_manager, 4, 64, 64, 5> node_pool_t;
 
    if(!test::test_all_node_pool<node_pool_t>())
       return 1;

Modified: branches/fix-links/libs/interprocess/test/adaptive_pool_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/adaptive_pool_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/adaptive_pool_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -11,11 +11,13 @@
 #include <boost/interprocess/detail/config_begin.hpp>
 #include <boost/interprocess/managed_shared_memory.hpp>
 #include <boost/interprocess/containers/list.hpp>
+#include <boost/interprocess/containers/vector.hpp>
 #include <boost/interprocess/allocators/adaptive_pool.hpp>
 #include "print_container.hpp"
 #include "dummy_test_allocator.hpp"
 #include "movable_int.hpp"
 #include "list_test.hpp"
+#include "vector_test.hpp"
 
 using namespace boost::interprocess;
 
@@ -24,14 +26,36 @@
 typedef adaptive_pool
    <int, managed_shared_memory::segment_manager> shmem_node_allocator_t;
 
+typedef detail::adaptive_pool_v1
+ <int, managed_shared_memory::segment_manager> shmem_node_allocator_v1_t;
+
+//Explicit instantiations to catch compilation errors
+template class adaptive_pool<int, managed_shared_memory::segment_manager>;
+template class detail::adaptive_pool_v1<int, managed_shared_memory::segment_manager>;
+
 //Alias list types
 typedef list<int, shmem_node_allocator_t> MyShmList;
+typedef list<int, shmem_node_allocator_v1_t> MyShmListV1;
+
+//Alias vector types
+typedef vector<int, shmem_node_allocator_t> MyShmVector;
+typedef vector<int, shmem_node_allocator_v1_t> MyShmVectorV1;
+
 
 int main ()
 {
    if(test::list_test<managed_shared_memory, MyShmList, true>())
       return 1;
 
+ if(test::list_test<managed_shared_memory, MyShmListV1, true>())
+ return 1;
+
+ if(test::vector_test<managed_shared_memory, MyShmVector>())
+ return 1;
+
+ if(test::vector_test<managed_shared_memory, MyShmVectorV1>())
+ return 1;
+
    return 0;
 }
 

Modified: branches/fix-links/libs/interprocess/test/cached_adaptive_pool_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/cached_adaptive_pool_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/cached_adaptive_pool_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,6 +16,7 @@
 #include "dummy_test_allocator.hpp"
 #include "movable_int.hpp"
 #include "list_test.hpp"
+#include "vector_test.hpp"
 
 using namespace boost::interprocess;
 
@@ -25,14 +26,37 @@
    <int, managed_shared_memory::segment_manager>
    cached_node_allocator_t;
 
+typedef detail::cached_adaptive_pool_v1
+ <int, managed_shared_memory::segment_manager>
+ cached_node_allocator_v1_t;
+
+//Explicit instantiations to catch compilation errors
+template class cached_adaptive_pool<int, managed_shared_memory::segment_manager>;
+template class detail::cached_adaptive_pool_v1<int, managed_shared_memory::segment_manager>;
+
+
 //Alias list types
 typedef list<int, cached_node_allocator_t> MyShmList;
+typedef list<int, cached_node_allocator_v1_t> MyShmListV1;
+
+//Alias vector types
+typedef vector<int, cached_node_allocator_t> MyShmVector;
+typedef vector<int, cached_node_allocator_v1_t> MyShmVectorV1;
 
 int main ()
 {
    if(test::list_test<managed_shared_memory, MyShmList, true>())
       return 1;
 
+ if(test::list_test<managed_shared_memory, MyShmListV1, true>())
+ return 1;
+
+ if(test::vector_test<managed_shared_memory, MyShmVector>())
+ return 1;
+
+ if(test::vector_test<managed_shared_memory, MyShmVectorV1>())
+ return 1;
+
    return 0;
 }
 

Modified: branches/fix-links/libs/interprocess/test/cached_node_allocator_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/cached_node_allocator_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/cached_node_allocator_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
 //////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Ion Gaztanaga 2004-2007. Distributed under the Boost
+// (C) Copyright Ion Gaztanaga 2004-2008. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //
@@ -16,23 +16,40 @@
 #include "dummy_test_allocator.hpp"
 #include "movable_int.hpp"
 #include "list_test.hpp"
+#include "vector_test.hpp"
 
 using namespace boost::interprocess;
 
-//We will work with wide characters for shared memory objects
 //Alias a integer node allocator type
 typedef cached_node_allocator
    <int, managed_shared_memory::segment_manager>
    cached_node_allocator_t;
+typedef detail::cached_node_allocator_v1
+ <int, managed_shared_memory::segment_manager>
+ cached_node_allocator_v1_t;
+
+//Explicit instantiations to catch compilation errors
+template class cached_node_allocator<int, managed_shared_memory::segment_manager>;
+template class detail::cached_node_allocator_v1<int, managed_shared_memory::segment_manager>;
 
 //Alias list types
 typedef list<int, cached_node_allocator_t> MyShmList;
+typedef list<int, cached_node_allocator_v1_t> MyShmListV1;
+
+//Alias vector types
+typedef vector<int, cached_node_allocator_t> MyShmVector;
+typedef vector<int, cached_node_allocator_v1_t> MyShmVectorV1;
 
 int main ()
 {
    if(test::list_test<managed_shared_memory, MyShmList, true>())
       return 1;
-
+ if(test::list_test<managed_shared_memory, MyShmListV1, true>())
+ return 1;
+ if(test::vector_test<managed_shared_memory, MyShmVector>())
+ return 1;
+ if(test::vector_test<managed_shared_memory, MyShmVectorV1>())
+ return 1;
    return 0;
 }
 

Modified: branches/fix-links/libs/interprocess/test/file_mapping_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/file_mapping_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/file_mapping_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -11,7 +11,6 @@
 #include <boost/interprocess/detail/config_begin.hpp>
 #include <fstream>
 #include <iostream>
-#include <ios>
 #include <boost/interprocess/file_mapping.hpp>
 #include <boost/interprocess/mapped_region.hpp>
 #include <memory>

Modified: branches/fix-links/libs/interprocess/test/map_test.hpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/map_test.hpp (original)
+++ branches/fix-links/libs/interprocess/test/map_test.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -296,6 +296,8 @@
       }
 
       //Now do count exercise
+ shmmap->erase(shmmap->begin(), shmmap->end());
+ shmmultimap->erase(shmmultimap->begin(), shmmultimap->end());
       shmmap->clear();
       shmmultimap->clear();
 

Modified: branches/fix-links/libs/interprocess/test/memory_algorithm_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/memory_algorithm_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/memory_algorithm_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -19,47 +19,67 @@
 #include <string>
 #include "get_process_id_name.hpp"
 
+using namespace boost::interprocess;
+
+const int memsize = 16384;
+const char *const shMemName = test::get_process_id_name();
+
+int test_simple_seq_fit()
+{
+ //A shared memory with simple sequential fit algorithm
+ typedef basic_managed_shared_memory
+ <char
+ ,simple_seq_fit<mutex_family>
+ ,null_index
+ > my_managed_shared_memory;
+
+ //Create shared memory
+ shared_memory_object::remove(shMemName);
+ my_managed_shared_memory segment(create_only, shMemName, memsize);
+
+ //Now take the segment manager and launch memory test
+ if(!test::test_all_allocation(*segment.get_segment_manager())){
+ return 1;
+ }
+ return 0;
+}
+
+template<std::size_t Alignment>
+int test_rbtree_best_fit()
+{
+ //A shared memory with red-black tree best fit algorithm
+ typedef basic_managed_shared_memory
+ <char
+ ,rbtree_best_fit<mutex_family, offset_ptr<void>, Alignment>
+ ,null_index
+ > my_managed_shared_memory;
+
+ //Create shared memory
+ shared_memory_object::remove(shMemName);
+ my_managed_shared_memory segment(create_only, shMemName, memsize);
+
+ //Now take the segment manager and launch memory test
+ if(!test::test_all_allocation(*segment.get_segment_manager())){
+ return 1;
+ }
+ return 0;
+}
+
 int main ()
 {
- using namespace boost::interprocess;
- const int memsize = 16384;
- const char *const shMemName = test::get_process_id_name();
-
- {
- //A shared memory with simple sequential fit algorithm
- typedef basic_managed_shared_memory
- <char
- ,simple_seq_fit<mutex_family>
- ,null_index
- > my_managed_shared_memory;
-
- //Create shared memory
- shared_memory_object::remove(shMemName);
- my_managed_shared_memory segment(create_only, shMemName, memsize);
-
- //Now take the segment manager and launch memory test
- if(!test::test_all_allocation(*segment.get_segment_manager())){
- return 1;
- }
- }
-
- {
- //A shared memory with red-black tree best fit algorithm
- typedef basic_managed_shared_memory
- <char
- ,rbtree_best_fit<mutex_family>
- ,null_index
- > my_managed_shared_memory;
-
- //Create shared memory
- shared_memory_object::remove(shMemName);
- my_managed_shared_memory segment(create_only, shMemName, memsize);
-
- //Now take the segment manager and launch memory test
- if(!test::test_all_allocation(*segment.get_segment_manager())){
- return 1;
- }
+ if(test_simple_seq_fit()){
+ return 1;
+ }
+ if(test_rbtree_best_fit<4>()){
+ return 1;
+ }
+ if(test_rbtree_best_fit<8>()){
+ return 1;
    }
+ if(test_rbtree_best_fit<16>()){
+ return 1;
+ }
+
    shared_memory_object::remove(shMemName);
    return 0;
 }

Modified: branches/fix-links/libs/interprocess/test/memory_algorithm_test_template.hpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/memory_algorithm_test_template.hpp (original)
+++ branches/fix-links/libs/interprocess/test/memory_algorithm_test_template.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,7 +16,7 @@
 #include <iostream>
 #include <new>
 #include <utility>
-#include <cstring>
+#include <cstring> //std::memset
 #include <cstdio> //std::remove
 
 namespace boost { namespace interprocess { namespace test {
@@ -38,6 +38,8 @@
          void *ptr = a.allocate(i, std::nothrow);
          if(!ptr)
             break;
+ std::size_t size = a.size(ptr);
+ std::memset(ptr, 0, size);
          buffers.push_back(ptr);
       }
 
@@ -94,6 +96,8 @@
       void *ptr = a.allocate(i*2, std::nothrow);
       if(!ptr)
          break;
+ std::size_t size = a.size(ptr);
+ std::memset(ptr, 0, size);
       buffers.push_back(ptr);
    }
 
@@ -111,6 +115,7 @@
          if(received_size < std::size_t(i)){
             return false;
          }
+ std::memset(buffers[i], 0, a.size(buffers[i]));
       }
    }
    
@@ -139,6 +144,8 @@
       void *ptr = a.allocate(i, std::nothrow);
       if(!ptr)
          break;
+ std::size_t size = a.size(ptr);
+ std::memset(ptr, 0, size);
       buffers.push_back(ptr);
    }
 
@@ -203,7 +210,7 @@
 
    //Now shrink to half
    for(int i = 0, max = (int)buffers.size()
- ;i < max
+ ; i < max
       ; ++i){
       std::size_t received_size;
       if(a.template allocation_command<char>
@@ -224,9 +231,10 @@
       ;i < max
       ;++i){
       std::size_t received_size;
+ std::size_t request_size = received_sizes[i];
       if(a.template allocation_command<char>
- ( expand_fwd | nothrow_allocation, received_sizes[i]
- , received_sizes[i], received_size, (char*)buffers[i]).first){
+ ( expand_fwd | nothrow_allocation, request_size
+ , request_size, received_size, (char*)buffers[i]).first){
          if(received_size != received_sizes[i]){
             return false;
          }
@@ -262,6 +270,8 @@
       void *ptr = a.allocate(i, std::nothrow);
       if(!ptr)
          break;
+ std::size_t size = a.size(ptr);
+ std::memset(ptr, 0, size);
       buffers.push_back(ptr);
    }
 
@@ -327,19 +337,21 @@
 bool test_allocation_with_reuse(Allocator &a)
 {
    //We will repeat this test for different sized elements
- for(int size = 1; size < 20; ++size){
+ for(int sizeof_object = 1; sizeof_object < 20; ++sizeof_object){
       std::vector<void*> buffers;
 
       //Allocate buffers with extra memory
       for(int i = 0; true; ++i){
- void *ptr = a.allocate(i*size, std::nothrow);
+ void *ptr = a.allocate(i*sizeof_object, std::nothrow);
          if(!ptr)
             break;
+ std::size_t size = a.size(ptr);
+ std::memset(ptr, 0, size);
          buffers.push_back(ptr);
       }
       
       //Now deallocate all except the latest
- //Now try to expand to the double of the size
+ //Now try to expand to the double of the sizeof_object
       for(int i = 0, max = (int)buffers.size() - 1
          ;i < max
          ;++i){
@@ -353,14 +365,18 @@
       //Now allocate with reuse
       std::size_t received_size = 0;
       for(int i = 0; true; ++i){
- std::pair<void*, bool> ret = a.template allocation_command<char>
- ( expand_bwd | nothrow_allocation, received_size/size*size + size
- , received_size/size*size+(i+1)*size*2, received_size, (char*)ptr);
+ std::size_t min_size = (received_size + 1);
+ std::size_t prf_size = (received_size + (i+1)*2);
+ std::pair<void*, bool> ret = a.raw_allocation_command
+ ( expand_bwd | nothrow_allocation, min_size
+ , prf_size, received_size, (char*)ptr, sizeof_object);
          if(!ret.first)
             break;
          //If we have memory, this must be a buffer reuse
          if(!ret.second)
             return 1;
+ if(received_size < min_size)
+ return 1;
          ptr = ret.first;
       }
       //There is only a single block so deallocate it
@@ -456,6 +472,8 @@
       void *ptr = a.allocate(i, std::nothrow);
       if(!ptr)
          break;
+ std::size_t size = a.size(ptr);
+ std::memset(ptr, 1, size);
       buffers.push_back(ptr);
    }
 
@@ -544,6 +562,8 @@
       void *ptr = a.allocate(i, std::nothrow);
       if(!ptr)
          break;
+ std::size_t size = a.size(ptr);
+ std::memset(ptr, 0, size);
       buffers.push_back(ptr);
    }
 
@@ -564,7 +584,11 @@
    for(int j = 0, max = (int)buffers.size()
       ;j < max
       ;++j){
- int pos = (j%4)*((int)buffers.size())/4;
+ int pos = (j%5)*((int)buffers.size())/4;
+ if(pos == int(buffers.size()))
+ --pos;
+ a.deallocate(buffers[pos]);
+ buffers.erase(buffers.begin()+pos);
       std::size_t old_free = a.get_free_memory();
       a.shrink_to_fit();
       if(!a.check_sanity()) return false;
@@ -576,9 +600,6 @@
       if(!a.check_sanity()) return false;
       if(original_size != a.get_size()) return false;
       if(old_free != a.get_free_memory()) return false;
-
- a.deallocate(buffers[pos]);
- buffers.erase(buffers.begin()+pos);
    }
 
    //Now shrink it to the maximum
@@ -623,6 +644,8 @@
          void *ptr = a.allocate(i, std::nothrow);
          if(!ptr)
             break;
+ std::size_t size = a.size(ptr);
+ std::memset(ptr, 0, size);
          if(!a.check_sanity())
             return false;
          buffers2.push_back(ptr);
@@ -736,6 +759,8 @@
          void *ptr = a.allocate(i, std::nothrow);
          if(!ptr)
             break;
+ std::size_t size = a.size(ptr);
+ std::memset(ptr, 0, size);
          buffers2.push_back(ptr);
       }
 
@@ -816,6 +841,57 @@
    return true;
 }
 
+//This test allocates multiple values until there is no more memory
+//and after that deallocates all in the inverse order
+template<class Allocator>
+bool test_many_deallocation(Allocator &a)
+{
+ typedef typename Allocator::multiallocation_iterator multiallocation_iterator;
+ const std::size_t ArraySize = 11;
+ std::vector<multiallocation_iterator> buffers;
+ std::size_t requested_sizes[ArraySize];
+ for(std::size_t i = 0; i < ArraySize; ++i){
+ requested_sizes[i] = 4*i;
+ }
+ std::size_t free_memory = a.get_free_memory();
+
+ {
+ for(int i = 0; true; ++i){
+ multiallocation_iterator it = a.allocate_many(requested_sizes, ArraySize, 1, std::nothrow);
+ if(!it)
+ break;
+ buffers.push_back(it);
+ }
+ for(int i = 0, max = (int)buffers.size(); i != max; ++i){
+ a.deallocate_many(buffers[i]);
+ }
+ buffers.clear();
+ bool ok = free_memory == a.get_free_memory() &&
+ a.all_memory_deallocated() && a.check_sanity();
+ if(!ok) return ok;
+ }
+
+ {
+ for(int i = 0; true; ++i){
+ multiallocation_iterator it = a.allocate_many(i*4, ArraySize, std::nothrow);
+ if(!it)
+ break;
+ buffers.push_back(it);
+ }
+ for(int i = 0, max = (int)buffers.size(); i != max; ++i){
+ a.deallocate_many(buffers[i]);
+ }
+ buffers.clear();
+
+ bool ok = free_memory == a.get_free_memory() &&
+ a.all_memory_deallocated() && a.check_sanity();
+ if(!ok) return ok;
+ }
+
+ return true;
+}
+
+
 //This function calls all tests
 template<class Allocator>
 bool test_all_allocation(Allocator &a)
@@ -847,6 +923,12 @@
       return false;
    }
 
+ if(!test_many_deallocation(a)){
+ std::cout << "test_many_deallocation failed. Class: "
+ << typeid(a).name() << std::endl;
+ return false;
+ }
+
    std::cout << "Starting test_allocation_shrink. Class: "
              << typeid(a).name() << std::endl;
 

Modified: branches/fix-links/libs/interprocess/test/node_allocator_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/node_allocator_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/node_allocator_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,6 +16,7 @@
 #include "dummy_test_allocator.hpp"
 #include "movable_int.hpp"
 #include "list_test.hpp"
+#include "vector_test.hpp"
 
 using namespace boost::interprocess;
 
@@ -23,15 +24,31 @@
 //Alias a integer node allocator type
 typedef node_allocator
    <int, managed_shared_memory::segment_manager> shmem_node_allocator_t;
+typedef detail::node_allocator_v1
+ <int, managed_shared_memory::segment_manager> shmem_node_allocator_v1_t;
+
+//Explicit instantiations to catch compilation errors
+template class node_allocator<int, managed_shared_memory::segment_manager>;
+template class detail::node_allocator_v1<int, managed_shared_memory::segment_manager>;
 
 //Alias list types
 typedef list<int, shmem_node_allocator_t> MyShmList;
+typedef list<int, shmem_node_allocator_v1_t> MyShmListV1;
+
+//Alias vector types
+typedef vector<int, shmem_node_allocator_t> MyShmVector;
+typedef vector<int, shmem_node_allocator_v1_t> MyShmVectorV1;
 
 int main ()
 {
    if(test::list_test<managed_shared_memory, MyShmList, true>())
       return 1;
-
+ if(test::list_test<managed_shared_memory, MyShmListV1, true>())
+ return 1;
+ if(test::vector_test<managed_shared_memory, MyShmVector>())
+ return 1;
+ if(test::vector_test<managed_shared_memory, MyShmVectorV1>())
+ return 1;
    return 0;
 }
 

Modified: branches/fix-links/libs/interprocess/test/node_pool_test.hpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/node_pool_test.hpp (original)
+++ branches/fix-links/libs/interprocess/test/node_pool_test.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -42,7 +42,7 @@
 
    //First allocate nodes
    for(std::size_t i = 0; i < num_alloc; ++i){
- nodes.push_back(pool.allocate(1));
+ nodes.push_back(pool.allocate_node());
    }
 
    //Check that the free count is correct
@@ -52,7 +52,7 @@
    
    //Now deallocate all and check again
    for(std::size_t i = 0; i < num_alloc; ++i){
- pool.deallocate(nodes[i], 1);
+ pool.deallocate_node(nodes[i]);
    }
 
    //Check that the free count is correct
@@ -85,7 +85,7 @@
 
    //First allocate nodes
    for(std::size_t i = 0; i < max_nodes; ++i){
- nodes.push_back(pool.allocate(1));
+ nodes.push_back(pool.allocate_node());
    }
 
    //Check that the free count is correct
@@ -97,7 +97,7 @@
    for(std::size_t node_i = 0; node_i < nodes_per_chunk; ++node_i){
       //Deallocate a node per chunk
       for(std::size_t i = 0; i < max_chunks; ++i){
- pool.deallocate(nodes[i*nodes_per_chunk + node_i], 1);
+ pool.deallocate_node(nodes[i*nodes_per_chunk + node_i]);
       }
 
       //Check that the free count is correct

Modified: branches/fix-links/libs/interprocess/test/private_adaptive_pool_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/private_adaptive_pool_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/private_adaptive_pool_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,6 +16,7 @@
 #include "dummy_test_allocator.hpp"
 #include "movable_int.hpp"
 #include "list_test.hpp"
+#include "vector_test.hpp"
 
 using namespace boost::interprocess;
 
@@ -23,15 +24,31 @@
 //Alias a private adaptive pool that allocates ints
 typedef private_adaptive_pool
    <int, managed_shared_memory::segment_manager> priv_node_allocator_t;
+typedef detail::private_adaptive_pool_v1
+ <int, managed_shared_memory::segment_manager> priv_node_allocator_v1_t;
+
+//Explicit instantiations to catch compilation errors
+template class private_adaptive_pool<int, managed_shared_memory::segment_manager>;
+template class detail::private_adaptive_pool_v1<int, managed_shared_memory::segment_manager>;
 
 //Alias list types
 typedef list<int, priv_node_allocator_t> MyShmList;
+typedef list<int, priv_node_allocator_v1_t> MyShmListV1;
+
+//Alias vector types
+typedef vector<int, priv_node_allocator_t> MyShmVector;
+typedef vector<int, priv_node_allocator_v1_t> MyShmVectorV1;
 
 int main ()
 {
    if(test::list_test<managed_shared_memory, MyShmList, true>(false))
       return 1;
-
+ if(test::list_test<managed_shared_memory, MyShmListV1, true>(false))
+ return 1;
+ if(test::vector_test<managed_shared_memory, MyShmVector>())
+ return 1;
+ if(test::vector_test<managed_shared_memory, MyShmVectorV1>())
+ return 1;
    return 0;
 }
 

Modified: branches/fix-links/libs/interprocess/test/private_node_allocator_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/private_node_allocator_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/private_node_allocator_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,6 +16,7 @@
 #include "dummy_test_allocator.hpp"
 #include "movable_int.hpp"
 #include "list_test.hpp"
+#include "vector_test.hpp"
 
 using namespace boost::interprocess;
 
@@ -23,15 +24,31 @@
 //Alias a integer node allocator type
 typedef private_node_allocator
    <int, managed_shared_memory::segment_manager> priv_node_allocator_t;
+typedef detail::private_node_allocator_v1
+ <int, managed_shared_memory::segment_manager> priv_node_allocator_v1_t;
+
+//Explicit instantiations to catch compilation errors
+template class private_node_allocator<int, managed_shared_memory::segment_manager>;
+template class detail::private_node_allocator_v1<int, managed_shared_memory::segment_manager>;
 
 //Alias list types
-typedef list<int, priv_node_allocator_t> MyShmList;
+typedef list<int, priv_node_allocator_t> MyShmList;
+typedef list<int, priv_node_allocator_v1_t> MyShmListV1;
+
+//Alias vector types
+typedef vector<int, priv_node_allocator_t> MyShmVector;
+typedef vector<int, priv_node_allocator_v1_t> MyShmVectorV1;
 
 int main ()
 {
    if(test::list_test<managed_shared_memory, MyShmList, true>(false))
       return 1;
-
+ if(test::list_test<managed_shared_memory, MyShmListV1, true>(false))
+ return 1;
+ if(test::vector_test<managed_shared_memory, MyShmVector>())
+ return 1;
+ if(test::vector_test<managed_shared_memory, MyShmVectorV1>())
+ return 1;
    return 0;
 }
 

Modified: branches/fix-links/libs/interprocess/test/set_test.hpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/set_test.hpp (original)
+++ branches/fix-links/libs/interprocess/test/set_test.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -384,6 +384,8 @@
       }
 
       //Now do count exercise
+ shmset->erase(shmset->begin(), shmset->end());
+ shmmultiset->erase(shmmultiset->begin(), shmmultiset->end());
       shmset->clear();
       shmmultiset->clear();
 

Modified: branches/fix-links/libs/interprocess/test/vector_test.cpp
==============================================================================
--- branches/fix-links/libs/interprocess/test/vector_test.cpp (original)
+++ branches/fix-links/libs/interprocess/test/vector_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -17,227 +17,22 @@
 
 #include <boost/interprocess/managed_shared_memory.hpp>
 #include <boost/interprocess/containers/vector.hpp>
-#include <boost/interprocess/indexes/flat_map_index.hpp>
 #include <boost/interprocess/allocators/allocator.hpp>
 #include "allocator_v1.hpp"
-#include <boost/interprocess/exceptions.hpp>
-#include <boost/interprocess/detail/move_iterator.hpp>
-#include <boost/interprocess/detail/move.hpp>
-#include "print_container.hpp"
 #include "check_equal_containers.hpp"
 #include "movable_int.hpp"
 #include "expand_bwd_test_allocator.hpp"
 #include "expand_bwd_test_template.hpp"
 #include "dummy_test_allocator.hpp"
-#include <string>
-#include "get_process_id_name.hpp"
+#include "vector_test.hpp"
 
 using namespace boost::interprocess;
 
-typedef basic_managed_shared_memory
- <char,
- simple_seq_fit<mutex_family>,
- flat_map_index
- > managed_shared_memory_t;
-
 //Explicit instantiation to detect compilation errors
 template class boost::interprocess::vector<test::movable_and_copyable_int,
    test::dummy_test_allocator<test::movable_and_copyable_int> >;
 
-template<class V1, class V2>
-bool copyable_only(V1 *, V2 *, detail::false_type)
-{
- return true;
-}
-
-//Function to check if both sets are equal
-template<class V1, class V2>
-bool copyable_only(V1 *shmvector, V2 *stdvector, detail::true_type)
-{
- typedef typename V1::value_type IntType;
- std::size_t size = shmvector->size();
- stdvector->insert(stdvector->end(), 50, 1);
- shmvector->insert(shmvector->end(), 50, 1);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- {
- IntType move_me(1);
- stdvector->insert(stdvector->begin()+size/2, 50, 1);
- shmvector->insert(shmvector->begin()+size/2, 50, move(move_me));
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
- }
- {
- IntType move_me(2);
- shmvector->assign(shmvector->size()/2, move(move_me));
- stdvector->assign(stdvector->size()/2, 2);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
- }
- {
- IntType move_me(3);
- shmvector->assign(shmvector->size()*3-1, move(move_me));
- stdvector->assign(stdvector->size()*3-1, 3);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
- }
- return true;
-}
-
-template<class IntType, template<class T, class SegmentManager> class AllocatorType >
-bool do_test()
-{
- //Customize managed_shared_memory class
- typedef basic_managed_shared_memory
- <char,
- //simple_seq_fit<mutex_family>,
- rbtree_best_fit<mutex_family>,
- flat_map_index
- > my_managed_shared_memory;
-
- //Alias AllocatorType type
- typedef AllocatorType<IntType, my_managed_shared_memory::segment_manager>
- shmem_allocator_t;
-
- //Alias vector types
- typedef vector<IntType, shmem_allocator_t> MyShmVector;
- typedef std::vector<int> MyStdVector;
-
- std::string process_name;
- test::get_process_id_name(process_name);
-
- const int Memsize = 65536;
- const char *const shMemName = process_name.c_str();
- const int max = 100;
-
- {
- //Compare several shared memory vector operations with std::vector
- //Create shared memory
- shared_memory_object::remove(shMemName);
- try{
- my_managed_shared_memory segment(create_only, shMemName, Memsize);
-
- segment.reserve_named_objects(100);
-
- //Shared memory allocator must be always be initialized
- //since it has no default constructor
- MyShmVector *shmvector = segment.template construct<MyShmVector>("MyShmVector")
- (segment.get_segment_manager());
- MyStdVector *stdvector = new MyStdVector;
-
- shmvector->resize(100);
- stdvector->resize(100);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- shmvector->resize(200);
- stdvector->resize(200);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- shmvector->resize(0);
- stdvector->resize(0);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- for(int i = 0; i < max; ++i){
- IntType new_int(i);
- shmvector->insert(shmvector->end(), move(new_int));
- stdvector->insert(stdvector->end(), i);
- }
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- typename MyShmVector::iterator shmit(shmvector->begin());
- typename MyStdVector::iterator stdit(stdvector->begin());
- typename MyShmVector::const_iterator cshmit = shmit;
- ++shmit; ++stdit;
- shmvector->erase(shmit);
- stdvector->erase(stdit);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- shmvector->erase(shmvector->begin());
- stdvector->erase(stdvector->begin());
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- {
- //Initialize values
- IntType aux_vect[50];
- for(int i = 0; i < 50; ++i){
- IntType new_int(-1);
- aux_vect[i] = move(new_int);
- }
- int aux_vect2[50];
- for(int i = 0; i < 50; ++i){
- aux_vect2[i] = -1;
- }
-
- shmvector->insert(shmvector->end()
- ,detail::make_move_iterator(&aux_vect[0])
- ,detail::make_move_iterator(aux_vect + 50));
- stdvector->insert(stdvector->end(), aux_vect2, aux_vect2 + 50);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- for(int i = 0, j = static_cast<int>(shmvector->size()); i < j; ++i){
- shmvector->erase(shmvector->begin());
- stdvector->erase(stdvector->begin());
- }
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
- }
- {
- IntType aux_vect[50];
- for(int i = 0; i < 50; ++i){
- IntType new_int(-1);
- aux_vect[i] = move(new_int);
- }
- int aux_vect2[50];
- for(int i = 0; i < 50; ++i){
- aux_vect2[i] = -1;
- }
- shmvector->insert(shmvector->begin()
- ,detail::make_move_iterator(&aux_vect[0])
- ,detail::make_move_iterator(aux_vect + 50));
- stdvector->insert(stdvector->begin(), aux_vect2, aux_vect2 + 50);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
- }
-
- shmvector->reserve(shmvector->size()*2);
- stdvector->reserve(stdvector->size()*2);
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- IntType push_back_this(1);
- shmvector->push_back(move(push_back_this));
- stdvector->push_back(int(1));
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- if(!copyable_only(shmvector, stdvector
- ,detail::bool_<!is_movable<IntType>::value>())){
- return false;
- }
-
- shmvector->erase(shmvector->begin());
- stdvector->erase(stdvector->begin());
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- for(int i = 0; i < max; ++i){
- IntType insert_this(i);
- shmvector->insert(shmvector->begin(), move(insert_this));
- stdvector->insert(stdvector->begin(), i);
- }
- if(!test::CheckEqualContainers(shmvector, stdvector)) return false;
-
- delete stdvector;
- segment.template destroy<MyShmVector>("MyShmVector");
- segment.shrink_to_fit_indexes();
-
- if(!segment.all_memory_deallocated())
- return false;
- }
- catch(std::exception &ex){
- shared_memory_object::remove(shMemName);
- std::cout << ex.what() << std::endl;
- return false;
- }
- }
- shared_memory_object::remove(shMemName);
- std::cout << std::endl << "Test OK!" << std::endl;
- return true;
-}
-
-bool test_expand_bwd()
+int test_expand_bwd()
 {
    //Now test all back insertion possibilities
 
@@ -248,7 +43,7 @@
       int_vector;
 
    if(!test::test_all_expand_bwd<int_vector>())
- return false;
+ return 1;
 
    //Now user defined wrapped int
    typedef test::expand_bwd_test_allocator<test::int_holder>
@@ -257,7 +52,7 @@
       int_holder_vector;
 
    if(!test::test_all_expand_bwd<int_holder_vector>())
- return false;
+ return 1;
 
    //Now user defined bigger wrapped int
    typedef test::expand_bwd_test_allocator<test::triple_int_holder>
@@ -267,26 +62,32 @@
       triple_int_holder_vector;
 
    if(!test::test_all_expand_bwd<triple_int_holder_vector>())
- return false;
+ return 1;
 
- return true;
+ return 0;
 }
 
 int main()
 {
- if(!do_test<int, allocator>())
- return 1;
+ typedef allocator<int, managed_shared_memory::segment_manager> ShmemAllocator;
+ typedef vector<int, ShmemAllocator> MyVector;
+
+ typedef allocator<test::movable_int, managed_shared_memory::segment_manager> ShmemMoveAllocator;
+ typedef vector<test::movable_int, ShmemMoveAllocator> MyMoveVector;
+
+ typedef allocator<test::movable_and_copyable_int, managed_shared_memory::segment_manager> ShmemCopyMoveAllocator;
+ typedef vector<test::movable_and_copyable_int, ShmemCopyMoveAllocator> MyCopyMoveVector;
 
- if(!do_test<test::movable_int, allocator>())
+ if(test::vector_test<managed_shared_memory, MyVector>())
       return 1;
 
- if(!do_test<test::movable_and_copyable_int, allocator>())
+ if(test::vector_test<managed_shared_memory, MyMoveVector>())
       return 1;
 
- if(!do_test<int, test::allocator_v1>())
+ if(test::vector_test<managed_shared_memory, MyCopyMoveVector>())
       return 1;
 
- if(!test_expand_bwd())
+ if(test_expand_bwd())
       return 1;
 
    return 0;

Modified: branches/fix-links/libs/intrusive/example/doc_list_algorithms.cpp
==============================================================================
--- branches/fix-links/libs/intrusive/example/doc_list_algorithms.cpp (original)
+++ branches/fix-links/libs/intrusive/example/doc_list_algorithms.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -38,7 +38,7 @@
 
    //Create an empty doubly linked list container:
    //"one" will be the first node of the container
- algo::init(&one);
+ algo::init_header(&one);
    assert(algo::count(&one) == 1);
 
    //Now add a new node before "one"

Modified: branches/fix-links/libs/intrusive/example/doc_slist_algorithms.cpp
==============================================================================
--- branches/fix-links/libs/intrusive/example/doc_slist_algorithms.cpp (original)
+++ branches/fix-links/libs/intrusive/example/doc_slist_algorithms.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -36,7 +36,7 @@
 
    //Create an empty singly linked list container:
    //"one" will be the first node of the container
- algo::init(&one);
+ algo::init_header(&one);
    assert(algo::count(&one) == 1);
 
    //Now add a new node

Modified: branches/fix-links/libs/intrusive/proj/vc7ide/_intrusivelib/_intrusivelib.vcproj
==============================================================================
--- branches/fix-links/libs/intrusive/proj/vc7ide/_intrusivelib/_intrusivelib.vcproj (original)
+++ branches/fix-links/libs/intrusive/proj/vc7ide/_intrusivelib/_intrusivelib.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -136,6 +136,9 @@
                                 RelativePath="..\..\..\..\..\boost\intrusive\intrusive_fwd.hpp">
                         </File>
                         <File
+ RelativePath="..\..\..\..\..\boost\intrusive\linear_slist_algorithms.hpp">
+ </File>
+ <File
                                 RelativePath="..\..\..\..\..\boost\intrusive\link_mode.hpp">
                         </File>
                         <File

Modified: branches/fix-links/libs/intrusive/test/list_test.cpp
==============================================================================
--- branches/fix-links/libs/intrusive/test/list_test.cpp (original)
+++ branches/fix-links/libs/intrusive/test/list_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -63,14 +63,6 @@
    test_swap(values);
    test_clone(values);
    test_container_from_end(values);
-/*
- const char *list_name = typeid(list_type).name();
- std::cout << list_name << std::endl << strlen(list_name) << std::endl;
- const char *value_t = typeid(typename list_type::value_traits).name();
- std::cout << value_t << std::endl << strlen(value_t) << std::endl;
- const char *list_it_name = typeid(typename list_type::iterator).name();
- std::cout << list_it_name << std::endl << strlen(list_it_name ) << std::endl;
-*/
 }
 
 //test: push_front, pop_front, push_back, pop_back, front, back, size, empty:
@@ -194,26 +186,29 @@
    const int num_values = (int)values.size();
    std::vector<int> expected_values(num_values);
 
- //Shift forward all possible positions 3 times
- for(int i = 0; i < num_values*3; ++i){
- testlist.assign(values.begin(), values.end());
- testlist.shift_forward(i);
- for(int j = 0; j < num_values; ++j){
- expected_values[(j + num_values - i%num_values) % num_values] = (j + 1);
+ for(int s = 1; s <= num_values; ++s){
+ expected_values.resize(s);
+ //Shift forward all possible positions 3 times
+ for(int i = 0; i < s*3; ++i){
+ testlist.insert(testlist.begin(), &values[0], &values[0] + s);
+ testlist.shift_forward(i);
+ for(int j = 0; j < s; ++j){
+ expected_values[(j + s - i%s) % s] = (j + 1);
+ }
+ TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin());
+ testlist.clear();
       }
- TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin());
- testlist.clear();
- }
 
- //Shift backwards all possible positions
- for(int i = 0; i < num_values*3; ++i){
- testlist.assign(values.begin(), values.end());
- testlist.shift_backwards(i);
- for(int j = 0; j < num_values; ++j){
- expected_values[(j + i) % num_values] = (j + 1);
+ //Shift backwards all possible positions
+ for(int i = 0; i < s*3; ++i){
+ testlist.insert(testlist.begin(), &values[0], &values[0] + s);
+ testlist.shift_backwards(i);
+ for(int j = 0; j < s; ++j){
+ expected_values[(j + i) % s] = (j + 1);
+ }
+ TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin());
+ testlist.clear();
       }
- TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin());
- testlist.clear();
    }
 }
 
@@ -278,6 +273,28 @@
       { int init_values [] = { 4, 3 };
          TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
    }
+ {
+ list_type testlist1 (&values[0], &values[1]);
+
+ { int init_values [] = { 1 };
+ TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
+
+ values[1].swap_nodes(values[2]);
+
+ { int init_values [] = { 1 };
+ TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
+
+ values[0].swap_nodes(values[2]);
+
+ { int init_values [] = { 3 };
+ TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
+
+ values[0].swap_nodes(values[2]);
+
+ { int init_values [] = { 1 };
+ TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
+ }
+
 }
 
 template<class ValueTraits>

Modified: branches/fix-links/libs/intrusive/test/slist_test.cpp
==============================================================================
--- branches/fix-links/libs/intrusive/test/slist_test.cpp (original)
+++ branches/fix-links/libs/intrusive/test/slist_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,7 +24,7 @@
 
 using namespace boost::intrusive;
 
-template<class ValueTraits>
+template<class ValueTraits, bool Linear>
 struct test_slist
 {
    typedef typename ValueTraits::value_type value_type;
@@ -37,11 +37,12 @@
    static void test_swap(std::vector<value_type>& values);
    static void test_slow_insert (std::vector<value_type>& values);
    static void test_clone (std::vector<value_type>& values);
- static void test_container_from_end(std::vector<value_type> &values);
+ static void test_container_from_end(std::vector<value_type> &, detail::bool_<true>){}
+ static void test_container_from_end(std::vector<value_type> &values, detail::bool_<false>);
 };
 
-template<class ValueTraits>
-void test_slist<ValueTraits>
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
    ::test_all (std::vector<typename ValueTraits::value_type>& values)
 {
    typedef typename ValueTraits::value_type value_type;
@@ -50,6 +51,7 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
    {
       list_type list(values.begin(), values.end());
@@ -66,12 +68,12 @@
    test_slow_insert (values);
    test_swap(values);
    test_clone(values);
- test_container_from_end(values);
+ test_container_from_end(values, detail::bool_<Linear>());
 }
 
 //test: push_front, pop_front, front, size, empty:
-template<class ValueTraits>
-void test_slist<ValueTraits>
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
    ::test_front_back (std::vector<typename ValueTraits::value_type>& values)
 {
    typedef typename ValueTraits::value_type value_type;
@@ -80,6 +82,7 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
    list_type testlist;
    BOOST_TEST (testlist.empty());
@@ -101,8 +104,8 @@
 }
 
 //test: merge due to error in merge implementation:
-template<class ValueTraits>
-void test_slist<ValueTraits>
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
    ::test_merge (std::vector<typename ValueTraits::value_type>& values)
 {
    typedef typename ValueTraits::value_type value_type;
@@ -111,6 +114,7 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
    list_type testlist1, testlist2;
    testlist1.push_front (values[0]);
@@ -124,8 +128,8 @@
 }
 
 //test: constructor, iterator, sort, reverse:
-template<class ValueTraits>
-void test_slist<ValueTraits>
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
    ::test_sort(std::vector<typename ValueTraits::value_type>& values)
 {
    typedef typename ValueTraits::value_type value_type;
@@ -134,6 +138,7 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
    list_type testlist (values.begin(), values.end());
 
@@ -145,13 +150,13 @@
       TEST_INTRUSIVE_SEQUENCE( init_values, testlist.begin() ); }
 
    testlist.reverse();
- { int init_values [] = { 5, 3, 1, 4, 2, };
+ { int init_values [] = { 5, 3, 1, 4, 2 };
       TEST_INTRUSIVE_SEQUENCE( init_values, testlist.begin() ); }
 }
   
 //test: assign, insert_after, const_iterator, erase_after, s_iterator_to, previous:
-template<class ValueTraits>
-void test_slist<ValueTraits>
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
    ::test_insert(std::vector<typename ValueTraits::value_type>& values)
 {
    typedef typename ValueTraits::value_type value_type;
@@ -160,6 +165,7 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
    list_type testlist;
    testlist.assign (&values[0] + 2, &values[0] + 5);
@@ -189,8 +195,8 @@
 }
 
 //test: insert, const_iterator, erase, siterator_to:
-template<class ValueTraits>
-void test_slist<ValueTraits>
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
    ::test_slow_insert (std::vector<typename ValueTraits::value_type>& values)
 {
    typedef typename ValueTraits::value_type value_type;
@@ -199,6 +205,7 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
    list_type testlist;
    testlist.push_front (values[4]);
@@ -232,8 +239,8 @@
    BOOST_TEST (testlist.front().value_ == 3);
 }
 
-template<class ValueTraits>
-void test_slist<ValueTraits>
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
    ::test_shift(std::vector<typename ValueTraits::value_type>& values)
 {
    typedef typename ValueTraits::value_type value_type;
@@ -242,6 +249,7 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
    list_type testlist;
 
@@ -249,33 +257,36 @@
    std::vector<int> expected_values(num_values);
 
    //Shift forward all possible positions 3 times
- for(int i = 0; i < num_values*3; ++i){
- testlist.assign(values.begin(), values.end());
- testlist.shift_forward(i);
- for(int j = 0; j < num_values; ++j){
- expected_values[(j + num_values - i%num_values) % num_values] = (j + 1);
+ for(int s = 1; s <= num_values; ++s){
+ expected_values.resize(s);
+ for(int i = 0; i < s*3; ++i){
+ testlist.insert_after(testlist.before_begin(), &values[0], &values[0] + s);
+ testlist.shift_forward(i);
+ for(int j = 0; j < s; ++j){
+ expected_values[(j + s - i%s) % s] = (j + 1);
+ }
+
+ TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin())
+ testlist.clear();
       }
 
- TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin())
- testlist.clear();
- }
+ //Shift backwards all possible positions
+ for(int i = 0; i < s*3; ++i){
+ testlist.insert_after(testlist.before_begin(), &values[0], &values[0] + s);
+ testlist.shift_backwards(i);
+ for(int j = 0; j < s; ++j){
+ expected_values[(j + i) % s] = (j + 1);
+ }
 
- //Shift backwards all possible positions
- for(int i = 0; i < num_values*3; ++i){
- testlist.assign(values.begin(), values.end());
- testlist.shift_backwards(i);
- for(int j = 0; j < num_values; ++j){
- expected_values[(j + i) % num_values] = (j + 1);
+ TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin())
+ testlist.clear();
       }
-
- TEST_INTRUSIVE_SEQUENCE_EXPECTED(expected_values, testlist.begin())
- testlist.clear();
    }
 }
 
 //test: insert_after (seq-version), swap, splice_after:
-template<class ValueTraits>
-void test_slist<ValueTraits>
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
    ::test_swap(std::vector<typename ValueTraits::value_type>& values)
 {
    typedef typename ValueTraits::value_type value_type;
@@ -284,11 +295,12 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
    {
       list_type testlist1 (&values[0], &values[0] + 2);
       list_type testlist2;
- testlist2.insert_after (testlist2.end(), &values[0] + 2, &values[0] + 5);
+ testlist2.insert_after (testlist2.before_begin(), &values[0] + 2, &values[0] + 5);
       testlist1.swap(testlist2);
       { int init_values [] = { 3, 4, 5 };
          TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
@@ -299,19 +311,20 @@
          TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
       BOOST_TEST (testlist1.empty());
 
- testlist1.splice_after (testlist1.end(), testlist2, ++testlist2.begin());
+ testlist1.splice_after (testlist1.before_begin(), testlist2, ++testlist2.begin());
       { int init_values [] = { 4 };
          TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
       { int init_values [] = { 1, 3, 5, 2 };
          TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
 
       testlist1.splice_after (testlist1.begin(), testlist2,
- testlist2.end(), ++++testlist2.begin());
+ testlist2.before_begin(), ++++testlist2.begin());
       { int init_values [] = { 4, 1, 3, 5 };
          TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
       { int init_values [] = { 2 };
          TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
    }
+ if(!list_type::linear)
    {
       list_type testlist1 (&values[0], &values[0] + 2);
       list_type testlist2 (&values[0] + 3, &values[0] + 5);
@@ -326,10 +339,32 @@
       { int init_values [] = { 4, 3 };
          TEST_INTRUSIVE_SEQUENCE( init_values, testlist2.begin() ); }
    }
+ if(!list_type::linear)
+ {
+ list_type testlist1 (&values[0], &values[1]);
+
+ { int init_values [] = { 1 };
+ TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
+
+ values[1].swap_nodes(values[2]);
+
+ { int init_values [] = { 1 };
+ TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
+
+ values[0].swap_nodes(values[2]);
+
+ { int init_values [] = { 3 };
+ TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
+
+ values[0].swap_nodes(values[2]);
+
+ { int init_values [] = { 1 };
+ TEST_INTRUSIVE_SEQUENCE( init_values, testlist1.begin() ); }
+ }
 }
 
-template<class ValueTraits>
-void test_slist<ValueTraits>
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
    ::test_clone(std::vector<typename ValueTraits::value_type>& values)
 {
    typedef typename ValueTraits::value_type value_type;
@@ -338,6 +373,7 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
 
       list_type testlist1 (&values[0], &values[0] + values.size());
@@ -349,9 +385,10 @@
       BOOST_TEST (testlist2.empty());
 }
 
-template<class ValueTraits>
-void test_slist<ValueTraits>
- ::test_container_from_end(std::vector<typename ValueTraits::value_type>& values)
+template<class ValueTraits, bool Linear>
+void test_slist<ValueTraits, Linear>
+ ::test_container_from_end(std::vector<typename ValueTraits::value_type>& values
+ ,detail::bool_<false>)
 {
    typedef typename ValueTraits::value_type value_type;
    typedef slist
@@ -359,6 +396,7 @@
       , value_traits<ValueTraits>
       , size_type<std::size_t>
       , constant_time_size<value_type::constant_time_size>
+ , linear<Linear>
> list_type;
    list_type testlist1 (&values[0], &values[0] + values.size());
    BOOST_TEST (testlist1 == list_type::container_from_end_iterator(testlist1.end()));
@@ -380,7 +418,26 @@
                   < value_type
                   , typename value_type::slist_base_hook_t
>::type
+ , false
+ >::test_all(data);
+ test_slist < typename detail::get_member_value_traits
+ < value_type
+ , member_hook< value_type
+ , typename value_type::slist_member_hook_t
+ , &value_type::slist_node_
+ >
+ >::type
+ , false
+ >::test_all(data);
+
+ //Now linear slists
+ test_slist < typename detail::get_base_value_traits
+ < value_type
+ , typename value_type::slist_base_hook_t
+ >::type
+ , true
>::test_all(data);
+
       test_slist < typename detail::get_member_value_traits
                   < value_type
                   , member_hook< value_type
@@ -388,6 +445,7 @@
                                , &value_type::slist_node_
>
>::type
+ , true
>::test_all(data);
 
       return 0;
@@ -409,6 +467,7 @@
                   < value_type
                   , typename value_type::slist_base_hook_t
>::type
+ , false
>::test_all(data);
 
       test_slist < typename detail::get_member_value_traits
@@ -418,12 +477,14 @@
                                , &value_type::slist_node_
>
>::type
+ , false
>::test_all(data);
 
       test_slist < typename detail::get_base_value_traits
                   < value_type
                   , typename value_type::slist_auto_base_hook_t
>::type
+ , false
>::test_all(data);
 
       test_slist < typename detail::get_member_value_traits
@@ -433,6 +494,24 @@
                                , &value_type::slist_auto_node_
>
>::type
+ , false
+ >::test_all(data);
+
+ test_slist < typename detail::get_base_value_traits
+ < value_type
+ , typename value_type::slist_base_hook_t
+ >::type
+ , true
+ >::test_all(data);
+
+ test_slist < typename detail::get_member_value_traits
+ < value_type
+ , member_hook< value_type
+ , typename value_type::slist_member_hook_t
+ , &value_type::slist_node_
+ >
+ >::type
+ , true
>::test_all(data);
       return 0;
    }

Deleted: branches/fix-links/libs/iostreams/build/bzip2.jam
==============================================================================
--- branches/fix-links/libs/iostreams/build/bzip2.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
+++ (empty file)
@@ -1,101 +0,0 @@
-# Boost.Iostreams Library bzip2 Jamfile
-
-# (C) Copyright Jonathan Turkanis 2004
-# Distributed under the Boost Software License, Version 1.0. (See accompanying
-# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
-
-# See http://www.boost.org/libs/iostreams for documentation.
-
-# For use in conjunction with the bzip2 data compression library by
-# Jean-loup Gailly and Mark Adler. See http://www.bzip2.org/ to obtain bzip2
-# if it is not installed on your system, or if you wish to build it with
-# different compiler or linker options.
-
-rule bzip2_config
-{
- if $(NO_COMPRESSION)
- {
- NO_BZIP2 = 1 ;
- }
-
- if $(NT) && ! $(BZIP2_SOURCE) && ! $(BZIP2_INCLUDE)
- {
- ECHO ****************************************************** ;
- ECHO Building Boost.Iostreams with bzip2 support disabled. ;
- ECHO To enable bzip2, consult the Boost.Iostreams documentation ;
- ECHO ****************************************************** ;
- NO_BZIP2 = 1 ;
- }
-
- if ! $(NO_BZIP2)
- {
- local SOURCES = blocksort bzlib compress crctable
- decompress huffman randtable ;
- BZIP2_INCLUDE ?= $(BZIP2_SOURCE) ;
-
- # define BZIP2_BINARY
- if ! $(BZIP2_SOURCE) && ! $(BZIP2_BINARY)
- {
- if $(NT) && ! [ MATCH (.*gcc.*) : $(TOOLS) ]
- {
- WINDOWS = 1 ;
- BZIP2_BINARY = "libbz2" ;
- }
- else
- {
- BZIP2_BINARY = "bz2" ;
- }
- }
-
- # declare boost_bzip2 boost_bzip2
- if $(BZIP2_SOURCE)
- {
- template bzip2_common
- : # sources
- $(BZIP2_SOURCE)/$(SOURCES).c
- : # build requirements
- [ common-names ] # magic for install and auto-link features
- <include>$(BZIP2_INCLUDE)
- : # build variants
- debug release
- ;
-
- lib boost_bzip2
- : # sources
- <template>bzip2_common
- : # build requirements
- : # build variants
- ;
-
- dll boost_bzip2
- : # sources
- <template>bzip2_common
- : # build requirements
- <define>BZIP2_DLL=1 # tell source we're building dll's
- <runtime-link>dynamic # build only for dynamic runtimes
- : # build variants
- ;
-
- install bzip2 lib
- : <lib>boost_bzip2
- ;
- }
- }
-}
-
-bzip2_config ;
-
-template bzip2
- : # sources
- [ unless $(NO_BZIP2) : ../src/bzip2.cpp ]
- [ cond $(BZIP2_SOURCE) : <lib>boost_bzip2 : ]
- : # build requirements
- [ unless $(NO_BZIP2) : <include>$(BZIP2_INCLUDE) ]
- [ unless $(NO_BZIP2) OR $(BZIP2_SOURCE)
- : <define>BOOST_BZIP2_BINARY=$(BZIP2_BINARY) ]
- [ cond $(BZIP2_LIBPATH) : <library-path>$(BZIP2_LIBPATH) : ]
- [ unless $(BZIP2_SOURCE) : <find-library>$(BZIP2_BINARY) : ]
- : # build variants
- ;
-
-# end

Deleted: branches/fix-links/libs/iostreams/build/zlib.jam
==============================================================================
--- branches/fix-links/libs/iostreams/build/zlib.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
+++ (empty file)
@@ -1,100 +0,0 @@
-# Boost.Iostreams Library zlib Jamfile
-
-# (C) Copyright Jonathan Turkanis 2004
-# Distributed under the Boost Software License, Version 1.0. (See accompanying
-# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
-
-# See http://www.boost.org/libs/iostreams for documentation.
-
-# For use in conjunction with the zlib data compression library by
-# Jean-loup Gailly and Mark Adler. See http://www.zlib.org/ to obtain zlib
-# if it is not installed on your system, or if you wish to build it with
-# different compiler or linker options.
-
-rule zlib_config
-{
- if $(NO_COMPRESSION)
- {
- NO_ZLIB = 1 ;
- }
-
- if $(NT) && ! $(ZLIB_SOURCE) && ! $(ZLIB_INCLUDE)
- {
- ECHO ****************************************************** ;
- ECHO Building Boost.Iostreams with zlib and gzip support disabled. ;
- ECHO To enable zlib and gzip, consult the Boost.Iostreams documentation ;
- ECHO ****************************************************** ;
- NO_ZLIB = 1 ;
- }
-
- if ! $(NO_ZLIB)
- {
- local SOURCES = adler32 compress crc32 deflate inffast
- inflate inftrees trees uncompr zutil ;
- ZLIB_INCLUDE ?= $(ZLIB_SOURCE) ;
-
- # define ZLIB_BINARY
- if ! $(ZLIB_SOURCE) && ! $(ZLIB_BINARY)
- {
- if $(NT) && ! [ MATCH (.*gcc.*) : $(TOOLS) ]
- {
- ZLIB_BINARY = "zdll" ;
- }
- else
- {
- ZLIB_BINARY = "z" ;
- }
- }
-
- # declare boost_zlib boost_zlib
- if $(ZLIB_SOURCE)
- {
- template zlib_common
- : # sources
- $(ZLIB_SOURCE)/$(SOURCES).c
- : # build requirements
- [ common-names ] # magic for install and auto-link features
- <include>$(ZLIB_INCLUDE)
- : # build variants
- debug release
- ;
-
- lib boost_zlib
- : # sources
- <template>zlib_common
- : # build requirements
- : # build variants
- ;
-
- dll boost_zlib
- : # sources
- <template>zlib_common
- : # build requirements
- <define>ZLIB_DLL=1 # tell source we're building dll's
- <runtime-link>dynamic # build only for dynamic runtimes
- : # build variants
- ;
-
- install zlib lib
- : <lib>boost_zlib
- ;
- }
- }
-}
-
-zlib_config ;
-
-template zlib
- : # sources
- [ unless $(NO_ZLIB) : ../src/zlib.cpp ]
- [ cond $(ZLIB_SOURCE) : <lib>boost_zlib : ]
- : # build requirements
- [ unless $(NO_ZLIB) : <include>$(ZLIB_INCLUDE) ]
- [ unless $(NO_ZLIB) OR $(ZLIB_SOURCE)
- : <define>BOOST_ZLIB_BINARY=$(ZLIB_BINARY) ]
- [ cond $(ZLIB_LIBPATH) : <library-path>$(ZLIB_LIBPATH) : ]
- [ unless $(ZLIB_SOURCE) : <find-library>$(ZLIB_BINARY) : ]
- : # build variants
- ;
-
-# end

Modified: branches/fix-links/libs/iostreams/doc/acknowledgments.html
==============================================================================
--- branches/fix-links/libs/iostreams/doc/acknowledgments.html (original)
+++ branches/fix-links/libs/iostreams/doc/acknowledgments.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -68,7 +68,7 @@
         Jeff Garland served as review manager and provided helpful criticism and guidance.
     </LI>
     <LI CLASS="square">
- Those who participated in the formal review or the post-review discussions, or who submitted bug reports or patches, include (in no particular order) Adam Peterson, Joaquín M López Muñoz, Neal D. Becker, Stas Garifulin, Vladimir Prus, Rob Stewart, Robert Ramey, Michel Decima, Michiel Salters, Pedro Lamarão, Dietmar Kühl, Oleg Rekutin, Reece Dunn, Stefan Slapeta, Jeff Flinn, Jeff Garland, Eugene Lazutkin, John Torjo, Brian Braatz, Keith Burton, Keith MacDonald, Phil Richards, Arjen Wagenaar, Caleb Epstein, Dylan Trotter, Ben Hutchings, Daniel James, Daniel Schlyder, Jan Christiaan van Winkel, Jonathan Graehl, Jonathan Wakely, Rene Rivera, Tony Juricic, Bronek Kozicki, George M. Garner, Jr., Thorsten Ottosen, Bertolt Mildner, Carlo Wood, Christoper Diggins, Christoph Ludwig, Daryle Walker, Dirk Griffioen, Gareth Sylvester-Bradley, Jürgen Hunold, Larry Evans, Markus Schöpflin, Martin Ecker, Martin Wille, Russel Hind, Matthew Vogt, Matthias Troyer, Peter Dimov, Bruno Martínez Aguerre, Douglas Gregor, Pa
ul A. Bristow, David B. Held, Kevin Wheatley, Pavel Vozenilek, Emmanuel Thomé, Scott Woods, Israel Fernández Cabrera, Felix Gartsman, Pavel Chikulaev, Lisa Glendenning, Yuval Ronen and Paul Harris.
+ Those who participated in the formal review or the post-review discussions, or who submitted bug reports or patches, include (in no particular order) Adam Peterson, Joaquín M López Muñoz, Neal D. Becker, Stas Garifulin, Vladimir Prus, Rob Stewart, Robert Ramey, Michel Decima, Michiel Salters, Pedro Lamarão, Dietmar Kühl, Oleg Rekutin, Reece Dunn, Stefan Slapeta, Jeff Flinn, Jeff Garland, Eugene Lazutkin, John Torjo, Brian Braatz, Keith Burton, Keith MacDonald, Phil Richards, Arjen Wagenaar, Caleb Epstein, Dylan Trotter, Ben Hutchings, Daniel James, Daniel Schlyder, Jan Christiaan van Winkel, Jonathan Graehl, Jonathan Wakely, Rene Rivera, Tony Juricic, Bronek Kozicki, George M. Garner, Jr., Thorsten Ottosen, Bertolt Mildner, Carlo Wood, Christoper Diggins, Christoph Ludwig, Daryle Walker, Dirk Griffioen, Gareth Sylvester-Bradley, Jürgen Hunold, Larry Evans, Markus Sch&ouml;pflin, Martin Ecker, Martin Wille, Russel Hind, Matthew Vogt, Matthias Troyer, Peter Dimov, Bruno Martínez Aguerre, Douglas Grego
r, Paul A. Bristow, David B. Held, Kevin Wheatley, Pavel Vozenilek, Emmanuel Thomé, Scott Woods, Israel Fernández Cabrera, Felix Gartsman, Pavel Chikulaev, Lisa Glendenning, Yuval Ronen and Paul Harris.
     </LI>
 </UL>
 

Modified: branches/fix-links/libs/iostreams/example/container_device.hpp
==============================================================================
--- branches/fix-links/libs/iostreams/example/container_device.hpp (original)
+++ branches/fix-links/libs/iostreams/example/container_device.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -30,8 +30,9 @@
     std::streamsize read(char_type* s, std::streamsize n)
     {
         using namespace std;
- streamsize amt = static_cast<streamsize>(container_.size() - pos_);
- streamsize result = (min)(n, amt);
+ std::streamsize amt =
+ static_cast<std::streamsize>(container_.size() - pos_);
+ std::streamsize result = (min)(n, amt);
         if (result != 0) {
             std::copy( container_.begin() + pos_,
                        container_.begin() + pos_ + result,
@@ -86,8 +87,9 @@
     std::streamsize read(char_type* s, std::streamsize n)
     {
         using namespace std;
- streamsize amt = static_cast<streamsize>(container_.size() - pos_);
- streamsize result = (min)(n, amt);
+ std::streamsize amt =
+ static_cast<std::streamsize>(container_.size() - pos_);
+ std::streamsize result = (min)(n, amt);
         if (result != 0) {
             std::copy( container_.begin() + pos_,
                        container_.begin() + pos_ + result,
@@ -101,10 +103,10 @@
     std::streamsize write(const char_type* s, std::streamsize n)
     {
         using namespace std;
- streamsize result = 0;
+ std::streamsize result = 0;
         if (pos_ != container_.size()) {
- streamsize amt =
- static_cast<streamsize>(container_.size() - pos_);
+ std::streamsize amt =
+ static_cast<std::streamsize>(container_.size() - pos_);
             result = (min)(n, amt);
             std::copy(s, s + result, container_.begin() + pos_);
             pos_ += result;

Modified: branches/fix-links/libs/iostreams/example/dictionary_filter.hpp
==============================================================================
--- branches/fix-links/libs/iostreams/example/dictionary_filter.hpp (original)
+++ branches/fix-links/libs/iostreams/example/dictionary_filter.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -51,7 +51,7 @@
             if (c == EOF || !std::isalpha((unsigned char) c)) {
                 dictionary_.replace(current_word_);
                 cout.write( current_word_.data(),
- static_cast<streamsize>(current_word_.size()) );
+ static_cast<std::streamsize>(current_word_.size()) );
                 current_word_.erase();
                 if (c == EOF)
                     break;
@@ -167,8 +167,9 @@
     bool write_current_word(Sink& dest)
     {
         using namespace std;
- streamsize amt = static_cast<streamsize>(current_word_.size() - off_);
- streamsize result =
+ std::streamsize amt =
+ static_cast<std::streamsize>(current_word_.size() - off_);
+ std::streamsize result =
             iostreams::write(dest, current_word_.data() + off_, amt);
         if (result == amt) {
             current_word_.erase();

Modified: branches/fix-links/libs/iostreams/src/file_descriptor.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/src/file_descriptor.cpp (original)
+++ branches/fix-links/libs/iostreams/src/file_descriptor.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,4 +1,4 @@
-// (C) Copyright Jonathan Turkanis 2003.
+// (C) Copyright Jonathan Turkanis 2003-2007.
 // Distributed under the Boost Software License, Version 1.0. (See accompanying
 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
 
@@ -13,19 +13,19 @@
 #define BOOST_IOSTREAMS_SOURCE
 
 #include <cassert>
-#include <boost/config.hpp> // BOOST_JOIN
+#include <cerrno>
+#include <cstdio> // SEEK_SET, etc.
+#include <boost/config.hpp> // BOOST_JOIN
 #include <boost/iostreams/detail/error.hpp>
 #include <boost/iostreams/detail/config/dyn_link.hpp>
+#include <boost/iostreams/detail/config/rtl.hpp> // BOOST_IOSTREAMS_FD_XXX
 #include <boost/iostreams/detail/config/windows_posix.hpp>
-#include <boost/iostreams/detail/ios.hpp> // openmodes, failure.
+#include <boost/iostreams/detail/ios.hpp> // openmodes, failure.
 #include <boost/iostreams/device/file_descriptor.hpp>
 #include <boost/integer_traits.hpp>
 
     // OS-specific headers for low-level i/o.
 
-#include <cassert>
-#include <cstdio> // SEEK_SET, etc.
-#include <errno.h>
 #include <fcntl.h> // file opening flags.
 #include <sys/stat.h> // file access permissions.
 #ifdef BOOST_IOSTREAMS_WINDOWS
@@ -40,21 +40,28 @@
 # include <unistd.h> // low-level file i/o.
 #endif
 
-// Names of runtime library routines vary.
-#if defined(__BORLANDC__)
-# define BOOST_RTL(x) BOOST_JOIN(_rtl_, x)
-#else
-# if defined(BOOST_IOSTREAMS_WINDOWS) && !defined(__CYGWIN__)
-# define BOOST_RTL(x) BOOST_JOIN(_, x)
-# else
-# define BOOST_RTL(x) ::x
-# endif
-#endif
-
 namespace boost { namespace iostreams {
 
 //------------------Implementation of file_descriptor-------------------------//
 
+file_descriptor::file_descriptor() : pimpl_(new impl) { }
+
+file_descriptor::file_descriptor(handle_type fd, bool close_on_exit)
+ : pimpl_(new impl(fd, close_on_exit))
+ { }
+
+#ifdef BOOST_IOSTREAMS_WINDOWS
+ file_descriptor::file_descriptor(int fd, bool close_on_exit)
+ : pimpl_(new impl(int_to_handle(fd), close_on_exit))
+ { }
+#endif
+
+file_descriptor::file_descriptor( const std::string& path,
+ BOOST_IOS::openmode mode,
+ BOOST_IOS::openmode base_mode )
+ : pimpl_(new impl)
+{ open(path, mode, base_mode); }
+
 void file_descriptor::open
     ( const std::string& path, BOOST_IOS::openmode m,
       BOOST_IOS::openmode base )
@@ -92,14 +99,14 @@
     HANDLE handle =
         ::CreateFileA( path.c_str(),
                        dwDesiredAccess,
- 0, // dwShareMode
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
                        NULL, // lpSecurityAttributes
                        dwCreationDisposition,
                        FILE_ATTRIBUTE_NORMAL,
                        NULL ); // hTemplateFile
     if (handle != INVALID_HANDLE_VALUE) {
         pimpl_->handle_ = handle;
- pimpl_->flags_ |= impl::close_on_exit | impl::has_handle;
+ pimpl_->flags_ |= impl::close_on_exit;
     } else {
         pimpl_->flags_ = 0;
         throw BOOST_IOSTREAMS_FAILURE("bad open");
@@ -126,6 +133,9 @@
     }
     if (m & BOOST_IOS::trunc)
         oflag |= O_CREAT;
+ #ifdef _LARGEFILE64_SOURCE
+ oflag |= O_LARGEFILE;
+ #endif
 
         // Calculate pmode argument to open.
 
@@ -135,11 +145,11 @@
 
         // Open file.
 
- int fd = BOOST_RTL(open)(path.c_str(), oflag, pmode);
+ int fd = BOOST_IOSTREAMS_FD_OPEN(path.c_str(), oflag, pmode);
     if (fd == -1) {
         throw BOOST_IOSTREAMS_FAILURE("bad open");
     } else {
- pimpl_->fd_ = fd;
+ pimpl_->handle_ = fd;
         pimpl_->flags_ = impl::close_on_exit;
     }
 #endif // #ifndef BOOST_IOSTREAMS_WINDOWS //----------------------------------//
@@ -148,43 +158,41 @@
 std::streamsize file_descriptor::read(char_type* s, std::streamsize n)
 {
 #ifdef BOOST_IOSTREAMS_WINDOWS
- if (pimpl_->flags_ & impl::has_handle) {
- DWORD result;
- if (!::ReadFile(pimpl_->handle_, s, n, &result, NULL))
- throw detail::bad_read();
- return static_cast<std::streamsize>(result);
- }
-#endif
+ DWORD result;
+ if (!::ReadFile(pimpl_->handle_, s, n, &result, NULL))
+ throw detail::bad_read();
+ return static_cast<std::streamsize>(result);
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
     errno = 0;
- std::streamsize result = BOOST_RTL(read)(pimpl_->fd_, s, n);
+ std::streamsize result = BOOST_IOSTREAMS_FD_READ(pimpl_->handle_, s, n);
     if (errno != 0)
         throw detail::bad_read();
     return result == 0 ? -1 : result;
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
 }
 
 std::streamsize file_descriptor::write(const char_type* s, std::streamsize n)
 {
 #ifdef BOOST_IOSTREAMS_WINDOWS
- if (pimpl_->flags_ & impl::has_handle) {
- if (pimpl_->flags_ & impl::append) {
- DWORD const dwResult =
- ::SetFilePointer(pimpl_->handle_, 0, NULL, FILE_END);
- if ( dwResult == INVALID_SET_FILE_POINTER &&
- ::GetLastError() != NO_ERROR )
- {
- throw detail::bad_seek();
- }
+ if (pimpl_->flags_ & impl::append) {
+ DWORD const dwResult =
+ ::SetFilePointer(pimpl_->handle_, 0, NULL, FILE_END);
+ if ( dwResult == INVALID_SET_FILE_POINTER &&
+ ::GetLastError() != NO_ERROR )
+ {
+ throw detail::bad_seek();
         }
- DWORD ignore;
- if (!::WriteFile(pimpl_->handle_, s, n, &ignore, NULL))
- throw detail::bad_write();
- return n;
     }
-#endif
- int amt = BOOST_RTL(write)(pimpl_->fd_, s, n);
+ DWORD ignore;
+ if (!::WriteFile(pimpl_->handle_, s, n, &ignore, NULL))
+ throw detail::bad_write();
+ return n;
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+ int amt = BOOST_IOSTREAMS_FD_WRITE(pimpl_->handle_, s, n);
     if (amt < n)
         throw detail::bad_write(); // Handles blocking fd's only.
     return n;
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
 }
 
 std::streampos file_descriptor::seek
@@ -192,58 +200,46 @@
 {
     using namespace std;
 #ifdef BOOST_IOSTREAMS_WINDOWS
- if (pimpl_->flags_ & impl::has_handle) {
- LONG lDistanceToMove = static_cast<LONG>(off & 0xffffffff);
- LONG lDistanceToMoveHigh = static_cast<LONG>(off >> 32);
- DWORD dwResultLow =
- ::SetFilePointer( pimpl_->handle_,
- lDistanceToMove,
- &lDistanceToMoveHigh,
- way == BOOST_IOS::beg ?
- FILE_BEGIN :
- way == BOOST_IOS::cur ?
- FILE_CURRENT :
- FILE_END );
- if ( dwResultLow == INVALID_SET_FILE_POINTER &&
- ::GetLastError() != NO_ERROR )
- {
- throw detail::bad_seek();
- } else {
- return offset_to_position(
- (stream_offset(lDistanceToMoveHigh) << 32) + dwResultLow
- );
- }
+ LONG lDistanceToMove = static_cast<LONG>(off & 0xffffffff);
+ LONG lDistanceToMoveHigh = static_cast<LONG>(off >> 32);
+ DWORD dwResultLow =
+ ::SetFilePointer( pimpl_->handle_,
+ lDistanceToMove,
+ &lDistanceToMoveHigh,
+ way == BOOST_IOS::beg ?
+ FILE_BEGIN :
+ way == BOOST_IOS::cur ?
+ FILE_CURRENT :
+ FILE_END );
+ if ( dwResultLow == INVALID_SET_FILE_POINTER &&
+ ::GetLastError() != NO_ERROR )
+ {
+ throw detail::bad_seek();
+ } else {
+ return offset_to_position(
+ (stream_offset(lDistanceToMoveHigh) << 32) + dwResultLow
+ );
     }
-#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
-
-#ifndef BOOST_IOSTREAMS_HAS_LSEEK64
- if ( off > integer_traits<long>::const_max ||
- off < integer_traits<long>::const_min )
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+ if ( off > integer_traits<BOOST_IOSTREAMS_FD_OFFSET>::const_max ||
+ off < integer_traits<BOOST_IOSTREAMS_FD_OFFSET>::const_min )
     {
         throw BOOST_IOSTREAMS_FAILURE("bad offset");
     }
-#endif
-
     stream_offset result =
- #ifdef BOOST_IOSTREAMS_HAS_LSEEK64
- lseek64
- #else
- lseek
- #endif
- ( pimpl_->fd_,
- #ifdef BOOST_IOSTREAMS_HAS_LSEEK64
- off,
- #else
- static_cast<long>(off),
- #endif
- way == BOOST_IOS::beg ?
+ BOOST_IOSTREAMS_FD_SEEK(
+ pimpl_->handle_,
+ static_cast<BOOST_IOSTREAMS_FD_OFFSET>(off),
+ ( way == BOOST_IOS::beg ?
                   SEEK_SET :
- way == BOOST_IOS::cur ?
- SEEK_CUR :
- SEEK_END );
+ way == BOOST_IOS::cur ?
+ SEEK_CUR :
+ SEEK_END )
+ );
     if (result == -1)
         throw detail::bad_seek();
     return offset_to_position(result);
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
 }
 
 void file_descriptor::close() { close_impl(*pimpl_); }
@@ -251,20 +247,28 @@
 void file_descriptor::close_impl(impl& i)
 {
 #ifdef BOOST_IOSTREAMS_WINDOWS
- if (i.flags_ & impl::has_handle) {
+ if (i.handle_ != reinterpret_cast<handle_type>(-1)) {
         if (!::CloseHandle(i.handle_))
             throw BOOST_IOSTREAMS_FAILURE("bad close");
- i.fd_ = -1;
+ i.handle_ = reinterpret_cast<handle_type>(-1);
         i.flags_ = 0;
         return;
     }
-#endif
- if (i.fd_ != -1) {
- if (BOOST_RTL(close)(i.fd_) == -1)
+#else // #ifdef BOOST_IOSTREAMS_WINDOWS
+ if (i.handle_ != -1) {
+ if (BOOST_IOSTREAMS_FD_CLOSE(i.handle_) == -1)
             throw BOOST_IOSTREAMS_FAILURE("bad close");
- i.fd_ = -1;
+ i.handle_ = -1;
         i.flags_ = 0;
     }
+#endif // #ifdef BOOST_IOSTREAMS_WINDOWS
 }
 
+#ifdef BOOST_IOSTREAMS_WINDOWS
+file_descriptor::handle_type file_descriptor::int_to_handle(int fd)
+{
+ return reinterpret_cast<handle_type>(_get_osfhandle(fd));
+}
+#endif
+
 } } // End namespaces iostreams, boost.

Modified: branches/fix-links/libs/iostreams/src/mapped_file.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/src/mapped_file.cpp (original)
+++ branches/fix-links/libs/iostreams/src/mapped_file.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -22,6 +22,9 @@
 #ifdef BOOST_IOSTREAMS_WINDOWS
 # define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
 # include <windows.h>
+# ifndef INVALID_SET_FILE_POINTER
+# define INVALID_SET_FILE_POINTER ((DWORD)-1)
+# endif
 #else
 # include <errno.h>
 # include <fcntl.h>
@@ -194,9 +197,14 @@
     if (p.new_file_size != 0 && !readonly) {
         LONG sizehigh = (p.new_file_size >> (sizeof(LONG) * 8));
         LONG sizelow = (p.new_file_size & 0xffffffff);
- ::SetFilePointer(pimpl_->handle_, sizelow, &sizehigh, FILE_BEGIN);
- if (::GetLastError() != NO_ERROR || !::SetEndOfFile(pimpl_->handle_))
+ DWORD result =
+ ::SetFilePointer(pimpl_->handle_, sizelow, &sizehigh, FILE_BEGIN);
+ if ( result == INVALID_SET_FILE_POINTER &&
+ ::GetLastError() != NO_ERROR ||
+ !::SetEndOfFile(pimpl_->handle_) )
+ {
             detail::cleanup_and_throw(*pimpl_, "failed setting file size");
+ }
     }
 
     //--------------Create mapping--------------------------------------------//

Modified: branches/fix-links/libs/iostreams/test/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/iostreams/test/Jamfile.v2 (original)
+++ branches/fix-links/libs/iostreams/test/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -11,7 +11,8 @@
 
 local NO_BZIP2 = [ modules.peek : NO_BZIP2 ] ;
 local NO_ZLIB = [ modules.peek : NO_ZLIB ] ;
-
+local LARGE_FILE_TEMP = [ modules.peek : LARGE_FILE_TEMP ] ;
+local LARGE_FILE_KEEP = [ modules.peek : LARGE_FILE_KEEP ] ;
 
 rule test-iostreams ( sources * : requirements * ) {
     return [
@@ -21,8 +22,9 @@
             : # command
             : # input files
             : # build requirements
+ <toolset>msvc:<define>_CRT_SECURE_NO_DEPRECATE
+ <toolset>msvc:<define>_SCL_SECURE_NO_DEPRECATE
                 <toolset>msvc,<stdlib>stlport:<runtime-link>static
- <toolset>msvc:<cxxflags>"-wd4996"
                 <toolset>cw-9.3,<os>darwin:<runtime-link>static
                 <define>BOOST_IOSTREAMS_NO_LIB
                 <link>shared:<define>BOOST_IOSTREAMS_DYN_LINK=1
@@ -30,7 +32,6 @@
         ] ;
 }
 
-
     local all-tests =
           [ test-iostreams array_test.cpp ]
           [ test-iostreams auto_close_test.cpp ]
@@ -38,10 +39,8 @@
           [ test-iostreams close_test.cpp ]
           [ test-iostreams
                 code_converter_test.cpp
- detail/utf8_codecvt_facet.cpp ]
-
- #: # build requirements
- # std::locale-support ]
+ detail/utf8_codecvt_facet.cpp : <link>static ]
+ [ test-iostreams combine_test.cpp ]
           [ test-iostreams compose_test.cpp ]
           [ test-iostreams component_access_test.cpp ]
           [ test-iostreams copy_test.cpp ]
@@ -50,23 +49,15 @@
           [ test-iostreams example_test.cpp ]
           [ test-iostreams execute_test.cpp ]
           [ test-iostreams file_test.cpp ]
- [ test-iostreams
- file_descriptor_test.cpp
- ../build//boost_iostreams : <link>static ]
+ [ test-iostreams file_descriptor_test.cpp
+ ../src/file_descriptor.cpp : <link>static ]
           [ test-iostreams filtering_stream_test.cpp ]
- [ test-iostreams
- finite_state_filter_test.cpp
- : # build requirements
- # FIXME: yet to implement
- #std::locale-support
- ]
-
+ [ test-iostreams finite_state_filter_test.cpp ]
           [ test-iostreams flush_test.cpp ]
           [ test-iostreams invert_test.cpp ]
           [ test-iostreams line_filter_test.cpp ]
- [ test-iostreams
- mapped_file_test.cpp
- ../build//boost_iostreams : <link>static ]
+ [ test-iostreams mapped_file_test.cpp
+ ../src/mapped_file.cpp : <link>static ]
           [ test-iostreams newline_test.cpp ]
           [ test-iostreams null_test.cpp ]
           [ test-iostreams operation_sequence_test.cpp ]
@@ -78,27 +69,49 @@
           [ test-iostreams seekable_file_test.cpp ]
           [ test-iostreams seekable_filter_test.cpp ]
           [ test-iostreams sequence_test.cpp ]
+ [ test-iostreams slice_test.cpp ]
           [ test-iostreams stdio_filter_test.cpp ]
           [ test-iostreams stream_offset_32bit_test.cpp ]
           [ test-iostreams stream_offset_64bit_test.cpp ]
- [ test-iostreams stream_state_test.cpp ]
+ #[ test-iostreams stream_state_test.cpp ]
           [ test-iostreams symmetric_filter_test.cpp ]
           [ test-iostreams tee_test.cpp ]
           [ test-iostreams wide_stream_test.cpp ]
           ;
 
+ if $(LARGE_FILE_KEEP)
+ {
+ all-tests +=
+ [ test-iostreams
+ large_file_test.cpp
+ ../src/file_descriptor.cpp
+ ../src/mapped_file.cpp
+ : <define>LARGE_FILE_KEEP=$(LARGE_FILE_KEEP)
+ <link>static ] ;
+ }
+ if $(LARGE_FILE_TEMP)
+ {
+ all-tests +=
+ [ test-iostreams
+ large_file_test.cpp
+ ../src/file_descriptor.cpp
+ ../src/mapped_file.cpp
+ : <define>LARGE_FILE_TEMP=$(LARGE_FILE_TEMP)
+ <link>static ] ;
+ }
       if ! $(NO_BZIP2)
       {
           all-tests += [ test-iostreams
- bzip2_test.cpp ../build//boost_iostreams ] ;
- }
+ bzip2_test.cpp ../build//boost_iostreams ] ;
+ }
       if ! $(NO_ZLIB)
       {
- all-tests += [ test-iostreams
- gzip_test.cpp ../build//boost_iostreams ]
- [ test-iostreams
- zlib_test.cpp ../build//boost_iostreams ] ;
- }
+ all-tests +=
+ [ test-iostreams
+ gzip_test.cpp ../build//boost_iostreams ]
+ [ test-iostreams
+ zlib_test.cpp ../build//boost_iostreams ] ;
+ }
           
     test-suite "iostreams" : $(all-tests) ;
     

Modified: branches/fix-links/libs/iostreams/test/close_test.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/close_test.cpp (original)
+++ branches/fix-links/libs/iostreams/test/close_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
  *
  * Verifies that the close() member functions of filters and devices
  * are called with the correct arguments in the correct order when
- * they are combined using chains or adapters.
+ * used with chains and streams.
  *
  * File: libs/iostreams/test/close_test.cpp
  * Date: Sun Dec 09 16:12:23 MST 2007
@@ -15,13 +15,7 @@
  */
 
 #include <boost/iostreams/chain.hpp>
-#include <boost/iostreams/combine.hpp>
-#include <boost/iostreams/compose.hpp>
-#include <boost/iostreams/filter/symmetric.hpp>
-#include <boost/iostreams/invert.hpp>
-#include <boost/iostreams/restrict.hpp>
 #include <boost/iostreams/stream.hpp>
-#include <boost/iostreams/tee.hpp>
 #include <boost/test/test_tools.hpp>
 #include <boost/test/unit_test.hpp>
 #include "detail/closable.hpp"
@@ -110,12 +104,13 @@
     {
         operation_sequence seq;
         chain<input> ch;
+ operation dummy;
 
         // Test chain::pop()
         ch.push(
             closable_filter<dual_use>(
                 seq.new_operation(2),
- seq.new_operation(3)
+ dummy
             )
         );
         ch.push(closable_device<input>(seq.new_operation(1)));
@@ -270,12 +265,13 @@
     {
         operation_sequence seq;
         chain<output> ch;
+ operation dummy;
 
         // Test chain::pop()
         ch.push(
             closable_filter<dual_use>(
- seq.new_operation(1),
- seq.new_operation(2)
+ dummy,
+ seq.new_operation(1)
             )
         );
         ch.push(closable_device<output>(seq.new_operation(3)));
@@ -506,905 +502,6 @@
     }
 }
 
-void combine_test()
-{
- // Combine a source and a sink
- {
- operation_sequence seq;
- chain<bidirectional> ch;
- ch.push(
- io::combine(
- closable_device<input>(seq.new_operation(1)),
- closable_device<output>(seq.new_operation(2))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Combine two bidirectional devices
- {
- operation_sequence seq;
- chain<bidirectional> ch;
- ch.push(
- io::combine(
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(2)
- ),
- closable_device<bidirectional>(
- seq.new_operation(3),
- seq.new_operation(4)
- )
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Combine two seekable devices
- {
- operation_sequence seq;
- chain<bidirectional> ch;
- ch.push(
- io::combine(
- closable_device<seekable>(seq.new_operation(1)),
- closable_device<seekable>(seq.new_operation(2))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Combine an input filter and an output filter
- {
- operation_sequence seq;
- chain<bidirectional> ch;
- ch.push(
- io::combine(
- closable_filter<input>(seq.new_operation(2)),
- closable_filter<output>(seq.new_operation(3))
- )
- );
- ch.push(
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(4)
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Combine two bidirectional filters
- {
- operation_sequence seq;
- chain<bidirectional> ch;
- ch.push(
- io::combine(
- closable_filter<bidirectional>(
- seq.new_operation(2),
- seq.new_operation(3)
- ),
- closable_filter<bidirectional>(
- seq.new_operation(4),
- seq.new_operation(5)
- )
- )
- );
- ch.push(
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(6)
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Combine two seekable filters
- {
- operation_sequence seq;
- chain<bidirectional> ch;
- ch.push(
- io::combine(
- closable_filter<seekable>(seq.new_operation(2)),
- closable_filter<seekable>(seq.new_operation(3))
- )
- );
- ch.push(
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(4)
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Combine two dual-use filters
- {
- operation_sequence seq;
- chain<bidirectional> ch;
- ch.push(
- io::combine(
- closable_filter<dual_use>(
- seq.new_operation(2),
- seq.new_operation(3)
- ),
- closable_filter<dual_use>(
- seq.new_operation(4),
- seq.new_operation(5)
- )
- )
- );
- ch.push(
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(6)
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-}
-
-void composite_device_test()
-{
- // Compose an input filter with a source
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::compose(
- closable_filter<input>(seq.new_operation(2)),
- closable_device<input>(seq.new_operation(1))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a bidirectional filter with a source
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::compose(
- closable_filter<bidirectional>(
- seq.new_operation(2),
- seq.new_operation(3)
- ),
- closable_device<input>(seq.new_operation(1))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a seekable filter with a source
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::compose(
- closable_filter<seekable>(seq.new_operation(2)),
- closable_device<input>(seq.new_operation(1))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a dual-use filter with a source
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::compose(
- closable_filter<dual_use>(
- seq.new_operation(2),
- seq.new_operation(3)
- ),
- closable_device<input>(seq.new_operation(1))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose an output filter with a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::compose(
- closable_filter<output>(seq.new_operation(1)),
- closable_device<output>(seq.new_operation(2))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a bidirectional filter with a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::compose(
- closable_filter<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(2)
- ),
- closable_device<output>(seq.new_operation(3))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a seekable filter with a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::compose(
- closable_filter<seekable>(seq.new_operation(1)),
- closable_device<output>(seq.new_operation(2))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a dual-use filter with a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::compose(
- closable_filter<dual_use>(
- seq.new_operation(1),
- seq.new_operation(2)
- ),
- closable_device<output>(seq.new_operation(3))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a bidirectional filter with a bidirectional device
- {
- operation_sequence seq;
- chain<bidirectional> ch;
- ch.push(
- io::compose(
- closable_filter<bidirectional>(
- seq.new_operation(2),
- seq.new_operation(3)
- ),
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(4)
- )
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a seekable filter with a seekable device
- {
- operation_sequence seq;
- chain<seekable> ch;
- ch.push(
- io::compose(
- closable_filter<seekable>(seq.new_operation(1)),
- closable_device<seekable>(seq.new_operation(2))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-}
-
-void composite_filter_test()
-{
- // Compose two input filters
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::compose(
- closable_filter<input>(seq.new_operation(3)),
- closable_filter<input>(seq.new_operation(2))
- )
- );
- ch.push(closable_device<input>(seq.new_operation(1)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a bidirectional filter with an input filter
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::compose(
- closable_filter<bidirectional>(
- seq.new_operation(3),
- seq.new_operation(4)
- ),
- closable_filter<input>(seq.new_operation(2))
- )
- );
- ch.push(closable_device<input>(seq.new_operation(1)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_MESSAGE(seq.is_success(), seq.message());
- }
-
- // Compose a seekable filter with an input filter
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::compose(
- closable_filter<seekable>(seq.new_operation(3)),
- closable_filter<input>(seq.new_operation(2))
- )
- );
- ch.push(closable_device<input>(seq.new_operation(1)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a dual-use filter with an input filter
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::compose(
- closable_filter<dual_use>(
- seq.new_operation(3),
- seq.new_operation(4)
- ),
- closable_filter<input>(seq.new_operation(2))
- )
- );
- ch.push(closable_device<input>(seq.new_operation(1)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose two output filters
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::compose(
- closable_filter<output>(seq.new_operation(1)),
- closable_filter<output>(seq.new_operation(2))
- )
- );
- ch.push(closable_device<output>(seq.new_operation(3)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a bidirectional filter with an output filter
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::compose(
- closable_filter<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(2)
- ),
- closable_filter<output>(seq.new_operation(3))
- )
- );
- ch.push(closable_device<output>(seq.new_operation(4)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a seekable filter with an output filter
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::compose(
- closable_filter<seekable>(seq.new_operation(1)),
- closable_filter<output>(seq.new_operation(2))
- )
- );
- ch.push(closable_device<output>(seq.new_operation(3)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose a dual-use filter with an output filter
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::compose(
- closable_filter<dual_use>(
- seq.new_operation(1),
- seq.new_operation(2)
- ),
- closable_filter<output>(seq.new_operation(3))
- )
- );
- ch.push(closable_device<output>(seq.new_operation(4)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose two bidirectional filters
- {
- operation_sequence seq;
- chain<bidirectional> ch;
- ch.push(
- io::compose(
- closable_filter<bidirectional>(
- seq.new_operation(3),
- seq.new_operation(4)
- ),
- closable_filter<bidirectional>(
- seq.new_operation(2),
- seq.new_operation(5)
- )
- )
- );
- ch.push(
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(6)
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose two seekable filters
- {
- operation_sequence seq;
- chain<seekable> ch;
- ch.push(
- io::compose(
- closable_filter<seekable>(seq.new_operation(1)),
- closable_filter<seekable>(seq.new_operation(2))
- )
- );
- ch.push(closable_device<seekable>(seq.new_operation(3)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose two dual-use filters for input
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::compose(
- closable_filter<dual_use>(
- seq.new_operation(3),
- seq.new_operation(4)
- ),
- closable_filter<dual_use>(
- seq.new_operation(2),
- seq.new_operation(5)
- )
- )
- );
- ch.push(closable_device<input>(seq.new_operation(1)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Compose two dual-use filters for output
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::compose(
- closable_filter<dual_use>(
- seq.new_operation(2),
- seq.new_operation(3)
- ),
- closable_filter<dual_use>(
- seq.new_operation(1),
- seq.new_operation(4)
- )
- )
- );
- ch.push(closable_device<output>(seq.new_operation(5)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-}
-
-void invert_test()
-{
- // Invert an output filter
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(io::invert(closable_filter<output>(seq.new_operation(2))));
- ch.push(closable_device<input>(seq.new_operation(1)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Invert an input filter
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(io::invert(closable_filter<input>(seq.new_operation(1))));
- ch.push(closable_device<output>(seq.new_operation(2)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-}
-
-void restrict_test()
-{
- // Restrict a source
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(io::restrict(closable_device<input>(seq.new_operation(1)), 0));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Restrict a seekable device
- {
- operation_sequence seq;
- chain<seekable> ch;
- ch.push(
- io::restrict(closable_device<seekable>(seq.new_operation(1)), 0)
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Restrict a direct source
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::restrict(closable_device<direct_input>(seq.new_operation(1)), 0)
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Restrict a direct seekable device
- {
- operation_sequence seq;
- chain<seekable> ch;
- ch.push(
- io::restrict(
- closable_device<direct_seekable>(seq.new_operation(1)),
- 0
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Restrict an input filter
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(io::restrict(closable_filter<input>(seq.new_operation(2)), 0));
- ch.push(closable_device<input>(seq.new_operation(1)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Restrict a seekable filter
- {
- operation_sequence seq;
- chain<seekable> ch;
- ch.push(
- io::restrict(closable_filter<seekable>(seq.new_operation(1)), 0)
- );
- ch.push(closable_device<seekable>(seq.new_operation(2)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Restrict a dual_use filter for input
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::restrict(
- closable_filter<dual_use>(
- seq.new_operation(2),
- seq.new_operation(3)
- ),
- 0
- )
- );
- ch.push(closable_device<input>(seq.new_operation(1)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Restrict a dual_use filter for output
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::restrict(
- closable_filter<dual_use>(
- seq.new_operation(1),
- seq.new_operation(2)
- ),
- 0
- )
- );
- ch.push(closable_device<output>(seq.new_operation(3)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-}
-
-void symmetric_filter_test()
-{
- // Test input
- {
- operation_sequence seq;
- chain<input> ch;
- ch.push(
- io::symmetric_filter<closable_symmetric_filter>
- (0, seq.new_operation(2))
- );
- ch.push(closable_device<input>(seq.new_operation(1)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Test output
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::symmetric_filter<closable_symmetric_filter>
- (0, seq.new_operation(1))
- );
- ch.push(closable_device<output>(seq.new_operation(2)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-}
-
-void tee_test()
-{
- // Note: The implementation of tee_device closes the first
- // sink before the second
-
- // Tee two sinks (Borland <= 5.8.2 needs a little help compiling this case,
- // but it executes the closing algorithm correctly)
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- closable_device<output>(seq.new_operation(1)),
- closable_device<
- #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
- borland_output
- #else
- output
- #endif
- >(seq.new_operation(2))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Tee two bidirectional devices
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(2)
- ),
- closable_device<bidirectional>(
- seq.new_operation(3),
- seq.new_operation(4)
- )
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Tee two seekable devices
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- closable_device<seekable>(seq.new_operation(1)),
- closable_device<seekable>(seq.new_operation(2))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Tee a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(io::tee(closable_device<output>(seq.new_operation(1))));
- ch.push(closable_device<output>(seq.new_operation(2)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Tee a bidirectional device
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(2)
- )
- )
- );
- ch.push(closable_device<output>(seq.new_operation(3)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Tee a seekable device
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(io::tee(closable_device<seekable>(seq.new_operation(1))));
- ch.push(closable_device<seekable>(seq.new_operation(2)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-}
-
-void tee_composite_test()
-{
- // This test is probably redundant, but it verifies that
- // ticket #1002 is fixed
-
- // Tee a composite sink with a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- io::compose(
- closable_filter<output>(seq.new_operation(1)),
- closable_device<output>(seq.new_operation(2))
- ),
- closable_device<output>(seq.new_operation(3))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Tee a composite bidirectional device with a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- io::compose(
- closable_filter<bidirectional>(
- seq.new_operation(2),
- seq.new_operation(3)
- ),
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(4)
- )
- ),
- closable_device<output>(seq.new_operation(5))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Tee a composite composite seekable device with a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- io::compose(
- closable_filter<seekable>(seq.new_operation(1)),
- closable_device<seekable>(seq.new_operation(2))
- ),
- closable_device<output>(seq.new_operation(3))
- )
- );
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
-
- // Tee a composite sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- io::compose(
- closable_filter<output>(seq.new_operation(1)),
- closable_device<output>(seq.new_operation(2))
- )
- )
- );
- ch.push(closable_device<output>(seq.new_operation(3)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Tee a composite bidirectional device with a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- io::compose(
- closable_filter<bidirectional>(
- seq.new_operation(2),
- seq.new_operation(3)
- ),
- closable_device<bidirectional>(
- seq.new_operation(1),
- seq.new_operation(4)
- )
- )
- )
- );
- ch.push(closable_device<output>(seq.new_operation(5)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-
- // Tee a composite composite seekable device with a sink
- {
- operation_sequence seq;
- chain<output> ch;
- ch.push(
- io::tee(
- io::compose(
- closable_filter<seekable>(seq.new_operation(1)),
- closable_device<seekable>(seq.new_operation(2))
- )
- )
- );
- ch.push(closable_device<output>(seq.new_operation(3)));
- BOOST_CHECK_NO_THROW(ch.reset());
- BOOST_CHECK_OPERATION_SEQUENCE(seq);
- }
-}
-
 test_suite* init_unit_test_suite(int, char* [])
 {
     test_suite* test = BOOST_TEST_SUITE("execute test");
@@ -1413,13 +510,5 @@
     test->add(BOOST_TEST_CASE(&bidirectional_chain_test));
     test->add(BOOST_TEST_CASE(&seekable_chain_test));
     test->add(BOOST_TEST_CASE(&stream_test));
- test->add(BOOST_TEST_CASE(&combine_test));
- test->add(BOOST_TEST_CASE(&composite_device_test));
- test->add(BOOST_TEST_CASE(&composite_filter_test));
- test->add(BOOST_TEST_CASE(&invert_test));
- test->add(BOOST_TEST_CASE(&restrict_test));
- test->add(BOOST_TEST_CASE(&symmetric_filter_test));
- test->add(BOOST_TEST_CASE(&tee_test));
- test->add(BOOST_TEST_CASE(&tee_composite_test));
     return test;
 }

Modified: branches/fix-links/libs/iostreams/test/compose_test.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/compose_test.cpp (original)
+++ branches/fix-links/libs/iostreams/test/compose_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -10,6 +10,8 @@
 #include <boost/iostreams/filtering_stream.hpp>
 #include <boost/test/test_tools.hpp>
 #include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
+#include "detail/operation_sequence.hpp"
 #include "detail/filters.hpp"
 #include "detail/temp_file.hpp"
 #include "detail/verification.hpp"
@@ -17,13 +19,14 @@
 // Must come last.
 #include <boost/iostreams/detail/config/disable_warnings.hpp> // BCC 5.x.
 
+using namespace std;
 using namespace boost::iostreams;
+using namespace boost::iostreams::test;
 using boost::unit_test::test_suite;
+namespace io = boost::iostreams;
 
 void read_composite()
 {
- using namespace boost::iostreams::test;
-
     test_file src1, src2;
     filtering_istream first, second;
 
@@ -56,9 +59,6 @@
 
 void write_composite()
 {
- using namespace std;
- using namespace boost::iostreams::test;
-
     temp_file dest1, dest2;
     filtering_ostream out1, out2;
 
@@ -105,11 +105,398 @@
     }
 }
 
+void close_composite_device()
+{
+ // Compose an input filter with a source
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::compose(
+ closable_filter<input>(seq.new_operation(2)),
+ closable_device<input>(seq.new_operation(1))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a bidirectional filter with a source
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::compose(
+ closable_filter<bidirectional>(
+ seq.new_operation(2),
+ seq.new_operation(3)
+ ),
+ closable_device<input>(seq.new_operation(1))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a seekable filter with a source
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::compose(
+ closable_filter<seekable>(seq.new_operation(2)),
+ closable_device<input>(seq.new_operation(1))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a dual-use filter with a source
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ operation dummy;
+ ch.push(
+ io::compose(
+ closable_filter<dual_use>(
+ seq.new_operation(2),
+ dummy
+ ),
+ closable_device<input>(seq.new_operation(1))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose an output filter with a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::compose(
+ closable_filter<output>(seq.new_operation(1)),
+ closable_device<output>(seq.new_operation(2))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a bidirectional filter with a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::compose(
+ closable_filter<bidirectional>(
+ seq.new_operation(1),
+ seq.new_operation(2)
+ ),
+ closable_device<output>(seq.new_operation(3))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a seekable filter with a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::compose(
+ closable_filter<seekable>(seq.new_operation(1)),
+ closable_device<output>(seq.new_operation(2))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a dual-use filter with a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ operation dummy;
+ ch.push(
+ io::compose(
+ closable_filter<dual_use>(
+ dummy,
+ seq.new_operation(1)
+ ),
+ closable_device<output>(seq.new_operation(2))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a bidirectional filter with a bidirectional device
+ {
+ operation_sequence seq;
+ chain<bidirectional> ch;
+ ch.push(
+ io::compose(
+ closable_filter<bidirectional>(
+ seq.new_operation(2),
+ seq.new_operation(3)
+ ),
+ closable_device<bidirectional>(
+ seq.new_operation(1),
+ seq.new_operation(4)
+ )
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a seekable filter with a seekable device
+ {
+ operation_sequence seq;
+ chain<seekable> ch;
+ ch.push(
+ io::compose(
+ closable_filter<seekable>(seq.new_operation(1)),
+ closable_device<seekable>(seq.new_operation(2))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+}
+
+void close_composite_filter()
+{
+ // Compose two input filters
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::compose(
+ closable_filter<input>(seq.new_operation(3)),
+ closable_filter<input>(seq.new_operation(2))
+ )
+ );
+ ch.push(closable_device<input>(seq.new_operation(1)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a bidirectional filter with an input filter
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::compose(
+ closable_filter<bidirectional>(
+ seq.new_operation(3),
+ seq.new_operation(4)
+ ),
+ closable_filter<input>(seq.new_operation(2))
+ )
+ );
+ ch.push(closable_device<input>(seq.new_operation(1)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_MESSAGE(seq.is_success(), seq.message());
+ }
+
+ // Compose a seekable filter with an input filter
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::compose(
+ closable_filter<seekable>(seq.new_operation(3)),
+ closable_filter<input>(seq.new_operation(2))
+ )
+ );
+ ch.push(closable_device<input>(seq.new_operation(1)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a dual-use filter with an input filter
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ operation dummy;
+ ch.push(
+ io::compose(
+ closable_filter<dual_use>(
+ seq.new_operation(3),
+ dummy
+ ),
+ closable_filter<input>(seq.new_operation(2))
+ )
+ );
+ ch.push(closable_device<input>(seq.new_operation(1)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose two output filters
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::compose(
+ closable_filter<output>(seq.new_operation(1)),
+ closable_filter<output>(seq.new_operation(2))
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(3)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a bidirectional filter with an output filter
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::compose(
+ closable_filter<bidirectional>(
+ seq.new_operation(1),
+ seq.new_operation(2)
+ ),
+ closable_filter<output>(seq.new_operation(3))
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(4)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a seekable filter with an output filter
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::compose(
+ closable_filter<seekable>(seq.new_operation(1)),
+ closable_filter<output>(seq.new_operation(2))
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(3)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose a dual-use filter with an output filter
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ operation dummy;
+ ch.push(
+ io::compose(
+ closable_filter<dual_use>(
+ dummy,
+ seq.new_operation(1)
+ ),
+ closable_filter<output>(seq.new_operation(2))
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(3)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose two bidirectional filters
+ {
+ operation_sequence seq;
+ chain<bidirectional> ch;
+ ch.push(
+ io::compose(
+ closable_filter<bidirectional>(
+ seq.new_operation(3),
+ seq.new_operation(4)
+ ),
+ closable_filter<bidirectional>(
+ seq.new_operation(2),
+ seq.new_operation(5)
+ )
+ )
+ );
+ ch.push(
+ closable_device<bidirectional>(
+ seq.new_operation(1),
+ seq.new_operation(6)
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose two seekable filters
+ {
+ operation_sequence seq;
+ chain<seekable> ch;
+ ch.push(
+ io::compose(
+ closable_filter<seekable>(seq.new_operation(1)),
+ closable_filter<seekable>(seq.new_operation(2))
+ )
+ );
+ ch.push(closable_device<seekable>(seq.new_operation(3)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose two dual-use filters for input
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ operation dummy;
+ ch.push(
+ io::compose(
+ closable_filter<dual_use>(
+ seq.new_operation(3),
+ dummy
+ ),
+ closable_filter<dual_use>(
+ seq.new_operation(2),
+ dummy
+ )
+ )
+ );
+ ch.push(closable_device<input>(seq.new_operation(1)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Compose two dual-use filters for output
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ operation dummy;
+ ch.push(
+ io::compose(
+ closable_filter<dual_use>(
+ dummy,
+ seq.new_operation(1)
+ ),
+ closable_filter<dual_use>(
+ dummy,
+ seq.new_operation(2)
+ )
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(3)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+}
+
 test_suite* init_unit_test_suite(int, char* [])
 {
     test_suite* test = BOOST_TEST_SUITE("line_filter test");
     test->add(BOOST_TEST_CASE(&read_composite));
     test->add(BOOST_TEST_CASE(&write_composite));
+ test->add(BOOST_TEST_CASE(&close_composite_device));
+ test->add(BOOST_TEST_CASE(&close_composite_filter));
     return test;
 }
 

Modified: branches/fix-links/libs/iostreams/test/copy_test.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/copy_test.cpp (original)
+++ branches/fix-links/libs/iostreams/test/copy_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -68,7 +68,9 @@
         first.open(vector_source(src));
         second.open(vector_sink(dest));
         BOOST_CHECK_MESSAGE(
- boost::iostreams::copy(first, second) == src.size() && src == dest,
+ boost::iostreams::copy(first, second) ==
+ static_cast<streamsize>(src.size()) &&
+ src == dest,
             "failed copying from stream to stream"
         );
     }
@@ -81,7 +83,9 @@
         vector_sink out(dest);
         in.open(vector_source(src));
         BOOST_CHECK_MESSAGE(
- boost::iostreams::copy(in, out) == src.size() && src == dest,
+ boost::iostreams::copy(in, out) ==
+ static_cast<streamsize>(src.size()) &&
+ src == dest,
             "failed copying from stream to indirect sink"
         );
     }
@@ -94,7 +98,9 @@
         vector_ostream out;
         out.open(vector_sink(dest));
         BOOST_CHECK_MESSAGE(
- boost::iostreams::copy(in, out) == src.size() && src == dest,
+ boost::iostreams::copy(in, out) ==
+ static_cast<streamsize>(src.size()) &&
+ src == dest,
             "failed copying from indirect source to stream"
         );
     }
@@ -106,7 +112,9 @@
         vector_source in(src);
         vector_sink out(dest);
         BOOST_CHECK_MESSAGE(
- boost::iostreams::copy(in, out) == src.size() && src == dest,
+ boost::iostreams::copy(in, out) ==
+ static_cast<streamsize>(src.size()) &&
+ src == dest,
             "failed copying from indirect source to indirect sink"
         );
     }
@@ -118,7 +126,9 @@
         array_source in(&src[0], &src[0] + src.size());
         array_sink out(&dest[0], &dest[0] + dest.size());
         BOOST_CHECK_MESSAGE(
- boost::iostreams::copy(in, out) == src.size() && src == dest,
+ boost::iostreams::copy(in, out) ==
+ static_cast<streamsize>(src.size()) &&
+ src == dest,
             "failed copying from direct source to direct sink"
         );
     }
@@ -130,7 +140,9 @@
         array_source in(&src[0], &src[0] + src.size());
         vector_ostream out(dest);
         BOOST_CHECK_MESSAGE(
- boost::iostreams::copy(in, out) == src.size() && src == dest,
+ boost::iostreams::copy(in, out) ==
+ static_cast<streamsize>(src.size()) &&
+ src == dest,
             "failed copying from direct source to indirect sink"
         );
     }
@@ -143,7 +155,9 @@
         array_sink out(&dest[0], &dest[0] + dest.size());
         in.open(vector_source(src));
         BOOST_CHECK_MESSAGE(
- boost::iostreams::copy(in, out) == src.size() && src == dest,
+ boost::iostreams::copy(in, out) ==
+ static_cast<streamsize>(src.size()) &&
+ src == dest,
             "failed copying from indirect source to direct sink"
         );
     }

Modified: branches/fix-links/libs/iostreams/test/detail/utf8_codecvt_facet.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/detail/utf8_codecvt_facet.cpp (original)
+++ branches/fix-links/libs/iostreams/test/detail/utf8_codecvt_facet.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -236,7 +236,8 @@
 // wchar_t is defined as UCS2. The warnings are superfluous as
 // the specialization is never instantitiated with such compilers.
 template<>
-int get_cont_octet_out_count_impl<4>(wchar_t word){
+int get_cont_octet_out_count_impl<4>(wchar_t word)
+{
     if (word < 0x80) {
         return 0;
     }

Modified: branches/fix-links/libs/iostreams/test/detail/utf8_codecvt_facet.hpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/detail/utf8_codecvt_facet.hpp (original)
+++ branches/fix-links/libs/iostreams/test/detail/utf8_codecvt_facet.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -52,6 +52,7 @@
 
 #include <locale>
 #include <cstddef> // size_t
+#include <wchar.h> // mbstate_t
 #include <boost/integer_traits.hpp>
 #include <boost/iostreams/detail/config/wide_streams.hpp>
 #include <boost/iostreams/detail/codecvt_helper.hpp>

Modified: branches/fix-links/libs/iostreams/test/detail/verification.hpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/detail/verification.hpp (original)
+++ branches/fix-links/libs/iostreams/test/detail/verification.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -49,7 +49,7 @@
 BOOST_TEMPLATE_DECL
 bool compare_streams_in_chars(BOOST_ISTREAM& first, BOOST_ISTREAM& second)
 {
- for (int z = 0; z < 10; ++z)
+ for (int z = 0; z < data_reps; ++z)
         for (int w = 0; w < data_length(); ++w)
             if (first.eof() != second.eof() || first.get() != second.get())
                 return false;

Modified: branches/fix-links/libs/iostreams/test/invert_test.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/invert_test.cpp (original)
+++ branches/fix-links/libs/iostreams/test/invert_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -9,14 +9,17 @@
 #include <boost/iostreams/invert.hpp>
 #include <boost/test/test_tools.hpp>
 #include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
 #include "detail/filters.hpp"
+#include "detail/operation_sequence.hpp"
 #include "detail/temp_file.hpp"
 
 using namespace boost::iostreams;
 using namespace boost::iostreams::test;
-using boost::unit_test::test_suite;
+using boost::unit_test::test_suite;
+namespace io = boost::iostreams;
 
-void inverse_test()
+void read_write_test()
 {
 
     test_file test;
@@ -34,10 +37,33 @@
                     file_source(upper.name(), in_mode) ) );
 }
 
+void close_test()
+{
+ // Invert an output filter
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(io::invert(closable_filter<output>(seq.new_operation(2))));
+ ch.push(closable_device<input>(seq.new_operation(1)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Invert an input filter
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(io::invert(closable_filter<input>(seq.new_operation(1))));
+ ch.push(closable_device<output>(seq.new_operation(2)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+}
 
 test_suite* init_unit_test_suite(int, char* [])
 {
     test_suite* test = BOOST_TEST_SUITE("reverse test");
- test->add(BOOST_TEST_CASE(&inverse_test));
+ test->add(BOOST_TEST_CASE(&read_write_test));
+ test->add(BOOST_TEST_CASE(&close_test));
     return test;
 }

Modified: branches/fix-links/libs/iostreams/test/operation_sequence_test.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/operation_sequence_test.cpp (original)
+++ branches/fix-links/libs/iostreams/test/operation_sequence_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,9 +4,8 @@
  *
  * See http://www.boost.org/libs/iostreams for documentation.
  *
- * Verifies that the close() member functions of filters and devices
- * are called with the correct arguments in the correct order when
- * they are combined using chains or adapters.
+ * Tests the facilities defined in the header
+ * libs/iostreams/test/detail/operation_sequence.hpp
  *
  * File: libs/iostreams/test/operation_sequence_test.cpp
  * Date: Mon Dec 10 18:58:19 MST 2007

Modified: branches/fix-links/libs/iostreams/test/restrict_test.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/restrict_test.cpp (original)
+++ branches/fix-links/libs/iostreams/test/restrict_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,30 +4,39 @@
 
 // See http://www.boost.org/libs/iostreams for documentation.
 
-// Todo: add tests for direct devices.
+// Allow this file to be used by slice_test.hpp. It is important not to
+// replace BOOST_RESTRICT with BOOST_IOSTREAMS_RESTRICT here, since that
+// would interfere with the oepration of the header
+// <boost/iostreams/restrict.hpp>
+#ifndef BOOST_RESTRICT
+# define BOOST_RESTRICT restrict
+# define BOOST_RESTRICT_HEADER <boost/iostreams/restrict.hpp>
+#endif
+#include BOOST_RESTRICT_HEADER
 
-#include <algorithm> // equal.
+#include <algorithm> // equal.
 #include <cctype>
-#include <iterator> // back_inserter.
+#include <iterator> // back_inserter.
 #include <vector>
 #include <boost/iostreams/copy.hpp>
 #include <boost/iostreams/device/file.hpp>
 #include <boost/iostreams/device/null.hpp>
 #include <boost/iostreams/filtering_stream.hpp>
-#include <boost/iostreams/restrict.hpp>
 #include <boost/test/test_tools.hpp>
 #include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
 #include "detail/constants.hpp"
 #include "detail/filters.hpp"
+#include "detail/operation_sequence.hpp"
 #include "detail/sequence.hpp"
 #include "detail/temp_file.hpp"
 #include "detail/verification.hpp"
 
 using namespace std;
-using namespace boost;
 using namespace boost::iostreams;
 using namespace boost::iostreams::test;
-using boost::unit_test::test_suite;
+using boost::unit_test::test_suite;
+namespace io = boost::iostreams;
 
 const char pad_char = '\n';
 const int small_padding = 50;
@@ -123,8 +132,8 @@
         test_file src2;
         stream_offset off = small_padding,
                                len = data_reps * data_length();
- filtering_istream first( restrict( file_source(src1.name(), in_mode),
- off, len ) );
+ filtering_istream first(
+ BOOST_RESTRICT(file_source(src1.name(), in_mode), off, len));
         ifstream second(src2.name().c_str(), in_mode);
         BOOST_CHECK_MESSAGE(
             compare_streams_in_chunks(first, second),
@@ -137,8 +146,8 @@
         test_file src2;
         stream_offset off = large_padding,
                                len = data_reps * data_length();
- filtering_istream first( restrict( file_source(src1.name(), in_mode),
- off, len ) );
+ filtering_istream first(
+ BOOST_RESTRICT(file_source(src1.name(), in_mode), off, len));
         ifstream second(src2.name().c_str(), in_mode);
         BOOST_CHECK_MESSAGE(
             compare_streams_in_chunks(first, second),
@@ -150,7 +159,8 @@
         restricted_test_file src1(small_padding, true);
         test_file src2;
         stream_offset off = small_padding;
- filtering_istream first(restrict(file_source(src1.name(), in_mode), off));
+ filtering_istream first(
+ BOOST_RESTRICT(file_source(src1.name(), in_mode), off));
         ifstream second(src2.name().c_str(), in_mode);
         BOOST_CHECK_MESSAGE(
             compare_streams_in_chunks(first, second),
@@ -163,7 +173,8 @@
         restricted_test_file src1(large_padding, true);
         test_file src2;
         stream_offset off = large_padding;
- filtering_istream first(restrict(file_source(src1.name(), in_mode), off));
+ filtering_istream first(
+ BOOST_RESTRICT(file_source(src1.name(), in_mode), off));
         ifstream second(src2.name().c_str(), in_mode);
         BOOST_CHECK_MESSAGE(
             compare_streams_in_chunks(first, second),
@@ -181,7 +192,7 @@
         array_source array_src(&src[0], &src[0] + src.size());
         stream_offset off = small_padding,
                                   len = data_reps * data_length();
- filtering_istream second(restrict(array_src, off, len));
+ filtering_istream second(BOOST_RESTRICT(array_src, off, len));
         BOOST_CHECK_MESSAGE(
             compare_container_and_stream(first, second),
             "failed reading from restriction<Direct>"
@@ -193,7 +204,7 @@
         restricted_test_sequence src(small_padding, true);
         array_source array_src(&src[0], &src[0] + src.size());
         stream_offset off = small_padding;
- filtering_istream second(restrict(array_src, off));
+ filtering_istream second(BOOST_RESTRICT(array_src, off));
         BOOST_CHECK_MESSAGE(
             compare_container_and_stream(first, second),
             "failed reading from half-open restriction<Direct>"
@@ -209,7 +220,7 @@
         stream_offset off = small_padding,
                                len = data_reps * data_length();
         filtering_istream first;
- first.push(restrict(toupper_filter(), off, len));
+ first.push(BOOST_RESTRICT(toupper_filter(), off, len));
         first.push(file_source(src1.name(), in_mode));
         ifstream second(src2.name().c_str(), in_mode);
         BOOST_CHECK_MESSAGE(
@@ -224,7 +235,7 @@
         stream_offset off = large_padding,
                                len = data_reps * data_length();
         filtering_istream first;
- first.push(restrict(toupper_filter(), off, len));
+ first.push(BOOST_RESTRICT(toupper_filter(), off, len));
         first.push(file_source(src1.name(), in_mode));
         ifstream second(src2.name().c_str(), in_mode);
         BOOST_CHECK_MESSAGE(
@@ -238,7 +249,7 @@
         uppercase_file src2;
         stream_offset off = small_padding;
         filtering_istream first;
- first.push(restrict(toupper_filter(), off));
+ first.push(BOOST_RESTRICT(toupper_filter(), off));
         first.push(file_source(src1.name(), in_mode));
         ifstream second(src2.name().c_str(), in_mode);
         BOOST_CHECK_MESSAGE(
@@ -253,7 +264,7 @@
         uppercase_file src2;
         stream_offset off = large_padding;
         filtering_istream first;
- first.push(restrict(toupper_filter(), off));
+ first.push(BOOST_RESTRICT(toupper_filter(), off));
         first.push(file_source(src1.name(), in_mode));
         ifstream second(src2.name().c_str(), in_mode);
         BOOST_CHECK_MESSAGE(
@@ -271,8 +282,8 @@
         restricted_test_file dest2(small_padding);
         stream_offset off = small_padding,
                                    len = data_reps * data_length();
- filtering_ostream out( restrict( file(dest1.name(), BOOST_IOS::binary),
- off, len ) );
+ filtering_ostream out(
+ BOOST_RESTRICT(file(dest1.name(), BOOST_IOS::binary), off, len));
         write_data_in_chunks(out);
         out.reset();
         ifstream first(dest1.name().c_str(), in_mode);
@@ -288,8 +299,8 @@
         restricted_test_file dest2(large_padding);
         stream_offset off = large_padding,
                                    len = data_reps * data_length();
- filtering_ostream out( restrict( file(dest1.name(), BOOST_IOS::binary),
- off, len ) );
+ filtering_ostream out
+ (BOOST_RESTRICT(file(dest1.name(), BOOST_IOS::binary), off, len));
         write_data_in_chunks(out);
         out.reset();
         ifstream first(dest1.name().c_str(), in_mode);
@@ -304,7 +315,8 @@
         restricted_uppercase_file dest1(small_padding, true);
         restricted_test_file dest2(small_padding, true);
         stream_offset off = small_padding;
- filtering_ostream out(restrict(file(dest1.name(), BOOST_IOS::binary), off));
+ filtering_ostream out
+ (BOOST_RESTRICT(file(dest1.name(), BOOST_IOS::binary), off));
         write_data_in_chunks(out);
         out.reset();
         ifstream first(dest1.name().c_str(), in_mode);
@@ -320,7 +332,8 @@
         restricted_uppercase_file dest1(large_padding, true);
         restricted_test_file dest2(large_padding, true);
         stream_offset off = large_padding;
- filtering_ostream out(restrict(file(dest1.name(), BOOST_IOS::binary), off));
+ filtering_ostream out
+ (BOOST_RESTRICT(file(dest1.name(), BOOST_IOS::binary), off));
         write_data_in_chunks(out);
         out.reset();
         ifstream first(dest1.name().c_str(), in_mode);
@@ -343,7 +356,7 @@
         stream_offset off = small_padding,
                                   len = data_reps * data_length();
         array_sink array(&dest1[0], &dest1[0] + dest1.size());
- filtering_ostream out(restrict(array, off, len));
+ filtering_ostream out(BOOST_RESTRICT(array, off, len));
         write_data_in_chunks(out);
         out.reset();
         BOOST_CHECK_MESSAGE(
@@ -353,12 +366,12 @@
     }
 
     {
- vector<char> dest1( data_reps * data_length() + small_padding,
- '\n' );
+ vector<char> dest1(
+ data_reps * data_length() + small_padding, '\n');
         restricted_test_sequence dest2(small_padding, true);
         stream_offset off = small_padding;
         array_sink array(&dest1[0], &dest1[0] + dest1.size());
- filtering_ostream out(restrict(array, off));
+ filtering_ostream out(BOOST_RESTRICT(array, off));
         write_data_in_chunks(out);
         out.reset();
         BOOST_CHECK_MESSAGE(
@@ -376,7 +389,7 @@
         stream_offset off = small_padding,
                                    len = data_reps * data_length();
         filtering_ostream out;
- out.push(restrict(tolower_seekable_filter(), off, len));
+ out.push(BOOST_RESTRICT(tolower_seekable_filter(), off, len));
         out.push(file(dest1.name(), BOOST_IOS::binary));
         write_data_in_chunks(out);
         out.reset();
@@ -394,7 +407,7 @@
         stream_offset off = large_padding,
                                    len = data_reps * data_length();
         filtering_ostream out;
- out.push(restrict(tolower_seekable_filter(), off, len));
+ out.push(BOOST_RESTRICT(tolower_seekable_filter(), off, len));
         out.push(file(dest1.name(), BOOST_IOS::binary));
         write_data_in_chunks(out);
         out.reset();
@@ -411,7 +424,7 @@
         restricted_lowercase_file dest2(small_padding, true);
         stream_offset off = small_padding;
         filtering_ostream out;
- out.push(restrict(tolower_seekable_filter(), off));
+ out.push(BOOST_RESTRICT(tolower_seekable_filter(), off));
         out.push(file(dest1.name(), BOOST_IOS::binary));
         write_data_in_chunks(out);
         out.reset();
@@ -428,7 +441,7 @@
         restricted_lowercase_file dest2(large_padding, true);
         stream_offset off = large_padding;
         filtering_ostream out;
- out.push(restrict(tolower_seekable_filter(), off));
+ out.push(BOOST_RESTRICT(tolower_seekable_filter(), off));
         out.push(file(dest1.name(), BOOST_IOS::binary));
         write_data_in_chunks(out);
         out.reset();
@@ -447,8 +460,8 @@
         restricted_test_file src(large_padding);
         stream_offset off = large_padding,
                                    len = data_reps * data_length();
- filtering_stream<seekable> io( restrict( file(src.name(), BOOST_IOS::binary),
- off, len ) );
+ filtering_stream<seekable> io(
+ BOOST_RESTRICT(file(src.name(), BOOST_IOS::binary), off, len));
         BOOST_CHECK_MESSAGE(
             test_seekable_in_chunks(io),
             "failed seeking within restriction<Device>"
@@ -458,7 +471,8 @@
     {
         restricted_test_file src(large_padding, true);
         stream_offset off = large_padding;
- filtering_stream<seekable> io(restrict(file(src.name(), BOOST_IOS::binary), off));
+ filtering_stream<seekable> io(
+ BOOST_RESTRICT(file(src.name(), BOOST_IOS::binary), off));
         BOOST_CHECK_MESSAGE(
             test_seekable_in_chunks(io),
             "failed seeking within half-open restriction<Device>"
@@ -469,11 +483,12 @@
 void seek_direct_device()
 {
     {
- vector<char> src(data_reps * data_length() + 2 * small_padding, '\n');
+ vector<char> src(
+ data_reps * data_length() + 2 * small_padding, '\n');
         stream_offset off = small_padding,
                                    len = data_reps * data_length();
         array ar(&src[0], &src[0] + src.size());
- filtering_stream<seekable> io(restrict(ar, off, len));
+ filtering_stream<seekable> io(BOOST_RESTRICT(ar, off, len));
         BOOST_CHECK_MESSAGE(
             test_seekable_in_chars(io),
             "failed seeking within restriction<Direct> with small padding"
@@ -481,10 +496,11 @@
     }
 
     {
- vector<char> src(data_reps * data_length() + small_padding, '\n');
+ vector<char> src(
+ data_reps * data_length() + small_padding, '\n');
         stream_offset off = small_padding;
         array ar(&src[0], &src[0] + src.size());
- filtering_stream<seekable> io(restrict(ar, off));
+ filtering_stream<seekable> io(BOOST_RESTRICT(ar, off));
         BOOST_CHECK_MESSAGE(
             test_seekable_in_chars(io),
             "failed seeking within half-open restriction<Direct> "
@@ -498,9 +514,9 @@
     {
         restricted_test_file src(small_padding);
         stream_offset off = large_padding,
- len = data_reps * data_length();
+ len = data_reps * data_length();
         filtering_stream<seekable> io;
- io.push(restrict(identity_seekable_filter(), off, len));
+ io.push(BOOST_RESTRICT(identity_seekable_filter(), off, len));
         io.push(file(src.name(), BOOST_IOS::binary));
         BOOST_CHECK_MESSAGE(
             test_seekable_in_chars(io),
@@ -512,7 +528,7 @@
         restricted_test_file src(small_padding, true);
         stream_offset off = large_padding;
         filtering_stream<seekable> io;
- io.push(restrict(identity_seekable_filter(), off));
+ io.push(BOOST_RESTRICT(identity_seekable_filter(), off));
         io.push(file(src.name(), BOOST_IOS::binary));
         BOOST_CHECK_MESSAGE(
             test_seekable_in_chars(io),
@@ -521,9 +537,140 @@
     }
 }
 
+void close_device()
+{
+ // Restrict a source
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::BOOST_RESTRICT(
+ closable_device<input>(seq.new_operation(1)),
+ 0
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Restrict a seekable device
+ {
+ operation_sequence seq;
+ chain<seekable> ch;
+ ch.push(
+ io::BOOST_RESTRICT(
+ closable_device<seekable>(seq.new_operation(1)),
+ 0
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Restrict a direct source
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::BOOST_RESTRICT(
+ closable_device<direct_input>(seq.new_operation(1)),
+ 0
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Restrict a direct seekable device
+ {
+ operation_sequence seq;
+ chain<seekable> ch;
+ ch.push(
+ io::BOOST_RESTRICT(
+ closable_device<direct_seekable>(seq.new_operation(1)),
+ 0
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+}
+
+void close_filter()
+{
+ // Restrict an input filter
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::BOOST_RESTRICT(
+ closable_filter<input>(seq.new_operation(2)),
+ 0
+ )
+ );
+ ch.push(closable_device<input>(seq.new_operation(1)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Restrict a seekable filter
+ {
+ operation_sequence seq;
+ chain<seekable> ch;
+ ch.push(
+ io::BOOST_RESTRICT(
+ closable_filter<seekable>(seq.new_operation(1)),
+ 0
+ )
+ );
+ ch.push(closable_device<seekable>(seq.new_operation(2)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Restrict a dual_use filter for input
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ operation dummy;
+ ch.push(
+ io::BOOST_RESTRICT(
+ closable_filter<dual_use>(
+ seq.new_operation(2),
+ dummy
+ ),
+ 0
+ )
+ );
+ ch.push(closable_device<input>(seq.new_operation(1)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Restrict a dual_use filter for output
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ operation dummy;
+ ch.push(
+ io::BOOST_RESTRICT(
+ closable_filter<dual_use>(
+ dummy,
+ seq.new_operation(1)
+ ),
+ 0
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(2)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+}
+
 test_suite* init_unit_test_suite(int, char* [])
 {
- test_suite* test = BOOST_TEST_SUITE("restrict test");
+ test_suite* test =
+ BOOST_TEST_SUITE(BOOST_STRINGIZE(BOOST_RESTRICT) " test");
     test->add(BOOST_TEST_CASE(&read_device));
     test->add(BOOST_TEST_CASE(&read_direct_device));
     test->add(BOOST_TEST_CASE(&read_filter));
@@ -532,5 +679,7 @@
     test->add(BOOST_TEST_CASE(&write_filter));
     test->add(BOOST_TEST_CASE(&seek_device));
     test->add(BOOST_TEST_CASE(&seek_direct_device));
+ test->add(BOOST_TEST_CASE(&close_device));
+ test->add(BOOST_TEST_CASE(&close_filter));
     return test;
 }

Modified: branches/fix-links/libs/iostreams/test/stream_offset_64bit_test.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/stream_offset_64bit_test.cpp (original)
+++ branches/fix-links/libs/iostreams/test/stream_offset_64bit_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -13,7 +13,11 @@
  * with large (64-bit) file offsets.
  */
 
+#include <cstdio> // fpos_t
+#include <iostream>
+#include <sstream>
 #include <boost/config.hpp> // BOOST_MSVC
+#include <boost/iostreams/detail/ios.hpp>
 #include <boost/iostreams/positioning.hpp>
 #include <boost/test/test_tools.hpp>
 #include <boost/test/unit_test.hpp>
@@ -28,7 +32,7 @@
 #endif
 
 void stream_offset_64bit_test()
-{
+{
     stream_offset large_file = (stream_offset) 100 *
                                 (stream_offset) 1024 *
                                 (stream_offset) 1024 *
@@ -37,8 +41,23 @@
     stream_offset last = large_file - large_file % 10000000;
 
     for (stream_offset off = first; off < last; off += 10000000)
- {
- BOOST_REQUIRE(off == position_to_offset(offset_to_position(off)));
+ {
+ if (off != position_to_offset(offset_to_position(off))) {
+ cout << "****************************************\n"
+ << "* sizeof(fpos_t) = " << sizeof(fpos_t) << "\n"
+ << "* sizeof(streamoff) = " << sizeof(streamoff) << "\n"
+ << "* sizeof(stream_offset) = "
+ << sizeof(stream_offset) << "\n"
+ << "****************************************\n";
+ stringstream s;
+ s << "off != position_to_offset(offset_to_position(off)) "
+ "failed for (off >> 32) == 0x"
+ << hex
+ << static_cast<unsigned int>(off >> 32)
+ << " and (off & 0xFFFFFFFF) == 0x"
+ << static_cast<unsigned int>(off & 0xFFFFFFFF);
+ BOOST_REQUIRE_MESSAGE(0, s.str().c_str());
+ }
     }
 }
 

Modified: branches/fix-links/libs/iostreams/test/symmetric_filter_test.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/symmetric_filter_test.cpp (original)
+++ branches/fix-links/libs/iostreams/test/symmetric_filter_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -10,7 +10,9 @@
 #include <boost/iostreams/filter/test.hpp>
 #include <boost/test/test_tools.hpp>
 #include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
 #include "./detail/constants.hpp"
+#include "detail/operation_sequence.hpp"
 #include "./detail/temp_file.hpp"
 #include "./detail/verification.hpp"
 
@@ -19,7 +21,8 @@
 
 using namespace boost::iostreams;
 using namespace boost::iostreams::test;
-using boost::unit_test::test_suite;
+using boost::unit_test::test_suite;
+namespace io = boost::iostreams;
 
 // Note: The filter is given an internal buffer -- unnecessary in this simple
 // case -- to stress test symmetric_filter.
@@ -77,7 +80,7 @@
 typedef symmetric_filter<toupper_symmetric_filter_impl>
         toupper_symmetric_filter;
 
-void read_symmetric_filter_test()
+void read_symmetric_filter()
 {
     test_file test;
     uppercase_file upper;
@@ -88,7 +91,7 @@
     );
 }
 
-void write_symmetric_filter_test()
+void write_symmetric_filter()
 {
     test_file test;
     uppercase_file upper;
@@ -99,11 +102,41 @@
     );
 }
 
+void close_symmetric_filter()
+{
+ // Test input
+ {
+ operation_sequence seq;
+ chain<input> ch;
+ ch.push(
+ io::symmetric_filter<closable_symmetric_filter>
+ (0, seq.new_operation(2))
+ );
+ ch.push(closable_device<input>(seq.new_operation(1)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Test output
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::symmetric_filter<closable_symmetric_filter>
+ (0, seq.new_operation(1))
+ );
+ ch.push(closable_device<output>(seq.new_operation(2)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+}
+
 test_suite* init_unit_test_suite(int, char* [])
 {
     test_suite* test = BOOST_TEST_SUITE("symmetric_filter test");
- test->add(BOOST_TEST_CASE(&read_symmetric_filter_test));
- test->add(BOOST_TEST_CASE(&write_symmetric_filter_test));
+ test->add(BOOST_TEST_CASE(&read_symmetric_filter));
+ test->add(BOOST_TEST_CASE(&write_symmetric_filter));
+ test->add(BOOST_TEST_CASE(&close_symmetric_filter));
     return test;
 }
 

Modified: branches/fix-links/libs/iostreams/test/tee_test.cpp
==============================================================================
--- branches/fix-links/libs/iostreams/test/tee_test.cpp (original)
+++ branches/fix-links/libs/iostreams/test/tee_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,11 +5,14 @@
 // See http://www.boost.org/libs/iostreams for documentation.
 
 #include <fstream>
+#include <boost/iostreams/compose.hpp>
 #include <boost/iostreams/device/file.hpp>
 #include <boost/iostreams/filtering_stream.hpp>
 #include <boost/iostreams/tee.hpp>
 #include <boost/test/test_tools.hpp>
 #include <boost/test/unit_test.hpp>
+#include "detail/closable.hpp"
+#include "detail/operation_sequence.hpp"
 #include "detail/temp_file.hpp"
 #include "detail/verification.hpp"
 
@@ -18,8 +21,9 @@
 using namespace boost::iostreams;
 using namespace boost::iostreams::test;
 using boost::unit_test::test_suite;
+namespace io = boost::iostreams;
 
-void tee_test()
+void read_write_test()
 {
     {
         temp_file dest1;
@@ -78,9 +82,229 @@
     }
 }
 
+void close_test()
+{
+ // Note: The implementation of tee_device closes the first
+ // sink before the second
+
+ // Tee two sinks (Borland <= 5.8.2 needs a little help compiling this case,
+ // but it executes the closing algorithm correctly)
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ closable_device<output>(seq.new_operation(1)),
+ closable_device<
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
+ borland_output
+ #else
+ output
+ #endif
+ >(seq.new_operation(2))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Tee two bidirectional devices
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ closable_device<bidirectional>(
+ seq.new_operation(1),
+ seq.new_operation(2)
+ ),
+ closable_device<bidirectional>(
+ seq.new_operation(3),
+ seq.new_operation(4)
+ )
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Tee two seekable devices
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ closable_device<seekable>(seq.new_operation(1)),
+ closable_device<seekable>(seq.new_operation(2))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Tee a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(io::tee(closable_device<output>(seq.new_operation(1))));
+ ch.push(closable_device<output>(seq.new_operation(2)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Tee a bidirectional device
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ closable_device<bidirectional>(
+ seq.new_operation(1),
+ seq.new_operation(2)
+ )
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(3)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Tee a seekable device
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(io::tee(closable_device<seekable>(seq.new_operation(1))));
+ ch.push(closable_device<seekable>(seq.new_operation(2)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+}
+
+void tee_composite_test()
+{
+ // This test is probably redundant, given the above test and the tests in
+ // compose_test.cpp, but it verifies that ticket #1002 is fixed
+
+ // Tee a composite sink with a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ io::compose(
+ closable_filter<output>(seq.new_operation(1)),
+ closable_device<output>(seq.new_operation(2))
+ ),
+ closable_device<output>(seq.new_operation(3))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Tee a composite bidirectional device with a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ io::compose(
+ closable_filter<bidirectional>(
+ seq.new_operation(2),
+ seq.new_operation(3)
+ ),
+ closable_device<bidirectional>(
+ seq.new_operation(1),
+ seq.new_operation(4)
+ )
+ ),
+ closable_device<output>(seq.new_operation(5))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Tee a composite composite seekable device with a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ io::compose(
+ closable_filter<seekable>(seq.new_operation(1)),
+ closable_device<seekable>(seq.new_operation(2))
+ ),
+ closable_device<output>(seq.new_operation(3))
+ )
+ );
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+
+ // Tee a composite sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ io::compose(
+ closable_filter<output>(seq.new_operation(1)),
+ closable_device<output>(seq.new_operation(2))
+ )
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(3)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Tee a composite bidirectional device with a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ io::compose(
+ closable_filter<bidirectional>(
+ seq.new_operation(2),
+ seq.new_operation(3)
+ ),
+ closable_device<bidirectional>(
+ seq.new_operation(1),
+ seq.new_operation(4)
+ )
+ )
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(5)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+
+ // Tee a composite composite seekable device with a sink
+ {
+ operation_sequence seq;
+ chain<output> ch;
+ ch.push(
+ io::tee(
+ io::compose(
+ closable_filter<seekable>(seq.new_operation(1)),
+ closable_device<seekable>(seq.new_operation(2))
+ )
+ )
+ );
+ ch.push(closable_device<output>(seq.new_operation(3)));
+ BOOST_CHECK_NO_THROW(ch.reset());
+ BOOST_CHECK_OPERATION_SEQUENCE(seq);
+ }
+}
+
 test_suite* init_unit_test_suite(int, char* [])
 {
     test_suite* test = BOOST_TEST_SUITE("tee test");
- test->add(BOOST_TEST_CASE(&tee_test));
+ test->add(BOOST_TEST_CASE(&read_write_test));
+ test->add(BOOST_TEST_CASE(&close_test));
     return test;
 }

Modified: branches/fix-links/libs/libraries.htm
==============================================================================
--- branches/fix-links/libs/libraries.htm (original)
+++ branches/fix-links/libs/libraries.htm 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -77,6 +77,8 @@
 <h2>Libraries Listed <a name="Alphabetically">Alphabetically</a></h2>
 
 <ul>
+ <li>accumulators - Framework for incremental
+ calculation, and collection of statistical accumulators, from Eric Niebler.</li>
     <li>any - Safe, generic container for single
       values of different value types, from Kevlin Henney.&nbsp;</li>
     <li>array - STL compliant
@@ -247,9 +249,6 @@
     <li>system - Operating system support,
     including the diagnostics support that will be part of the C++0x standard
     library, from Beman Dawes.</li>
- <li>system - Operating system support,
- including the diagnostics support that will be part of the C++0x standard
- library, from Beman Dawes.</li>
     <li>test - Support for simple program testing,
     full unit testing, and for program
       execution monitoring, from Gennadiy Rozental.</li>
@@ -272,6 +271,7 @@
         Typeof operator emulation, from Arkadiy Vertleyb and Peder Holt.</li>
     <li>uBLAS - Basic linear algebra
     for dense, packed and sparse matrices, from Joerg Walter and Mathias Koch.</li>
+ <li>unordered - unordered associative containers, from Daniel James.</li>
     <li>utility - Class <b>noncopyable</b>
         plus <b>checked_delete()</b>, <b>checked_array_delete()</b>, <b>next(),</b>&nbsp;
       <b>prior()</b>
@@ -339,6 +339,7 @@
     <li>property map
         - Concepts defining interfaces which map key objects to
         value objects, from Jeremy Siek.</li>
+ <li>unordered - unordered associative containers, from Daniel James.</li>
     <li>variant - Safe, generic, stack-based
     discriminated union container, from Eric Friedman and Itay Maman.</li>
 </ul>
@@ -484,6 +485,8 @@
 <h3><a name="Math">Math</a> and numerics</h3>
 
 <ul>
+ <li>accumulators - Framework for incremental
+ calculation, and collection of statistical accumulators, from Eric Niebler.</li>
     <li>math - Several contributions in the
     domain of mathematics, from various authors.</li>
     <li>numeric/conversion - Optimized Policy-based Numeric Conversions,

Modified: branches/fix-links/libs/maintainers.txt
==============================================================================
--- branches/fix-links/libs/maintainers.txt (original)
+++ branches/fix-links/libs/maintainers.txt 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -8,6 +8,7 @@
 # maintainers. When making changes to this file, please be careful
 # to closely follow the format of the library.
 
+accumulators Eric Niebler <eric -at- boost-consulting.com>
 algorithm/minmax Herve Bronnimann <hbr -at- poly.edu>
 algorithm/string Pavol Droba <droba -at- topmail.sk>
 any Alexander Nasonov <alexander.nasonov -at- gmail.com>
@@ -75,6 +76,7 @@
 tuple Jaakko Jarvi <jarvi -at- cs.tamu.edu>
 type_traits John Maddock <john -at- johnmaddock.co.uk>
 typeof Arkadiy Vertleyb <vertleyb -at- hotmail.com>, Peder Holt <peder.holt -at- gmail.com>
+unordered Daniel James <daniel_james -at- fmail.co.uk>
 utility
 utility/enable_if Jaakko Jarvi <jarvi -at- cs.tamu.edu>, Jeremiah Willcock <jewillco -at- osl.iu.edu>
 variant Eric Friedman <ericbrandon -at- gmail.com>

Modified: branches/fix-links/libs/mpl/doc/src/refmanual/map.rst
==============================================================================
--- branches/fix-links/libs/mpl/doc/src/refmanual/map.rst (original)
+++ branches/fix-links/libs/mpl/doc/src/refmanual/map.rst 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -89,7 +89,7 @@
 +---------------------------------------+-----------------------------------------------------------+
 | ``value_type<m,x>::type`` | Identical to ``x::second``; see |Associative Sequence|. |
 +---------------------------------------+-----------------------------------------------------------+
-| ``insert<m,x>::type`` | A new ``map`` equivalent to ``m`` except that |
+| ``insert<m,x>::type`` | A new ``map``, ``t``, equivalent to ``m`` except that |
 | | :: |
 | | |
 | | at< t, key_type<m,x>::type >::type |
@@ -98,7 +98,7 @@
 +---------------------------------------+-----------------------------------------------------------+
 | ``insert<m,pos,x>::type`` | Equivalent to ``insert<m,x>::type``; ``pos`` is ignored. |
 +---------------------------------------+-----------------------------------------------------------+
-| ``erase_key<m,k>::type`` | A new ``map`` equivalent to ``m`` except that |
+| ``erase_key<m,k>::type`` | A new ``map``, ``t``, equivalent to ``m`` except that |
 | | ``has_key<t, k>::value == false``. |
 +---------------------------------------+-----------------------------------------------------------+
 | ``erase<m,pos>::type`` | Equivalent to ``erase<m, deref<pos>::type >::type``. |

Modified: branches/fix-links/libs/numeric/ublas/doc/overview.htm
==============================================================================
--- branches/fix-links/libs/numeric/ublas/doc/overview.htm (original)
+++ branches/fix-links/libs/numeric/ublas/doc/overview.htm 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -286,7 +286,7 @@
 <tr>
 <td><code>sasum</code> OR <code>dasum</code></td>
 <td><code>norm_1 (x)</code></td>
-<td><em>sum x<sub>i</sub></em></td>
+<td><em>sum |x<sub>i</sub>|</em></td>
 <td>Computes the <em>l<sub>1</sub></em> (sum) norm of a real vector.</td>
 </tr>
 <tr>

Modified: branches/fix-links/libs/python/src/object/stl_iterator.cpp
==============================================================================
--- branches/fix-links/libs/python/src/object/stl_iterator.cpp (original)
+++ branches/fix-links/libs/python/src/object/stl_iterator.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,6 +2,10 @@
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
+//
+// Credits:
+// Andreas Kl\:ockner for fixing increment() to handle
+// error conditions.
 
 #include <boost/python/object.hpp>
 #include <boost/python/handle.hpp>
@@ -27,6 +31,8 @@
 {
     this->ob_ = boost::python::handle<>(
         boost::python::allow_null(PyIter_Next(this->it_.ptr())));
+ if (PyErr_Occurred())
+ throw boost::python::error_already_set();
 }
 
 bool stl_input_iterator_impl::equal(stl_input_iterator_impl const &that) const

Modified: branches/fix-links/libs/python/test/stl_iterator.py
==============================================================================
--- branches/fix-links/libs/python/test/stl_iterator.py (original)
+++ branches/fix-links/libs/python/test/stl_iterator.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -12,6 +12,16 @@
 3
 4
 5
+>>> def generator():
+... yield 1
+... yield 2
+... raise RuntimeError, "oops"
+>>> try:
+... x.assign(iter(generator()))
+... print "NOT OK"
+... except RuntimeError:
+... print "OK"
+OK
 '''
 def run(args = None):
     import sys

Modified: branches/fix-links/libs/range/doc/boost_range.html
==============================================================================
--- branches/fix-links/libs/range/doc/boost_range.html (original)
+++ branches/fix-links/libs/range/doc/boost_range.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -493,7 +493,7 @@
         </p>
             <p>
                 <code>as_literal()</code> can be used <i>internally</i> in string
- algorithm librararies to such that arrays of characters are
+ algorithm librararies such that arrays of characters are
                 handled correctly.
                 </p>
             <p>

Modified: branches/fix-links/libs/range/doc/history_ack.html
==============================================================================
--- branches/fix-links/libs/range/doc/history_ack.html (original)
+++ branches/fix-links/libs/range/doc/history_ack.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -18,10 +18,10 @@
 
     <h2 >History and Acknowledgement</h2><a name="History" ></a>
     <p >
- The library have been under way for a long time. Dietmar Kühl originally
- intended to submit an <code >array_traits</code> class template which
- had most of the functionality present now, but only for arrays and standard
- containers.
+ The library was under way for a long time. Dietmar Kühl originally intended
+ to submit an <code >array_traits</code> class template which had most of
+ the functionality present now, but only for arrays and standard containers.
+ I believe this was back in 2001 or 2002.
     </p>
     
     <p>

Modified: branches/fix-links/libs/range/doc/intro.html
==============================================================================
--- branches/fix-links/libs/range/doc/intro.html (original)
+++ branches/fix-links/libs/range/doc/intro.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -63,8 +63,7 @@
 
     </ul>
     </p>
- <p >
- Below are given a small example (the complete example can be found <a
+ <p > Below is given a small example (the complete example can be found <a
     href="../test/algorithm_example.cpp" target="_self" >here</a>): <blockquote>
         <pre >
 <span class=comment>

Modified: branches/fix-links/libs/range/doc/portability.html
==============================================================================
--- branches/fix-links/libs/range/doc/portability.html (original)
+++ branches/fix-links/libs/range/doc/portability.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -35,7 +35,7 @@
     </p>
     <p >
     Notice also that some compilers cannot do function template ordering properly.
- In that case one must rely of <a
+ In that case one must rely on <a
       href="boost_range.html#range_iterator"><code >range_iterator</code></a>
       and a single function definition instead of overloaded versions for const and
       non-const arguments.

Modified: branches/fix-links/libs/range/doc/utility_class.html
==============================================================================
--- branches/fix-links/libs/range/doc/utility_class.html (original)
+++ branches/fix-links/libs/range/doc/utility_class.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -33,11 +33,12 @@
     </ul>
     </ul>
 
- The <code>iterator_range</code> class is templated on an
- <a href="../../iterator/doc/new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">Forward
+ The <code>iterator_range</code> class is templated on a <a
+ href="../../iterator/doc/new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">Forward
     Traversal Iterator</a> and should be used whenever fairly general code is needed.
- The <code>sub_range</code> class is templated on an <a href="range.html#forward_range">Forward
- Range</a> and it is less general, but a bit easier to use since its template
+ The <code>sub_range</code> class is templated on a <a
+ href="range.html#forward_range">Forward Range</a> and it is less general,
+ but a bit easier to use since its template
     argument is easier to specify. The biggest difference is, however, that a
     <code>sub_range</code> can propagate constness because it knows what a
 corresponding <code>const_iterator</code> is. </p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/background_information/examples.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/background_information/examples.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/background_information/examples.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,7 +28,7 @@
       Example Programs</a>
 </h3></div></div></div>
 <a name="boost_regex.background_information.examples.test_programs"></a><h5>
-<a name="id647187"></a>
+<a name="id647219"></a>
         <a href="examples.html#boost_regex.background_information.examples.test_programs">Test
         Programs</a>
       </h5>
@@ -98,7 +98,7 @@
         Files: captures_test.cpp.
       </p>
 <a name="boost_regex.background_information.examples.example_programs"></a><h5>
-<a name="id647395"></a>
+<a name="id647427"></a>
         <a href="examples.html#boost_regex.background_information.examples.example_programs">Example
         programs</a>
       </h5>
@@ -124,7 +124,7 @@
         Files: regex_timer.cpp.
       </p>
 <a name="boost_regex.background_information.examples.code_snippets"></a><h5>
-<a name="id647476"></a>
+<a name="id647508"></a>
         <a href="examples.html#boost_regex.background_information.examples.code_snippets">Code
         snippets</a>
       </h5>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/background_information/history.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/background_information/history.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/background_information/history.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -26,7 +26,7 @@
 <a name="boost_regex.background_information.history"></a> History
 </h3></div></div></div>
 <a name="boost_regex.background_information.history.boost_1_34"></a><h5>
-<a name="id649643"></a>
+<a name="id649678"></a>
         <a href="history.html#boost_regex.background_information.history.boost_1_34">Boost
         1.34</a>
       </h5>
@@ -49,7 +49,7 @@
         </li>
 </ul></div>
 <a name="boost_regex.background_information.history.boost_1_33_1"></a><h5>
-<a name="id649694"></a>
+<a name="id649729"></a>
         <a href="history.html#boost_regex.background_information.history.boost_1_33_1">Boost
         1.33.1</a>
       </h5>
@@ -119,7 +119,7 @@
         </li>
 </ul></div>
 <a name="boost_regex.background_information.history.boost_1_33_0"></a><h5>
-<a name="id649824"></a>
+<a name="id649858"></a>
         <a href="history.html#boost_regex.background_information.history.boost_1_33_0">Boost
         1.33.0</a>
       </h5>
@@ -174,7 +174,7 @@
         </li>
 </ul></div>
 <a name="boost_regex.background_information.history.boost_1_32_1"></a><h5>
-<a name="id649923"></a>
+<a name="id649958"></a>
         <a href="history.html#boost_regex.background_information.history.boost_1_32_1">Boost
         1.32.1</a>
       </h5>
@@ -182,7 +182,7 @@
           Fixed bug in partial matches of bounded repeats of '.'.
         </li></ul></div>
 <a name="boost_regex.background_information.history.boost_1_31_0"></a><h5>
-<a name="id649957"></a>
+<a name="id649991"></a>
         <a href="history.html#boost_regex.background_information.history.boost_1_31_0">Boost
         1.31.0</a>
       </h5>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/background_information/locale.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/background_information/locale.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/background_information/locale.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -58,7 +58,7 @@
         There are three separate localization mechanisms supported by Boost.Regex:
       </p>
 <a name="boost_regex.background_information.locale.win32_localization_model_"></a><h5>
-<a name="id643689"></a>
+<a name="id643731"></a>
         <a href="locale.html#boost_regex.background_information.locale.win32_localization_model_">Win32
         localization model.</a>
       </h5>
@@ -90,7 +90,7 @@
         are treated as "unknown" graphic characters.
       </p>
 <a name="boost_regex.background_information.locale.c_localization_model_"></a><h5>
-<a name="id643933"></a>
+<a name="id643969"></a>
         <a href="locale.html#boost_regex.background_information.locale.c_localization_model_">C
         localization model.</a>
       </h5>
@@ -114,7 +114,7 @@
         libraries including version 1 of this library.
       </p>
 <a name="boost_regex.background_information.locale.c___localization_model_"></a><h5>
-<a name="id644045"></a>
+<a name="id644082"></a>
         <a href="locale.html#boost_regex.background_information.locale.c___localization_model_">C++
         localization model.</a>
       </h5>
@@ -151,7 +151,7 @@
         in your code. The best way to ensure this is to add the #define to <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">/</span><span class="identifier">user</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>.
       </p>
 <a name="boost_regex.background_information.locale.providing_a_message_catalogue"></a><h5>
-<a name="id644505"></a>
+<a name="id644537"></a>
         <a href="locale.html#boost_regex.background_information.locale.providing_a_message_catalogue">Providing
         a message catalogue</a>
       </h5>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/background_information/standards.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/background_information/standards.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/background_information/standards.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,7 +28,7 @@
       Conformance</a>
 </h3></div></div></div>
 <a name="boost_regex.background_information.standards.c__"></a><h5>
-<a name="id648468"></a>
+<a name="id648506"></a>
         <a href="standards.html#boost_regex.background_information.standards.c__">C++</a>
       </h5>
 <p>
@@ -36,7 +36,7 @@
         Report on C++ Library Extensions</a>.
       </p>
 <a name="boost_regex.background_information.standards.ecmascript___javascript"></a><h5>
-<a name="id648507"></a>
+<a name="id648545"></a>
         <a href="standards.html#boost_regex.background_information.standards.ecmascript___javascript">ECMAScript
         / JavaScript</a>
       </h5>
@@ -49,7 +49,7 @@
         rather than a Unicode escape sequence; use \x{DDDD} for Unicode escape sequences.
       </p>
 <a name="boost_regex.background_information.standards.perl"></a><h5>
-<a name="id648546"></a>
+<a name="id648584"></a>
         <a href="standards.html#boost_regex.background_information.standards.perl">Perl</a>
       </h5>
 <p>
@@ -62,7 +62,7 @@
         (??{code}) Not implementable in a compiled strongly typed language.
       </p>
 <a name="boost_regex.background_information.standards.posix"></a><h5>
-<a name="id648584"></a>
+<a name="id648622"></a>
         <a href="standards.html#boost_regex.background_information.standards.posix">POSIX</a>
       </h5>
 <p>
@@ -82,7 +82,7 @@
         a custom traits class.
       </p>
 <a name="boost_regex.background_information.standards.unicode"></a><h5>
-<a name="id648632"></a>
+<a name="id648663"></a>
         <a href="standards.html#boost_regex.background_information.standards.unicode">Unicode</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/captures.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/captures.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/captures.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -35,7 +35,7 @@
       accessed.
     </p>
 <a name="boost_regex.captures.marked_sub_expressions"></a><h5>
-<a name="id492844"></a>
+<a name="id492868"></a>
       <a href="captures.html#boost_regex.captures.marked_sub_expressions">Marked sub-expressions</a>
     </h5>
 <p>
@@ -218,7 +218,7 @@
       output stream.
     </p>
 <a name="boost_regex.captures.unmatched_sub_expressions"></a><h5>
-<a name="id493467"></a>
+<a name="id493491"></a>
       <a href="captures.html#boost_regex.captures.unmatched_sub_expressions">Unmatched Sub-Expressions</a>
     </h5>
 <p>
@@ -231,7 +231,7 @@
       you can determine which sub-expressions matched by accessing the <code class="computeroutput"><span class="identifier">sub_match</span><span class="special">::</span><span class="identifier">matched</span></code> data member.
     </p>
 <a name="boost_regex.captures.repeated_captures"></a><h5>
-<a name="id493529"></a>
+<a name="id493553"></a>
       <a href="captures.html#boost_regex.captures.repeated_captures">Repeated Captures</a>
     </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -32,7 +32,7 @@
         '$', '\', '(', ')', '?', and ':'.
       </p>
 <a name="boost_regex.format.boost_format_syntax.grouping"></a><h5>
-<a name="id515430"></a>
+<a name="id515443"></a>
         <a href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.grouping">Grouping</a>
       </h5>
 <p>
@@ -40,7 +40,7 @@
         you want a to output literal parenthesis.
       </p>
 <a name="boost_regex.format.boost_format_syntax.conditionals"></a><h5>
-<a name="id515461"></a>
+<a name="id515473"></a>
         <a href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.conditionals">Conditionals</a>
       </h5>
 <p>
@@ -66,7 +66,7 @@
         with "bar" otherwise.
       </p>
 <a name="boost_regex.format.boost_format_syntax.placeholder_sequences"></a><h5>
-<a name="id515518"></a>
+<a name="id515530"></a>
         <a href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.placeholder_sequences">Placeholder
         Sequences</a>
       </h5>
@@ -161,7 +161,7 @@
         as a literal.
       </p>
 <a name="boost_regex.format.boost_format_syntax.escape_sequences"></a><h5>
-<a name="id515689"></a>
+<a name="id515702"></a>
         <a href="boost_format_syntax.html#boost_regex.format.boost_format_syntax.escape_sequences">Escape
         Sequences</a>
       </h5>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/install.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/install.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/install.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -49,7 +49,7 @@
       file before you can use it, instructions for specific platforms are as follows:
     </p>
 <a name="boost_regex.install.building_with_bjam"></a><h5>
-<a name="id440369"></a>
+<a name="id440381"></a>
       <a href="install.html#boost_regex.install.building_with_bjam">Building with bjam</a>
     </h5>
 <p>
@@ -58,7 +58,7 @@
       started guide</a> for more information.
     </p>
 <a name="boost_regex.install.building_with_unicode_and_icu_support"></a><h5>
-<a name="id440403"></a>
+<a name="id440415"></a>
       <a href="install.html#boost_regex.install.building_with_unicode_and_icu_support">Building
       With Unicode and ICU Support</a>
     </h5>
@@ -96,11 +96,11 @@
       ICU you are using is binary compatible with the toolset you use to build Boost.
     </p>
 <a name="boost_regex.install.building_via_makefiles"></a><h5>
-<a name="id436006"></a>
+<a name="id436018"></a>
       <a href="install.html#boost_regex.install.building_via_makefiles">Building via makefiles</a>
     </h5>
 <a name="boost_regex.install.borland_c___builder_"></a><h6>
-<a name="id436029"></a>
+<a name="id436041"></a>
       <a href="install.html#boost_regex.install.borland_c___builder_">Borland C++ Builder:</a>
     </h6>
 <div class="itemizedlist"><ul type="disc">
@@ -166,7 +166,7 @@
       a lot in compile times!
     </p>
 <a name="boost_regex.install.microsoft_visual_c___6__7__7_1_and_8"></a><h5>
-<a name="id490078"></a>
+<a name="id490102"></a>
       <a href="install.html#boost_regex.install.microsoft_visual_c___6__7__7_1_and_8">Microsoft
       Visual C++ 6, 7, 7.1 and 8</a>
     </h5>
@@ -253,7 +253,7 @@
       </li>
 </ul></div>
 <a name="boost_regex.install.gcc_2_95_and_later_"></a><h6>
-<a name="id490390"></a>
+<a name="id490415"></a>
       <a href="install.html#boost_regex.install.gcc_2_95_and_later_">GCC(2.95 and later)</a>
     </h6>
 <p>
@@ -302,7 +302,7 @@
       see the config library documentation.
     </p>
 <a name="boost_regex.install.sun_workshop_6_1"></a><h6>
-<a name="id490591"></a>
+<a name="id490616"></a>
       <a href="install.html#boost_regex.install.sun_workshop_6_1">Sun Workshop 6.1</a>
     </h6>
 <p>
@@ -347,7 +347,7 @@
       will build v9 variants of the regex library named libboost_regex_v9.a etc.
     </p>
 <a name="boost_regex.install.makefiles_for_other_compilers"></a><h6>
-<a name="id490813"></a>
+<a name="id490837"></a>
       <a href="install.html#boost_regex.install.makefiles_for_other_compilers">Makefiles
       for Other compilers</a>
     </h6>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/bad_expression.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/bad_expression.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/bad_expression.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -27,7 +27,7 @@
 <a name="boost_regex.ref.bad_expression"></a> bad_expression
 </h3></div></div></div>
 <a name="boost_regex.ref.bad_expression.synopsis"></a><h5>
-<a name="id596250"></a>
+<a name="id596269"></a>
         <a href="bad_expression.html#boost_regex.ref.bad_expression.synopsis">Synopsis</a>
       </h5>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">pattern_except</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
@@ -54,7 +54,7 @@
 <span class="special">}</span> <span class="comment">// namespace boost
 </span></pre>
 <a name="boost_regex.ref.bad_expression.description"></a><h5>
-<a name="id596753"></a>
+<a name="id596772"></a>
         <a href="bad_expression.html#boost_regex.ref.bad_expression.description">Description</a>
       </h5>
 <pre class="programlisting"><span class="identifier">regex_error</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&amp;</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">error_type</span> <span class="identifier">err</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">pos</span><span class="special">);</span>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/basic_regex.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/basic_regex.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/basic_regex.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -27,7 +27,7 @@
 <a name="boost_regex.ref.basic_regex"></a> basic_regex
 </h3></div></div></div>
 <a name="boost_regex.ref.basic_regex.synopsis"></a><h5>
-<a name="id516103"></a>
+<a name="id516116"></a>
         <a href="basic_regex.html#boost_regex.ref.basic_regex.synopsis">Synopsis</a>
       </h5>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
@@ -243,7 +243,7 @@
 <span class="special">}</span> <span class="comment">// namespace boost
 </span></pre>
 <a name="boost_regex.ref.basic_regex.description"></a><h5>
-<a name="id522034"></a>
+<a name="id522047"></a>
         <a href="basic_regex.html#boost_regex.ref.basic_regex.description">Description</a>
       </h5>
 <p>
@@ -326,7 +326,7 @@
         <code class="computeroutput"><span class="identifier">basic_regex</span></code>.
       </p>
 <div class="table">
-<a name="id523970"></a><p class="title"><b>Table 1. basic_regex default construction postconditions</b></p>
+<a name="id523983"></a><p class="title"><b>Table 1. basic_regex default construction postconditions</b></p>
 <div class="table-contents"><table class="table" summary="basic_regex default construction postconditions">
 <colgroup>
 <col>
@@ -406,7 +406,7 @@
         flags</a> specified in <span class="emphasis"><em>f</em></span>.
       </p>
 <div class="table">
-<a name="id524369"></a><p class="title"><b>Table 2. Postconditions for basic_regex construction</b></p>
+<a name="id524382"></a><p class="title"><b>Table 2. Postconditions for basic_regex construction</b></p>
 <div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
 <colgroup>
 <col>
@@ -511,7 +511,7 @@
         specified in <span class="emphasis"><em>f</em></span>.
       </p>
 <div class="table">
-<a name="id524915"></a><p class="title"><b>Table 3. Postconditions for basic_regex construction</b></p>
+<a name="id524927"></a><p class="title"><b>Table 3. Postconditions for basic_regex construction</b></p>
 <div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
 <colgroup>
 <col>
@@ -615,7 +615,7 @@
         according the option flags specified in <span class="emphasis"><em>f</em></span>.
       </p>
 <div class="table">
-<a name="id525448"></a><p class="title"><b>Table 4. Postconditions for basic_regex construction</b></p>
+<a name="id525460"></a><p class="title"><b>Table 4. Postconditions for basic_regex construction</b></p>
 <div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
 <colgroup>
 <col>
@@ -726,7 +726,7 @@
         flags</a> specified in <span class="emphasis"><em>f</em></span>.
       </p>
 <div class="table">
-<a name="id526084"></a><p class="title"><b>Table 5. Postconditions for basic_regex construction</b></p>
+<a name="id526096"></a><p class="title"><b>Table 5. Postconditions for basic_regex construction</b></p>
 <div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
 <colgroup>
 <col>
@@ -828,7 +828,7 @@
         flags</a> specified in <span class="emphasis"><em>f</em></span>.
       </p>
 <div class="table">
-<a name="id526559"></a><p class="title"><b>Table 6. Postconditions for basic_regex construction</b></p>
+<a name="id526570"></a><p class="title"><b>Table 6. Postconditions for basic_regex construction</b></p>
 <div class="table-contents"><table class="table" summary="Postconditions for basic_regex construction">
 <colgroup>
 <col>
@@ -1026,7 +1026,7 @@
         in <span class="emphasis"><em>f</em></span>.
       </p>
 <div class="table">
-<a name="id528412"></a><p class="title"><b>Table 7. Postconditions for basic_regex::assign</b></p>
+<a name="id528424"></a><p class="title"><b>Table 7. Postconditions for basic_regex::assign</b></p>
 <div class="table-contents"><table class="table" summary="Postconditions for basic_regex::assign">
 <colgroup>
 <col>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/concepts/traits_concept.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/concepts/traits_concept.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/concepts/traits_concept.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -34,7 +34,7 @@
           Boost-specific enhanced interface.
         </p>
 <a name="boost_regex.ref.concepts.traits_concept.minimal_requirements_"></a><h5>
-<a name="id622823"></a>
+<a name="id622867"></a>
           <a href="traits_concept.html#boost_regex.ref.concepts.traits_concept.minimal_requirements_">Minimal
           requirements.</a>
         </h5>
@@ -381,7 +381,7 @@
 </tbody>
 </table></div>
 <a name="boost_regex.ref.concepts.traits_concept.additional_optional_requirements"></a><h5>
-<a name="id623626"></a>
+<a name="id623670"></a>
           <a href="traits_concept.html#boost_regex.ref.concepts.traits_concept.additional_optional_requirements">Additional
           Optional Requirements</a>
         </h5>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/deprecated_interfaces/regex_format.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -34,7 +34,7 @@
           previous version of Boost.Regex and will not be further updated:
         </p>
 <a name="boost_regex.ref.deprecated_interfaces.regex_format.algorithm_regex_format"></a><h5>
-<a name="id624370"></a>
+<a name="id624414"></a>
           <a href="regex_format.html#boost_regex.ref.deprecated_interfaces.regex_format.algorithm_regex_format">Algorithm
           regex_format</a>
         </h5>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/error_type.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/error_type.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/error_type.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -27,7 +27,7 @@
 <a name="boost_regex.ref.error_type"></a> error_type
 </h3></div></div></div>
 <a name="boost_regex.ref.error_type.synopsis"></a><h5>
-<a name="id602223"></a>
+<a name="id602253"></a>
         <a href="error_type.html#boost_regex.ref.error_type.synopsis">Synopsis</a>
       </h5>
 <p>
@@ -57,7 +57,7 @@
 </span><span class="special">}</span> <span class="comment">// namespace boost
 </span></pre>
 <a name="boost_regex.ref.error_type.description"></a><h5>
-<a name="id602787"></a>
+<a name="id602817"></a>
         <a href="error_type.html#boost_regex.ref.error_type.description">Description</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/match_flag_type.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/match_flag_type.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/match_flag_type.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -69,7 +69,7 @@
 </span><span class="special">}</span> <span class="comment">// namespace boost
 </span></pre>
 <a name="boost_regex.ref.match_flag_type.description"></a><h5>
-<a name="id601462"></a>
+<a name="id601488"></a>
         <a href="match_flag_type.html#boost_regex.ref.match_flag_type.description">Description</a>
       </h5>
 <p>
@@ -313,7 +313,7 @@
               </td>
 <td>
               <p>
- Specified that the expression "." does not match a character
+ Specifies that the expression "." does not match a character
                 null '\0'.
               </p>
               </td>
@@ -426,7 +426,7 @@
               </td>
 <td>
               <p>
- Specified that when a regular expression match is to be replaced
+ Specifies that when a regular expression match is to be replaced
                 by a new string, that the new string is a literal copy of the replacement
                 text.
               </p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/match_results.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/match_results.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/match_results.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -27,7 +27,7 @@
 <a name="boost_regex.ref.match_results"></a> match_results
 </h3></div></div></div>
 <a name="boost_regex.ref.match_results.synopsis"></a><h5>
-<a name="id531798"></a>
+<a name="id531812"></a>
         <a href="match_results.html#boost_regex.ref.match_results.synopsis">Synopsis</a>
       </h5>
 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
@@ -142,7 +142,7 @@
          <span class="identifier">match_results</span><span class="special">&lt;</span><span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="identifier">Allocator</span><span class="special">&gt;&amp;</span> <span class="identifier">m2</span><span class="special">);</span>
 </pre>
 <a name="boost_regex.ref.match_results.description"></a><h5>
-<a name="id534701"></a>
+<a name="id534716"></a>
         <a href="match_results.html#boost_regex.ref.match_results.description">Description</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_algo.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -43,7 +43,7 @@
             on to the "real" algorithm.
           </p>
 <a name="boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_match"></a><h5>
-<a name="id605222"></a>
+<a name="id605263"></a>
             <a href="unicode_algo.html#boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_match">u32regex_match</a>
           </h5>
 <p>
@@ -89,7 +89,7 @@
 <span class="special">}</span>
 </pre>
 <a name="boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_search"></a><h5>
-<a name="id605941"></a>
+<a name="id605982"></a>
             <a href="unicode_algo.html#boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_search">u32regex_search</a>
           </h5>
 <p>
@@ -128,7 +128,7 @@
 <span class="special">}</span>
 </pre>
 <a name="boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_replace"></a><h5>
-<a name="id606534"></a>
+<a name="id606575"></a>
             <a href="unicode_algo.html#boost_regex.ref.non_std_strings.icu.unicode_algo.u32regex_replace">u32regex_replace</a>
           </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/icu/unicode_iter.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,7 +28,7 @@
           Unicode Aware Regex Iterators</a>
 </h5></div></div></div>
 <a name="boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_iterator"></a><h5>
-<a name="id606994"></a>
+<a name="id607035"></a>
             <a href="unicode_iter.html#boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_iterator">u32regex_iterator</a>
           </h5>
 <p>
@@ -126,7 +126,7 @@
             Provided of course that the input is encoded as UTF-8.
           </p>
 <a name="boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_token_iterator"></a><h5>
-<a name="id608741"></a>
+<a name="id608782"></a>
             <a href="unicode_iter.html#boost_regex.ref.non_std_strings.icu.unicode_iter.u32regex_token_iterator">u32regex_token_iterator</a>
           </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_algo.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -34,7 +34,7 @@
             here they are anyway:
           </p>
 <a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match"></a><h5>
-<a name="id613898"></a>
+<a name="id613938"></a>
             <a href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match">regex_match</a>
           </h5>
 <p>
@@ -82,7 +82,7 @@
 <span class="special">}</span>
 </pre>
 <a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match__second_overload_"></a><h5>
-<a name="id614810"></a>
+<a name="id614850"></a>
             <a href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_match__second_overload_">regex_match
             (second overload)</a>
           </h5>
@@ -110,7 +110,7 @@
 <span class="special">}</span>
 </pre>
 <a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search"></a><h5>
-<a name="id615401"></a>
+<a name="id615441"></a>
             <a href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search">regex_search</a>
           </h5>
 <p>
@@ -149,7 +149,7 @@
 <span class="special">}</span>
 </pre>
 <a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search__second_overload_"></a><h5>
-<a name="id616138"></a>
+<a name="id616179"></a>
             <a href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_search__second_overload_">regex_search
             (second overload)</a>
           </h5>
@@ -164,7 +164,7 @@
             <span class="special">+</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">GetLength</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">f</span><span class="special">);</span></code>
           </p>
 <a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_replace"></a><h5>
-<a name="id616543"></a>
+<a name="id616583"></a>
             <a href="mfc_algo.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_algo.regex_replace">regex_replace</a>
           </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/non_std_strings/mfc_strings/mfc_iter.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -32,7 +32,7 @@
             an MFC/ATL string to a regex_iterator or regex_token_iterator:
           </p>
 <a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_iterator_creation_helper"></a><h5>
-<a name="id617624"></a>
+<a name="id617663"></a>
             <a href="mfc_iter.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_iterator_creation_helper">regex_iterator
             creation helper</a>
           </h5>
@@ -68,7 +68,7 @@
 <span class="special">}</span>
 </pre>
 <a name="boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_token_iterator_creation_helpers"></a><h5>
-<a name="id618372"></a>
+<a name="id618412"></a>
             <a href="mfc_iter.html#boost_regex.ref.non_std_strings.mfc_strings.mfc_iter.regex_token_iterator_creation_helpers">regex_token_iterator
             creation helpers</a>
           </h5>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/posix.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/posix.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/posix.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -165,7 +165,7 @@
 <a name="regcomp"></a><p>
       </p>
 <a name="boost_regex.ref.posix.regcomp"></a><h5>
-<a name="id621289"></a>
+<a name="id621330"></a>
         <a href="posix.html#boost_regex.ref.posix.regcomp">regcomp</a>
       </h5>
 <p>
@@ -379,7 +379,7 @@
 <a name="regerror"></a><p>
       </p>
 <a name="boost_regex.ref.posix.regerror"></a><h5>
-<a name="id621933"></a>
+<a name="id621972"></a>
         <a href="posix.html#boost_regex.ref.posix.regerror">regerror</a>
       </h5>
 <p>
@@ -467,7 +467,7 @@
 <a name="regexec"></a><p>
       </p>
 <a name="boost_regex.ref.posix.regexec"></a><h5>
-<a name="id622116"></a>
+<a name="id622160"></a>
         <a href="posix.html#boost_regex.ref.posix.regexec">regexec</a>
       </h5>
 <p>
@@ -537,7 +537,7 @@
 <a name="regfree"></a><p>
       </p>
 <a name="boost_regex.ref.posix.regfree"></a><h5>
-<a name="id622257"></a>
+<a name="id622301"></a>
         <a href="posix.html#boost_regex.ref.posix.regfree">regfree</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_iterator.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_iterator.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_iterator.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -78,7 +78,7 @@
                           <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span>
 </pre>
 <a name="boost_regex.ref.regex_iterator.description"></a><h5>
-<a name="id580264"></a>
+<a name="id580282"></a>
         <a href="regex_iterator.html#boost_regex.ref.regex_iterator.description">Description</a>
       </h5>
 <p>
@@ -436,7 +436,7 @@
         <span class="emphasis"><em>m</em></span>.
       </p>
 <a name="boost_regex.ref.regex_iterator.examples"></a><h5>
-<a name="id583397"></a>
+<a name="id583416"></a>
         <a href="regex_iterator.html#boost_regex.ref.regex_iterator.examples">Examples</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_match.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_match.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_match.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -80,7 +80,7 @@
                  <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span>
 </pre>
 <a name="boost_regex.ref.regex_match.description"></a><h5>
-<a name="id563869"></a>
+<a name="id563885"></a>
         <a href="regex_match.html#boost_regex.ref.regex_match.description">Description</a>
       </h5>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">&gt;</span>
@@ -360,7 +360,7 @@
         <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_match</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>.
       </p>
 <a name="boost_regex.ref.regex_match.examples"></a><h5>
-<a name="id567048"></a>
+<a name="id567065"></a>
         <a href="regex_match.html#boost_regex.ref.regex_match.examples">Examples</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_replace.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_replace.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_replace.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -53,7 +53,7 @@
                                   <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span>
 </pre>
 <a name="boost_regex.ref.regex_replace.description"></a><h5>
-<a name="id574348"></a>
+<a name="id574366"></a>
         <a href="regex_replace.html#boost_regex.ref.regex_replace.description">Description</a>
       </h5>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">OutputIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">&gt;</span>
@@ -163,7 +163,7 @@
         and then returns <code class="computeroutput"><span class="identifier">result</span></code>.
       </p>
 <a name="boost_regex.ref.regex_replace.examples"></a><h5>
-<a name="id575897"></a>
+<a name="id575914"></a>
         <a href="regex_replace.html#boost_regex.ref.regex_replace.examples">Examples</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_search.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_search.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_search.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -73,7 +73,7 @@
                   <span class="identifier">match_flag_type</span> <span class="identifier">flags</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span>
 </pre>
 <a name="boost_regex.ref.regex_search.description"></a><h5>
-<a name="id569258"></a>
+<a name="id569275"></a>
         <a href="regex_search.html#boost_regex.ref.regex_search.description">Description</a>
       </h5>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">&gt;</span>
@@ -355,7 +355,7 @@
         <span class="bold"><strong>Effects</strong></span>: Returns the result of <code class="computeroutput"><span class="identifier">regex_search</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">e</span><span class="special">,</span> <span class="identifier">flags</span><span class="special">)</span></code>.
       </p>
 <a name="boost_regex.ref.regex_search.examples"></a><h5>
-<a name="id572523"></a>
+<a name="id572541"></a>
         <a href="regex_search.html#boost_regex.ref.regex_search.examples">Examples</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_token_iterator.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_token_iterator.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_token_iterator.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -136,7 +136,7 @@
          <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span>
 </pre>
 <a name="boost_regex.ref.regex_token_iterator.description"></a><h5>
-<a name="id589351"></a>
+<a name="id589370"></a>
         <a href="regex_token_iterator.html#boost_regex.ref.regex_token_iterator.description">Description</a>
       </h5>
 <a name="boost_regex.regex_token_iterator.construct1"></a><p>
@@ -383,7 +383,7 @@
         <span class="emphasis"><em>m</em></span>.
       </p>
 <a name="boost_regex.ref.regex_token_iterator.examples"></a><h5>
-<a name="id593568"></a>
+<a name="id593587"></a>
         <a href="regex_token_iterator.html#boost_regex.ref.regex_token_iterator.examples">Examples</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_traits.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_traits.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/regex_traits.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -46,7 +46,7 @@
 <span class="special">}</span> <span class="comment">// namespace boost
 </span></pre>
 <a name="boost_regex.ref.regex_traits.description"></a><h5>
-<a name="id603469"></a>
+<a name="id603498"></a>
         <a href="regex_traits.html#boost_regex.ref.regex_traits.description">Description</a>
       </h5>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/ref/sub_match.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/ref/sub_match.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/ref/sub_match.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -329,11 +329,11 @@
 <span class="special">}</span> <span class="comment">// namespace boost
 </span></pre>
 <a name="boost_regex.ref.sub_match.description"></a><h5>
-<a name="id548389"></a>
+<a name="id548406"></a>
         <a href="sub_match.html#boost_regex.ref.sub_match.description">Description</a>
       </h5>
 <a name="boost_regex.ref.sub_match.members"></a><h6>
-<a name="id548412"></a>
+<a name="id548429"></a>
         <a href="sub_match.html#boost_regex.ref.sub_match.members">Members</a>
       </h6>
 <a name="boost_regex.sub_match.value_type"></a><p>
@@ -473,7 +473,7 @@
         </li>
 </ul></div>
 <a name="boost_regex.ref.sub_match.sub_match_non_member_operators"></a><h6>
-<a name="id549987"></a>
+<a name="id550004"></a>
         <a href="sub_match.html#boost_regex.ref.sub_match.sub_match_non_member_operators">sub_match
         non-member operators</a>
       </h6>
@@ -1008,7 +1008,7 @@
         <span class="special">+</span> <span class="identifier">m2</span><span class="special">.</span><span class="identifier">str</span><span class="special">()</span></code>.
       </p>
 <a name="boost_regex.ref.sub_match.stream_inserter"></a><h6>
-<a name="id561958"></a>
+<a name="id561974"></a>
         <a href="sub_match.html#boost_regex.ref.sub_match.stream_inserter">Stream inserter</a>
       </h6>
 <a name="boost_regex.sub_match.op_stream"></a><p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/syntax/basic_extended.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/syntax/basic_extended.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/syntax/basic_extended.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,7 +28,7 @@
       Expression Syntax</a>
 </h3></div></div></div>
 <a name="boost_regex.syntax.basic_extended.synopsis"></a><h4>
-<a name="id504146"></a>
+<a name="id504158"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.synopsis">Synopsis</a>
       </h4>
 <p>
@@ -46,7 +46,7 @@
 <a name="boost_regex.posix_extended_syntax"></a><p>
       </p>
 <a name="boost_regex.syntax.basic_extended.posix_extended_syntax"></a><h4>
-<a name="id504411"></a>
+<a name="id504423"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.posix_extended_syntax">POSIX
         Extended Syntax</a>
       </h4>
@@ -56,7 +56,7 @@
       </p>
 <pre class="programlisting">.[{()\*+?|^$</pre>
 <a name="boost_regex.syntax.basic_extended.wildcard_"></a><h5>
-<a name="id504451"></a>
+<a name="id504463"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.wildcard_">Wildcard:</a>
       </h5>
 <p>
@@ -74,7 +74,7 @@
         </li>
 </ul></div>
 <a name="boost_regex.syntax.basic_extended.anchors_"></a><h5>
-<a name="id504519"></a>
+<a name="id504531"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.anchors_">Anchors:</a>
       </h5>
 <p>
@@ -86,7 +86,7 @@
         of an expression, or the last character of a sub-expression.
       </p>
 <a name="boost_regex.syntax.basic_extended.marked_sub_expressions_"></a><h5>
-<a name="id504554"></a>
+<a name="id504566"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.marked_sub_expressions_">Marked
         sub-expressions:</a>
       </h5>
@@ -98,7 +98,7 @@
         to by a back-reference.
       </p>
 <a name="boost_regex.syntax.basic_extended.repeats_"></a><h5>
-<a name="id504611"></a>
+<a name="id504623"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.repeats_">Repeats:</a>
       </h5>
 <p>
@@ -184,7 +184,7 @@
         operator to be applied to.
       </p>
 <a name="boost_regex.syntax.basic_extended.back_references_"></a><h5>
-<a name="id505058"></a>
+<a name="id505070"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.back_references_">Back references:</a>
       </h5>
 <p>
@@ -214,7 +214,7 @@
         </p></td></tr>
 </table></div>
 <a name="boost_regex.syntax.basic_extended.alternation"></a><h5>
-<a name="id505152"></a>
+<a name="id505164"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.alternation">Alternation</a>
       </h5>
 <p>
@@ -227,7 +227,7 @@
         will match either of "abd" or "abef".
       </p>
 <a name="boost_regex.syntax.basic_extended.character_sets_"></a><h5>
-<a name="id505256"></a>
+<a name="id505268"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.character_sets_">Character
         sets:</a>
       </h5>
@@ -240,7 +240,7 @@
         A bracket expression may contain any combination of the following:
       </p>
 <a name="boost_regex.syntax.basic_extended.single_characters_"></a><h6>
-<a name="id505292"></a>
+<a name="id505304"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.single_characters_">Single
         characters:</a>
       </h6>
@@ -249,7 +249,7 @@
         or 'c'.
       </p>
 <a name="boost_regex.syntax.basic_extended.character_ranges_"></a><h6>
-<a name="id505342"></a>
+<a name="id505354"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.character_ranges_">Character
         ranges:</a>
       </h6>
@@ -265,7 +265,7 @@
         the code points of the characters only.
       </p>
 <a name="boost_regex.syntax.basic_extended.negation_"></a><h6>
-<a name="id505443"></a>
+<a name="id505456"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.negation_">Negation:</a>
       </h6>
 <p>
@@ -274,7 +274,7 @@
         range <code class="computeroutput"><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span></code>.
       </p>
 <a name="boost_regex.syntax.basic_extended.character_classes_"></a><h6>
-<a name="id505526"></a>
+<a name="id505538"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.character_classes_">Character
         classes:</a>
       </h6>
@@ -284,7 +284,7 @@
         <a href="character_classes.html" title="Character Class Names">character class names</a>.
       </p>
 <a name="boost_regex.syntax.basic_extended.collating_elements_"></a><h6>
-<a name="id505608"></a>
+<a name="id505620"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.collating_elements_">Collating
         Elements:</a>
       </h6>
@@ -312,7 +312,7 @@
         matches a NUL character.
       </p>
 <a name="boost_regex.syntax.basic_extended.equivalence_classes_"></a><h6>
-<a name="id505770"></a>
+<a name="id505782"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.equivalence_classes_">Equivalence
         classes:</a>
       </h6>
@@ -329,7 +329,7 @@
         or even all locales on one platform.
       </p>
 <a name="boost_regex.syntax.basic_extended.combinations_"></a><h6>
-<a name="id505874"></a>
+<a name="id505886"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.combinations_">Combinations:</a>
       </h6>
 <p>
@@ -337,7 +337,7 @@
         <code class="computeroutput"><span class="special">[[:</span><span class="identifier">digit</span><span class="special">:]</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">[.</span><span class="identifier">NUL</span><span class="special">.]]</span></code>.
       </p>
 <a name="boost_regex.syntax.basic_extended.escapes"></a><h5>
-<a name="id505953"></a>
+<a name="id505966"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.escapes">Escapes</a>
       </h5>
 <p>
@@ -363,7 +363,7 @@
         extensions are also supported by Boost.Regex:
       </p>
 <a name="boost_regex.syntax.basic_extended.escapes_matching_a_specific_character"></a><h6>
-<a name="id506024"></a>
+<a name="id506036"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.escapes_matching_a_specific_character">Escapes
         matching a specific character</a>
       </h6>
@@ -552,7 +552,7 @@
 </tbody>
 </table></div>
 <a name="boost_regex.syntax.basic_extended._quot_single_character_quot__character_classes_"></a><h6>
-<a name="id506371"></a>
+<a name="id506383"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended._quot_single_character_quot__character_classes_">"Single
         character" character classes:</a>
       </h6>
@@ -706,7 +706,7 @@
 </tbody>
 </table></div>
 <a name="boost_regex.syntax.basic_extended.character_properties"></a><h6>
-<a name="id507003"></a>
+<a name="id507015"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.character_properties">Character
         Properties</a>
       </h6>
@@ -813,7 +813,7 @@
         matches any "digit" character, as does <code class="computeroutput"><span class="special">\</span><span class="identifier">p</span><span class="special">{</span><span class="identifier">digit</span><span class="special">}</span></code>.
       </p>
 <a name="boost_regex.syntax.basic_extended.word_boundaries"></a><h6>
-<a name="id507404"></a>
+<a name="id507416"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.word_boundaries">Word Boundaries</a>
       </h6>
 <p>
@@ -888,7 +888,7 @@
 </tbody>
 </table></div>
 <a name="boost_regex.syntax.basic_extended.buffer_boundaries"></a><h6>
-<a name="id507597"></a>
+<a name="id507609"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.buffer_boundaries">Buffer
         boundaries</a>
       </h6>
@@ -979,7 +979,7 @@
 </tbody>
 </table></div>
 <a name="boost_regex.syntax.basic_extended.continuation_escape"></a><h6>
-<a name="id507832"></a>
+<a name="id507844"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.continuation_escape">Continuation
         Escape</a>
       </h6>
@@ -991,7 +991,7 @@
         match to start where the last one ended.
       </p>
 <a name="boost_regex.syntax.basic_extended.quoting_escape"></a><h6>
-<a name="id507882"></a>
+<a name="id507893"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.quoting_escape">Quoting
         escape</a>
       </h6>
@@ -1005,7 +1005,7 @@
 <span class="special">\*+</span><span class="identifier">aaa</span>
 </pre>
 <a name="boost_regex.syntax.basic_extended.unicode_escapes"></a><h6>
-<a name="id508005"></a>
+<a name="id508017"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.unicode_escapes">Unicode
         escapes</a>
       </h6>
@@ -1056,7 +1056,7 @@
 </tbody>
 </table></div>
 <a name="boost_regex.syntax.basic_extended.any_other_escape"></a><h6>
-<a name="id508138"></a>
+<a name="id508150"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.any_other_escape">Any other
         escape</a>
       </h6>
@@ -1065,7 +1065,7 @@
         \@ matches a literal '@'.
       </p>
 <a name="boost_regex.syntax.basic_extended.operator_precedence"></a><h5>
-<a name="id508168"></a>
+<a name="id508180"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.operator_precedence">Operator
         precedence</a>
       </h5>
@@ -1101,7 +1101,7 @@
 </li>
 </ol></div>
 <a name="boost_regex.syntax.basic_extended.what_gets_matched"></a><h5>
-<a name="id508357"></a>
+<a name="id508369"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.what_gets_matched">What
         Gets Matched</a>
       </h5>
@@ -1111,11 +1111,11 @@
         rule</a>.
       </p>
 <a name="boost_regex.syntax.basic_extended.variations"></a><h4>
-<a name="id508397"></a>
+<a name="id508409"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.variations">Variations</a>
       </h4>
 <a name="boost_regex.syntax.basic_extended.egrep"></a><h5>
-<a name="id508420"></a>
+<a name="id508432"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.egrep">Egrep</a>
       </h5>
 <p>
@@ -1136,7 +1136,7 @@
         used with the -E option.
       </p>
 <a name="boost_regex.syntax.basic_extended.awk"></a><h5>
-<a name="id508578"></a>
+<a name="id508590"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.awk">awk</a>
       </h5>
 <p>
@@ -1150,7 +1150,7 @@
         these by default anyway.
       </p>
 <a name="boost_regex.syntax.basic_extended.options"></a><h4>
-<a name="id508625"></a>
+<a name="id508636"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.options">Options</a>
       </h4>
 <p>
@@ -1163,7 +1163,7 @@
         modify how the case and locale sensitivity are to be applied.
       </p>
 <a name="boost_regex.syntax.basic_extended.references"></a><h4>
-<a name="id508753"></a>
+<a name="id508765"></a>
         <a href="basic_extended.html#boost_regex.syntax.basic_extended.references">References</a>
       </h4>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/syntax/basic_syntax.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/syntax/basic_syntax.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/syntax/basic_syntax.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,7 +28,7 @@
       Expression Syntax</a>
 </h3></div></div></div>
 <a name="boost_regex.syntax.basic_syntax.synopsis"></a><h4>
-<a name="id508835"></a>
+<a name="id508847"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.synopsis">Synopsis</a>
       </h4>
 <p>
@@ -45,7 +45,7 @@
 <a name="boost_regex.posix_basic"></a><p>
       </p>
 <a name="boost_regex.syntax.basic_syntax.posix_basic_syntax"></a><h4>
-<a name="id509127"></a>
+<a name="id509139"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.posix_basic_syntax">POSIX
         Basic Syntax</a>
       </h4>
@@ -55,7 +55,7 @@
       </p>
 <pre class="programlisting">.[\*^$</pre>
 <a name="boost_regex.syntax.basic_syntax.wildcard_"></a><h5>
-<a name="id509166"></a>
+<a name="id509178"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.wildcard_">Wildcard:</a>
       </h5>
 <p>
@@ -73,7 +73,7 @@
         </li>
 </ul></div>
 <a name="boost_regex.syntax.basic_syntax.anchors_"></a><h5>
-<a name="id509235"></a>
+<a name="id509247"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.anchors_">Anchors:</a>
       </h5>
 <p>
@@ -85,7 +85,7 @@
         of an expression, or the last character of a sub-expression.
       </p>
 <a name="boost_regex.syntax.basic_syntax.marked_sub_expressions_"></a><h5>
-<a name="id509271"></a>
+<a name="id509283"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.marked_sub_expressions_">Marked
         sub-expressions:</a>
       </h5>
@@ -97,7 +97,7 @@
         by a back-reference.
       </p>
 <a name="boost_regex.syntax.basic_syntax.repeats_"></a><h5>
-<a name="id509328"></a>
+<a name="id509340"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.repeats_">Repeats:</a>
       </h5>
 <p>
@@ -155,7 +155,7 @@
         to.
       </p>
 <a name="boost_regex.syntax.basic_syntax.back_references_"></a><h5>
-<a name="id509572"></a>
+<a name="id509584"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.back_references_">Back references:</a>
       </h5>
 <p>
@@ -173,7 +173,7 @@
       </p>
 <pre class="programlisting">aaabba</pre>
 <a name="boost_regex.syntax.basic_syntax.character_sets_"></a><h5>
-<a name="id509646"></a>
+<a name="id509658"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.character_sets_">Character
         sets:</a>
       </h5>
@@ -186,7 +186,7 @@
         A bracket expression may contain any combination of the following:
       </p>
 <a name="boost_regex.syntax.basic_syntax.single_characters_"></a><h6>
-<a name="id509682"></a>
+<a name="id509694"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.single_characters_">Single
         characters:</a>
       </h6>
@@ -195,7 +195,7 @@
         or 'c'.
       </p>
 <a name="boost_regex.syntax.basic_syntax.character_ranges_"></a><h6>
-<a name="id509732"></a>
+<a name="id509744"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.character_ranges_">Character
         ranges:</a>
       </h6>
@@ -211,7 +211,7 @@
         of the characters only.
       </p>
 <a name="boost_regex.syntax.basic_syntax.negation_"></a><h6>
-<a name="id509824"></a>
+<a name="id509836"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.negation_">Negation:</a>
       </h6>
 <p>
@@ -220,7 +220,7 @@
         range a-c.
       </p>
 <a name="boost_regex.syntax.basic_syntax.character_classes_"></a><h6>
-<a name="id509885"></a>
+<a name="id509897"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.character_classes_">Character
         classes:</a>
       </h6>
@@ -230,7 +230,7 @@
         <a href="character_classes.html" title="Character Class Names">character class names</a>.
       </p>
 <a name="boost_regex.syntax.basic_syntax.collating_elements_"></a><h6>
-<a name="id509968"></a>
+<a name="id509980"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.collating_elements_">Collating
         Elements:</a>
       </h6>
@@ -259,7 +259,7 @@
         element names</a>.
       </p>
 <a name="boost_regex.syntax.basic_syntax.equivalence_classes_"></a><h6>
-<a name="id510116"></a>
+<a name="id510129"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.equivalence_classes_">Equivalence
         classes:</a>
       </h6>
@@ -276,7 +276,7 @@
         or even all locales on one platform.
       </p>
 <a name="boost_regex.syntax.basic_syntax.combinations_"></a><h6>
-<a name="id510221"></a>
+<a name="id510233"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.combinations_">Combinations:</a>
       </h6>
 <p>
@@ -284,7 +284,7 @@
         <code class="computeroutput"><span class="special">[[:</span><span class="identifier">digit</span><span class="special">:]</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">[.</span><span class="identifier">NUL</span><span class="special">.]].</span></code>
       </p>
 <a name="boost_regex.syntax.basic_syntax.escapes"></a><h5>
-<a name="id510299"></a>
+<a name="id510311"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.escapes">Escapes</a>
       </h5>
 <p>
@@ -299,7 +299,7 @@
         will match either a literal '\' or a '^'.
       </p>
 <a name="boost_regex.syntax.basic_syntax.what_gets_matched"></a><h4>
-<a name="id510356"></a>
+<a name="id510368"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.what_gets_matched">What Gets
         Matched</a>
       </h4>
@@ -309,13 +309,13 @@
         rule</a>.
       </p>
 <a name="boost_regex.syntax.basic_syntax.variations"></a><h4>
-<a name="id510396"></a>
+<a name="id510408"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.variations">Variations</a>
       </h4>
 <a name="boost_regex.grep_syntax"></a><p>
       </p>
 <a name="boost_regex.syntax.basic_syntax.grep"></a><h5>
-<a name="id510428"></a>
+<a name="id510440"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.grep">Grep</a>
       </h5>
 <p>
@@ -333,7 +333,7 @@
         As its name suggests, this behavior is consistent with the Unix utility grep.
       </p>
 <a name="boost_regex.syntax.basic_syntax.emacs"></a><h5>
-<a name="id510572"></a>
+<a name="id510584"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.emacs">emacs</a>
       </h5>
 <p>
@@ -613,7 +613,7 @@
         leftmost-longest rule</a>.
       </p>
 <a name="boost_regex.syntax.basic_syntax.options"></a><h4>
-<a name="id511068"></a>
+<a name="id511080"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.options">Options</a>
       </h4>
 <p>
@@ -627,7 +627,7 @@
         options</a> modify how the case and locale sensitivity are to be applied.
       </p>
 <a name="boost_regex.syntax.basic_syntax.references"></a><h4>
-<a name="id511240"></a>
+<a name="id511252"></a>
         <a href="basic_syntax.html#boost_regex.syntax.basic_syntax.references">References</a>
       </h4>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,7 +28,7 @@
       Syntax</a>
 </h3></div></div></div>
 <a name="boost_regex.syntax.perl_syntax.synopsis"></a><h4>
-<a name="id497566"></a>
+<a name="id497575"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.synopsis">Synopsis</a>
       </h4>
 <p>
@@ -45,7 +45,7 @@
 </span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">e2</span><span class="special">(</span><span class="identifier">my_expression</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">perl</span><span class="special">|</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span><span class="special">::</span><span class="identifier">icase</span><span class="special">);</span>
 </pre>
 <a name="boost_regex.syntax.perl_syntax.perl_regular_expression_syntax"></a><h4>
-<a name="id497787"></a>
+<a name="id497796"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.perl_regular_expression_syntax">Perl
         Regular Expression Syntax</a>
       </h4>
@@ -55,7 +55,7 @@
       </p>
 <pre class="programlisting">.[{()\*+?|^$</pre>
 <a name="boost_regex.syntax.perl_syntax.wildcard"></a><h5>
-<a name="id497825"></a>
+<a name="id497834"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.wildcard">Wildcard</a>
       </h5>
 <p>
@@ -75,7 +75,7 @@
         </li>
 </ul></div>
 <a name="boost_regex.syntax.perl_syntax.anchors"></a><h5>
-<a name="id497906"></a>
+<a name="id497915"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.anchors">Anchors</a>
       </h5>
 <p>
@@ -85,7 +85,7 @@
         A '$' character shall match the end of a line.
       </p>
 <a name="boost_regex.syntax.perl_syntax.marked_sub_expressions"></a><h5>
-<a name="id497940"></a>
+<a name="id497949"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.marked_sub_expressions">Marked
         sub-expressions</a>
       </h5>
@@ -97,7 +97,7 @@
         to by a back-reference.
       </p>
 <a name="boost_regex.syntax.perl_syntax.non_marking_grouping"></a><h5>
-<a name="id497996"></a>
+<a name="id498004"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.non_marking_grouping">Non-marking
         grouping</a>
       </h5>
@@ -111,7 +111,7 @@
         out any separate sub-expressions.
       </p>
 <a name="boost_regex.syntax.perl_syntax.repeats"></a><h5>
-<a name="id498084"></a>
+<a name="id498093"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.repeats">Repeats</a>
       </h5>
 <p>
@@ -197,7 +197,7 @@
         operator to be applied to.
       </p>
 <a name="boost_regex.syntax.perl_syntax.non_greedy_repeats"></a><h5>
-<a name="id498557"></a>
+<a name="id498566"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.non_greedy_repeats">Non greedy
         repeats</a>
       </h5>
@@ -228,7 +228,7 @@
         input as possible.
       </p>
 <a name="boost_regex.syntax.perl_syntax.back_references"></a><h5>
-<a name="id498702"></a>
+<a name="id498711"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.back_references">Back references</a>
       </h5>
 <p>
@@ -248,7 +248,7 @@
 <pre class="programlisting"><span class="identifier">aaabba</span>
 </pre>
 <a name="boost_regex.syntax.perl_syntax.alternation"></a><h5>
-<a name="id498785"></a>
+<a name="id498794"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.alternation">Alternation</a>
       </h5>
 <p>
@@ -277,7 +277,7 @@
         <code class="computeroutput"><span class="special">(?:</span><span class="identifier">abc</span><span class="special">)??</span></code> has exactly the same effect.
       </p>
 <a name="boost_regex.syntax.perl_syntax.character_sets"></a><h5>
-<a name="id498974"></a>
+<a name="id498983"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_sets">Character sets</a>
       </h5>
 <p>
@@ -290,7 +290,7 @@
         A bracket expression may contain any combination of the following:
       </p>
 <a name="boost_regex.syntax.perl_syntax.single_characters"></a><h6>
-<a name="id499033"></a>
+<a name="id499041"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.single_characters">Single characters</a>
       </h6>
 <p>
@@ -298,7 +298,7 @@
         or 'c'.
       </p>
 <a name="boost_regex.syntax.perl_syntax.character_ranges"></a><h6>
-<a name="id499083"></a>
+<a name="id499092"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_ranges">Character
         ranges</a>
       </h6>
@@ -311,7 +311,7 @@
         regular expression, then ranges are locale sensitive.
       </p>
 <a name="boost_regex.syntax.perl_syntax.negation"></a><h6>
-<a name="id499164"></a>
+<a name="id499172"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.negation">Negation</a>
       </h6>
 <p>
@@ -320,7 +320,7 @@
         range <code class="computeroutput"><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span></code>.
       </p>
 <a name="boost_regex.syntax.perl_syntax.character_classes"></a><h6>
-<a name="id499246"></a>
+<a name="id499255"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_classes">Character
         classes</a>
       </h6>
@@ -330,7 +330,7 @@
         <a href="character_classes.html" title="Character Class Names">character class names</a>.
       </p>
 <a name="boost_regex.syntax.perl_syntax.collating_elements"></a><h6>
-<a name="id499329"></a>
+<a name="id499338"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.collating_elements">Collating
         Elements</a>
       </h6>
@@ -354,7 +354,7 @@
         character.
       </p>
 <a name="boost_regex.syntax.perl_syntax.equivalence_classes"></a><h6>
-<a name="id499477"></a>
+<a name="id499489"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.equivalence_classes">Equivalence
         classes</a>
       </h6>
@@ -371,7 +371,7 @@
         or even all locales on one platform.
       </p>
 <a name="boost_regex.syntax.perl_syntax.escaped_characters"></a><h6>
-<a name="id499581"></a>
+<a name="id499593"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.escaped_characters">Escaped
         Characters</a>
       </h6>
@@ -383,7 +383,7 @@
         is <span class="emphasis"><em>not</em></span> a "word" character.
       </p>
 <a name="boost_regex.syntax.perl_syntax.combinations"></a><h6>
-<a name="id499686"></a>
+<a name="id499698"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.combinations">Combinations</a>
       </h6>
 <p>
@@ -391,7 +391,7 @@
         <code class="computeroutput"><span class="special">[[:</span><span class="identifier">digit</span><span class="special">:]</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">c</span><span class="special">[.</span><span class="identifier">NUL</span><span class="special">.]]</span></code>.
       </p>
 <a name="boost_regex.syntax.perl_syntax.escapes"></a><h5>
-<a name="id499764"></a>
+<a name="id499776"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.escapes">Escapes</a>
       </h5>
 <p>
@@ -584,7 +584,7 @@
 </tbody>
 </table></div>
 <a name="boost_regex.syntax.perl_syntax._quot_single_character_quot__character_classes_"></a><h6>
-<a name="id500477"></a>
+<a name="id500489"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax._quot_single_character_quot__character_classes_">"Single
         character" character classes:</a>
       </h6>
@@ -738,7 +738,7 @@
 </tbody>
 </table></div>
 <a name="boost_regex.syntax.perl_syntax.character_properties"></a><h6>
-<a name="id501109"></a>
+<a name="id501122"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.character_properties">Character
         Properties</a>
       </h6>
@@ -846,7 +846,7 @@
         matches any "digit" character, as does <code class="computeroutput"><span class="special">\</span><span class="identifier">p</span><span class="special">{</span><span class="identifier">digit</span><span class="special">}</span></code>.
       </p>
 <a name="boost_regex.syntax.perl_syntax.word_boundaries"></a><h6>
-<a name="id501519"></a>
+<a name="id501531"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.word_boundaries">Word Boundaries</a>
       </h6>
 <p>
@@ -868,7 +868,7 @@
         Matches only when not at a word boundary.
       </p>
 <a name="boost_regex.syntax.perl_syntax.buffer_boundaries"></a><h6>
-<a name="id501620"></a>
+<a name="id501633"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.buffer_boundaries">Buffer boundaries</a>
       </h6>
 <p>
@@ -893,7 +893,7 @@
         to the regular expression <code class="computeroutput"><span class="special">\</span><span class="identifier">n</span><span class="special">*\</span><span class="identifier">z</span></code>
       </p>
 <a name="boost_regex.syntax.perl_syntax.continuation_escape"></a><h6>
-<a name="id501703"></a>
+<a name="id501716"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.continuation_escape">Continuation
         Escape</a>
       </h6>
@@ -905,7 +905,7 @@
         match to start where the last one ended.
       </p>
 <a name="boost_regex.syntax.perl_syntax.quoting_escape"></a><h6>
-<a name="id501754"></a>
+<a name="id501766"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.quoting_escape">Quoting escape</a>
       </h6>
 <p>
@@ -918,7 +918,7 @@
 <span class="special">\*+</span><span class="identifier">aaa</span>
 </pre>
 <a name="boost_regex.syntax.perl_syntax.unicode_escapes"></a><h6>
-<a name="id501860"></a>
+<a name="id501872"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.unicode_escapes">Unicode escapes</a>
       </h6>
 <p>
@@ -929,7 +929,7 @@
         combining characters.
       </p>
 <a name="boost_regex.syntax.perl_syntax.any_other_escape"></a><h6>
-<a name="id501924"></a>
+<a name="id501936"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.any_other_escape">Any other
         escape</a>
       </h6>
@@ -938,7 +938,7 @@
         \@ matches a literal '@'.
       </p>
 <a name="boost_regex.syntax.perl_syntax.perl_extended_patterns"></a><h5>
-<a name="id501953"></a>
+<a name="id501965"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.perl_extended_patterns">Perl
         Extended Patterns</a>
       </h5>
@@ -947,7 +947,7 @@
         <code class="computeroutput"><span class="special">(?</span></code>.
       </p>
 <a name="boost_regex.syntax.perl_syntax.comments"></a><h6>
-<a name="id501994"></a>
+<a name="id502007"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.comments">Comments</a>
       </h6>
 <p>
@@ -956,7 +956,7 @@
         are ignored.
       </p>
 <a name="boost_regex.syntax.perl_syntax.modifiers"></a><h6>
-<a name="id502047"></a>
+<a name="id502059"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.modifiers">Modifiers</a>
       </h6>
 <p>
@@ -971,7 +971,7 @@
         applies the specified modifiers to pattern only.
       </p>
 <a name="boost_regex.syntax.perl_syntax.non_marking_groups"></a><h6>
-<a name="id502174"></a>
+<a name="id502186"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.non_marking_groups">Non-marking
         groups</a>
       </h6>
@@ -980,7 +980,7 @@
         an additional sub-expression.
       </p>
 <a name="boost_regex.syntax.perl_syntax.lookahead"></a><h6>
-<a name="id502225"></a>
+<a name="id502237"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.lookahead">Lookahead</a>
       </h6>
 <p>
@@ -1003,7 +1003,7 @@
         could be used to validate the password.
       </p>
 <a name="boost_regex.syntax.perl_syntax.lookbehind"></a><h6>
-<a name="id502366"></a>
+<a name="id502378"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.lookbehind">Lookbehind</a>
       </h6>
 <p>
@@ -1017,7 +1017,7 @@
         (pattern must be of fixed length).
       </p>
 <a name="boost_regex.syntax.perl_syntax.independent_sub_expressions"></a><h6>
-<a name="id502445"></a>
+<a name="id502457"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.independent_sub_expressions">Independent
         sub-expressions</a>
       </h6>
@@ -1030,7 +1030,7 @@
         no match is found at all.
       </p>
 <a name="boost_regex.syntax.perl_syntax.conditional_expressions"></a><h6>
-<a name="id502509"></a>
+<a name="id502521"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.conditional_expressions">Conditional
         Expressions</a>
       </h6>
@@ -1050,7 +1050,7 @@
         sub-expression has been matched).
       </p>
 <a name="boost_regex.syntax.perl_syntax.operator_precedence"></a><h5>
-<a name="id502677"></a>
+<a name="id502689"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.operator_precedence">Operator
         precedence</a>
       </h5>
@@ -1086,7 +1086,7 @@
         </li>
 </ol></div>
 <a name="boost_regex.syntax.perl_syntax.what_gets_matched"></a><h4>
-<a name="id502856"></a>
+<a name="id502868"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.what_gets_matched">What gets
         matched</a>
       </h4>
@@ -1271,7 +1271,7 @@
 </tbody>
 </table></div>
 <a name="boost_regex.syntax.perl_syntax.variations"></a><h4>
-<a name="id503770"></a>
+<a name="id503782"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.variations">Variations</a>
       </h4>
 <p>
@@ -1280,7 +1280,7 @@
         <code class="computeroutput"><span class="identifier">JavaScript</span></code> and <code class="computeroutput"><span class="identifier">JScript</span></code></a> are all synonyms for <code class="computeroutput"><span class="identifier">perl</span></code>.
       </p>
 <a name="boost_regex.syntax.perl_syntax.options"></a><h4>
-<a name="id503865"></a>
+<a name="id503877"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.options">Options</a>
       </h4>
 <p>
@@ -1293,7 +1293,7 @@
         sensitivity are to be applied.
       </p>
 <a name="boost_regex.syntax.perl_syntax.pattern_modifiers"></a><h4>
-<a name="id503966"></a>
+<a name="id503978"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.pattern_modifiers">Pattern
         Modifiers</a>
       </h4>
@@ -1305,7 +1305,7 @@
         and <code class="computeroutput"><span class="identifier">no_mod_s</span></code></a>.
       </p>
 <a name="boost_regex.syntax.perl_syntax.references"></a><h4>
-<a name="id504093"></a>
+<a name="id504105"></a>
         <a href="perl_syntax.html#boost_regex.syntax.perl_syntax.references">References</a>
       </h4>
 <p>

Modified: branches/fix-links/libs/regex/doc/html/boost_regex/unicode.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/boost_regex/unicode.html (original)
+++ branches/fix-links/libs/regex/doc/html/boost_regex/unicode.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -30,7 +30,7 @@
       There are two ways to use Boost.Regex with Unicode strings:
     </p>
 <a name="boost_regex.unicode.rely_on_wchar_t"></a><h5>
-<a name="id492571"></a>
+<a name="id492594"></a>
       <a href="unicode.html#boost_regex.unicode.rely_on_wchar_t">Rely on wchar_t</a>
     </h5>
 <p>
@@ -56,7 +56,7 @@
       </li>
 </ul></div>
 <a name="boost_regex.unicode.use_a_unicode_aware_regular_expression_type_"></a><h5>
-<a name="id492755"></a>
+<a name="id492778"></a>
       <a href="unicode.html#boost_regex.unicode.use_a_unicode_aware_regular_expression_type_">Use
       a Unicode Aware Regular Expression Type.</a>
     </h5>

Modified: branches/fix-links/libs/regex/doc/html/index.html
==============================================================================
--- branches/fix-links/libs/regex/doc/html/index.html (original)
+++ branches/fix-links/libs/regex/doc/html/index.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,7 +28,7 @@
 </h3></div></div></div>
 <div><p class="copyright">Copyright © 1998 -2007 John Maddock</p></div>
 <div><div class="legalnotice">
-<a name="id435870"></a><p>
+<a name="id435874"></a><p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
         file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       </p>
@@ -192,7 +192,7 @@
 </div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: December 14, 2007 at 10:05:07 GMT</small></p></td>
+<td align="left"><p><small>Last revised: January 14, 2008 at 09:54:07 GMT</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>

Modified: branches/fix-links/libs/regex/doc/match_flag_type.qbk
==============================================================================
--- branches/fix-links/libs/regex/doc/match_flag_type.qbk (original)
+++ branches/fix-links/libs/regex/doc/match_flag_type.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -74,7 +74,7 @@
 [[match_single_line][Equivalent to the inverse of Perl's m/ modifier; prevents ^ from matching after an embedded newline character (so that it only matches at the start of the text being matched), and $ from matching before an embedded newline (so that it only matches at the end of the text being matched).]]
 [[match_prev_avail][Specifies that --first is a valid iterator position, when this flag is set then the flags match_not_bol and match_not_bow are ignored by the regular expression algorithms (RE.7) and iterators (RE.8).]]
 [[match_not_dot_newline][Specifies that the expression "." does not match a newline character. This is the inverse of Perl's s/ modifier.]]
-[[match_not_dot_null][Specified that the expression "." does not match a character null '\\0'.]]
+[[match_not_dot_null][Specifies that the expression "." does not match a character null '\\0'.]]
 [[match_posix][Specifies that the expression should be matched according to the POSIX
    [link boost_regex.syntax.leftmost_longest_rule leftmost-longest rule],
    regardless of what kind of expression was compiled.
@@ -108,7 +108,7 @@
 [[format_perl][Specifies that when a regular expression match is to be replaced by
       a new string, that the new string is constructed using
       [link boost_regex.format.perl_format the same rules as Perl 5].]]
-[[format_literal][Specified that when a regular expression match is to be
+[[format_literal][Specifies that when a regular expression match is to be
       replaced by a new string, that the new string is a literal copy of
       the replacement text.]]
 [[format_all][Specifies that all syntax extensions are enabled, including

Modified: branches/fix-links/libs/regex/test/regress/test_perl_ex.cpp
==============================================================================
--- branches/fix-links/libs/regex/test/regress/test_perl_ex.cpp (original)
+++ branches/fix-links/libs/regex/test/regress/test_perl_ex.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -121,6 +121,17 @@
    TEST_INVALID_REGEX("(?:(a)|b)(?(?:", perl);
    TEST_INVALID_REGEX("(?:(a)|b)(?(?<", perl);
    TEST_INVALID_REGEX("(?:(a)|b)(?(?<a", perl);
+
+ TEST_INVALID_REGEX("(?(?!#?)+)", perl);
+ TEST_INVALID_REGEX("(?(?=:-){0})", perl);
+ TEST_INVALID_REGEX("(?(123){1})", perl);
+ TEST_INVALID_REGEX("(?(?<=A)*)", perl);
+ TEST_INVALID_REGEX("(?(?<=A)+)", perl);
+
+ TEST_INVALID_REGEX("(?<!*|^)", perl);
+ TEST_INVALID_REGEX("(?<!*|A)", perl);
+ TEST_INVALID_REGEX("(?<=?|A)", perl);
+ TEST_INVALID_REGEX("(?<=*|\\B)", perl);
 }
 
 void test_options()

Modified: branches/fix-links/libs/serialization/doc/acknowledgments.html
==============================================================================
--- branches/fix-links/libs/serialization/doc/acknowledgments.html (original)
+++ branches/fix-links/libs/serialization/doc/acknowledgments.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -33,7 +33,7 @@
   <li>Mattias Troyer ehnanced the implementation of native binary archives. This includes
   enhancement and generalization of the library itself including generalization of
   the wrapper concept.
- <li>Markus Schöpflin tracked down issues with TRU64 compiler resulting in 100% passing.
+ <li>Markus Sch&ouml;pflin tracked down issues with TRU64 compiler resulting in 100% passing.
   <li><a href="mailto::troy_at_[hidden]"> Troy D. Straszheim</a> made the initial version of variant serialization.
   <li>Tonko Juricic helped refine and complete project files for VC 7.1 ide
   <li>Rene Rivera tracked down several issues related to

Modified: branches/fix-links/libs/signals/doc/faq.xml
==============================================================================
--- branches/fix-links/libs/signals/doc/faq.xml (original)
+++ branches/fix-links/libs/signals/doc/faq.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -86,23 +86,39 @@
   }
 </programlisting>
 
- <para>The second way, provided by Frank Hess, involves
+ <para>The second way, provided by Frank Hess and improved by
+ Niels Dekker, involves
         creating a header <code>signalslib.hpp</code> that contains
           the following code:</para>
 
- <programlisting>#ifdef signals
-#error "signalslib.hpp must be included before any qt header"
+ <programlisting>#ifndef SIGNALSLIB_HPP_INCLUDED
+#define SIGNALSLIB_HPP_INCLUDED
+
+#if defined(signals) && defined(QOBJECTDEFS_H) && \
+ !defined(QT_MOC_CPP)
+# undef signals
+# define signals signals
 #endif
 
 #include &lt;boost/signal.hpp&gt;
 namespace boost
 {
   namespace signalslib = signals;
-}</programlisting>
+}
+
+#if defined(signals) && defined(QOBJECTDEFS_H) && \
+ !defined(QT_MOC_CPP)
+# undef signals
+// Restore the macro definition of "signals", as it was
+// defined by Qt's &lt;qobjectdefs.h&gt;.
+# define signals protected
+#endif
+
+#endif</programlisting>
 
- <para>This header must be included before any Qt headers. Once
- it has been included, you can refer to the Signals library via
- the namespace <code>boost::signalslib</code>. This option is
+ <para>Use this header to include the Boost library, then refer
+ to it in the namespace <code>boost::signalslib</code>. This
+ option is often
         preferable to the first option because it can be used without
         recompiling the Signals library binary. </para>
       </answer>

Modified: branches/fix-links/libs/statechart/Statechart.sln
==============================================================================
--- branches/fix-links/libs/statechart/Statechart.sln (original)
+++ branches/fix-links/libs/statechart/Statechart.sln 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,307 +1,328 @@
-Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BitMachine", "example\BitMachine\BitMachine.vcproj", "{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Camera", "example\Camera\Camera.vcproj", "{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Handcrafted", "example\Handcrafted\Handcrafted.vcproj", "{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Keyboard", "example\Keyboard\Keyboard.vcproj", "{4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PingPong", "example\PingPong\PingPong.vcproj", "{11CCA9FC-6012-4B64-8C61-808D0F8D1B51}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StopWatch", "example\StopWatch\StopWatch.vcproj", "{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TransitionTest", "test\TransitionTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DeferralTest", "test\DeferralTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidTransitionTest1", "test\InvalidTransitionTest1.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidTransitionTest2", "test\InvalidTransitionTest2.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HistoryTest", "test\HistoryTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidChartTest1", "test\InvalidChartTest1.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidChartTest3", "test\InvalidChartTest3.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidChartTest2", "test\InvalidChartTest2.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest1", "test\InconsistentHistoryTest1.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest2", "test\InconsistentHistoryTest2.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest3", "test\InconsistentHistoryTest3.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest4", "test\InconsistentHistoryTest4.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest5", "test\InconsistentHistoryTest5.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest6", "test\InconsistentHistoryTest6.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest7", "test\InconsistentHistoryTest7.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest8", "test\InconsistentHistoryTest8.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnsuppDeepHistoryTest", "test\UnsuppDeepHistoryTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StateCastTest", "test\StateCastTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TypeInfoTest", "test\TypeInfoTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StateIterationTest", "test\StateIterationTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomReactionTest", "test\CustomReactionTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TerminationTest", "test\TerminationTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FifoSchedulerTest", "test\FifoSchedulerTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidResultAssignTest", "test\InvalidResultAssignTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidResultDefCtorTest", "test\InvalidResultDefCtorTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidResultCopyTest", "test\InvalidResultCopyTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnconsumedResultTest", "test\UnconsumedResultTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InStateReactionTest", "test\InStateReactionTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TuTest", "test\TuTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Performance", "example\Performance\Performance.vcproj", "{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfiguration) = preSolution
- Debug = Debug
- Release = Release
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.ActiveCfg = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.Build.0 = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.ActiveCfg = Release|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.Build.0 = Release|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.ActiveCfg = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.Build.0 = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.ActiveCfg = Release|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.Build.0 = Release|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.ActiveCfg = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.Build.0 = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.ActiveCfg = Release|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.Build.0 = Release|Win32
- {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.Debug.ActiveCfg = Debug|Win32
- {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.Debug.Build.0 = Debug|Win32
- {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.Release.ActiveCfg = Release|Win32
- {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.Release.Build.0 = Release|Win32
- {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.Debug.ActiveCfg = Debug|Win32
- {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.Debug.Build.0 = Debug|Win32
- {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.Release.ActiveCfg = Release|Win32
- {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.Release.Build.0 = Release|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.ActiveCfg = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.Build.0 = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.ActiveCfg = Release|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.ActiveCfg = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug.Build.0 = Debug|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.ActiveCfg = Release|Win32
- {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release.Build.0 = Release|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.ActiveCfg = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug.Build.0 = Debug|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.ActiveCfg = Release|Win32
- {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionItems) = postSolution
- example\Jamfile = example\Jamfile
- test\Jamfile = test\Jamfile
- example\Jamfile.v2 = example\Jamfile.v2
- test\Jamfile.v2 = test\Jamfile.v2
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BitMachine", "example\BitMachine\BitMachine.vcproj", "{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Camera", "example\Camera\Camera.vcproj", "{7FD5B025-1675-4D68-BA85-588AFC99C5B8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Handcrafted", "example\Handcrafted\Handcrafted.vcproj", "{155DB9E1-28AC-4671-8248-5FD03E8FCDAD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Keyboard", "example\Keyboard\Keyboard.vcproj", "{4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PingPong", "example\PingPong\PingPong.vcproj", "{11CCA9FC-6012-4B64-8C61-808D0F8D1B51}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StopWatch", "example\StopWatch\StopWatch.vcproj", "{DFA55264-E7F5-43FE-841F-D56AC48FF2A8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TransitionTest", "test\TransitionTest.vcproj", "{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DeferralTest", "test\DeferralTest.vcproj", "{E599D469-A2BD-42FB-A217-73A420213D06}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidTransitionTest1", "test\InvalidTransitionTest1.vcproj", "{345A4DD5-8B5C-40E4-95D2-4CF5A2621040}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidTransitionTest2", "test\InvalidTransitionTest2.vcproj", "{FCB42B5B-DDE0-4E12-8474-F55DC85606FE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HistoryTest", "test\HistoryTest.vcproj", "{206654FA-7AA0-4E06-BCFA-DC94D4281755}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidChartTest1", "test\InvalidChartTest1.vcproj", "{AA1A7669-702E-4D56-A390-849612EB9CDF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidChartTest3", "test\InvalidChartTest3.vcproj", "{7083917A-4A8D-4BEF-A435-61AAF3BA554C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidChartTest2", "test\InvalidChartTest2.vcproj", "{CCB4DBF2-626B-4DA5-AB02-9504B0A97F9A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest1", "test\InconsistentHistoryTest1.vcproj", "{B2739180-6048-4CA7-A96B-ECE182100321}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest2", "test\InconsistentHistoryTest2.vcproj", "{7C58D72A-C6EA-4E25-92E8-5ADEB5F61662}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest3", "test\InconsistentHistoryTest3.vcproj", "{801027D8-DC4E-48DC-9F98-75BA0B7F2997}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest4", "test\InconsistentHistoryTest4.vcproj", "{A211FFC9-D4B4-4C3A-900E-044A7519F8E4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest5", "test\InconsistentHistoryTest5.vcproj", "{BE34C83E-6D4A-4E49-B9BA-EFF47ECBAA39}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest6", "test\InconsistentHistoryTest6.vcproj", "{7D2AB32E-930A-4758-8FAF-F5E0A19A411C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest7", "test\InconsistentHistoryTest7.vcproj", "{41A33CE9-785E-4EC2-9022-A3B229D4935B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InconsistentHistoryTest8", "test\InconsistentHistoryTest8.vcproj", "{FDBCBAEF-C973-42C2-BD8B-4796C0A1E6A8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnsuppDeepHistoryTest", "test\UnsuppDeepHistoryTest.vcproj", "{7B6A4F61-6210-4FDC-BC23-660DA10EE7DD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StateCastTest", "test\StateCastTest.vcproj", "{1826122F-4DB3-4C69-8BB2-E0B18D809FA9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TypeInfoTest", "test\TypeInfoTest.vcproj", "{6FBB8140-6B00-4BF1-AD6D-9D394DE3610F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StateIterationTest", "test\StateIterationTest.vcproj", "{D52BF95D-392C-4535-B332-CB3CC29C8227}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CustomReactionTest", "test\CustomReactionTest.vcproj", "{2D85E7DE-2347-43EA-843F-691101E6F98F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TerminationTest", "test\TerminationTest.vcproj", "{A9921F2C-D8D3-4A4A-87C8-9A34DDD588B2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FifoSchedulerTest", "test\FifoSchedulerTest.vcproj", "{3A9E80AF-DD29-4CE7-AB7D-1A13C766AC96}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidResultAssignTest", "test\InvalidResultAssignTest.vcproj", "{962F23F9-D433-4825-9945-D5A5C5337B7F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidResultDefCtorTest", "test\InvalidResultDefCtorTest.vcproj", "{8381EC0A-7D7B-4127-93E8-DFE12F023611}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InvalidResultCopyTest", "test\InvalidResultCopyTest.vcproj", "{856A30E8-85E8-4BE4-B208-B5FC395408AF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnconsumedResultTest", "test\UnconsumedResultTest.vcproj", "{93FEA76A-3C04-4A70-B53B-485490CF38A1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "InStateReactionTest", "test\InStateReactionTest.vcproj", "{DAD64722-72C8-4424-9024-185A0D0D897A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TuTest", "test\TuTest.vcproj", "{892D213C-F575-4003-BB0F-5787DA2C407D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Performance", "example\Performance\Performance.vcproj", "{045411F0-A746-4DB3-85B9-C9AEDE6D5CBA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3D7ED412-11AE-4AE7-8258-0FF6CF8BD11C}"
+ ProjectSection(SolutionItems) = preProject
+ example\Jamfile.v2 = example\Jamfile.v2
+ test\Jamfile.v2 = test\Jamfile.v2
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{FF998410-FD7E-4B0E-8754-20003E19F51D}"
+ ProjectSection(SolutionItems) = preProject
+ doc\acknowledgments.html = doc\acknowledgments.html
+ doc\configuration.html = doc\configuration.html
+ doc\contact.html = doc\contact.html
+ doc\definitions.html = doc\definitions.html
+ doc\faq.html = doc\faq.html
+ doc\future_and_history.html = doc\future_and_history.html
+ doc\index.html = doc\index.html
+ doc\performance.html = doc\performance.html
+ doc\rationale.html = doc\rationale.html
+ doc\reference.html = doc\reference.html
+ doc\tutorial.html = doc\tutorial.html
+ doc\uml_mapping.html = doc\uml_mapping.html
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ DebugFail|Win32 = DebugFail|Win32
+ Release|Win32 = Release|Win32
+ ReleaseFail|Win32 = ReleaseFail|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Debug|Win32.Build.0 = Debug|Win32
+ {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release|Win32.ActiveCfg = Release|Win32
+ {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.Release|Win32.Build.0 = Release|Win32
+ {CF66596F-7DEA-4BB6-A728-F7FEF2889855}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {7FD5B025-1675-4D68-BA85-588AFC99C5B8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7FD5B025-1675-4D68-BA85-588AFC99C5B8}.Debug|Win32.Build.0 = Debug|Win32
+ {7FD5B025-1675-4D68-BA85-588AFC99C5B8}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {7FD5B025-1675-4D68-BA85-588AFC99C5B8}.Release|Win32.ActiveCfg = Release|Win32
+ {7FD5B025-1675-4D68-BA85-588AFC99C5B8}.Release|Win32.Build.0 = Release|Win32
+ {7FD5B025-1675-4D68-BA85-588AFC99C5B8}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {155DB9E1-28AC-4671-8248-5FD03E8FCDAD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {155DB9E1-28AC-4671-8248-5FD03E8FCDAD}.Debug|Win32.Build.0 = Debug|Win32
+ {155DB9E1-28AC-4671-8248-5FD03E8FCDAD}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {155DB9E1-28AC-4671-8248-5FD03E8FCDAD}.Release|Win32.ActiveCfg = Release|Win32
+ {155DB9E1-28AC-4671-8248-5FD03E8FCDAD}.Release|Win32.Build.0 = Release|Win32
+ {155DB9E1-28AC-4671-8248-5FD03E8FCDAD}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.Debug|Win32.Build.0 = Debug|Win32
+ {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.Release|Win32.ActiveCfg = Release|Win32
+ {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.Release|Win32.Build.0 = Release|Win32
+ {4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.Debug|Win32.ActiveCfg = Debug|Win32
+ {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.Debug|Win32.Build.0 = Debug|Win32
+ {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.Release|Win32.ActiveCfg = Release|Win32
+ {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.Release|Win32.Build.0 = Release|Win32
+ {11CCA9FC-6012-4B64-8C61-808D0F8D1B51}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {DFA55264-E7F5-43FE-841F-D56AC48FF2A8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DFA55264-E7F5-43FE-841F-D56AC48FF2A8}.Debug|Win32.Build.0 = Debug|Win32
+ {DFA55264-E7F5-43FE-841F-D56AC48FF2A8}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {DFA55264-E7F5-43FE-841F-D56AC48FF2A8}.Release|Win32.ActiveCfg = Release|Win32
+ {DFA55264-E7F5-43FE-841F-D56AC48FF2A8}.Release|Win32.Build.0 = Release|Win32
+ {DFA55264-E7F5-43FE-841F-D56AC48FF2A8}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Debug|Win32.Build.0 = Debug|Win32
+ {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release|Win32.ActiveCfg = Release|Win32
+ {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.Release|Win32.Build.0 = Release|Win32
+ {D9103E3E-640D-4AB7-910C-ACA96709ED0A}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {E599D469-A2BD-42FB-A217-73A420213D06}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E599D469-A2BD-42FB-A217-73A420213D06}.Debug|Win32.Build.0 = Debug|Win32
+ {E599D469-A2BD-42FB-A217-73A420213D06}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {E599D469-A2BD-42FB-A217-73A420213D06}.Release|Win32.ActiveCfg = Release|Win32
+ {E599D469-A2BD-42FB-A217-73A420213D06}.Release|Win32.Build.0 = Release|Win32
+ {E599D469-A2BD-42FB-A217-73A420213D06}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {345A4DD5-8B5C-40E4-95D2-4CF5A2621040}.Debug|Win32.ActiveCfg = Debug|Win32
+ {345A4DD5-8B5C-40E4-95D2-4CF5A2621040}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {345A4DD5-8B5C-40E4-95D2-4CF5A2621040}.DebugFail|Win32.Build.0 = Debug|Win32
+ {345A4DD5-8B5C-40E4-95D2-4CF5A2621040}.Release|Win32.ActiveCfg = Release|Win32
+ {345A4DD5-8B5C-40E4-95D2-4CF5A2621040}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {345A4DD5-8B5C-40E4-95D2-4CF5A2621040}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {FCB42B5B-DDE0-4E12-8474-F55DC85606FE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FCB42B5B-DDE0-4E12-8474-F55DC85606FE}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {FCB42B5B-DDE0-4E12-8474-F55DC85606FE}.DebugFail|Win32.Build.0 = Debug|Win32
+ {FCB42B5B-DDE0-4E12-8474-F55DC85606FE}.Release|Win32.ActiveCfg = Release|Win32
+ {FCB42B5B-DDE0-4E12-8474-F55DC85606FE}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {FCB42B5B-DDE0-4E12-8474-F55DC85606FE}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {206654FA-7AA0-4E06-BCFA-DC94D4281755}.Debug|Win32.ActiveCfg = Debug|Win32
+ {206654FA-7AA0-4E06-BCFA-DC94D4281755}.Debug|Win32.Build.0 = Debug|Win32
+ {206654FA-7AA0-4E06-BCFA-DC94D4281755}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {206654FA-7AA0-4E06-BCFA-DC94D4281755}.Release|Win32.ActiveCfg = Release|Win32
+ {206654FA-7AA0-4E06-BCFA-DC94D4281755}.Release|Win32.Build.0 = Release|Win32
+ {206654FA-7AA0-4E06-BCFA-DC94D4281755}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {AA1A7669-702E-4D56-A390-849612EB9CDF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA1A7669-702E-4D56-A390-849612EB9CDF}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {AA1A7669-702E-4D56-A390-849612EB9CDF}.DebugFail|Win32.Build.0 = Debug|Win32
+ {AA1A7669-702E-4D56-A390-849612EB9CDF}.Release|Win32.ActiveCfg = Release|Win32
+ {AA1A7669-702E-4D56-A390-849612EB9CDF}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {AA1A7669-702E-4D56-A390-849612EB9CDF}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {7083917A-4A8D-4BEF-A435-61AAF3BA554C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7083917A-4A8D-4BEF-A435-61AAF3BA554C}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {7083917A-4A8D-4BEF-A435-61AAF3BA554C}.DebugFail|Win32.Build.0 = Debug|Win32
+ {7083917A-4A8D-4BEF-A435-61AAF3BA554C}.Release|Win32.ActiveCfg = Release|Win32
+ {7083917A-4A8D-4BEF-A435-61AAF3BA554C}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {7083917A-4A8D-4BEF-A435-61AAF3BA554C}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {CCB4DBF2-626B-4DA5-AB02-9504B0A97F9A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CCB4DBF2-626B-4DA5-AB02-9504B0A97F9A}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {CCB4DBF2-626B-4DA5-AB02-9504B0A97F9A}.DebugFail|Win32.Build.0 = Debug|Win32
+ {CCB4DBF2-626B-4DA5-AB02-9504B0A97F9A}.Release|Win32.ActiveCfg = Release|Win32
+ {CCB4DBF2-626B-4DA5-AB02-9504B0A97F9A}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {CCB4DBF2-626B-4DA5-AB02-9504B0A97F9A}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {B2739180-6048-4CA7-A96B-ECE182100321}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B2739180-6048-4CA7-A96B-ECE182100321}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {B2739180-6048-4CA7-A96B-ECE182100321}.DebugFail|Win32.Build.0 = Debug|Win32
+ {B2739180-6048-4CA7-A96B-ECE182100321}.Release|Win32.ActiveCfg = Release|Win32
+ {B2739180-6048-4CA7-A96B-ECE182100321}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {B2739180-6048-4CA7-A96B-ECE182100321}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {7C58D72A-C6EA-4E25-92E8-5ADEB5F61662}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7C58D72A-C6EA-4E25-92E8-5ADEB5F61662}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {7C58D72A-C6EA-4E25-92E8-5ADEB5F61662}.DebugFail|Win32.Build.0 = Debug|Win32
+ {7C58D72A-C6EA-4E25-92E8-5ADEB5F61662}.Release|Win32.ActiveCfg = Release|Win32
+ {7C58D72A-C6EA-4E25-92E8-5ADEB5F61662}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {7C58D72A-C6EA-4E25-92E8-5ADEB5F61662}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {801027D8-DC4E-48DC-9F98-75BA0B7F2997}.Debug|Win32.ActiveCfg = Debug|Win32
+ {801027D8-DC4E-48DC-9F98-75BA0B7F2997}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {801027D8-DC4E-48DC-9F98-75BA0B7F2997}.DebugFail|Win32.Build.0 = Debug|Win32
+ {801027D8-DC4E-48DC-9F98-75BA0B7F2997}.Release|Win32.ActiveCfg = Release|Win32
+ {801027D8-DC4E-48DC-9F98-75BA0B7F2997}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {801027D8-DC4E-48DC-9F98-75BA0B7F2997}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {A211FFC9-D4B4-4C3A-900E-044A7519F8E4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A211FFC9-D4B4-4C3A-900E-044A7519F8E4}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {A211FFC9-D4B4-4C3A-900E-044A7519F8E4}.DebugFail|Win32.Build.0 = Debug|Win32
+ {A211FFC9-D4B4-4C3A-900E-044A7519F8E4}.Release|Win32.ActiveCfg = Release|Win32
+ {A211FFC9-D4B4-4C3A-900E-044A7519F8E4}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {A211FFC9-D4B4-4C3A-900E-044A7519F8E4}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {BE34C83E-6D4A-4E49-B9BA-EFF47ECBAA39}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BE34C83E-6D4A-4E49-B9BA-EFF47ECBAA39}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {BE34C83E-6D4A-4E49-B9BA-EFF47ECBAA39}.DebugFail|Win32.Build.0 = Debug|Win32
+ {BE34C83E-6D4A-4E49-B9BA-EFF47ECBAA39}.Release|Win32.ActiveCfg = Release|Win32
+ {BE34C83E-6D4A-4E49-B9BA-EFF47ECBAA39}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {BE34C83E-6D4A-4E49-B9BA-EFF47ECBAA39}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {7D2AB32E-930A-4758-8FAF-F5E0A19A411C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7D2AB32E-930A-4758-8FAF-F5E0A19A411C}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {7D2AB32E-930A-4758-8FAF-F5E0A19A411C}.DebugFail|Win32.Build.0 = Debug|Win32
+ {7D2AB32E-930A-4758-8FAF-F5E0A19A411C}.Release|Win32.ActiveCfg = Release|Win32
+ {7D2AB32E-930A-4758-8FAF-F5E0A19A411C}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {7D2AB32E-930A-4758-8FAF-F5E0A19A411C}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {41A33CE9-785E-4EC2-9022-A3B229D4935B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {41A33CE9-785E-4EC2-9022-A3B229D4935B}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {41A33CE9-785E-4EC2-9022-A3B229D4935B}.DebugFail|Win32.Build.0 = Debug|Win32
+ {41A33CE9-785E-4EC2-9022-A3B229D4935B}.Release|Win32.ActiveCfg = Release|Win32
+ {41A33CE9-785E-4EC2-9022-A3B229D4935B}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {41A33CE9-785E-4EC2-9022-A3B229D4935B}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {FDBCBAEF-C973-42C2-BD8B-4796C0A1E6A8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FDBCBAEF-C973-42C2-BD8B-4796C0A1E6A8}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {FDBCBAEF-C973-42C2-BD8B-4796C0A1E6A8}.DebugFail|Win32.Build.0 = Debug|Win32
+ {FDBCBAEF-C973-42C2-BD8B-4796C0A1E6A8}.Release|Win32.ActiveCfg = Release|Win32
+ {FDBCBAEF-C973-42C2-BD8B-4796C0A1E6A8}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {FDBCBAEF-C973-42C2-BD8B-4796C0A1E6A8}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {7B6A4F61-6210-4FDC-BC23-660DA10EE7DD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7B6A4F61-6210-4FDC-BC23-660DA10EE7DD}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {7B6A4F61-6210-4FDC-BC23-660DA10EE7DD}.DebugFail|Win32.Build.0 = Debug|Win32
+ {7B6A4F61-6210-4FDC-BC23-660DA10EE7DD}.Release|Win32.ActiveCfg = Release|Win32
+ {7B6A4F61-6210-4FDC-BC23-660DA10EE7DD}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {7B6A4F61-6210-4FDC-BC23-660DA10EE7DD}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {1826122F-4DB3-4C69-8BB2-E0B18D809FA9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1826122F-4DB3-4C69-8BB2-E0B18D809FA9}.Debug|Win32.Build.0 = Debug|Win32
+ {1826122F-4DB3-4C69-8BB2-E0B18D809FA9}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {1826122F-4DB3-4C69-8BB2-E0B18D809FA9}.Release|Win32.ActiveCfg = Release|Win32
+ {1826122F-4DB3-4C69-8BB2-E0B18D809FA9}.Release|Win32.Build.0 = Release|Win32
+ {1826122F-4DB3-4C69-8BB2-E0B18D809FA9}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {6FBB8140-6B00-4BF1-AD6D-9D394DE3610F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6FBB8140-6B00-4BF1-AD6D-9D394DE3610F}.Debug|Win32.Build.0 = Debug|Win32
+ {6FBB8140-6B00-4BF1-AD6D-9D394DE3610F}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {6FBB8140-6B00-4BF1-AD6D-9D394DE3610F}.Release|Win32.ActiveCfg = Release|Win32
+ {6FBB8140-6B00-4BF1-AD6D-9D394DE3610F}.Release|Win32.Build.0 = Release|Win32
+ {6FBB8140-6B00-4BF1-AD6D-9D394DE3610F}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {D52BF95D-392C-4535-B332-CB3CC29C8227}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D52BF95D-392C-4535-B332-CB3CC29C8227}.Debug|Win32.Build.0 = Debug|Win32
+ {D52BF95D-392C-4535-B332-CB3CC29C8227}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {D52BF95D-392C-4535-B332-CB3CC29C8227}.Release|Win32.ActiveCfg = Release|Win32
+ {D52BF95D-392C-4535-B332-CB3CC29C8227}.Release|Win32.Build.0 = Release|Win32
+ {D52BF95D-392C-4535-B332-CB3CC29C8227}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {2D85E7DE-2347-43EA-843F-691101E6F98F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2D85E7DE-2347-43EA-843F-691101E6F98F}.Debug|Win32.Build.0 = Debug|Win32
+ {2D85E7DE-2347-43EA-843F-691101E6F98F}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {2D85E7DE-2347-43EA-843F-691101E6F98F}.Release|Win32.ActiveCfg = Release|Win32
+ {2D85E7DE-2347-43EA-843F-691101E6F98F}.Release|Win32.Build.0 = Release|Win32
+ {2D85E7DE-2347-43EA-843F-691101E6F98F}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {A9921F2C-D8D3-4A4A-87C8-9A34DDD588B2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {A9921F2C-D8D3-4A4A-87C8-9A34DDD588B2}.Debug|Win32.Build.0 = Debug|Win32
+ {A9921F2C-D8D3-4A4A-87C8-9A34DDD588B2}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {A9921F2C-D8D3-4A4A-87C8-9A34DDD588B2}.Release|Win32.ActiveCfg = Release|Win32
+ {A9921F2C-D8D3-4A4A-87C8-9A34DDD588B2}.Release|Win32.Build.0 = Release|Win32
+ {A9921F2C-D8D3-4A4A-87C8-9A34DDD588B2}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {3A9E80AF-DD29-4CE7-AB7D-1A13C766AC96}.Debug|Win32.ActiveCfg = Debug|Win32
+ {3A9E80AF-DD29-4CE7-AB7D-1A13C766AC96}.Debug|Win32.Build.0 = Debug|Win32
+ {3A9E80AF-DD29-4CE7-AB7D-1A13C766AC96}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {3A9E80AF-DD29-4CE7-AB7D-1A13C766AC96}.Release|Win32.ActiveCfg = Release|Win32
+ {3A9E80AF-DD29-4CE7-AB7D-1A13C766AC96}.Release|Win32.Build.0 = Release|Win32
+ {3A9E80AF-DD29-4CE7-AB7D-1A13C766AC96}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {962F23F9-D433-4825-9945-D5A5C5337B7F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {962F23F9-D433-4825-9945-D5A5C5337B7F}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {962F23F9-D433-4825-9945-D5A5C5337B7F}.DebugFail|Win32.Build.0 = Debug|Win32
+ {962F23F9-D433-4825-9945-D5A5C5337B7F}.Release|Win32.ActiveCfg = Release|Win32
+ {962F23F9-D433-4825-9945-D5A5C5337B7F}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {962F23F9-D433-4825-9945-D5A5C5337B7F}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {8381EC0A-7D7B-4127-93E8-DFE12F023611}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8381EC0A-7D7B-4127-93E8-DFE12F023611}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {8381EC0A-7D7B-4127-93E8-DFE12F023611}.DebugFail|Win32.Build.0 = Debug|Win32
+ {8381EC0A-7D7B-4127-93E8-DFE12F023611}.Release|Win32.ActiveCfg = Release|Win32
+ {8381EC0A-7D7B-4127-93E8-DFE12F023611}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {8381EC0A-7D7B-4127-93E8-DFE12F023611}.ReleaseFail|Win32.Build.0 = Release|Win32
+ {856A30E8-85E8-4BE4-B208-B5FC395408AF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {856A30E8-85E8-4BE4-B208-B5FC395408AF}.Debug|Win32.Build.0 = Debug|Win32
+ {856A30E8-85E8-4BE4-B208-B5FC395408AF}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {856A30E8-85E8-4BE4-B208-B5FC395408AF}.Release|Win32.ActiveCfg = Release|Win32
+ {856A30E8-85E8-4BE4-B208-B5FC395408AF}.Release|Win32.Build.0 = Release|Win32
+ {856A30E8-85E8-4BE4-B208-B5FC395408AF}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {93FEA76A-3C04-4A70-B53B-485490CF38A1}.Debug|Win32.ActiveCfg = Debug|Win32
+ {93FEA76A-3C04-4A70-B53B-485490CF38A1}.Debug|Win32.Build.0 = Debug|Win32
+ {93FEA76A-3C04-4A70-B53B-485490CF38A1}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {93FEA76A-3C04-4A70-B53B-485490CF38A1}.Release|Win32.ActiveCfg = Release|Win32
+ {93FEA76A-3C04-4A70-B53B-485490CF38A1}.Release|Win32.Build.0 = Release|Win32
+ {93FEA76A-3C04-4A70-B53B-485490CF38A1}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {DAD64722-72C8-4424-9024-185A0D0D897A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {DAD64722-72C8-4424-9024-185A0D0D897A}.Debug|Win32.Build.0 = Debug|Win32
+ {DAD64722-72C8-4424-9024-185A0D0D897A}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {DAD64722-72C8-4424-9024-185A0D0D897A}.Release|Win32.ActiveCfg = Release|Win32
+ {DAD64722-72C8-4424-9024-185A0D0D897A}.Release|Win32.Build.0 = Release|Win32
+ {DAD64722-72C8-4424-9024-185A0D0D897A}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {892D213C-F575-4003-BB0F-5787DA2C407D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {892D213C-F575-4003-BB0F-5787DA2C407D}.Debug|Win32.Build.0 = Debug|Win32
+ {892D213C-F575-4003-BB0F-5787DA2C407D}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {892D213C-F575-4003-BB0F-5787DA2C407D}.Release|Win32.ActiveCfg = Release|Win32
+ {892D213C-F575-4003-BB0F-5787DA2C407D}.Release|Win32.Build.0 = Release|Win32
+ {892D213C-F575-4003-BB0F-5787DA2C407D}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ {045411F0-A746-4DB3-85B9-C9AEDE6D5CBA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {045411F0-A746-4DB3-85B9-C9AEDE6D5CBA}.Debug|Win32.Build.0 = Debug|Win32
+ {045411F0-A746-4DB3-85B9-C9AEDE6D5CBA}.DebugFail|Win32.ActiveCfg = Debug|Win32
+ {045411F0-A746-4DB3-85B9-C9AEDE6D5CBA}.Release|Win32.ActiveCfg = Release|Win32
+ {045411F0-A746-4DB3-85B9-C9AEDE6D5CBA}.Release|Win32.Build.0 = Release|Win32
+ {045411F0-A746-4DB3-85B9-C9AEDE6D5CBA}.ReleaseFail|Win32.ActiveCfg = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {FF998410-FD7E-4B0E-8754-20003E19F51D} = {3D7ED412-11AE-4AE7-8258-0FF6CF8BD11C}
+ EndGlobalSection
+EndGlobal

Modified: branches/fix-links/libs/statechart/doc/acknowledgments.html
==============================================================================
--- branches/fix-links/libs/statechart/doc/acknowledgments.html (original)
+++ branches/fix-links/libs/statechart/doc/acknowledgments.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -84,23 +84,25 @@
 
   <p>Thanks for feedback and/or encouragement go to:</p>
 
- <p>Bardur Arantsson, Robert Bell, Bohdan, Wayne Chao, Topher Cooper, Peter
- Dimov, Reece Dunn, John Fuller, Jeff Garland, Eugene Gladyshev, David A.
- Greene, Douglas Gregor, Gustavo Guerra, Aleksey Gurtovoy, Iain K. Hanson,
- David B. Held, J&uuml;rgen Hunold, Oliver Kowalke, Simon Meiklejohn, Johan
- Nilsson, Matthieu Paindavoine, Chris Russell, Rob Stewart, Kwee Heong Tan,
- Marcin Tustin, Vincent N. Virgilio, Gang Wang and Scott Woods.</p>
+ <p>Bardur Arantsson, Robert Bell, Bohdan, Wayne Chao, Topher Cooper,
+ Philippe David, Peter Dimov, Reece Dunn, John Fuller, Jeff Garland, Eugene
+ Gladyshev, David A. Greene, Douglas Gregor, Gustavo Guerra, Aleksey
+ Gurtovoy, Federico J. Fern&aacute;ndez, Iain K. Hanson, David B. Held,
+ J&uuml;rgen Hunold, Sean Kelly, Oliver Kowalke, Simon Meiklejohn, Jiang
+ Miao, Johan Nilsson, Matthieu Paindavoine, Chris Paulse, Yuval Ronen, Chris
+ Russell, Rob Stewart, Kwee Heong Tan, Marcin Tustin, Vincent N. Virgilio,
+ Gang Wang, Steven Watanabe and Scott Woods.</p>
   <hr>
 
   <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
   "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional"
   height="31" width="88"></a></p>
 
- <p>Revised
- <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->03 December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38512" --></p>
+ <p>Revised 05 January, 2008</p>
+
+ <p><i>Copyright &copy; 2003-2008 <a href="contact.html">Andreas Huber
+ D&ouml;nni</a></i></p>
 
- <p><i>Copyright &copy; 2003-<!--webbot bot="Timestamp" s-type="EDITED" s-format="%Y" startspan -->2006<!--webbot bot="Timestamp" endspan i-checksum="770" -->
- Andreas Huber Dönni</i></p>
 
   <p><i>Distributed under the Boost Software License, Version 1.0. (See
   accompanying file LICENSE_1_0.txt or

Modified: branches/fix-links/libs/statechart/doc/configuration.html
==============================================================================
--- branches/fix-links/libs/statechart/doc/configuration.html (original)
+++ branches/fix-links/libs/statechart/doc/configuration.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -42,12 +42,6 @@
 
     <dd><a href="#ApplicationDefinedMacros">Application Defined
     Macros</a></dd>
-
- <dt><a href="#CompilerSpecificConfiguration">Compiler-specific
- configuration</a></dt>
-
- <dd><a href="#Intel70">Intel 7.0 (Win32, MS Visual Studio 6 std
- library)</a></dd>
   </dl>
 
   <h1><a id="GeneralConfiguration" name="GeneralConfiguration">General
@@ -158,29 +152,14 @@
   technology such violations may or may not manifest themselves in link-time
   errors.</p>
 
- <h1><a id="CompilerSpecificConfiguration" name=
- "CompilerSpecificConfiguration">Compiler-specific configuration</a></h1>
-
- <h2><a id="Intel70" name="Intel70">Intel 7.0 (Win32, MS Visual Studio 6 std
- library)</a></h2>
-
- <p>By default, this compiler has argument dependent lookup disabled. ADL
- must be enabled to compile the library without errors. To enable ADL,
- <code>/Qoption,c,--arg_dep_lookup</code> must be added to the compiler
- command line. See <a href=
- "../../../boost/config/compiler/intel.hpp">&lt;boost/config/compiler/intel.hpp&gt;</a>
- for more information.</p>
- <hr>
-
   <p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
   "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional"
   height="31" width="88"></a></p>
 
- <p>Revised
- <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->03 December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38512" --></p>
+ <p>Revised 05 January, 2008</p>
 
- <p><i>Copyright &copy; 2003-<!--webbot bot="Timestamp" s-type="EDITED" s-format="%Y" startspan -->2006<!--webbot bot="Timestamp" endspan i-checksum="770" -->
- Andreas Huber Dönni</i></p>
+ <p><i>Copyright &copy; 2003-2008 <a href="contact.html">Andreas Huber
+ D&ouml;nni</a></i></p>
 
   <p><i>Distributed under the Boost Software License, Version 1.0. (See
   accompanying file LICENSE_1_0.txt or

Modified: branches/fix-links/libs/statechart/doc/faq.html
==============================================================================
--- branches/fix-links/libs/statechart/doc/faq.html (original)
+++ branches/fix-links/libs/statechart/doc/faq.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -40,6 +40,9 @@
     state machine and modify its layout in the subclass?</a></dt>
 
     <dt>What about UML2.0 features?</dt>
+
+ <dt><a href="#AssertInStateDestructor">Why do I get an assert when I
+ access the state machine from a state destructor?</a></dt>
 
     <dt><a href="#EmbeddedApplications">Is Boost.Statechart suitable for
     embedded applications?</a></dt>
@@ -313,6 +316,40 @@
     transition destination as a template parameter)</li>
   </ul>
 
+ <h2><a name="AssertInStateDestructor" id="AssertInStateDestructor">Why do I
+ get an assert when I access the state machine from a state destructor?</a>
+ </h2>
+
+ <p>When compiled with <code>NDEBUG</code> undefined, running the following
+ program results in a failed assert:</p>
+ <pre>#include &lt;boost/statechart/state_machine.hpp&gt;
+#include &lt;boost/statechart/simple_state.hpp&gt;
+#include &lt;iostream&gt;
+
+struct Initial;
+struct Machine : boost::statechart::state_machine&lt; Machine, Initial &gt;
+{
+ Machine() { someMember_ = 42; }
+ int someMember_;
+};
+
+struct Initial : boost::statechart::simple_state&lt; Initial, Machine &gt;
+{
+ ~Initial() { std::cout &lt;&lt; outermost_context().someMember_; }
+};
+
+int main()
+{
+ Machine().initiate();
+ return 0;
+}</pre>
+ <p>The problem arises because <code>state_machine<>::~state_machine</code>
+ inevitably destructs all remaining active states. At this time,
+ <code>Machine::~Machine</code> has already been run, making it illegal to
+ access any of the <code>Machine</code> members. This problem can be avoided
+ by defining the following destructor:</p>
+ <pre>~Machine() { terminate(); }</pre>
+
   <h2><a name="EmbeddedApplications" id="EmbeddedApplications">Is
   Boost.Statechart suitable for embedded applications?</a></h2>
 
@@ -516,14 +553,13 @@
   and <a href=
   "reference.html#clear_deep_history">simple_state::clear_deep_history()</a>.
   Calling these functions is often preferable to introducting additional
- normal transitions when ...
+ normal transitions when ...</p>
   <ul>
     <li>a state with history is the target of many transitions,
     <b>and/or</b></li>
     <li>the decision to ignore history is made in a different place than
     the transition to a state with history</li>
   </ul>
- </p>
 
   <h2><a name="Dll" id="Dll">How can I compile a state machine into a dynamic
   link library (DLL)?</a></h2>
@@ -732,11 +768,10 @@
   "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional"
   height="31" width="88"></a></p>
 
- <p>Revised
- <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->15 November, 2007<!--webbot bot="Timestamp" endspan i-checksum="38512" --></p>
+ <p>Revised 05 January, 2008</p>
 
- <p><i>Copyright &copy; 2003-<!--webbot bot="Timestamp" s-type="EDITED" s-format="%Y" startspan -->2007<!--webbot bot="Timestamp" endspan i-checksum="770" -->
- Andreas Huber Dönni</i></p>
+ <p><i>Copyright &copy; 2003-2008 <a href="contact.html">Andreas Huber
+ D&ouml;nni</a></i></p>
 
   <p><i>Distributed under the Boost Software License, Version 1.0. (See
   accompanying file LICENSE_1_0.txt or

Modified: branches/fix-links/libs/statechart/doc/future_and_history.html
==============================================================================
--- branches/fix-links/libs/statechart/doc/future_and_history.html (original)
+++ branches/fix-links/libs/statechart/doc/future_and_history.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -46,7 +46,8 @@
 
   <ol>
     <li>Implement a choice-point-like class, as discussed in
- this thread</li>
+ <a href="http://thread.gmane.org/gmane.comp.lib.boost.devel/164460">this
+ thread</a></li>
 
     <li>Optimize state-entry and state-exit for speed and code-size</li>
 
@@ -139,16 +140,29 @@
 
   <p>(<font color="#FF0000">red</font> = points raised during formal
   review)</p>
+ <p>Unreleased (committed to the SVN trunk)</p>
+ <ul>
+ <li>Removed all permanent warning suppressions from library headers
+ and avoided the resulting warnings with other means (suggested by
+ Steven Watanabe; thanks to Peter Dimov and Yuval Ronen for insight
+ into when C4511 & C4512 are issued)</li>
+ <li>Added the FAQ item <a href="faq.html#AssertInStateDestructor">Why
+ do I get an assert when I access the state machine from a state
+ destructor?</a> (due to feedback from Jiang Miao)</li>
+ <li>Added defaults for the last two template parameters of <a href=
+ "reference.html#ClassTemplatein_state_reaction">in_state_reaction<></a>
+ (due to feedback from Sean Kelly)</li>
+ </ul>
 
   <p>1.35.0</p>
-
   <ul>
- <li>Added placement new overload to <code>event&lt;&gt;</code></li>
- <li>Made <code>event&lt;&gt;</code> copy-assignable</li>
+ <li>Added placement new overload to <code>event&lt;&gt;</code> (due to
+ feedback from Federico J. Fern&aacute;ndez)</li>
+ <li>Made <code>event&lt;&gt;</code> copy-assignable (Federico J.
+ Fern&aacute;ndez)</li>
   </ul>
 
   <p>1.34.0</p>
-
   <ul>
     <li>Fixed a bug that prevented compilation of exception_translator.hpp
     (reported by Oliver Kowalke) and adapted TransitionTest.cpp to also test
@@ -670,11 +684,10 @@
   "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional"
   height="31" width="88"></a></p>
 
- <p>Revised
- <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->09 April, 2007<!--webbot bot="Timestamp" endspan i-checksum="30014" --></p>
+ <p>Revised 05 January, 2008</p>
 
- <p><i>Copyright &copy; 2003-<!--webbot bot="Timestamp" s-type="EDITED" s-format="%Y" startspan -->2007<!--webbot bot="Timestamp" endspan i-checksum="778" -->
- Andreas Huber Dönni</i></p>
+ <p><i>Copyright &copy; 2003-2008 <a href="contact.html">Andreas Huber
+ D&ouml;nni</a></i></p>
 
   <p><i>Distributed under the Boost Software License, Version 1.0. (See
   accompanying file LICENSE_1_0.txt or

Modified: branches/fix-links/libs/statechart/doc/reference.html
==============================================================================
--- branches/fix-links/libs/statechart/doc/reference.html (original)
+++ branches/fix-links/libs/statechart/doc/reference.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,11 +4,17 @@
 <head>
   <meta http-equiv="Content-Language" content="en-us">
   <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
- <meta name="GENERATOR" content="Microsoft FrontPage 6.0">
+ <meta name="GENERATOR" content="Microsoft FrontPage 12.0">
   <meta name="ProgId" content="FrontPage.Editor.Document">
   <link rel="stylesheet" type="text/css" href="../../../boost.css">
 
   <title>The Boost Statechart Library - Reference</title>
+ <style type="text/css">
+ .style1
+ {
+ width: 45%;
+ }
+ </style>
 </head>
 
 <body link="#0000FF" vlink="#800080">
@@ -184,27 +190,27 @@
 
   <table border="3" cellpadding="2" width="100%" summary="Scheduler concept">
     <tr>
- <td width="24%"><b>Expression</b></td>
+ <td><b>Expression</b></td>
 
- <td width="25%"><b>Type</b></td>
+ <td><b>Type</b></td>
 
- <td width="48%"><b>Result</b></td>
+ <td><b>Result</b></td>
     </tr>
 
     <tr>
- <td width="24%"><code>cpc.my_scheduler()</code></td>
+ <td><code>cpc.my_scheduler()</code></td>
 
- <td width="25%"><code>S &amp;</code></td>
+ <td><code>S &amp;</code></td>
 
- <td width="48%">A reference to the scheduler</td>
+ <td>A reference to the scheduler</td>
     </tr>
 
     <tr>
- <td width="24%"><code>cpc.my_handle()</code></td>
+ <td><code>cpc.my_handle()</code></td>
 
- <td width="25%"><code>S::processor_handle</code></td>
+ <td><code>S::processor_handle</code></td>
 
- <td width="48%">The handle identifying the
+ <td>The handle identifying the
       <code>event_processor&lt;&gt;</code> subtype object</td>
     </tr>
   </table>
@@ -235,57 +241,56 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "FifoWorker concept">
     <tr>
- <td width="36%"><b>Expression/Statement</b></td>
+ <td><b>Expression/Statement</b></td>
 
- <td width="10%"><b>Type</b></td>
+ <td><b>Type</b></td>
 
- <td width="52%"><b>Effects/Result</b></td>
+ <td><b>Effects/Result</b></td>
     </tr>
 
     <tr>
- <td width="36%"><code>F::work_item</code></td>
+ <td><code>F::work_item</code></td>
 
- <td width="10%"><code>boost::function0&lt;<br>
- &nbsp; void &gt;</code></td>
+ <td><code>boost::function0&lt; void &gt;</code></td>
 
- <td width="52%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="36%"><code>F()</code> or <code>F( false )</code></td>
+ <td><code>F()</code> or <code>F( false )</code></td>
 
- <td width="10%"><code>F</code></td>
+ <td><code>F</code></td>
 
- <td width="52%">Constructs a <b>non-blocking</b> (see below) object of
+ <td>Constructs a <b>non-blocking</b> (see below) object of
       the FifoWorker type. In single-threaded builds the second expression is
       not well-formed</td>
     </tr>
 
     <tr>
- <td width="36%"><code>F( true )</code></td>
+ <td><code>F( true )</code></td>
 
- <td width="10%"><code>F</code></td>
+ <td><code>F</code></td>
 
- <td width="52%">Constructs a <b>blocking</b> (see below) object of the
+ <td>Constructs a <b>blocking</b> (see below) object of the
       FifoWorker type. Not well-formed in single-threaded builds</td>
     </tr>
 
     <tr>
- <td width="36%"><code>f.queue_work_item( w );</code></td>
+ <td><code>f.queue_work_item( w );</code></td>
 
- <td width="10%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="52%">Constructs and queues an object of type
+ <td>Constructs and queues an object of type
       <code>F::work_item</code>, passing <code>w</code> as the only
       argument</td>
     </tr>
 
     <tr>
- <td width="36%"><code>f.terminate();</code></td>
+ <td><code>f.terminate();</code></td>
 
- <td width="10%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="52%">Creates and queues an object of type
+ <td>Creates and queues an object of type
       <code>F::work_item</code> that, when later executed in
       <code>operator()()</code>, leads to a modification of internal state so
       that <code>terminated()</code> henceforth returns
@@ -293,11 +298,11 @@
     </tr>
 
     <tr>
- <td width="36%"><code>cf.terminated();</code></td>
+ <td><code>cf.terminated();</code></td>
 
- <td width="10%"><code>bool</code></td>
+ <td><code>bool</code></td>
 
- <td width="52%"><code>true</code> if <code>terminate()</code> has been
+ <td><code>true</code> if <code>terminate()</code> has been
       called and the resulting work item has been executed in
       <code>operator()()</code>. Returns <code>false</code> otherwise<br>
       <br>
@@ -306,11 +311,11 @@
     </tr>
 
     <tr>
- <td width="36%"><code>f( n );</code></td>
+ <td><code>f( n );</code></td>
 
- <td width="10%"><code>unsigned long</code></td>
+ <td><code>unsigned long</code></td>
 
- <td width="52%">
+ <td>
         Enters a loop that, with each cycle, dequeues and calls
         <code>operator()()</code> on the oldest work item in the queue.
 
@@ -341,11 +346,11 @@
     </tr>
 
     <tr>
- <td width="36%"><code>f();</code></td>
+ <td><code>f();</code></td>
 
- <td width="10%"><code>unsigned long</code></td>
+ <td><code>unsigned long</code></td>
 
- <td width="52%">Has exactly the same semantics as <code>f( n );</code>
+ <td>Has exactly the same semantics as <code>f( n );</code>
       with <code>n == 0</code> (see above)</td>
     </tr>
   </table>
@@ -367,19 +372,19 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "ExceptionTranslator concept">
     <tr>
- <td width="299"><b>Expression</b></td>
+ <td><b>Expression</b></td>
 
- <td width="101"><b>Type</b></td>
+ <td><b>Type</b></td>
 
- <td width="1129"><b>Effects/Result</b></td>
+ <td><b>Effects/Result</b></td>
     </tr>
 
     <tr>
- <td width="299"><code>et( a, eh );</code></td>
+ <td><code>et(&nbsp;a,&nbsp;eh&nbsp;);</code></td>
 
- <td width="101"><code>result</code></td>
+ <td><code>result</code></td>
 
- <td width="1129">
+ <td>
         <ol>
           <li>Attempts to execute <code>return a();</code></li>
 
@@ -408,29 +413,29 @@
 
   <table border="3" cellpadding="2" width="100%" summary="StateBase concept">
     <tr>
- <td width="26%"><b>Expression</b></td>
+ <td><b>Expression</b></td>
 
- <td width="12%"><b>Type</b></td>
+ <td><b>Type</b></td>
 
- <td width="60%"><b>Result</b></td>
+ <td><b>Result</b></td>
     </tr>
 
     <tr>
- <td width="26%"><code>cs.outer_state_ptr()</code></td>
+ <td><code>cs.outer_state_ptr()</code></td>
 
- <td width="12%"><code>const S *</code></td>
+ <td><code>const S *</code></td>
 
- <td width="60%"><code>0</code> if <code>cs</code> is an <a href=
+ <td><code>0</code> if <code>cs</code> is an <a href=
       "definitions.html#OutermostState">outermost state</a>, a pointer to the
       direct outer state of <code>cs</code> otherwise</td>
     </tr>
 
     <tr>
- <td width="25%"><code>cs.dynamic_type()</code></td>
+ <td><code>cs.dynamic_type()</code></td>
 
- <td width="12%"><code>S::id_type</code></td>
+ <td><code>S::id_type</code></td>
 
- <td width="60%">A value unambiguously identifying the most-derived type
+ <td>A value unambiguously identifying the most-derived type
       of <code>cs</code>. <code>S::id_type</code> values are comparable with
       <code>operator==()</code> and <code>operator!=()</code>. An unspecified
       collating order can be established with <code>std::less&lt; S::id_type
@@ -440,12 +445,12 @@
     </tr>
 
     <tr>
- <td width="25%"><code>cs.custom_dynamic_type_ptr&lt;<br>
+ <td><code>cs.custom_dynamic_type_ptr&lt;<br>
       &nbsp; Type &gt;()</code></td>
 
- <td width="12%"><code>const Type *</code></td>
+ <td><code>const Type *</code></td>
 
- <td width="60%">A pointer to the custom type identifier or
+ <td>A pointer to the custom type identifier or
       <code>0</code>. If <code>!= 0</code>, <code>Type</code> must match the
       type of the previously set pointer. This function is only available if
       <a href=
@@ -466,22 +471,22 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "SimpleState concept">
     <tr>
- <td width="28%"><b>Expression/Statement</b></td>
+ <td><b>Expression/Statement</b></td>
 
- <td width="29%"><b>Type</b></td>
+ <td><b>Type</b></td>
 
- <td width="42%"><b>Effects/Result/Notes</b></td>
+ <td><b>Effects/Result/Notes</b></td>
     </tr>
 
     <tr>
- <td width="28%"><code><a href=
+ <td><code><a href=
       "#ClassTemplatesimple_state">simple_state</a>&lt;<br>
- &nbsp; S, C, I, h &gt; * pB =<br>
- &nbsp;&nbsp;&nbsp; pS;</code></td>
+ &nbsp;&nbsp;S,&nbsp;C,&nbsp;I,&nbsp;h&nbsp;&gt;&nbsp;*&nbsp;pB&nbsp;=<br>
+ &nbsp;&nbsp;&nbsp;&nbsp;pS;</code></td>
 
- <td width="29%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="42%"><code>simple_state&lt; S, C, I, h &gt;</code> must be
+ <td><code>simple_state&lt; S, C, I, h &gt;</code> must be
       an unambiguous public base of <code>S</code>. See <code><a href=
       "#ClassTemplatesimple_state">simple_state&lt;&gt;</a></code>
       documentation for the requirements and semantics of <code>C</code>,
@@ -489,22 +494,22 @@
     </tr>
 
     <tr>
- <td width="28%"><code>new S()</code></td>
+ <td><code>new S()</code></td>
 
- <td width="29%"><code>S *</code></td>
+ <td><code>S *</code></td>
 
- <td width="42%">Enters the state <code>S</code>. Certain functions must
+ <td>Enters the state <code>S</code>. Certain functions must
       not be called from <code>S::S()</code>, see <a href=
       "#ClassTemplatesimple_state"><code>simple_state&lt;&gt;</code></a>
       documentation for more information</td>
     </tr>
 
     <tr>
- <td width="28%"><code>pS-&gt;exit();</code></td>
+ <td><code>pS-&gt;exit();</code></td>
 
- <td width="29%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="42%">Exits the state <code>S</code> (first stage). The
+ <td>Exits the state <code>S</code> (first stage). The
       definition of an <code>exit</code> member function within models of the
       SimpleState concept is optional since <code>simple_state&lt;&gt;</code>
       already defines the following public member: <code>void exit()
@@ -515,17 +520,17 @@
     </tr>
 
     <tr>
- <td width="28%"><code>delete pS;</code></td>
+ <td><code>delete pS;</code></td>
 
- <td width="29%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="42%">Exits the state <code>S</code> (second stage)</td>
+ <td>Exits the state <code>S</code> (second stage)</td>
     </tr>
 
     <tr>
- <td width="28%"><code>S::reactions</code></td>
+ <td><code>S::reactions</code></td>
 
- <td width="29%">An <code>mpl::list&lt;&gt;</code> that is either empty
+ <td>An <code>mpl::list&lt;&gt;</code> that is either empty
       or contains instantiations of the <code><a href=
       "#ClassTemplatecustom_reaction">custom_reaction</a></code>,
       <code><a href=
@@ -537,7 +542,7 @@
       <code>typedef</code>ed directly, without wrapping it into an
       <code>mpl::list&lt;&gt;</code></td>
 
- <td width="42%">The declaration of a <code>reactions</code> member
+ <td>The declaration of a <code>reactions</code> member
       <code>typedef</code> within models of the SimpleState concept is
       optional since <code>simple_state&lt;&gt;</code> already defines the
       following public member: <code>typedef mpl::list&lt;&gt;
@@ -558,21 +563,20 @@
 
   <table border="3" cellpadding="2" width="100%" summary="State concept">
     <tr>
- <td width="28%"><b>Expression/Statement</b></td>
+ <td><b>Expression/Statement</b></td>
 
- <td width="29%"><b>Type</b></td>
+ <td><b>Type</b></td>
 
- <td width="42%"><b>Effects/Result/Notes</b></td>
+ <td><b>Effects/Result/Notes</b></td>
     </tr>
 
     <tr>
- <td width="28%"><code>state&lt; S, C,
- I, h &gt; *<br>
- &nbsp; pB = pS;</code></td>
+ <td><code>state&lt;&nbsp;S,&nbsp;C,&nbsp;I,&nbsp;h&nbsp;&gt;&nbsp;*<br>
+ &nbsp;&nbsp;pB = pS;</code></td>
 
- <td width="29%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="42%"><code>state&lt; S, C, I, h &gt;</code> must be an
+ <td><code>state&lt; S, C, I, h &gt;</code> must be an
       unambiguous public base of <code>S</code>. See <code><a href=
       "#ClassTemplatestate">state&lt;&gt;</a></code> documentation for the
       requirements and semantics of <code>C</code>, <code>I</code> and
@@ -580,11 +584,11 @@
     </tr>
 
     <tr>
- <td width="28%"><code>new S( mc )</code></td>
+ <td><code>new S( mc )</code></td>
 
- <td width="29%"><code>S *</code></td>
+ <td><code>S *</code></td>
 
- <td width="42%">Enters the state <code>S</code>. No restrictions exist
+ <td>Enters the state <code>S</code>. No restrictions exist
       regarding the functions that can be called from <code>S::S()</code> (in
       contrast to the constructors of models of the SimpleState concept).
       <code>mc</code> must be forwarded to <code>state&lt; S, C, I, h
@@ -604,29 +608,29 @@
 
   <table border="3" cellpadding="2" width="100%" summary="Event concept">
     <tr>
- <td width="28%"><b>Expression/Statement</b></td>
+ <td><b>Expression/Statement</b></td>
 
- <td width="29%"><b>Type</b></td>
+ <td><b>Type</b></td>
 
- <td width="42%"><b>Effects/Result/Notes</b></td>
+ <td><b>Effects/Result/Notes</b></td>
     </tr>
 
     <tr>
- <td width="28%"><code>const event&lt;
+ <td><code>const event&lt;
       E &gt; * pCB = pCE;</code></td>
 
- <td width="29%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="42%"><code>event&lt; E &gt;</code> must be an unambiguous
+ <td><code>event&lt; E &gt;</code> must be an unambiguous
       public base of <code>E</code></td>
     </tr>
 
     <tr>
- <td width="28%"><code>new E( *pCE )</code></td>
+ <td><code>new E( *pCE )</code></td>
 
- <td width="29%"><code>E *</code></td>
+ <td><code>E *</code></td>
 
- <td width="42%">Makes a copy of <code>pE</code></td>
+ <td>Makes a copy of <code>pE</code></td>
     </tr>
   </table>
 
@@ -644,29 +648,29 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "state_machine parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="51%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="18%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
 
- <td width="19%"><b>Default</b></td>
+ <td><b>Default</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>MostDerived</code></td>
+ <td><code>MostDerived</code></td>
 
- <td width="51%">The most-derived subtype of this class template</td>
+ <td>The most-derived subtype of this class template</td>
 
- <td width="18%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="19%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>InitialState</code></td>
+ <td><code>InitialState</code></td>
 
- <td width="51%">A model of the SimpleState
+ <td>A model of the SimpleState
       or State concepts. The <code>Context</code>
       argument passed to the <code><a href=
       "#ClassTemplatesimple_state">simple_state&lt;&gt;</a></code> or
@@ -676,34 +680,34 @@
       "definitions.html#OutermostState">outermost state</a> of this state
       machine</td>
 
- <td width="18%">The state that is entered when
+ <td>The state that is entered when
       <code>state_machine&lt;&gt;<br>
       ::initiate()</code> is called</td>
 
- <td width="19%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>Allocator</code></td>
+ <td><code>Allocator</code></td>
 
- <td width="51%">A model of the standard Allocator concept</td>
+ <td>A model of the standard Allocator concept</td>
 
- <td width="18%"><code>Allocator::rebind&lt;&gt;::other</code> is used
+ <td><code>Allocator::rebind&lt;&gt;::other</code> is used
       to allocate and deallocate all <code>simple_state</code> subtype
       objects and internal objects of dynamic storage duration</td>
 
- <td width="19%"><code>std::allocator&lt; void &gt;</code></td>
+ <td><code>std::allocator&lt; void &gt;</code></td>
     </tr>
 
     <tr>
- <td width="15%"><code>ExceptionTranslator</code></td>
+ <td><code>ExceptionTranslator</code></td>
 
- <td width="51%">A model of the ExceptionTranslator concept</td>
+ <td>A model of the ExceptionTranslator concept</td>
 
- <td width="18%">see <a href=
+ <td>see <a href=
       "#ExceptionTranslator">ExceptionTranslator</a> concept</td>
 
- <td width="19%"><code>null_exception_translator</code></td>
+ <td><code>null_exception_translator</code></td>
     </tr>
   </table>
 
@@ -1214,29 +1218,29 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "asynchronous_state_machine parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="51%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="18%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
 
- <td width="19%"><b>Default</b></td>
+ <td><b>Default</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>MostDerived</code></td>
+ <td><code>MostDerived</code></td>
 
- <td width="51%">The most-derived subtype of this class template</td>
+ <td>The most-derived subtype of this class template</td>
 
- <td width="18%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="19%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>InitialState</code></td>
+ <td><code>InitialState</code></td>
 
- <td width="51%">A model of the SimpleState
+ <td>A model of the SimpleState
       or State concepts. The <code>Context</code>
       argument passed to the <code><a href=
       "#ClassTemplatesimple_state">simple_state&lt;&gt;</a></code> or
@@ -1246,41 +1250,41 @@
       "definitions.html#OutermostState">outermost state</a> of this state
       machine</td>
 
- <td width="18%">The state that is entered when the state machine is
+ <td>The state that is entered when the state machine is
       initiated through the <code>Scheduler</code> object</td>
 
- <td width="19%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>Scheduler</code></td>
+ <td><code>Scheduler</code></td>
 
- <td width="51%">A model of the Scheduler concept</td>
+ <td>A model of the Scheduler concept</td>
 
- <td width="18%">see Scheduler concept</td>
+ <td>see Scheduler concept</td>
 
- <td width="19%"><code>fifo_scheduler&lt;&gt;</code></td>
+ <td><code>fifo_scheduler&lt;&gt;</code></td>
     </tr>
 
     <tr>
- <td width="15%"><code>Allocator</code></td>
+ <td><code>Allocator</code></td>
 
- <td width="51%">A model of the standard Allocator concept</td>
+ <td>A model of the standard Allocator concept</td>
 
- <td width="18%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="19%"><code>std::allocator&lt; void &gt;</code></td>
+ <td><code>std::allocator&lt; void &gt;</code></td>
     </tr>
 
     <tr>
- <td width="15%"><code>ExceptionTranslator</code></td>
+ <td><code>ExceptionTranslator</code></td>
 
- <td width="51%">A model of the ExceptionTranslator concept</td>
+ <td>A model of the ExceptionTranslator concept</td>
 
- <td width="18%">see <a href=
+ <td>see <a href=
       "#ExceptionTranslator">ExceptionTranslator</a> concept</td>
 
- <td width="19%"><code>null_exception_translator</code></td>
+ <td><code>null_exception_translator</code></td>
     </tr>
   </table>
 
@@ -1350,23 +1354,19 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "event_processor parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="51%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="18%"><b>Semantics</b></td>
-
- <td width="19%"><b>Default</b></td>
+ <td><b>Semantics</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>Scheduler</code></td>
-
- <td width="51%">A model of the Scheduler concept</td>
+ <td><code>Scheduler</code></td>
 
- <td width="18%">see Scheduler concept</td>
+ <td>A model of the Scheduler concept</td>
 
- <td width="19%">&nbsp;</td>
+ <td>see Scheduler concept</td>
     </tr>
   </table>
 
@@ -1487,33 +1487,33 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "fifo_scheduler parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="28%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="26%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
 
- <td width="29%"><b>Default</b></td>
+ <td><b>Default</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>FifoWorker</code></td>
+ <td><code>FifoWorker</code></td>
 
- <td width="28%">A model of the FifoWorker concept</td>
+ <td>A model of the FifoWorker concept</td>
 
- <td width="26%">see FifoWorker concept</td>
+ <td>see FifoWorker concept</td>
 
- <td width="29%"><code>fifo_worker&lt;&gt;</code></td>
+ <td><code>fifo_worker&lt;&gt;</code></td>
     </tr>
 
     <tr>
- <td width="15%"><code>Allocator</code></td>
+ <td><code>Allocator</code></td>
 
- <td width="28%">A model of the standard Allocator concept</td>
+ <td>A model of the standard Allocator concept</td>
 
- <td width="26%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="29%"><code>std::allocator&lt; void &gt;</code></td>
+ <td><code>std::allocator&lt;&nbsp;void&nbsp;&gt;</code></td>
     </tr>
   </table>
 
@@ -1787,24 +1787,24 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "exception_translator parameters">
     <tr>
- <td width="12%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="30%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="35%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
 
- <td width="24%"><b>Default</b></td>
+ <td><b>Default</b></td>
     </tr>
 
     <tr>
- <td width="12%"><code>ExceptionEvent</code></td>
+ <td><code>ExceptionEvent</code></td>
 
- <td width="30%">A model of the Event concept</td>
+ <td>A model of the Event concept</td>
 
- <td width="35%">The type of event that is dispatched when an exception
+ <td>The type of event that is dispatched when an exception
       is propagated into the framework</td>
 
- <td width="24%"><code>exception_thrown</code></td>
+ <td><code>exception_thrown</code></td>
     </tr>
   </table>
 
@@ -1945,29 +1945,29 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "simple_state parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="51%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="18%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
 
- <td width="19%"><b>Default</b></td>
+ <td><b>Default</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>MostDerived</code></td>
+ <td><code>MostDerived</code></td>
 
- <td width="51%">The most-derived subtype of this class template</td>
+ <td>The most-derived subtype of this class template</td>
 
- <td width="18%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="19%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>Context</code></td>
+ <td><code>Context</code></td>
 
- <td width="51%">A most-derived direct or indirect subtype of the
+ <td>A most-derived direct or indirect subtype of the
       <code>state_machine</code> or
       <code><a href=
       "#ClassTemplateasynchronous_state_machine">asynchronous_state_machine</a></code>
@@ -1977,16 +1977,16 @@
       "#ClassTemplatesimple_state">simple_state&lt;&gt;::orthogonal</a></code>
       class template. Must be a complete type</td>
 
- <td width="18%">Defines the states' position in the state
+ <td>Defines the states' position in the state
       hierarchy</td>
 
- <td width="19%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>InnerInitial</code></td>
+ <td><code>InnerInitial</code></td>
 
- <td width="51%">An <code>mpl::list&lt;&gt;</code> containing models of
+ <td>An <code>mpl::list&lt;&gt;</code> containing models of
       the SimpleState or <a href=
       "#State">State</a> concepts or instantiations of the <code><a href=
       "#ClassTemplateshallow_history">shallow_history</a></code> or
@@ -2004,22 +2004,22 @@
       <code>MostDerived::orthogonal&lt; 0 &gt;</code> and
       <code>MostDerived</code> are synonymous</td>
 
- <td width="18%">Defines the inner initial state for each orthogonal
+ <td>Defines the inner initial state for each orthogonal
       region. By default, a state does not have inner states</td>
 
- <td width="19%"><i><code>unspecified</code></i></td>
+ <td><i><code>unspecified</code></i></td>
     </tr>
 
     <tr>
- <td width="15%"><code>historyMode</code></td>
+ <td><code>historyMode</code></td>
 
- <td width="51%">One of the values defined in the <code><a href=
+ <td>One of the values defined in the <code><a href=
       "#Enumhistory_mode">history_mode</a></code> enumeration</td>
 
- <td width="18%">Defines whether the state saves shallow, deep or both
+ <td>Defines whether the state saves shallow, deep or both
       histories upon exit</td>
 
- <td width="19%"><code>has_no_history</code></td>
+ <td><code>has_no_history</code></td>
     </tr>
   </table>
 
@@ -2524,9 +2524,11 @@
 
   <p><b>Requires</b>: If called from a constructor of a direct or indirect
   subtype then the most-derived type must directly or indirectly derive from
- the <code>state</code> class template<b><br>
- Returns</b>: A reference to the outermost context, which is always the
- state machine this state belongs to</p>
+ the <code>state</code> class template. If called from a destructor of a
+ direct or indirect subtype then the <code>state_machine<></code> subclass
+ portion must still exist<br>
+ <b>Returns</b>: A reference to the outermost context, which is always the
+ state machine this state belongs to<br></p>
   <pre>
 const outermost_context_type &amp; <a name="outermost_contextconst" id=
 "outermost_contextconst">outermost_context() const</a>;
@@ -2534,8 +2536,10 @@
 
   <p><b>Requires</b>: If called from a constructor of a direct or indirect
   subtype then the most-derived type must directly or indirectly derive from
- the <code>state</code> class template<b><br>
- Returns</b>: A reference to the const outermost context, which is always
+ the <code>state</code> class template. If called from a destructor of a
+ direct or indirect subtype then the <code>state_machine<></code> subclass
+ portion must still exist<br>
+ <b>Returns</b>: A reference to the const outermost context, which is always
   the state machine this state belongs to</p>
   <pre>
 template&lt; class OtherContext &gt;
@@ -2544,8 +2548,11 @@
 
   <p><b>Requires</b>: If called from a constructor of a direct or indirect
   subtype then the most-derived type must directly or indirectly derive from
- the <code>state</code> class template<b><br>
- Returns</b>: A reference to a direct or indirect context</p>
+ the <code>state</code> class template. If called from a destructor of a
+ direct or indirect subtype with a <code>state_machine<></code> subtype as
+ argument then the <code>state_machine<></code> subclass portion must still
+ exist<br>
+ <b>Returns</b>: A reference to a direct or indirect context</p>
   <pre>
 template&lt; class OtherContext &gt;
 const OtherContext &amp; <a name="contextconst" id=
@@ -2554,8 +2561,11 @@
 
   <p><b>Requires</b>: If called from a constructor of a direct or indirect
   subtype then the most-derived type must directly or indirectly derive from
- the <code>state</code> class template<b><br>
- Returns</b>: A reference to a const direct or indirect context</p>
+ the <code>state</code> class template. If called from a destructor of a
+ direct or indirect subtype with a <code>state_machine<></code> subtype as
+ argument then the <code>state_machine<></code> subclass portion must still
+ exist<br>
+ <b>Returns</b>: A reference to a const direct or indirect context</p>
   <pre>
 template&lt; class Target &gt;
 Target <a name="simple_state::state_cast" id=
@@ -2746,17 +2756,17 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "shallow_history parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="45%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="24%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>DefaultState</code></td>
+ <td><code>DefaultState</code></td>
 
- <td width="45%">A model of the SimpleState
+ <td>A model of the SimpleState
       or State concepts. The type passed as
       <code>Context</code> argument to the <code><a href=
       "#ClassTemplatesimple_state">simple_state&lt;&gt;</a></code> or
@@ -2767,8 +2777,7 @@
       "#ClassTemplatesimple_state">simple_state&lt;&gt;</a></code> or
       <code>state<></code> base</td>
 
- <td width="24%">The state that is entered if shallow history is not
- available</td>
+ <td>The state that is entered if shallow history is not available</td>
     </tr>
   </table>
 
@@ -2804,17 +2813,17 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "deep_history parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="45%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="24%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>DefaultState</code></td>
+ <td><code>DefaultState</code></td>
 
- <td width="45%">A model of the SimpleState
+ <td>A model of the SimpleState
       or State concepts. The type passed as
       <code>Context</code> argument to the <code><a href=
       "#ClassTemplatesimple_state">simple_state&lt;&gt;</a></code> or
@@ -2825,8 +2834,7 @@
       "#ClassTemplatesimple_state">simple_state&lt;&gt;</a></code> or
       <code>state<></code> base</td>
 
- <td width="24%">The state that is entered if deep history is not
- available</td>
+ <td>The state that is entered if deep history is not available</td>
     </tr>
   </table>
 
@@ -2944,36 +2952,36 @@
 
   <table border="3" cellpadding="2" width="100%" summary="event parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="51%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="18%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
 
- <td width="19%"><b>Default</b></td>
+ <td><b>Default</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>MostDerived</code></td>
+ <td><code>MostDerived</code></td>
 
- <td width="51%">The most-derived subtype of this class template</td>
+ <td>The most-derived subtype of this class template</td>
 
- <td width="18%">&nbsp;</td>
+ <td>&nbsp;</td>
 
- <td width="19%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>Allocator</code></td>
+ <td><code>Allocator</code></td>
 
- <td width="51%">A model of the standard Allocator concept</td>
+ <td>A model of the standard Allocator concept</td>
 
- <td width="18%"><code>Allocator::rebind&lt; MostDerived
+ <td><code>Allocator::rebind&lt; MostDerived
       &gt;::other</code> is used to allocate and deallocate all event subtype
       objects of dynamic storage duration, see <code><a href=
       "#event::operatornew">operator new</a></code></td>
 
- <td width="19%"><code>std::allocator&lt; void &gt;</code></td>
+ <td><code>std::allocator&lt; void &gt;</code></td>
     </tr>
   </table>
 
@@ -3094,33 +3102,33 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "transition parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="45%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="24%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
 
- <td width="19%"><b>Default</b></td>
+ <td><b>Default</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>Event</code></td>
+ <td><code>Event</code></td>
 
- <td width="45%">A model of the Event concept or
+ <td>A model of the Event concept or
       the class <code>event_base</code></td>
 
- <td width="24%">The event triggering the transition. If <code><a href=
+ <td>The event triggering the transition. If <code><a href=
       "#Classevent_base">event_base</a></code> is specified, the transition
       is triggered by all models of the Event
       concept</td>
 
- <td width="19%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>Destination</code></td>
+ <td><code>Destination</code></td>
 
- <td width="45%">A model of the SimpleState
+ <td>A model of the SimpleState
       or State concepts or an instantiation of the
       <code><a href=
       "#ClassTemplateshallow_history">shallow_history</a></code> or
@@ -3129,35 +3137,35 @@
       is defined) and <code>Destination</code> must have a common direct or
       indirect context</td>
 
- <td width="24%">The destination state to make a transition to</td>
+ <td>The destination state to make a transition to</td>
 
- <td width="19%">&nbsp;</td>
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>TransitionContext</code></td>
+ <td><code>TransitionContext</code></td>
 
- <td width="45%">A common context of the source and
+ <td>A common context of the source and
       <code>Destination</code> state</td>
 
- <td width="24%">The state of which the transition action is a
+ <td>The state of which the transition action is a
       member</td>
 
- <td width="19%"><i><code>unspecified</code></i></td>
+ <td><i><code>unspecified</code></i></td>
     </tr>
 
     <tr>
- <td width="15%"><code>pTransitionAction</code></td>
+ <td><code>pTransitionAction</code></td>
 
- <td width="45%">A pointer to a member function of
+ <td>A pointer to a member function of
       <code>TransitionContext</code>. The member function must accept a
       <code>const Event &amp;</code> parameter and return
       <code>void</code></td>
 
- <td width="24%">The transition action that is executed during the
+ <td>The transition action that is executed during the
       transition. By default no transition action is executed</td>
 
- <td width="19%"><i><code>unspecified</code></i></td>
+ <td><i><code>unspecified</code></i></td>
     </tr>
   </table>
 
@@ -3212,44 +3220,52 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "in_state_reaction parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
+
+ <td><b>Requirements</b></td>
 
- <td width="45%"><b>Requirements</b></td>
+ <td><b>Semantics</b></td>
 
- <td width="24%"><b>Semantics</b></td>
+ <td><b>Default</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>Event</code></td>
+ <td><code>Event</code></td>
 
- <td width="45%">A model of the Event concept or
+ <td>A model of the Event concept or
       the class <code>event_base</code></td>
 
- <td width="24%">The event triggering the in-state reaction. If
+ <td>The event triggering the in-state reaction. If
       <code>event_base</code> is specified,
       the in-state reaction is triggered by all models of the <a href=
       "#Event">Event</a> concept</td>
+
+ <td>&nbsp;</td>
     </tr>
 
     <tr>
- <td width="15%"><code>ReactionContext</code></td>
+ <td><code>ReactionContext</code></td>
 
- <td width="45%">Either the state defining the in-state reaction itself
+ <td>Either the state defining the in-state reaction itself
       or one of it direct or indirect contexts</td>
 
- <td width="24%">The state of which the action is a member</td>
+ <td>The state of which the action is a member</td>
+
+ <td><i><code>unspecified</code></i></td>
     </tr>
 
     <tr>
- <td width="15%"><code>pAction</code></td>
+ <td><code>pAction</code></td>
 
- <td width="45%">A pointer to a member function of
+ <td>A pointer to a member function of
       <code>ReactionContext</code>. The member function must accept a
       <code>const Event &amp;</code> parameter and return
       <code>void</code></td>
 
- <td width="24%">The action that is executed during the in-state
+ <td>The action that is executed during the in-state
       reaction</td>
+
+ <td><i><code>unspecified</code></i></td>
     </tr>
   </table>
 
@@ -3261,8 +3277,9 @@
 {
   template&lt;
     class Event,
- class ReactionContext,
- void ( ReactionContext::*pAction )( const Event &amp; ) &gt;
+ class ReactionContext = <i>unspecified</i>,
+ void ( ReactionContext::*pAction )(
+ const Event &amp; ) = <i>unspecified</i> &gt;
   class in_state_reaction
   {
     // <i>implementation-defined</i>
@@ -3273,10 +3290,14 @@
 
   <h3>Class template <code>in_state_reaction</code> semantics</h3>
 
- <p>When executed, <code>pAction</code> is called, passing the triggering
- event as the only argument. Afterwards, a call is made to the
- <code>discard_event</code> member function of
- the state for which the reaction was defined.</p>
+ <p>When executed then the following happens:</p>
+ <ol>
+ <li>If an action was specified, <code>pAction</code> is called, passing
+ the triggering event as the only argument</li>
+ <li>A call is made to the <code>discard_event
+ </code> member function of the state for which the reaction was defined
+ </li>
+ </ol>
 
   <h1>Header &lt;boost/statechart/<a name="termination.hpp" id=
   "termination.hpp">termination.hpp</a>&gt;</h1>
@@ -3294,20 +3315,20 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "termination parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="45%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="24%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>Event</code></td>
+ <td><code>Event</code></td>
 
- <td width="45%">A model of the Event concept or
+ <td>A model of the Event concept or
       the class <code>event_base</code></td>
 
- <td width="24%">The event triggering the termination. If <code><a href=
+ <td>The event triggering the termination. If <code><a href=
       "#Classevent_base">event_base</a></code> is specified, the termination
       is triggered by all models of the Event
       concept</td>
@@ -3351,20 +3372,20 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "deferral parameters">
     <tr>
- <td width="15%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="45%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="24%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
     </tr>
 
     <tr>
- <td width="15%"><code>Event</code></td>
+ <td><code>Event</code></td>
 
- <td width="45%">A model of the Event concept or
+ <td>A model of the Event concept or
       the class <code>event_base</code></td>
 
- <td width="24%">The event triggering the deferral. If <code><a href=
+ <td>The event triggering the deferral. If <code><a href=
       "#Classevent_base">event_base</a></code> is specified, the deferral is
       triggered by all models of the Event concept</td>
     </tr>
@@ -3408,20 +3429,20 @@
   <table border="3" cellpadding="2" width="100%" summary=
   "custom_reaction parameters">
     <tr>
- <td width="17%"><b>Template parameter</b></td>
+ <td><b>Template parameter</b></td>
 
- <td width="56%"><b>Requirements</b></td>
+ <td><b>Requirements</b></td>
 
- <td width="24%"><b>Semantics</b></td>
+ <td><b>Semantics</b></td>
     </tr>
 
     <tr>
- <td width="17%"><code>Event</code></td>
+ <td><code>Event</code></td>
 
- <td width="56%">A model of the Event concept or
+ <td>A model of the Event concept or
       the class <code>event_base</code></td>
 
- <td width="24%">The event triggering the custom reaction. If
+ <td>The event triggering the custom reaction. If
       <code>event_base</code> is specified,
       the custom reaction is triggered by all models of the <a href=
       "#Event">Event</a> concept</td>
@@ -3525,11 +3546,10 @@
   "http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional"
   height="31" width="88"></a></p>
 
- <p>Revised
- <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->09 April, 2007<!--webbot bot="Timestamp" endspan i-checksum="30014" --></p>
+ <p>Revised 06 January, 2008</p>
 
- <p><i>Copyright &copy; 2003-<!--webbot bot="Timestamp" s-type="EDITED" s-format="%Y" startspan -->2007<!--webbot bot="Timestamp" endspan i-checksum="778" -->
- Andreas Huber Dönni</i></p>
+ <p><i>Copyright &copy; 2003-2008 <a href="contact.html">Andreas Huber
+ D&ouml;nni</a></i></p>
 
   <p><i>Distributed under the Boost Software License, Version 1.0. (See
   accompanying file LICENSE_1_0.txt or

Modified: branches/fix-links/libs/statechart/doc/reference.pdf
==============================================================================
Binary files. No diff available.

Modified: branches/fix-links/libs/statechart/example/BitMachine/BitMachine.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/example/BitMachine/BitMachine.vcproj (original)
+++ branches/fix-links/libs/statechart/example/BitMachine/BitMachine.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,211 +1,301 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="BitMachine"
- ProjectGUID="{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/Zm300"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- BufferSecurityCheck="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/BitMachine.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/BitMachine.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/Zm300"
- Optimization="3"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- ExceptionHandling="TRUE"
- RuntimeLibrary="4"
- BufferSecurityCheck="FALSE"
- EnableFunctionLevelLinking="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/BitMachine.exe"
- LinkIncremental="1"
- GenerateDebugInformation="FALSE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="BitMachine.cpp">
- </File>
- </Filter>
- <Filter
- Name="Statechart Header Files"
- Filter="h;hpp;hxx;hm;inl;inc">
- <File
- RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deep_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deferral.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_base.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_processor.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\result.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\simple_state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\termination.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\transition.hpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="">
- <File
- RelativePath=".\UniqueObject.hpp">
- </File>
- <File
- RelativePath=".\UniqueObjectAllocator.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="BitMachine"
+ ProjectGUID="{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
+ RootNamespace="BitMachine"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm300 /bigobj"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ EnablePREfast="false"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/BitMachine.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/BitMachine.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="true"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm300 /bigobj"
+ Optimization="3"
+ InlineFunctionExpansion="2"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ ExceptionHandling="1"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
+ EnablePREfast="false"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/BitMachine.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="false"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="true"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="BitMachine.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Statechart Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ <File
+ RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deep_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deferral.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_base.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_processor.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\result.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\simple_state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\termination.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\transition.hpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ >
+ <File
+ RelativePath=".\UniqueObject.hpp"
+ >
+ </File>
+ <File
+ RelativePath=".\UniqueObjectAllocator.hpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/example/Camera/Camera.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/example/Camera/Camera.vcproj (original)
+++ branches/fix-links/libs/statechart/example/Camera/Camera.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,239 +1,335 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="Camera"
- ProjectGUID="{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- BufferSecurityCheck="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="3"
- PrecompiledHeaderThrough="Precompiled.hpp"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/Camera.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/Camera.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="3"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- RuntimeLibrary="4"
- BufferSecurityCheck="FALSE"
- EnableFunctionLevelLinking="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- UsePrecompiledHeader="3"
- PrecompiledHeaderThrough="Precompiled.hpp"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/Camera.exe"
- LinkIncremental="1"
- GenerateDebugInformation="FALSE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="Camera.cpp">
- </File>
- <File
- RelativePath=".\Configuring.cpp">
- </File>
- <File
- RelativePath="Main.cpp">
- </File>
- <File
- RelativePath="Precompiled.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\Shooting.cpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc">
- <File
- RelativePath="Camera.hpp">
- </File>
- <File
- RelativePath="Configuring.hpp">
- </File>
- <File
- RelativePath="Precompiled.hpp">
- </File>
- <File
- RelativePath="Shooting.hpp">
- </File>
- </Filter>
- <Filter
- Name="Statechart Header Files"
- Filter="">
- <File
- RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deep_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deferral.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_base.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_processor.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\result.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\simple_state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\termination.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\transition.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Camera"
+ ProjectGUID="{7FD5B025-1675-4D68-BA85-588AFC99C5B8}"
+ RootNamespace="Camera"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="Precompiled.hpp"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Camera.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/Camera.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="2"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="Precompiled.hpp"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Camera.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="false"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="Camera.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\Configuring.cpp"
+ >
+ </File>
+ <File
+ RelativePath="Main.cpp"
+ >
+ </File>
+ <File
+ RelativePath="Precompiled.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\Shooting.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ <File
+ RelativePath="Camera.hpp"
+ >
+ </File>
+ <File
+ RelativePath="Configuring.hpp"
+ >
+ </File>
+ <File
+ RelativePath="Precompiled.hpp"
+ >
+ </File>
+ <File
+ RelativePath="Shooting.hpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Statechart Header Files"
+ >
+ <File
+ RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deep_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deferral.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_base.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_processor.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\result.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\simple_state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\termination.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\transition.hpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/example/Handcrafted/Handcrafted.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/example/Handcrafted/Handcrafted.vcproj (original)
+++ branches/fix-links/libs/statechart/example/Handcrafted/Handcrafted.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,140 +1,205 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="Handcrafted"
- ProjectGUID="{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/Zm300"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- BufferSecurityCheck="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/Handcrafted.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/Handcrafted.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/Zm300"
- Optimization="3"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- RuntimeLibrary="4"
- BufferSecurityCheck="FALSE"
- EnableFunctionLevelLinking="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/Handcrafted.exe"
- LinkIncremental="1"
- GenerateDebugInformation="FALSE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="Handcrafted.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Handcrafted"
+ ProjectGUID="{155DB9E1-28AC-4671-8248-5FD03E8FCDAD}"
+ RootNamespace="Handcrafted"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm300"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Handcrafted.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/Handcrafted.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm300"
+ Optimization="3"
+ InlineFunctionExpansion="2"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Handcrafted.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="false"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="Handcrafted.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/example/Keyboard/Keyboard.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/example/Keyboard/Keyboard.vcproj (original)
+++ branches/fix-links/libs/statechart/example/Keyboard/Keyboard.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,201 +1,284 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="Keyboard"
- ProjectGUID="{4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- ExceptionHandling="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- BufferSecurityCheck="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/Keyboard.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/Keyboard.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="3"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- ExceptionHandling="TRUE"
- RuntimeLibrary="4"
- BufferSecurityCheck="FALSE"
- EnableFunctionLevelLinking="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/Keyboard.exe"
- LinkIncremental="1"
- GenerateDebugInformation="FALSE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\Keyboard.cpp">
- </File>
- </Filter>
- <Filter
- Name="Statechart Header Files"
- Filter="">
- <File
- RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deep_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deferral.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_base.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_processor.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\result.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\simple_state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\termination.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\transition.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Keyboard"
+ ProjectGUID="{4CBF564B-EEC6-49E1-B69B-CABF5DDFC684}"
+ RootNamespace="Keyboard"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ ExceptionHandling="1"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Keyboard.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/Keyboard.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="2"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ ExceptionHandling="1"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Keyboard.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="false"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\Keyboard.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Statechart Header Files"
+ >
+ <File
+ RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deep_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deferral.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_base.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_processor.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\result.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\simple_state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\termination.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\transition.hpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/example/Performance/Performance.cpp
==============================================================================
--- branches/fix-links/libs/statechart/example/Performance/Performance.cpp (original)
+++ branches/fix-links/libs/statechart/example/Performance/Performance.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2005-2006 Andreas Huber Doenni
+// Copyright 2005-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -443,19 +443,24 @@
 template< class NoOfBits >
 struct PerfResultBackInserter
 {
- PerfResultBackInserter( PerfResultList & perfResultList ) :
- perfResultList_( perfResultList )
- {
- }
+ public:
+ PerfResultBackInserter( PerfResultList & perfResultList ) :
+ perfResultList_( perfResultList )
+ {
+ }
 
- template< class FirstTransitionBit >
- void operator()( const FirstTransitionBit & )
- {
- perfResultList_.push_back(
- PerformanceTester< NoOfBits, FirstTransitionBit >::Test() );
- }
+ template< class FirstTransitionBit >
+ void operator()( const FirstTransitionBit & )
+ {
+ perfResultList_.push_back(
+ PerformanceTester< NoOfBits, FirstTransitionBit >::Test() );
+ }
+
+ private:
+ // avoids C4512 (assignment operator could not be generated)
+ PerfResultBackInserter & operator=( const PerfResultBackInserter & );
 
- PerfResultList & perfResultList_;
+ PerfResultList & perfResultList_;
 };
 
 template< class NoOfBits >

Modified: branches/fix-links/libs/statechart/example/Performance/Performance.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/example/Performance/Performance.vcproj (original)
+++ branches/fix-links/libs/statechart/example/Performance/Performance.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,201 +1,285 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="Performance"
- ProjectGUID="{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/Zm800"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- BufferSecurityCheck="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/Performance.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/Performance.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions="/Zm800"
- Optimization="3"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- ExceptionHandling="TRUE"
- RuntimeLibrary="4"
- BufferSecurityCheck="FALSE"
- EnableFunctionLevelLinking="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/Performance.exe"
- LinkIncremental="1"
- GenerateDebugInformation="FALSE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="Performance.cpp">
- </File>
- </Filter>
- <Filter
- Name="Statechart Header Files"
- Filter="h;hpp;hxx;hm;inl;inc">
- <File
- RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deep_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deferral.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_base.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_processor.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\result.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\simple_state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\termination.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\transition.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="Performance"
+ ProjectGUID="{045411F0-A746-4DB3-85B9-C9AEDE6D5CBA}"
+ RootNamespace="Performance"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Performance.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/Performance.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm800"
+ Optimization="3"
+ InlineFunctionExpansion="2"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ ExceptionHandling="1"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/Performance.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="false"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="Performance.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Statechart Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ <File
+ RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deep_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deferral.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_base.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_processor.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\result.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\simple_state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\termination.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\transition.hpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/example/PingPong/PingPong.cpp
==============================================================================
--- branches/fix-links/libs/statechart/example/PingPong/PingPong.cpp (original)
+++ branches/fix-links/libs/statechart/example/PingPong/PingPong.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2002-2006 Andreas Huber Doenni
+// Copyright 2002-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -46,17 +46,10 @@
 #include <boost/function.hpp>
 #include <boost/bind.hpp>
 
-#ifdef BOOST_MSVC
-# pragma warning( push )
-# pragma warning( disable: 4127 ) // conditional expression is constant
-# pragma warning( disable: 4251 ) // class needs to have dll-interface
-# pragma warning( disable: 4275 ) // non-dll class used as base for dll class
-# pragma warning( disable: 4800 ) // forcing value to bool 'true' or 'false'
-#endif
-
 #ifdef BOOST_HAS_THREADS
 # include <boost/thread/thread.hpp>
 #endif
+
 #ifdef CUSTOMIZE_MEMORY_MANAGEMENT
 # ifdef BOOST_HAS_THREADS
      // for some reason the following is not automatically defined
@@ -66,11 +59,17 @@
 # else
 # define BOOST_NO_MT
 # endif
+
+# ifdef BOOST_MSVC
+# pragma warning( push )
+# pragma warning( disable: 4127 ) // conditional expression is constant
+# endif
+
 # include <boost/pool/pool_alloc.hpp>
-#endif
 
-#ifdef BOOST_MSVC
-# pragma warning( pop )
+# ifdef BOOST_MSVC
+# pragma warning( pop )
+# endif
 #endif
 
 #include <iostream>
@@ -132,10 +131,7 @@
   Player, Waiting, MyScheduler, MyAllocator >
 {
   public:
- Player(
- my_context ctx,
- unsigned int maxNoOfReturns
- ) :
+ Player( my_context ctx, unsigned int maxNoOfReturns ) :
       my_base( ctx ),
       maxNoOfReturns_( maxNoOfReturns )
     {
@@ -217,6 +213,9 @@
       return terminate();
     }
 
+ // avoids C4512 (assignment operator could not be generated)
+ Waiting & operator=( const Waiting & );
+
     unsigned int noOfReturns_;
     const boost::intrusive_ptr< BallReturned > pBallReturned_;
 };

Modified: branches/fix-links/libs/statechart/example/PingPong/PingPong.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/example/PingPong/PingPong.vcproj (original)
+++ branches/fix-links/libs/statechart/example/PingPong/PingPong.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,201 +1,285 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="PingPong"
- ProjectGUID="{11CCA9FC-6012-4B64-8C61-808D0F8D1B51}"
- RootNamespace="PingPong"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="TRUE"
- DisableLanguageExtensions="FALSE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="FALSE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/PingPong.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="&quot;..\..\..\..\bin\boost\libs\thread\build\libboost_thread.lib\vc-7_1\debug\threading-multi&quot;"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/PingPong.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="3"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- RuntimeLibrary="2"
- BufferSecurityCheck="FALSE"
- EnableFunctionLevelLinking="TRUE"
- DisableLanguageExtensions="FALSE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="FALSE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/PingPong.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="&quot;..\..\..\..\bin\boost\libs\thread\build\libboost_thread.lib\vc-7_1\release\threading-multi&quot;"
- GenerateDebugInformation="FALSE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\PingPong.cpp">
- </File>
- </Filter>
- <Filter
- Name="Statechart Header Files"
- Filter="">
- <File
- RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deep_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deferral.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_base.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_processor.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\result.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\simple_state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\termination.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\transition.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="PingPong"
+ ProjectGUID="{11CCA9FC-6012-4B64-8C61-808D0F8D1B51}"
+ RootNamespace="PingPong"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_ALL_DYN_LINK"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="true"
+ DisableLanguageExtensions="false"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/PingPong.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\..\bin.v2\libs\thread\build\msvc-9.0\$(ConfigurationName)\threading-multi&quot;;&quot;$(ProjectDir)..\..\..\..\bin.v2\libs\date_time\build\msvc-9.0\$(ConfigurationName)\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/PingPong.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy $(ProjectDir)..\..\..\..\bin.v2\libs\thread\build\msvc-9.0\$(ConfigurationName)\threading-multi\*.dll $(TargetDir)&#x0D;&#x0A;copy $(ProjectDir)..\..\..\..\bin.v2\libs\date_time\build\msvc-9.0\$(ConfigurationName)\threading-multi\*.dll $(TargetDir)&#x0D;&#x0A;"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="2"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;BOOST_ALL_DYN_LINK"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="false"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/PingPong.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\..\bin.v2\libs\thread\build\msvc-9.0\$(ConfigurationName)\threading-multi&quot;;&quot;$(ProjectDir)..\..\..\..\bin.v2\libs\date_time\build\msvc-9.0\$(ConfigurationName)\threading-multi&quot;"
+ GenerateDebugInformation="false"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy $(ProjectDir)..\..\..\..\bin.v2\libs\thread\build\msvc-9.0\$(ConfigurationName)\threading-multi\*.dll $(TargetDir)&#x0D;&#x0A;copy $(ProjectDir)..\..\..\..\bin.v2\libs\date_time\build\msvc-9.0\$(ConfigurationName)\threading-multi\*.dll $(TargetDir)&#x0D;&#x0A;"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\PingPong.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Statechart Header Files"
+ >
+ <File
+ RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deep_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deferral.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_base.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_processor.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\result.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\simple_state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\termination.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\transition.hpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/example/StopWatch/StopWatch.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/example/StopWatch/StopWatch.vcproj (original)
+++ branches/fix-links/libs/statechart/example/StopWatch/StopWatch.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,198 +1,282 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="StopWatch"
- ProjectGUID="{CF66596F-7DEA-4BB6-A728-F7FEF2889855}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- BufferSecurityCheck="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/StopWatch.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/StopWatch.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="3"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- AdditionalIncludeDirectories="..\..\..\.."
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- StringPooling="TRUE"
- RuntimeLibrary="4"
- BufferSecurityCheck="FALSE"
- EnableFunctionLevelLinking="TRUE"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- WarnAsError="TRUE"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/StopWatch.exe"
- LinkIncremental="1"
- GenerateDebugInformation="FALSE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="StopWatch.cpp">
- </File>
- </Filter>
- <Filter
- Name="Statechart Header Files"
- Filter="h;hpp;hxx;hm;inl;inc">
- <File
- RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deep_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\deferral.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_base.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\event_processor.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\result.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\simple_state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\state_machine.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\termination.hpp">
- </File>
- <File
- RelativePath="..\..\..\..\boost\statechart\transition.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="StopWatch"
+ ProjectGUID="{DFA55264-E7F5-43FE-841F-D56AC48FF2A8}"
+ RootNamespace="StopWatch"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/StopWatch.exe"
+ LinkIncremental="2"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/StopWatch.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="2"
+ AdditionalIncludeDirectories="..\..\..\.."
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/StopWatch.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="false"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="StopWatch.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Statechart Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ <File
+ RelativePath="..\..\..\..\boost\statechart\asynchronous_state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\custom_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deep_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\deferral.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_base.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\event_processor.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\fifo_scheduler.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\in_state_reaction.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\null_exception_translator.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\result.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\shallow_history.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\simple_state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\state_machine.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\termination.hpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\boost\statechart\transition.hpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/CustomReactionTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/CustomReactionTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/CustomReactionTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="CustomReactionTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/CustomReactionTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/CustomReactionTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/CustomReactionTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\CustomReactionTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="CustomReactionTest"
+ ProjectGUID="{2D85E7DE-2347-43EA-843F-691101E6F98F}"
+ RootNamespace="CustomReactionTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/CustomReactionTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/CustomReactionTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/CustomReactionTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\CustomReactionTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/DeferralTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/DeferralTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/DeferralTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="DeferralTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/DeferralTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/DeferralTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/DeferralTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\DeferralTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="DeferralTest"
+ ProjectGUID="{E599D469-A2BD-42FB-A217-73A420213D06}"
+ RootNamespace="DeferralTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/DeferralTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/DeferralTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/DeferralTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\DeferralTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/FifoSchedulerTest.cpp
==============================================================================
--- branches/fix-links/libs/statechart/test/FifoSchedulerTest.cpp (original)
+++ branches/fix-links/libs/statechart/test/FifoSchedulerTest.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2005-2006 Andreas Huber Doenni
+// Copyright 2005-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -31,8 +31,13 @@
 
 struct EvCheckCtorArgs : sc::event< EvCheckCtorArgs >
 {
- EvCheckCtorArgs( int expectedArgs ) : expectedArgs_( expectedArgs ) {}
- const int expectedArgs_;
+ public:
+ EvCheckCtorArgs( int expectedArgs ) : expectedArgs_( expectedArgs ) {}
+ const int expectedArgs_;
+
+ private:
+ // avoids C4512 (assignment operator could not be generated)
+ EvCheckCtorArgs & operator=( const EvCheckCtorArgs & );
 };
 
 struct EvTerminate : sc::event< EvTerminate > {};

Modified: branches/fix-links/libs/statechart/test/FifoSchedulerTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/FifoSchedulerTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/FifoSchedulerTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="FifoSchedulerTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/FifoSchedulerTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/FifoSchedulerTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/FifoSchedulerTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\FifoSchedulerTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="FifoSchedulerTest"
+ ProjectGUID="{3A9E80AF-DD29-4CE7-AB7D-1A13C766AC96}"
+ RootNamespace="FifoSchedulerTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/FifoSchedulerTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/FifoSchedulerTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/FifoSchedulerTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\FifoSchedulerTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/HistoryTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/HistoryTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/HistoryTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="HistoryTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/HistoryTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/HistoryTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/HistoryTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\HistoryTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="HistoryTest"
+ ProjectGUID="{206654FA-7AA0-4E06-BCFA-DC94D4281755}"
+ RootNamespace="HistoryTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/HistoryTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/HistoryTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/HistoryTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\HistoryTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InStateReactionTest.cpp
==============================================================================
--- branches/fix-links/libs/statechart/test/InStateReactionTest.cpp (original)
+++ branches/fix-links/libs/statechart/test/InStateReactionTest.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2005-2006 Andreas Huber Doenni
+// Copyright 2005-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////
@@ -24,10 +24,10 @@
 struct F : sc::event< F > {};
 struct G : sc::event< G > {};
 struct H : sc::event< H > {};
+struct I : sc::event< I > {};
 
 struct A;
-struct InStateReactionTest :
- sc::state_machine< InStateReactionTest, A > {};
+struct InStateReactionTest : sc::state_machine< InStateReactionTest, A > {};
 
 struct B;
 struct A : sc::simple_state< A, InStateReactionTest, B >
@@ -59,7 +59,8 @@
 
     typedef mpl::list<
       sc::in_state_reaction< F, B, &B::IncrementCount >,
- sc::in_state_reaction< G, A, &A::IncrementCount >
+ sc::in_state_reaction< G, A, &A::IncrementCount >,
+ sc::in_state_reaction< I >
> reactions;
 
     unsigned int eventCount_;
@@ -67,29 +68,35 @@
 
 
 
+void RequireEventCounts(
+ const InStateReactionTest & machine,
+ unsigned int aCount, unsigned int bCount)
+{
+ BOOST_REQUIRE(
+ machine.state_downcast< const A & >().eventCount_ == aCount );
+ BOOST_REQUIRE(
+ machine.state_downcast< const B & >().eventCount_ == bCount );
+}
+
 int test_main( int, char* [] )
 {
   InStateReactionTest machine;
   machine.initiate();
 
- BOOST_REQUIRE( machine.state_downcast< const A & >().eventCount_ == 0 );
- BOOST_REQUIRE( machine.state_downcast< const B & >().eventCount_ == 0 );
+ RequireEventCounts(machine, 0, 0);
   machine.process_event( F() );
- BOOST_REQUIRE( machine.state_downcast< const A & >().eventCount_ == 0 );
- BOOST_REQUIRE( machine.state_downcast< const B & >().eventCount_ == 1 );
+ RequireEventCounts(machine, 0, 1);
   machine.process_event( E() );
- BOOST_REQUIRE( machine.state_downcast< const A & >().eventCount_ == 1 );
- BOOST_REQUIRE( machine.state_downcast< const B & >().eventCount_ == 1 );
+ RequireEventCounts(machine, 1, 1);
   machine.process_event( E() );
   machine.process_event( F() );
- BOOST_REQUIRE( machine.state_downcast< const A & >().eventCount_ == 2 );
- BOOST_REQUIRE( machine.state_downcast< const B & >().eventCount_ == 2 );
+ RequireEventCounts(machine, 2, 2);
   machine.process_event( G() );
- BOOST_REQUIRE( machine.state_downcast< const A & >().eventCount_ == 3 );
- BOOST_REQUIRE( machine.state_downcast< const B & >().eventCount_ == 2 );
+ RequireEventCounts(machine, 3, 2);
   machine.process_event( H() );
- BOOST_REQUIRE( machine.state_downcast< const A & >().eventCount_ == 4 );
- BOOST_REQUIRE( machine.state_downcast< const B & >().eventCount_ == 2 );
+ RequireEventCounts(machine, 4, 2);
+ machine.process_event( I() );
+ RequireEventCounts(machine, 4, 2);
 
   return 0;
 }

Modified: branches/fix-links/libs/statechart/test/InStateReactionTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InStateReactionTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InStateReactionTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InStateReactionTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/InStateReactionTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InStateReactionTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/InStateReactionTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InStateReactionTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InStateReactionTest"
+ ProjectGUID="{DAD64722-72C8-4424-9024-185A0D0D897A}"
+ RootNamespace="InStateReactionTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/InStateReactionTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InStateReactionTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/InStateReactionTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InStateReactionTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InconsistentHistoryTest1.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InconsistentHistoryTest1.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InconsistentHistoryTest1.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InconsistentHistoryTest1"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest1.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest1.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest1.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InconsistentHistoryTest1.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InconsistentHistoryTest1"
+ ProjectGUID="{B2739180-6048-4CA7-A96B-ECE182100321}"
+ RootNamespace="InconsistentHistoryTest1"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest1.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest1.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest1.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InconsistentHistoryTest1.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InconsistentHistoryTest2.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InconsistentHistoryTest2.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InconsistentHistoryTest2.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InconsistentHistoryTest2"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest2.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest2.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest2.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InconsistentHistoryTest2.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InconsistentHistoryTest2"
+ ProjectGUID="{7C58D72A-C6EA-4E25-92E8-5ADEB5F61662}"
+ RootNamespace="InconsistentHistoryTest2"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest2.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest2.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest2.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InconsistentHistoryTest2.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InconsistentHistoryTest3.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InconsistentHistoryTest3.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InconsistentHistoryTest3.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InconsistentHistoryTest3"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest3.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest3.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest3.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InconsistentHistoryTest3.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InconsistentHistoryTest3"
+ ProjectGUID="{801027D8-DC4E-48DC-9F98-75BA0B7F2997}"
+ RootNamespace="InconsistentHistoryTest3"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest3.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest3.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest3.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InconsistentHistoryTest3.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InconsistentHistoryTest4.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InconsistentHistoryTest4.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InconsistentHistoryTest4.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InconsistentHistoryTest4"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest4.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest4.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest4.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InconsistentHistoryTest4.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InconsistentHistoryTest4"
+ ProjectGUID="{A211FFC9-D4B4-4C3A-900E-044A7519F8E4}"
+ RootNamespace="InconsistentHistoryTest4"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest4.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest4.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest4.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InconsistentHistoryTest4.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InconsistentHistoryTest5.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InconsistentHistoryTest5.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InconsistentHistoryTest5.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InconsistentHistoryTest5"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest5.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest5.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest5.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InconsistentHistoryTest5.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InconsistentHistoryTest5"
+ ProjectGUID="{BE34C83E-6D4A-4E49-B9BA-EFF47ECBAA39}"
+ RootNamespace="InconsistentHistoryTest5"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest5.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest5.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest5.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InconsistentHistoryTest5.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InconsistentHistoryTest6.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InconsistentHistoryTest6.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InconsistentHistoryTest6.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InconsistentHistoryTest6"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest6.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest6.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest6.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InconsistentHistoryTest6.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InconsistentHistoryTest6"
+ ProjectGUID="{7D2AB32E-930A-4758-8FAF-F5E0A19A411C}"
+ RootNamespace="InconsistentHistoryTest6"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest6.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest6.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest6.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InconsistentHistoryTest6.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InconsistentHistoryTest7.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InconsistentHistoryTest7.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InconsistentHistoryTest7.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InconsistentHistoryTest7"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest7.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest7.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest7.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InconsistentHistoryTest7.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InconsistentHistoryTest7"
+ ProjectGUID="{41A33CE9-785E-4EC2-9022-A3B229D4935B}"
+ RootNamespace="InconsistentHistoryTest7"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest7.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest7.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest7.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InconsistentHistoryTest7.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InconsistentHistoryTest8.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InconsistentHistoryTest8.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InconsistentHistoryTest8.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InconsistentHistoryTest8"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest8.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest8.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InconsistentHistoryTest8.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InconsistentHistoryTest8.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InconsistentHistoryTest8"
+ ProjectGUID="{FDBCBAEF-C973-42C2-BD8B-4796C0A1E6A8}"
+ RootNamespace="InconsistentHistoryTest8"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest8.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InconsistentHistoryTest8.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InconsistentHistoryTest8.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InconsistentHistoryTest8.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InvalidChartTest1.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InvalidChartTest1.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InvalidChartTest1.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InvalidChartTest1"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidChartTest1.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InvalidChartTest1.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidChartTest1.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InvalidChartTest1.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InvalidChartTest1"
+ ProjectGUID="{AA1A7669-702E-4D56-A390-849612EB9CDF}"
+ RootNamespace="InvalidChartTest1"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidChartTest1.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InvalidChartTest1.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidChartTest1.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InvalidChartTest1.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InvalidChartTest2.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InvalidChartTest2.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InvalidChartTest2.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InvalidChartTest2"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidChartTest2.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InvalidChartTest2.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidChartTest2.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InvalidChartTest2.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InvalidChartTest2"
+ ProjectGUID="{CCB4DBF2-626B-4DA5-AB02-9504B0A97F9A}"
+ RootNamespace="InvalidChartTest2"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidChartTest2.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InvalidChartTest2.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidChartTest2.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InvalidChartTest2.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InvalidChartTest3.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InvalidChartTest3.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InvalidChartTest3.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InvalidChartTest3"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidChartTest3.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InvalidChartTest3.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidChartTest3.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InvalidChartTest3.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InvalidChartTest3"
+ ProjectGUID="{7083917A-4A8D-4BEF-A435-61AAF3BA554C}"
+ RootNamespace="InvalidChartTest3"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidChartTest3.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InvalidChartTest3.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidChartTest3.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InvalidChartTest3.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InvalidResultAssignTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InvalidResultAssignTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InvalidResultAssignTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InvalidResultAssignTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidResultAssignTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InvalidResultAssignTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidResultAssignTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InvalidResultAssignTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InvalidResultAssignTest"
+ ProjectGUID="{962F23F9-D433-4825-9945-D5A5C5337B7F}"
+ RootNamespace="InvalidResultAssignTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidResultAssignTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InvalidResultAssignTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidResultAssignTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InvalidResultAssignTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InvalidResultCopyTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InvalidResultCopyTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InvalidResultCopyTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InvalidResultCopyTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/InvalidResultCopyTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InvalidResultCopyTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/InvalidResultCopyTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InvalidResultCopyTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InvalidResultCopyTest"
+ ProjectGUID="{856A30E8-85E8-4BE4-B208-B5FC395408AF}"
+ RootNamespace="InvalidResultCopyTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/InvalidResultCopyTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InvalidResultCopyTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/InvalidResultCopyTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InvalidResultCopyTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InvalidResultDefCtorTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InvalidResultDefCtorTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InvalidResultDefCtorTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InvalidResultDefCtorTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidResultDefCtorTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InvalidResultDefCtorTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidResultDefCtorTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InvalidResultDefCtorTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InvalidResultDefCtorTest"
+ ProjectGUID="{8381EC0A-7D7B-4127-93E8-DFE12F023611}"
+ RootNamespace="InvalidResultDefCtorTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidResultDefCtorTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InvalidResultDefCtorTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidResultDefCtorTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InvalidResultDefCtorTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InvalidTransitionTest1.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InvalidTransitionTest1.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InvalidTransitionTest1.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InvalidTransitionTest1"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidTransitionTest1.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InvalidTransitionTest1.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidTransitionTest1.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InvalidTransitionTest1.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InvalidTransitionTest1"
+ ProjectGUID="{345A4DD5-8B5C-40E4-95D2-4CF5A2621040}"
+ RootNamespace="InvalidTransitionTest1"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidTransitionTest1.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InvalidTransitionTest1.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidTransitionTest1.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InvalidTransitionTest1.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/InvalidTransitionTest2.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/InvalidTransitionTest2.vcproj (original)
+++ branches/fix-links/libs/statechart/test/InvalidTransitionTest2.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="InvalidTransitionTest2"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidTransitionTest2.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/InvalidTransitionTest2.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/InvalidTransitionTest2.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\InvalidTransitionTest2.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="InvalidTransitionTest2"
+ ProjectGUID="{FCB42B5B-DDE0-4E12-8474-F55DC85606FE}"
+ RootNamespace="InvalidTransitionTest2"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidTransitionTest2.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/InvalidTransitionTest2.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/InvalidTransitionTest2.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories=""
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\InvalidTransitionTest2.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/StateCastTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/StateCastTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/StateCastTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="StateCastTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/StateCastTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/StateCastTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/StateCastTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\StateCastTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="StateCastTest"
+ ProjectGUID="{1826122F-4DB3-4C69-8BB2-E0B18D809FA9}"
+ RootNamespace="StateCastTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/StateCastTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/StateCastTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/StateCastTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\StateCastTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/StateIterationTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/StateIterationTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/StateIterationTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="StateIterationTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/StateIterationTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/StateIterationTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/StateIterationTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\StateIterationTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="StateIterationTest"
+ ProjectGUID="{D52BF95D-392C-4535-B332-CB3CC29C8227}"
+ RootNamespace="StateIterationTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/StateIterationTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/StateIterationTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/StateIterationTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\StateIterationTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/TerminationTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/TerminationTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/TerminationTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="TerminationTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/TerminationTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/TerminationTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/TerminationTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\TerminationTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="TerminationTest"
+ ProjectGUID="{A9921F2C-D8D3-4A4A-87C8-9A34DDD588B2}"
+ RootNamespace="TerminationTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/TerminationTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/TerminationTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/TerminationTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\TerminationTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/TransitionTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/TransitionTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/TransitionTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,147 +1,218 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="TransitionTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/TransitionTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/TransitionTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/TransitionTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\TransitionTest.cpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\InnermostDefault.hpp">
- </File>
- <File
- RelativePath=".\OuterOrthogonal.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="TransitionTest"
+ ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
+ RootNamespace="TransitionTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/TransitionTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/TransitionTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/TransitionTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\TransitionTest.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\InnermostDefault.hpp"
+ >
+ </File>
+ <File
+ RelativePath=".\OuterOrthogonal.hpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/TuTest.cpp
==============================================================================
--- branches/fix-links/libs/statechart/test/TuTest.cpp (original)
+++ branches/fix-links/libs/statechart/test/TuTest.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 //////////////////////////////////////////////////////////////////////////////
-// Copyright 2005-2006 Andreas Huber Doenni
+// Copyright 2005-2008 Andreas Huber Doenni
 // Distributed under the Boost Software License, Version 1.0. (See accompany-
 // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 //////////////////////////////////////////////////////////////////////////////

Modified: branches/fix-links/libs/statechart/test/TuTest.hpp
==============================================================================
--- branches/fix-links/libs/statechart/test/TuTest.hpp (original)
+++ branches/fix-links/libs/statechart/test/TuTest.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -31,7 +31,13 @@
 
 namespace sc = boost::statechart;
 
-
+#ifdef BOOST_MSVC
+# pragma warning( push )
+ // class X needs to have dll-interface to be used by clients of class Y
+# pragma warning( disable: 4251 )
+ // non dll-interface class X used as base for dll-interface class
+# pragma warning( disable: 4275 )
+#endif
 
 struct BOOST_STATECHART_DECL EvX : sc::event< EvX > {};
 struct BOOST_STATECHART_DECL EvY : sc::event< EvY > {};
@@ -43,6 +49,9 @@
   void unconsumed_event( const sc::event_base & );
 };
 
+#ifdef BOOST_MSVC
+# pragma warning( pop )
+#endif
 
 
 #endif

Modified: branches/fix-links/libs/statechart/test/TuTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/TuTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/TuTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,147 +1,218 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="TuTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/TuTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/TuTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/TuTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\TuTest.cpp">
- </File>
- <File
- RelativePath=".\TuTestMain.cpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\TuTest.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="TuTest"
+ ProjectGUID="{892D213C-F575-4003-BB0F-5787DA2C407D}"
+ RootNamespace="TuTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/TuTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/TuTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/TuTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\TuTest.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\TuTestMain.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath=".\TuTest.hpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/TypeInfoTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/TypeInfoTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/TypeInfoTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="TypeInfoTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/TypeInfoTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/TypeInfoTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/TypeInfoTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\TypeInfoTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="TypeInfoTest"
+ ProjectGUID="{6FBB8140-6B00-4BF1-AD6D-9D394DE3610F}"
+ RootNamespace="TypeInfoTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/TypeInfoTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/TypeInfoTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/TypeInfoTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\TypeInfoTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/UnconsumedResultTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/UnconsumedResultTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/UnconsumedResultTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,136 +1,204 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="UnconsumedResultTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-gd-1_34.lib"
- OutputFile="$(OutDir)/UnconsumedResultTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/UnconsumedResultTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="libboost_test_exec_monitor-vc71-mt-1_34.lib"
- OutputFile="$(OutDir)/UnconsumedResultTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\UnconsumedResultTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="UnconsumedResultTest"
+ ProjectGUID="{93FEA76A-3C04-4A70-B53B-485490CF38A1}"
+ RootNamespace="UnconsumedResultTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-gd-1_35.lib"
+ OutputFile="$(OutDir)/UnconsumedResultTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/UnconsumedResultTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="libboost_test_exec_monitor-vc90-mt-1_35.lib"
+ OutputFile="$(OutDir)/UnconsumedResultTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="&quot;$(ProjectDir)..\..\..\bin.v2\libs\test\build\msvc-9.0\$(ConfigurationName)\asynch-exceptions-on\link-static\threading-multi&quot;"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\UnconsumedResultTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/statechart/test/UnsuppDeepHistoryTest.vcproj
==============================================================================
--- branches/fix-links/libs/statechart/test/UnsuppDeepHistoryTest.vcproj (original)
+++ branches/fix-links/libs/statechart/test/UnsuppDeepHistoryTest.vcproj 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,134 +1,202 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="UnsuppDeepHistoryTest"
- ProjectGUID="{D9103E3E-640D-4AB7-910C-ACA96709ED0A}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/UnsuppDeepHistoryTest.exe"
- LinkIncremental="2"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/UnsuppDeepHistoryTest.pdb"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\"
- PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
- RuntimeLibrary="2"
- DisableLanguageExtensions="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- ForceConformanceInForLoopScope="TRUE"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="0"
- WarningLevel="4"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/UnsuppDeepHistoryTest.exe"
- LinkIncremental="1"
- AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
- GenerateDebugInformation="TRUE"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\UnsuppDeepHistoryTest.cpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="UnsuppDeepHistoryTest"
+ ProjectGUID="{7B6A4F61-6210-4FDC-BC23-660DA10EE7DD}"
+ RootNamespace="UnsuppDeepHistoryTest"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ProjectName)Debug"
+ IntermediateDirectory="$(ProjectName)Debug"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/UnsuppDeepHistoryTest.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\debug\threading-multi"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/UnsuppDeepHistoryTest.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ProjectName)Release"
+ IntermediateDirectory="$(ProjectName)Release"
+ ConfigurationType="1"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\..\"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ DisableLanguageExtensions="true"
+ TreatWChar_tAsBuiltInType="true"
+ ForceConformanceInForLoopScope="true"
+ RuntimeTypeInfo="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="4"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/UnsuppDeepHistoryTest.exe"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="..\..\..\bin\boost\libs\test\build\libboost_test_exec_monitor.lib\vc-7_1\release\threading-multi"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath=".\UnsuppDeepHistoryTest.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>

Modified: branches/fix-links/libs/system/test/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/system/test/Jamfile.v2 (original)
+++ branches/fix-links/libs/system/test/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -19,31 +19,24 @@
            : # command line
            : # input files
            : # requirements
- <define>BOOST_SYSTEM_STATIC_LINK
                    <link>static
          ]
          [ run error_code_test.cpp
- : : : <define>BOOST_SYSTEM_DYN_LINK
- : error_code_test_dll
+ : : : : error_code_test_dll
          ]
          [ run error_code_user_test.cpp
- : : : <define>BOOST_SYSTEM_STATIC_LINK
- <link>static
+ : : : <link>static
          ]
          [ run error_code_user_test.cpp
- : : : <define>BOOST_SYSTEM_DYN_LINK
- : error_code_user_test_dll
+ : : : : error_code_user_test_dll
          ]
          [ run system_error_test.cpp
- : : : <define>BOOST_SYSTEM_STATIC_LINK
- <link>static
+ : : : <link>static
          ]
          [ run system_error_test.cpp
- : : : <define>BOOST_SYSTEM_DYN_LINK
- : system_error_test_dll
+ : : : : system_error_test_dll
          ]
          [ run initialization_test.cpp
- : : : <define>BOOST_SYSTEM_DYN_LINK
          ]
          [ run header_only_test.cpp
            : : : <link>static

Modified: branches/fix-links/libs/thread/src/tss_null.cpp
==============================================================================
--- branches/fix-links/libs/thread/src/tss_null.cpp (original)
+++ branches/fix-links/libs/thread/src/tss_null.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
 
 #include <boost/thread/detail/config.hpp>
 
-#if defined(BOOST_HAS_WINTHREADS) && (defined(BOOST_THREAD_BUILD_LIB) || defined(BOOST_THREAD_TEST)) && (!defined(_MSC_VER) || defined(UNDER_CE))
+#if defined(BOOST_HAS_WINTHREADS) && (defined(BOOST_THREAD_BUILD_LIB) || defined(BOOST_THREAD_TEST) || defined(UNDER_CE)) && (!defined(_MSC_VER) || defined(UNDER_CE))
 
     /*
     This file is a "null" implementation of tss cleanup; it's

Modified: branches/fix-links/libs/tr1/test/test_random.cpp
==============================================================================
--- branches/fix-links/libs/tr1/test/test_random.cpp (original)
+++ branches/fix-links/libs/tr1/test/test_random.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -10,6 +10,7 @@
 #endif
 
 #include <boost/type_traits/is_arithmetic.hpp>
+#include <boost/cstdint.hpp>
 #include <boost/static_assert.hpp>
 #include "verify_return.hpp"
 #include <iostream>

Modified: branches/fix-links/libs/type_traits/test/is_convertible_test.cpp
==============================================================================
--- branches/fix-links/libs/type_traits/test/is_convertible_test.cpp (original)
+++ branches/fix-links/libs/type_traits/test/is_convertible_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -125,9 +125,9 @@
 BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<long,int>::value), true);
 BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<int,char>::value), true);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<long long,int>::value), true);
-BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<long long,char>::value), true);
-BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<long long,float>::value), true);
+BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<boost::long_long_type,int>::value), true);
+BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<boost::long_long_type,char>::value), true);
+BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<boost::long_long_type,float>::value), true);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<__int64,int>::value), true);
 BOOST_CHECK_INTEGRAL_CONSTANT((::tt::is_convertible<__int64,char>::value), true);

Modified: branches/fix-links/libs/type_traits/test/make_signed_test.cpp
==============================================================================
--- branches/fix-links/libs/type_traits/test/make_signed_test.cpp (original)
+++ branches/fix-links/libs/type_traits/test/make_signed_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -20,7 +20,7 @@
 BOOST_CHECK_TYPE(::tt::make_signed<int>::type, int);
 BOOST_CHECK_TYPE(::tt::make_signed<long>::type, long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_signed<long long>::type, long long);
+BOOST_CHECK_TYPE(::tt::make_signed<boost::long_long_type>::type, boost::long_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_signed<__int64>::type, __int64);
 #endif
@@ -30,7 +30,7 @@
 BOOST_CHECK_TYPE(::tt::make_signed<const int>::type, const int);
 BOOST_CHECK_TYPE(::tt::make_signed<const long>::type, const long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_signed<const long long>::type, const long long);
+BOOST_CHECK_TYPE(::tt::make_signed<const boost::long_long_type>::type, const boost::long_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_signed<const __int64>::type, const __int64);
 #endif
@@ -40,7 +40,7 @@
 BOOST_CHECK_TYPE(::tt::make_signed<volatile int>::type, volatile int);
 BOOST_CHECK_TYPE(::tt::make_signed<volatile long>::type, volatile long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_signed<volatile long long>::type, volatile long long);
+BOOST_CHECK_TYPE(::tt::make_signed<volatile boost::long_long_type>::type, volatile boost::long_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_signed<volatile __int64>::type, volatile __int64);
 #endif
@@ -50,7 +50,7 @@
 BOOST_CHECK_TYPE(::tt::make_signed<const volatile int>::type, const volatile int);
 BOOST_CHECK_TYPE(::tt::make_signed<const volatile long>::type, const volatile long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_signed<const volatile long long>::type, const volatile long long);
+BOOST_CHECK_TYPE(::tt::make_signed<const volatile boost::long_long_type>::type, const volatile boost::long_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_signed<const volatile __int64>::type, const volatile __int64);
 #endif
@@ -61,7 +61,7 @@
 BOOST_CHECK_TYPE(::tt::make_signed<unsigned int>::type, int);
 BOOST_CHECK_TYPE(::tt::make_signed<unsigned long>::type, long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_signed<unsigned long long>::type, long long);
+BOOST_CHECK_TYPE(::tt::make_signed<boost::ulong_long_type>::type, boost::long_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_signed<unsigned __int64>::type, __int64);
 #endif
@@ -71,7 +71,7 @@
 BOOST_CHECK_TYPE(::tt::make_signed<const unsigned int>::type, const int);
 BOOST_CHECK_TYPE(::tt::make_signed<const unsigned long>::type, const long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_signed<const unsigned long long>::type, const long long);
+BOOST_CHECK_TYPE(::tt::make_signed<const boost::ulong_long_type>::type, const boost::long_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_signed<const unsigned __int64>::type, const __int64);
 #endif
@@ -81,7 +81,7 @@
 BOOST_CHECK_TYPE(::tt::make_signed<volatile unsigned int>::type, volatile int);
 BOOST_CHECK_TYPE(::tt::make_signed<volatile unsigned long>::type, volatile long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_signed<volatile unsigned long long>::type, volatile long long);
+BOOST_CHECK_TYPE(::tt::make_signed<volatile boost::ulong_long_type>::type, volatile boost::long_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_signed<volatile unsigned __int64>::type, volatile __int64);
 #endif
@@ -91,7 +91,7 @@
 BOOST_CHECK_TYPE(::tt::make_signed<const volatile unsigned int>::type, const volatile int);
 BOOST_CHECK_TYPE(::tt::make_signed<const volatile unsigned long>::type, const volatile long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_signed<const volatile unsigned long long>::type, const volatile long long);
+BOOST_CHECK_TYPE(::tt::make_signed<const volatile boost::ulong_long_type>::type, const volatile boost::long_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_signed<const volatile unsigned __int64>::type, const volatile __int64);
 #endif

Modified: branches/fix-links/libs/type_traits/test/make_unsigned_test.cpp
==============================================================================
--- branches/fix-links/libs/type_traits/test/make_unsigned_test.cpp (original)
+++ branches/fix-links/libs/type_traits/test/make_unsigned_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -20,7 +20,7 @@
 BOOST_CHECK_TYPE(::tt::make_unsigned<int>::type, unsigned int);
 BOOST_CHECK_TYPE(::tt::make_unsigned<long>::type, unsigned long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_unsigned<long long>::type, unsigned long long);
+BOOST_CHECK_TYPE(::tt::make_unsigned<boost::long_long_type>::type, boost::ulong_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_unsigned<__int64>::type, unsigned __int64);
 #endif
@@ -30,7 +30,7 @@
 BOOST_CHECK_TYPE(::tt::make_unsigned<const int>::type, const unsigned int);
 BOOST_CHECK_TYPE(::tt::make_unsigned<const long>::type, const unsigned long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_unsigned<const long long>::type, const unsigned long long);
+BOOST_CHECK_TYPE(::tt::make_unsigned<const boost::long_long_type>::type, const boost::ulong_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_unsigned<const __int64>::type, const unsigned __int64);
 #endif
@@ -40,7 +40,7 @@
 BOOST_CHECK_TYPE(::tt::make_unsigned<volatile int>::type, volatile unsigned int);
 BOOST_CHECK_TYPE(::tt::make_unsigned<volatile long>::type, volatile unsigned long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_unsigned<volatile long long>::type, volatile unsigned long long);
+BOOST_CHECK_TYPE(::tt::make_unsigned<volatile boost::long_long_type>::type, volatile boost::ulong_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_unsigned<volatile __int64>::type, volatile unsigned __int64);
 #endif
@@ -50,7 +50,7 @@
 BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile int>::type, const volatile unsigned int);
 BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile long>::type, const volatile unsigned long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile long long>::type, const volatile unsigned long long);
+BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile boost::long_long_type>::type, const volatile boost::ulong_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile __int64>::type, const volatile unsigned __int64);
 #endif
@@ -61,7 +61,7 @@
 BOOST_CHECK_TYPE(::tt::make_unsigned<unsigned int>::type, unsigned int);
 BOOST_CHECK_TYPE(::tt::make_unsigned<unsigned long>::type, unsigned long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_unsigned<unsigned long long>::type, unsigned long long);
+BOOST_CHECK_TYPE(::tt::make_unsigned<boost::ulong_long_type>::type, boost::ulong_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_unsigned<unsigned __int64>::type, unsigned __int64);
 #endif
@@ -71,7 +71,7 @@
 BOOST_CHECK_TYPE(::tt::make_unsigned<const unsigned int>::type, const unsigned int);
 BOOST_CHECK_TYPE(::tt::make_unsigned<const unsigned long>::type, const unsigned long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_unsigned<const unsigned long long>::type, const unsigned long long);
+BOOST_CHECK_TYPE(::tt::make_unsigned<const boost::ulong_long_type>::type, const boost::ulong_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_unsigned<const unsigned __int64>::type, const unsigned __int64);
 #endif
@@ -81,7 +81,7 @@
 BOOST_CHECK_TYPE(::tt::make_unsigned<volatile unsigned int>::type, volatile unsigned int);
 BOOST_CHECK_TYPE(::tt::make_unsigned<volatile unsigned long>::type, volatile unsigned long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_unsigned<volatile unsigned long long>::type, volatile unsigned long long);
+BOOST_CHECK_TYPE(::tt::make_unsigned<volatile boost::ulong_long_type>::type, volatile boost::ulong_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_unsigned<volatile unsigned __int64>::type, volatile unsigned __int64);
 #endif
@@ -91,7 +91,7 @@
 BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile unsigned int>::type, const volatile unsigned int);
 BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile unsigned long>::type, const volatile unsigned long);
 #ifdef BOOST_HAS_LONG_LONG
-BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile unsigned long long>::type, const volatile unsigned long long);
+BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile boost::ulong_long_type>::type, const volatile boost::ulong_long_type);
 #elif defined(BOOST_HAS_MS_INT64)
 BOOST_CHECK_TYPE(::tt::make_unsigned<const volatile unsigned __int64>::type, const volatile unsigned __int64);
 #endif

Modified: branches/fix-links/libs/utility/value_init.htm
==============================================================================
--- branches/fix-links/libs/utility/value_init.htm (original)
+++ branches/fix-links/libs/utility/value_init.htm 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -17,11 +17,13 @@
 <dl>
   <dt>Rationale</dt>
   <dt>Introduction</dt>
+ <dt>Details</dt>
 </dl>
                    
 <ul>
           <li>value-initialization</li>
           <li>value-initialization syntax</li>
+ <li>compiler issues</li>
                    
 </ul>
                    
@@ -30,7 +32,8 @@
 </dl>
                    
 <ul>
- <li>value_initialized<></li>
+ <li>template class value_initialized<T></li>
+ <li>class initialized_value</li>
                    
 </ul>
               <a href="#acknowledgements">Acknowledgements</a><br>
@@ -44,24 +47,104 @@
 for initialization. Depending on the type, the value of a newly constructed
   object can be zero-initialized (logically 0), default-constructed (using
   the default constructor), or indeterminate. When writing generic code,
-this problem must be addressed. <code>value_initialized</code> provides
+this problem must be addressed. The template <code>value_initialized</code> provides
 a solution with consistent syntax for value initialization of scalar,
-union and class types. <br>
+union and class types.
+Moreover, <code>value_initialized</code> offers a workaround to various
+compiler issues regarding value-initialization.
+
+Furthermore a convenience class, <code>initialized_value</code> is provided,
+to avoid repeating the type name when retrieving the value from a
+<code>value_initialized&lt;T&gt;</code> object.
+<br>
   </p>
         
 <h2><a name="intro"></a>Introduction</h2>
      
-<p>The C++ standard [1] contains the definitions
+<p>
+There are various ways to initialize a variable, in C++. The following
+declarations all <em>may</em> have a local variable initialized to its default
+value:
+<pre>
+ T1 var1;
+ T2 var2 = 0;
+ T3 var3 = {};
+ T4 var4 = T4();
+</pre>
+Unfortunately, whether or not any of those declarations correctly
+initialize the variable very much depends on its type. The first
+declaration is valid for any <a href="http://www.sgi.com/tech/stl/DefaultConstructible.html">
+DefaultConstructible</a> type (by definition).
+However, it does not always do an initialization!
+It correctly initializes the variable when it's an instance of a
+class, and the author of the class has provided a proper default
+constructor. On the other hand, the value of <code>var1</code> is <em>indeterminate</em> when
+its type is an arithmetic type, like <code>int</code>, <code>float</code>, or <code>char</code>.
+An arithmetic variable
+is of course initialized properly by the second declaration, <code>T2
+var2 = 0</code>. But this initialization form usually won't work for a
+class type (unless the class was especially written to support being
+initialized that way). The third form, <code>T3 var3 = {}</code>
+initializes an aggregate, typically a "C-style" <code>struct</code> or a "C-style" array.
+However, the syntax is not allowed for a class that has an explicitly declared
+constructor. (But watch out for an upcoming C++ language change,
+by Bjarne Stroustrup et al [1]!)
+The fourth form is the most generic form of them, as it
+can be used to initialize arithmetic types, class types, aggregates, pointers, and
+other types. The declaration, <code>T4 var4 = T4()</code>, should be read
+as follows: First a temporary object is created, by <code>T4()</code>.
+This object is value-initialized. Next the temporary
+object is copied to the named variable, <code>var4</code>. Afterwards, the temporary
+is destroyed. While the copying and the destruction are likely to
+be optimized away, C++ still requires the type <code>T4</code> to be
+CopyConstructible.
+(So <code>T4</code> needs to be <em>both</em> DefaultConstructible <em>and</em> CopyConstructible.)
+A class may not be CopyConstructible, for example because it may have a
+private and undefined copy constructor,
+or because it may be derived from boost::noncopyable.
+Scott Meyers [2] explains why a class would be defined like that.
+</p>
+<p>
+There is another, less obvious disadvantage to the fourth form, <code>T4 var4 = T4()</code>:
+It suffers from various compiler issues, causing
+a variable to be left uninitialized in some compiler specific cases.
+</p>
+<p>
+The template value_initialized
+offers a generic way to initialize
+an object, like <code>T4 var4 = T4()</code>, but without requiring its type
+to be CopyConstructible. And it offers a workaround to those compiler issues
+regarding value-initialization as well! It allows getting an initialized
+variable of any type; it <em>only</em> requires the type to be DefaultConstructible.
+A properly <em>value-initialized</em> object of type <code>T</code> is
+constructed by the following declaration:
+<pre>
+ value_initialized&lt;T&gt; var;
+</pre>
+</p>
+<p>
+The convenience class initialized_value
+allows value-initializing a variable as follows:
+<pre>
+ T var = initialized_value();
+</pre>
+This form of initialization is also very similar to <code>T4 var4 = T4()</code>,
+but robust against the aforementioned compiler issues.
+
+</p>
+
+<h2><a name="details"></a>Details</h2>
+<p>The C++ standard [3] contains the definitions
     of <code>zero-initialization</code> and <code>default-initialization</code>.
      Informally, zero-initialization means that the object is given the initial
      value 0 (converted to the type) and default-initialization means that
- POD [2] types are zero-initialized, while class
+ POD [4] types are zero-initialized, while non-POD class
  types are initialized with their corresponding default constructors. A
 <i>declaration</i> can contain an <i>initializer</i>, which specifies the
 object's initial value. The initializer can be just '()', which states that
-the object shall be default-initialized (but see below). However, if a <i>declaration</i>
+the object shall be value-initialized (but see below). However, if a <i>declaration</i>
   has no <i>initializer</i> and it is of a non-<code>const</code>, non-<code>static</code>
- POD type, the initial value is indeterminate:<cite>(see &sect;8.5 for the
+ POD type, the initial value is indeterminate: <cite>(see &sect;8.5, [dcl.init], for the
    accurate definitions).</cite></p>
                    
 <pre>int x ; // no initializer. x value is indeterminate.<br>std::string s ; // no initializer, s is default-constructed.<br><br>int y = int() ; <br>// y is initialized using copy-initialization<br>// but the temporary uses an empty set of parentheses as the initializer,<br>// so it is default-constructed.<br>// A default constructed POD type is zero-initialized,<br>// therefore, y == 0.<br><br>void foo ( std::string ) ;<br>foo ( std::string() ) ; <br>// the temporary string is default constructed <br>// as indicated by the initializer () </pre>
@@ -87,14 +170,11 @@
 <p>In order to specify value-initialization of an object we need to use the
      empty-set initializer: (). </p>
                    
-<p><i>(but recall that the current C++ Standard states that '()' invokes default-initialization,
-not value-initialization)</i></p>
-
 <p>As before, a declaration with no intializer specifies default-initialization,
     and a declaration with a non-empty initializer specifies copy (=xxx) or
   direct (xxx) initialization. </p>
                    
-<pre>template&lt;class T&gt; void eat(T);<br>int x ; // indeterminate initial value.<br>std::string s; // default-initialized.<br>eat ( int() ) ; // value-initialized<br>eat ( std::string() ) ; // value-initialied</pre>
+<pre>template&lt;class T&gt; void eat(T);<br>int x ; // indeterminate initial value.<br>std::string s; // default-initialized.<br>eat ( int() ) ; // value-initialized<br>eat ( std::string() ) ; // value-initialized</pre>
                     
 <h4><a name="valueinitsyn">value-initialization</a> syntax</h4>
                    
@@ -102,7 +182,7 @@
 parentheses is not permitted by the syntax of initializers because it is
 parsed as the declaration of a function taking no arguments: </p>
                    
-<pre>int x() ; // declares function int(*)()<br>int y ( int() ) ; // decalares function int(*)( int(*)() )</pre>
+<pre>int x() ; // declares function int(*)()</pre>
                     
 <p>Thus, the empty () must be put in some other initialization context.</p>
                    
@@ -124,8 +204,50 @@
                    
 <pre>template&lt;class T&gt; <br>struct W <br>{<br> // value-initialization of 'data' here.<br> W() : data() {}<br> T data ;<br>} ;<br>W&lt;int&gt; w ;<br>// w.data is value-initialized for any type. </pre>
                     
-<p><code>This is the solution supplied by the value_initialized&lt;&gt; template
- class.</code></p>
+<p>This is the solution as it was supplied by earlier versions of the
+<code>value_initialized&lt;T&gt;</code> template
+ class. Unfortunately this approach suffered from various compiler issues.</p>
+
+<h4><a name="compiler_issues">compiler issues</a> </h4>
+
+Various compilers haven't yet fully implemented value-initialization.
+So when an object should be <em>value-initialized</em> (according to the C++ Standard),
+it <em>may</em> in practice still be left uninitialized, because of those
+compiler issues! It's hard to make a general statement on what those issues
+are like, because they depend on the compiler you are using, its version number,
+and the type of object you would like to have value-initialized.
+Compilers usually support value-initialization for built-in types properly.
+But objects of user-defined types that involve <em>aggregates</em> may <em>in some cases</em>
+be partially, or even entirely left uninitialized, when they should be value-initialized.
+</p>
+<p>
+We have encountered issues regarding value-initialization on compilers by
+Microsoft, Sun, Borland, and GNU. Here is a list of bug reports on those issues:
+<table summary="Compiler bug reports regarding value-initialization" border="0" cellpadding="7" cellspacing="1" >
+<tr><td>
+<a href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=100744">
+Microsoft Feedback ID 100744 - Value-initialization in new-expression</a>
+<br>Reported by Pavel Kuznetsov (MetaCommunications Engineering), 2005-07-28
+<br>
+<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30111">
+GCC Bug 30111 - Value-initialization of POD base class doesn't initialize members</a>
+<br>Reported by Jonathan Wakely, 2006-12-07
+<br>
+<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916">
+GCC Bug 33916 - Default constructor fails to initialize array members</a>
+<br>Reported by Michael Elizabeth Chastain, 2007-10-26
+<br>
+<a href="http://qc.codegear.com/wc/qcmain.aspx?d=51854">
+Borland Report 51854 - Value-initialization: POD struct should be zero-initialized</a>
+<br>Reported by Niels Dekker (LKEB, Leiden University Medical Center), 2007-09-11
+<br>
+</td></tr></table>
+</p><p>
+New versions of <code>value_initialized</code>
+(Boost release version 1.35 or higher)
+offer a workaround to these issues: <code>value_initialized</code> will now clear
+its internal data, prior to constructing the object that it contains.
+</p>
                    
 <h2><a name="types"></a>Types</h2>
                    
@@ -189,25 +311,72 @@
 the wrapped object is always performed with the <code>get()</code> idiom:</p>
                    
 <pre>value_initialized&lt;int&gt; x ;<br>get(x) = 1 ; // OK<br><br>value_initialized&lt;int const&gt; cx ;<br>get(x) = 1 ; // ERROR: Cannot modify a const object<br><br>value_initialized&lt;int&gt; const x_c ;<br>get(x_c) = 1 ; // ERROR: Cannot modify a const object<br><br>value_initialized&lt;int const&gt; const cx_c ;<br>get(cx_c) = 1 ; // ERROR: Cannot modify a const object<br></pre>
+
+<h2><a name="initialized_value"><code>class initialized_value</code></a></h2>
+
+<pre>
+namespace boost {
+class initialized_value
+{
+ public :
+ template &lt;class T&gt; operator T() const ;
+};
+} // namespace boost
+</pre>
+
+The class <code>initialized_value</code> provides a convenient way to get
+an initialized value: its conversion operator provides an appropriate
+<em>value-initialized</em> object for any CopyConstructible type.
+
+Suppose you need to have an initialized variable of type <code>T</code>.
+You could do it as follows:
+<pre>
+ T var = T();
+</pre>
+But as mentioned before, this form suffers from various compiler issues.
+The template <code>value_initialized</code> offers a workaround:
+<pre>
+ T var = get( value_initialized&lt;T&gt;() );
+</pre>
+Unfortunately both forms repeat the type name, which
+is rather short now (<code>T</code>), but could of course be
+more like <code>Namespace::Template&lt;Arg&gt;::Type</code>.
+Instead, one could use <code>initialized_value</code> as follows:
+<pre>
+ T var = initialized_value();
+</pre>
                     
 <h3><a name="references">References</a></h3>
- [1] The C++ Standard, ISO/IEC 14882:98 <br>
- [2] Plain Old Data
+ [1] Bjarne Stroustrup, Gabriel Dos Reis, and J. Stephen Adamczyk wrote
+ various papers, proposing to extend the support for brace-enclosed <em>initializer lists</em>
+ in the next version of C++.
+ This would allow a variable <code>var</code> of any DefaultConstructible type
+ <code>T</code> to be <em>value-initialized</em> by doing <code>T var = {}</code>.
+ The papers are listed at Bjarne's web page,
+ My C++ Standards committee papers <br>
+ [2] Scott Meyers, Effective C++, Third Edition, item 6,
+ <em>Explicitly disallow the use of compiler-generated functions you do not want</em>,
+ Scott Meyers: Books and CDs <br>
+ [3] The C++ Standard, Second edition (2003), ISO/IEC 14882:2003 <br>
+ [4] POD stands for "Plain Old Data"
+
 <h3><a name="acknowledgements"></a>Acknowledgements</h3>
      value_initialized was developed by Fernando Cacciola, with help and
 suggestions from David Abrahams and Darin Adler.<br>
-Special thanks to Björn Karlsson who carefully edited and completed this documentation.
-
+Special thanks to Bj&ouml;rn Karlsson who carefully edited and completed this documentation.
+
+<p>value_initialized was reimplemented by Fernando Cacciola and Niels Dekker
+for Boost release version 1.35 (2008), offering a workaround to various compiler issues.
+ </p>
 <p>Developed by <a href="mailto:fernando_cacciola_at_[hidden]">Fernando Cacciola</a>,
      the latest version of this file can be found at <a
- href="http://www.boost.org">www.boost.org</a>, and the boost discussion list
-at www.yahoogroups.com/list/boost.
+ href="http://www.boost.org">www.boost.org</a>.
      </p>
                     
 <hr>
-<p>Revised 19 September 2002</p>
+<p>Revised 16 January 2008</p>
                    
-<p>&copy; Copyright Fernando Cacciola, 2002.</p>
+<p>&copy; Copyright Fernando Cacciola, 2002, 2008.</p>
                    
 <p>Distributed under the Boost Software License, Version 1.0. See
 <a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>

Modified: branches/fix-links/libs/utility/value_init_test.cpp
==============================================================================
--- branches/fix-links/libs/utility/value_init_test.cpp (original)
+++ branches/fix-links/libs/utility/value_init_test.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,4 +1,4 @@
-// Copyright 2002, Fernando Luis Cacciola Carballal.
+// Copyright 2002-2008, Fernando Luis Cacciola Carballal.
 //
 // Distributed under the Boost Software License, Version 1.0. (See
 // accompanying file LICENSE_1_0.txt or copy at
@@ -6,7 +6,8 @@
 //
 // Test program for "boost/utility/value_init.hpp"
 //
-// Initial: 21 Agu 2002
+// 21 Ago 2002 (Created) Fernando Cacciola
+// 19 Jan 2008 (Added tests regarding compiler issues and initialized_value) Fernando Cacciola, Niels Dekker
 
 #include <cstring> // For memcmp.
 #include <iostream>
@@ -51,7 +52,7 @@
 struct NonPOD : NonPODBase
 {
   NonPOD () : id() {}
- NonPOD ( std::string const& id_) : id(id_) {}
+ explicit NonPOD ( std::string const& id_) : id(id_) {}
 
   friend std::ostream& operator << ( std::ostream& os, NonPOD const& npod )
     { return os << '(' << npod.id << ')' ; }
@@ -179,6 +180,32 @@
 };
 
 
+template<class T>
+void check_initialized_value ( T const& y )
+{
+ T initializedValue = boost::initialized_value() ;
+ BOOST_CHECK ( y == initializedValue ) ;
+}
+
+#ifdef __BORLANDC__
+#if __BORLANDC__ == 0x582
+void check_initialized_value( NonPOD const& )
+{
+ // The initialized_value check is skipped for Borland 5.82
+ // and this type (NonPOD), because the following statement
+ // won't compile on this particular compiler version:
+ // NonPOD initializedValue = boost::initialized_value() ;
+ //
+ // This is caused by a compiler bug, that is fixed with a newer version
+ // of the Borland compiler. The Release Notes for Delphi(R) 2007 for
+ // Win32(R) and C++Builder(R) 2007 (http://dn.codegear.com/article/36575)
+ // say about similar statements:
+ // both of these statements now compile but under 5.82 got the error:
+ // Error E2015: Ambiguity between 'V::V(const A &)' and 'V::V(const V &)'
+}
+#endif
+#endif
+
 //
 // This test function tests boost::value_initialized<T> for a specific type T.
 // The first argument (y) is assumed have the value of a value-initialized object.
@@ -188,9 +215,13 @@
 bool test ( T const& y, T const& z )
 {
   const boost::unit_test::counter_t counter_before_test = boost::minimal_test::errors_counter();
+
+ check_initialized_value(y);
+
   boost::value_initialized<T> x ;
   BOOST_CHECK ( y == x ) ;
   BOOST_CHECK ( y == boost::get(x) ) ;
+
   static_cast<T&>(x) = z ;
   boost::get(x) = z ;
   BOOST_CHECK ( x == z ) ;

Modified: branches/fix-links/libs/wave/ChangeLog
==============================================================================
--- branches/fix-links/libs/wave/ChangeLog (original)
+++ branches/fix-links/libs/wave/ChangeLog 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
 Boost.Wave: A Standard compliant C++ preprocessor library
 http://www.boost.org/
 
-Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 Software License, Version 1.0. (See accompanying file
 LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 -------------------------------------------------------------------------------
@@ -156,7 +156,8 @@
   anymore.
 - Applied patch provided by Jens Seidel making sure every header compiles on
   its own.
-
+- Updates to the documentation.
+
 Boost V1.34.0
 - Wave Version 1.2.4
 - Added the possibility to explicitly enable/disable the generation of #line

Modified: branches/fix-links/libs/wave/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/doc/acknowledgements.html
==============================================================================
--- branches/fix-links/libs/wave/doc/acknowledgements.html (original)
+++ branches/fix-links/libs/wave/doc/acknowledgements.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -83,7 +83,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
   <font size="2">Distributed under the Boost Software
   License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/wave/doc/class_ref_ctxpolicy_depr.html
==============================================================================
--- branches/fix-links/libs/wave/doc/class_ref_ctxpolicy_depr.html (original)
+++ branches/fix-links/libs/wave/doc/class_ref_ctxpolicy_depr.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -332,7 +332,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <p class="copyright"><span class="updated">Last updated:

Modified: branches/fix-links/libs/wave/doc/class_reference_context.html
==============================================================================
--- branches/fix-links/libs/wave/doc/class_reference_context.html (original)
+++ branches/fix-links/libs/wave/doc/class_reference_context.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -502,7 +502,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
   <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/class_reference_ctxpolicy.html
==============================================================================
--- branches/fix-links/libs/wave/doc/class_reference_ctxpolicy.html (original)
+++ branches/fix-links/libs/wave/doc/class_reference_ctxpolicy.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -431,7 +431,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <p class="copyright"><span class="updated">Last updated:

Modified: branches/fix-links/libs/wave/doc/class_reference_filepos.html
==============================================================================
--- branches/fix-links/libs/wave/doc/class_reference_filepos.html (original)
+++ branches/fix-links/libs/wave/doc/class_reference_filepos.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -109,7 +109,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <p class="copyright"><span class="updated">Last updated:

Modified: branches/fix-links/libs/wave/doc/class_reference_inptpolcy.html
==============================================================================
--- branches/fix-links/libs/wave/doc/class_reference_inptpolcy.html (original)
+++ branches/fix-links/libs/wave/doc/class_reference_inptpolcy.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -121,7 +121,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
   <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/class_reference_lexer.html
==============================================================================
--- branches/fix-links/libs/wave/doc/class_reference_lexer.html (original)
+++ branches/fix-links/libs/wave/doc/class_reference_lexer.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -93,7 +93,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <p class="copyright"><span class="updated">Last updated:

Modified: branches/fix-links/libs/wave/doc/class_reference_tokentype.html
==============================================================================
--- branches/fix-links/libs/wave/doc/class_reference_tokentype.html (original)
+++ branches/fix-links/libs/wave/doc/class_reference_tokentype.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -165,7 +165,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
   <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/compiletime_config.html
==============================================================================
--- branches/fix-links/libs/wave/doc/compiletime_config.html (original)
+++ branches/fix-links/libs/wave/doc/compiletime_config.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -224,7 +224,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/introduction.html
==============================================================================
--- branches/fix-links/libs/wave/doc/introduction.html (original)
+++ branches/fix-links/libs/wave/doc/introduction.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -82,7 +82,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/macro_expansion_process.html
==============================================================================
--- branches/fix-links/libs/wave/doc/macro_expansion_process.html (original)
+++ branches/fix-links/libs/wave/doc/macro_expansion_process.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -88,7 +88,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/predefined_macros.html
==============================================================================
--- branches/fix-links/libs/wave/doc/predefined_macros.html (original)
+++ branches/fix-links/libs/wave/doc/predefined_macros.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -167,7 +167,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
   <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/preface.html
==============================================================================
--- branches/fix-links/libs/wave/doc/preface.html (original)
+++ branches/fix-links/libs/wave/doc/preface.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -98,7 +98,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/quickstart.html
==============================================================================
--- branches/fix-links/libs/wave/doc/quickstart.html (original)
+++ branches/fix-links/libs/wave/doc/quickstart.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -110,7 +110,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/references.html
==============================================================================
--- branches/fix-links/libs/wave/doc/references.html (original)
+++ branches/fix-links/libs/wave/doc/references.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -89,7 +89,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
   <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/samples.html
==============================================================================
--- branches/fix-links/libs/wave/doc/samples.html (original)
+++ branches/fix-links/libs/wave/doc/samples.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -103,7 +103,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
     <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/supported_pragmas.html
==============================================================================
--- branches/fix-links/libs/wave/doc/supported_pragmas.html (original)
+++ branches/fix-links/libs/wave/doc/supported_pragmas.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -129,7 +129,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/doc/token_ids.html
==============================================================================
--- branches/fix-links/libs/wave/doc/token_ids.html (original)
+++ branches/fix-links/libs/wave/doc/token_ids.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -234,11 +234,6 @@
     <td class="table_cells" width="29%" ><code>default</code></td>
   </tr>
   <tr>
- <td class="table_cells" width="40%" > <p>T_DEFINED </p></td>
- <td class="table_cells" width="31%" > <p>KeywordTokenType</p></td>
- <td class="table_cells" width="29%" ><code>defined</code></td>
- </tr>
- <tr>
     <td class="table_cells" width="40%" > <p>T_DELETE </p></td>
     <td class="table_cells" width="31%" > <p>KeywordTokenType</p></td>
     <td class="table_cells" width="29%" ><code>delete</code></td>
@@ -970,12 +965,12 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
   <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>
 <p class="copyright"><span class="updated">Last updated:
- <!-- #BeginDate format:fcAm1m -->Sunday, May 15, 2005 12:23<!-- #EndDate -->
+ <!-- #BeginDate format:fcAm1m -->Friday, January 18, 2008 11:35<!-- #EndDate -->
   </span></p>
 </body>
 </html>

Modified: branches/fix-links/libs/wave/doc/tracing_facility.html
==============================================================================
--- branches/fix-links/libs/wave/doc/tracing_facility.html (original)
+++ branches/fix-links/libs/wave/doc/tracing_facility.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -149,7 +149,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <p class="copyright"><span class="updated">Last updated:

Modified: branches/fix-links/libs/wave/doc/wave_driver.html
==============================================================================
--- branches/fix-links/libs/wave/doc/wave_driver.html (original)
+++ branches/fix-links/libs/wave/doc/wave_driver.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -268,7 +268,7 @@
   </tr>
 </table>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/index.html
==============================================================================
--- branches/fix-links/libs/wave/index.html (original)
+++ branches/fix-links/libs/wave/index.html 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -99,7 +99,7 @@
 </table>
 <br>
 <hr size="1">
-<p class="copyright">Copyright &copy; 2003-2007 Hartmut Kaiser<br>
+<p class="copyright">Copyright &copy; 2003-2008 Hartmut Kaiser<br>
   <br>
 <font size="2">Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) </font> </p>
 <span class="updated"></span>

Modified: branches/fix-links/libs/wave/samples/advanced_hooks/advanced_hooks.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/advanced_hooks/advanced_hooks.cpp (original)
+++ branches/fix-links/libs/wave/samples/advanced_hooks/advanced_hooks.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/advanced_hooks/advanced_hooks.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/advanced_hooks/advanced_hooks.hpp (original)
+++ branches/fix-links/libs/wave/samples/advanced_hooks/advanced_hooks.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/advanced_hooks/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/samples/advanced_hooks/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/samples/advanced_hooks/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens.cpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -8,7 +8,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens.hpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -8,7 +8,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens_config.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens_config.hpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/cpp_tokens_config.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
         
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_exprgrammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_exprgrammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_exprgrammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -7,7 +7,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_literalgrs.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_literalgrs.cpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_cpp_literalgrs.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_defined_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_defined_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_defined_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_slex_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_slex_lexer.cpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/instantiate_slex_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/slex/cpp_slex_lexer.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/slex/cpp_slex_lexer.hpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/slex/cpp_slex_lexer.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
@@ -271,7 +271,6 @@
     TOKEN_DATA(CONSTCAST, "const_cast"),
     TOKEN_DATA(CONTINUE, "continue"),
     TOKEN_DATA(DEFAULT, "default"),
-// TOKEN_DATA(DEFINED, "defined"),
     TOKEN_DATA(DELETE, "delete"),
     TOKEN_DATA(DO, "do"),
     TOKEN_DATA(DOUBLE, "double"),

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/slex/lexer.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/slex/lexer.hpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/slex/lexer.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
     http://www.boost.org/
 
     Copyright (c) 2001, Daniel C. Nuffer.
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/slex_interface.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/slex_interface.hpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/slex_interface.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/slex_iterator.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/slex_iterator.hpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/slex_iterator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/cpp_tokens/slex_token.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/cpp_tokens/slex_token.hpp (original)
+++ branches/fix-links/libs/wave/samples/cpp_tokens/slex_token.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/hannibal/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/samples/hannibal/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/samples/hannibal/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/hannibal/hannibal.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/hannibal/hannibal.cpp (original)
+++ branches/fix-links/libs/wave/samples/hannibal/hannibal.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
 // Copyright (c) 2005-2006 Danny Havenith
 //
 // Boost.Wave: A Standard compliant C++ preprocessor
-// Copyright (c) 2001-2007 Hartmut Kaiser
+// Copyright (c) 2001-2008 Hartmut Kaiser
 //
 // http://www.boost.org/
 //

Modified: branches/fix-links/libs/wave/samples/hannibal/translation_unit_parser.h
==============================================================================
--- branches/fix-links/libs/wave/samples/hannibal/translation_unit_parser.h (original)
+++ branches/fix-links/libs/wave/samples/hannibal/translation_unit_parser.h 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
 // Copyright (c) 2005-2006 Danny Havenith
 //
 // Boost.Wave: A Standard compliant C++ preprocessor
-// Copyright (c) 2001-2007 Hartmut Kaiser
+// Copyright (c) 2001-2008 Hartmut Kaiser
 //
 // http://www.boost.org/
 //

Modified: branches/fix-links/libs/wave/samples/hannibal/translation_unit_skipper.h
==============================================================================
--- branches/fix-links/libs/wave/samples/hannibal/translation_unit_skipper.h (original)
+++ branches/fix-links/libs/wave/samples/hannibal/translation_unit_skipper.h 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
 // Copyright (c) 2005-2006 Danny Havenith
 //
 // Boost.Wave: A Standard compliant C++ preprocessor
-// Copyright (c) 2001-2007 Hartmut Kaiser
+// Copyright (c) 2001-2008 Hartmut Kaiser
 //
 // http://www.boost.org/
 //

Modified: branches/fix-links/libs/wave/samples/lexed_tokens/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/samples/lexed_tokens/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/samples/lexed_tokens/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/lexed_tokens/lexed_tokens.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/lexed_tokens/lexed_tokens.cpp (original)
+++ branches/fix-links/libs/wave/samples/lexed_tokens/lexed_tokens.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/samples/list_includes/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_exprgrammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_exprgrammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_exprgrammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -7,7 +7,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_literalgrs.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_literalgrs.cpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/instantiate_cpp_literalgrs.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/instantiate_defined_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/instantiate_defined_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/instantiate_defined_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/instantiate_lexertl_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/instantiate_lexertl_lexer.cpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/instantiate_lexertl_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/lexertl/lexertl_lexer.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/lexertl/lexertl_lexer.hpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/lexertl/lexertl_lexer.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/lexertl/wave_lexertl_config.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/lexertl/wave_lexertl_config.hpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/lexertl/wave_lexertl_config.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/lexertl/wave_lexertl_tables.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/lexertl/wave_lexertl_tables.hpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/lexertl/wave_lexertl_tables.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/lexertl_interface.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/lexertl_interface.hpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/lexertl_interface.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/lexertl_iterator.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/lexertl_iterator.hpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/lexertl_iterator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/list_includes.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/list_includes.cpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/list_includes.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -11,7 +11,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/list_includes.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/list_includes.hpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/list_includes.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
         
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/list_includes_config.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/list_includes_config.hpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/list_includes_config.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/list_includes/list_includes_version.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/list_includes/list_includes_version.hpp (original)
+++ branches/fix-links/libs/wave/samples/list_includes/list_includes_version.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
             
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/quick_start/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/samples/quick_start/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/samples/quick_start/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/quick_start/quick_start.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/quick_start/quick_start.cpp (original)
+++ branches/fix-links/libs/wave/samples/quick_start/quick_start.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/real_positions/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/samples/real_positions/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/real_positions/correct_token_positions.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/correct_token_positions.hpp (original)
+++ branches/fix-links/libs/wave/samples/real_positions/correct_token_positions.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_exprgrammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_exprgrammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_exprgrammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_literalgrs.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_literalgrs.cpp (original)
+++ branches/fix-links/libs/wave/samples/real_positions/instantiate_cpp_literalgrs.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/real_positions/instantiate_defined_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/instantiate_defined_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/real_positions/instantiate_defined_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/real_positions/instantiate_re2c_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/instantiate_re2c_lexer.cpp (original)
+++ branches/fix-links/libs/wave/samples/real_positions/instantiate_re2c_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/real_positions/instantiate_re2c_lexer_str.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/instantiate_re2c_lexer_str.cpp (original)
+++ branches/fix-links/libs/wave/samples/real_positions/instantiate_re2c_lexer_str.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/real_positions/real_position_token.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/real_position_token.hpp (original)
+++ branches/fix-links/libs/wave/samples/real_positions/real_position_token.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/real_positions/real_positions.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/real_positions/real_positions.cpp (original)
+++ branches/fix-links/libs/wave/samples/real_positions/real_positions.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -7,7 +7,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/token_statistics/collect_token_statistics.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/collect_token_statistics.hpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/collect_token_statistics.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
             
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/instantiate_cpp_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/instantiate_cpp_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/instantiate_cpp_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
             
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/instantiate_defined_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/instantiate_defined_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/instantiate_defined_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/instantiate_xlex_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/instantiate_xlex_lexer.cpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/instantiate_xlex_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/token_statistics.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/token_statistics.cpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/token_statistics.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/token_statistics.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/token_statistics.hpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/token_statistics.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
         
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/token_statistics_version.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/token_statistics_version.hpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/token_statistics_version.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
             
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/xlex/xlex_lexer.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/xlex/xlex_lexer.hpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/xlex/xlex_lexer.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/xlex/xpressive_lexer.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/xlex/xpressive_lexer.hpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/xlex/xpressive_lexer.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/xlex_interface.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/xlex_interface.hpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/xlex_interface.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/token_statistics/xlex_iterator.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/token_statistics/xlex_iterator.hpp (original)
+++ branches/fix-links/libs/wave/samples/token_statistics/xlex_iterator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/samples/waveidl/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/samples/waveidl/idl.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idl.cpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idl.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
@@ -91,7 +91,7 @@
         "Based on: Wave, A Standard conformant C++ preprocessor library",
         "It is hosted by http://www.boost.org/.",
         "",
- "Copyright (c) 2001-2007 Hartmut Kaiser, Distributed under the Boost",
+ "Copyright (c) 2001-2008 Hartmut Kaiser, Distributed under the Boost",
         "Software License, Version 1.0. (See accompanying file",
         "LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)",
         0

Modified: branches/fix-links/libs/wave/samples/waveidl/idl.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idl.hpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idl.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/idl_config.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idl_config.hpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idl_config.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/idl_version.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idl_version.hpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idl_version.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/idllexer/idl.re
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idllexer/idl.re (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idllexer/idl.re 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_lex_interface.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_lex_interface.hpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_lex_interface.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_lex_iterator.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_lex_iterator.hpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_lex_iterator.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re.cpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -7,7 +7,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re.hpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re2c_lexer.hpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re2c_lexer.hpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/idllexer/idl_re2c_lexer.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/instantiate_cpp_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/instantiate_cpp_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/instantiate_cpp_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
             
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/instantiate_defined_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/instantiate_defined_grammar.cpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/instantiate_defined_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/instantiate_predef_macros.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/instantiate_predef_macros.cpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/instantiate_predef_macros.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/instantiate_re2c_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/instantiate_re2c_lexer.cpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/instantiate_re2c_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/samples/waveidl/instantiate_re2c_lexer_str.cpp
==============================================================================
--- branches/fix-links/libs/wave/samples/waveidl/instantiate_re2c_lexer_str.cpp (original)
+++ branches/fix-links/libs/wave/samples/waveidl/instantiate_re2c_lexer_str.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/src/cpplexer/re2clex/aq.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/cpplexer/re2clex/aq.cpp (original)
+++ branches/fix-links/libs/wave/src/cpplexer/re2clex/aq.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
     http://www.boost.org/
 
     Copyright (c) 2001 Daniel C. Nuffer.
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp.re
==============================================================================
--- branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp.re (original)
+++ branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp.re 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
 
     Copyright (c) 2001 Daniel C. Nuffer
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp_re.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp_re.cpp (original)
+++ branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp_re.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
 
     Copyright (c) 2001 Daniel C. Nuffer
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp_re.inc
==============================================================================
--- branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp_re.inc (original)
+++ branches/fix-links/libs/wave/src/cpplexer/re2clex/cpp_re.inc 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
 
     Copyright (c) 2001 Daniel C. Nuffer
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/src/cpplexer/re2clex/strict_cpp.re
==============================================================================
--- branches/fix-links/libs/wave/src/cpplexer/re2clex/strict_cpp.re (original)
+++ branches/fix-links/libs/wave/src/cpplexer/re2clex/strict_cpp.re 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
 
     Copyright (c) 2001 Daniel C. Nuffer
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/src/cpplexer/re2clex/strict_cpp_re.inc
==============================================================================
--- branches/fix-links/libs/wave/src/cpplexer/re2clex/strict_cpp_re.inc (original)
+++ branches/fix-links/libs/wave/src/cpplexer/re2clex/strict_cpp_re.inc 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
 
     Copyright (c) 2001 Daniel C. Nuffer
- Copyright (c) 2001-2007 Hartmut Kaiser.
+ Copyright (c) 2001-2008 Hartmut Kaiser.
     Distributed under the Boost Software License, Version 1.0. (See accompanying
     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/src/instantiate_cpp_exprgrammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/instantiate_cpp_exprgrammar.cpp (original)
+++ branches/fix-links/libs/wave/src/instantiate_cpp_exprgrammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/src/instantiate_cpp_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/instantiate_cpp_grammar.cpp (original)
+++ branches/fix-links/libs/wave/src/instantiate_cpp_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/src/instantiate_cpp_literalgrs.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/instantiate_cpp_literalgrs.cpp (original)
+++ branches/fix-links/libs/wave/src/instantiate_cpp_literalgrs.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/src/instantiate_defined_grammar.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/instantiate_defined_grammar.cpp (original)
+++ branches/fix-links/libs/wave/src/instantiate_defined_grammar.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/src/instantiate_predef_macros.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/instantiate_predef_macros.cpp (original)
+++ branches/fix-links/libs/wave/src/instantiate_predef_macros.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/src/instantiate_re2c_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/instantiate_re2c_lexer.cpp (original)
+++ branches/fix-links/libs/wave/src/instantiate_re2c_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/src/instantiate_re2c_lexer_str.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/instantiate_re2c_lexer_str.cpp (original)
+++ branches/fix-links/libs/wave/src/instantiate_re2c_lexer_str.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/src/token_ids.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/token_ids.cpp (original)
+++ branches/fix-links/libs/wave/src/token_ids.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
@@ -100,113 +100,112 @@
     /* 316 */ "CONSTCAST",
     /* 317 */ "CONTINUE",
     /* 318 */ "DEFAULT",
- /* 319 */ "DEFINED",
- /* 320 */ "DELETE",
- /* 321 */ "DO",
- /* 322 */ "DOUBLE",
- /* 323 */ "DYNAMICCAST",
- /* 324 */ "ELSE",
- /* 325 */ "ENUM",
- /* 326 */ "EXPLICIT",
- /* 327 */ "EXPORT",
- /* 328 */ "EXTERN",
- /* 329 */ "FLOAT",
- /* 330 */ "FOR",
- /* 331 */ "FRIEND",
- /* 332 */ "GOTO",
- /* 333 */ "IF",
- /* 334 */ "INLINE",
- /* 335 */ "INT",
- /* 336 */ "LONG",
- /* 337 */ "MUTABLE",
- /* 338 */ "NAMESPACE",
- /* 339 */ "NEW",
- /* 340 */ "OPERATOR",
- /* 341 */ "PRIVATE",
- /* 342 */ "PROTECTED",
- /* 343 */ "PUBLIC",
- /* 344 */ "REGISTER",
- /* 345 */ "REINTERPRETCAST",
- /* 346 */ "RETURN",
- /* 347 */ "SHORT",
- /* 348 */ "SIGNED",
- /* 349 */ "SIZEOF",
- /* 350 */ "STATIC",
- /* 351 */ "STATICCAST",
- /* 352 */ "STRUCT",
- /* 353 */ "SWITCH",
- /* 354 */ "TEMPLATE",
- /* 355 */ "THIS",
- /* 356 */ "THROW",
- /* 357 */ "TRY",
- /* 358 */ "TYPEDEF",
- /* 359 */ "TYPEID",
- /* 360 */ "TYPENAME",
- /* 361 */ "UNION",
- /* 362 */ "UNSIGNED",
- /* 363 */ "USING",
- /* 364 */ "VIRTUAL",
- /* 365 */ "VOID",
- /* 366 */ "VOLATILE",
- /* 367 */ "WCHART",
- /* 368 */ "WHILE",
- /* 369 */ "PP_DEFINE",
- /* 370 */ "PP_IF",
- /* 371 */ "PP_IFDEF",
- /* 372 */ "PP_IFNDEF",
- /* 373 */ "PP_ELSE",
- /* 374 */ "PP_ELIF",
- /* 375 */ "PP_ENDIF",
- /* 376 */ "PP_ERROR",
- /* 377 */ "PP_LINE",
- /* 378 */ "PP_PRAGMA",
- /* 379 */ "PP_UNDEF",
- /* 380 */ "PP_WARNING",
- /* 381 */ "IDENTIFIER",
- /* 382 */ "OCTALINT",
- /* 383 */ "DECIMALINT",
- /* 384 */ "HEXAINT",
- /* 385 */ "INTLIT",
- /* 386 */ "LONGINTLIT",
- /* 387 */ "FLOATLIT",
- /* 388 */ "CCOMMENT",
- /* 389 */ "CPPCOMMENT",
- /* 390 */ "CHARLIT",
- /* 391 */ "STRINGLIT",
- /* 392 */ "CONTLINE",
- /* 393 */ "SPACE",
- /* 394 */ "SPACE2",
- /* 395 */ "NEWLINE",
- /* 396 */ "POUND_POUND",
- /* 397 */ "POUND",
- /* 398 */ "ANY",
- /* 399 */ "PP_INCLUDE",
- /* 400 */ "PP_QHEADER",
- /* 401 */ "PP_HHEADER",
- /* 402 */ "EOF",
- /* 403 */ "EOI",
- /* 404 */ "PP_NUMBER",
+ /* 319 */ "DELETE",
+ /* 320 */ "DO",
+ /* 321 */ "DOUBLE",
+ /* 322 */ "DYNAMICCAST",
+ /* 323 */ "ELSE",
+ /* 324 */ "ENUM",
+ /* 325 */ "EXPLICIT",
+ /* 326 */ "EXPORT",
+ /* 327 */ "EXTERN",
+ /* 328 */ "FLOAT",
+ /* 329 */ "FOR",
+ /* 330 */ "FRIEND",
+ /* 331 */ "GOTO",
+ /* 332 */ "IF",
+ /* 333 */ "INLINE",
+ /* 334 */ "INT",
+ /* 335 */ "LONG",
+ /* 336 */ "MUTABLE",
+ /* 337 */ "NAMESPACE",
+ /* 338 */ "NEW",
+ /* 339 */ "OPERATOR",
+ /* 340 */ "PRIVATE",
+ /* 341 */ "PROTECTED",
+ /* 342 */ "PUBLIC",
+ /* 343 */ "REGISTER",
+ /* 344 */ "REINTERPRETCAST",
+ /* 345 */ "RETURN",
+ /* 346 */ "SHORT",
+ /* 347 */ "SIGNED",
+ /* 348 */ "SIZEOF",
+ /* 349 */ "STATIC",
+ /* 350 */ "STATICCAST",
+ /* 351 */ "STRUCT",
+ /* 352 */ "SWITCH",
+ /* 353 */ "TEMPLATE",
+ /* 354 */ "THIS",
+ /* 355 */ "THROW",
+ /* 356 */ "TRY",
+ /* 357 */ "TYPEDEF",
+ /* 358 */ "TYPEID",
+ /* 359 */ "TYPENAME",
+ /* 360 */ "UNION",
+ /* 361 */ "UNSIGNED",
+ /* 362 */ "USING",
+ /* 363 */ "VIRTUAL",
+ /* 364 */ "VOID",
+ /* 365 */ "VOLATILE",
+ /* 366 */ "WCHART",
+ /* 367 */ "WHILE",
+ /* 368 */ "PP_DEFINE",
+ /* 369 */ "PP_IF",
+ /* 370 */ "PP_IFDEF",
+ /* 371 */ "PP_IFNDEF",
+ /* 372 */ "PP_ELSE",
+ /* 373 */ "PP_ELIF",
+ /* 374 */ "PP_ENDIF",
+ /* 375 */ "PP_ERROR",
+ /* 376 */ "PP_LINE",
+ /* 377 */ "PP_PRAGMA",
+ /* 378 */ "PP_UNDEF",
+ /* 379 */ "PP_WARNING",
+ /* 380 */ "IDENTIFIER",
+ /* 381 */ "OCTALINT",
+ /* 382 */ "DECIMALINT",
+ /* 383 */ "HEXAINT",
+ /* 384 */ "INTLIT",
+ /* 385 */ "LONGINTLIT",
+ /* 386 */ "FLOATLIT",
+ /* 387 */ "CCOMMENT",
+ /* 388 */ "CPPCOMMENT",
+ /* 389 */ "CHARLIT",
+ /* 390 */ "STRINGLIT",
+ /* 391 */ "CONTLINE",
+ /* 392 */ "SPACE",
+ /* 393 */ "SPACE2",
+ /* 394 */ "NEWLINE",
+ /* 395 */ "POUND_POUND",
+ /* 396 */ "POUND",
+ /* 397 */ "ANY",
+ /* 398 */ "PP_INCLUDE",
+ /* 399 */ "PP_QHEADER",
+ /* 400 */ "PP_HHEADER",
+ /* 401 */ "EOF",
+ /* 402 */ "EOI",
+ /* 403 */ "PP_NUMBER",
 
               // MS extensions
- /* 405 */ "MSEXT_INT8",
- /* 406 */ "MSEXT_INT16",
- /* 407 */ "MSEXT_INT32",
- /* 408 */ "MSEXT_INT64",
- /* 409 */ "MSEXT_BASED",
- /* 410 */ "MSEXT_DECLSPEC",
- /* 411 */ "MSEXT_CDECL",
- /* 412 */ "MSEXT_FASTCALL",
- /* 413 */ "MSEXT_STDCALL",
- /* 414 */ "MSEXT_TRY",
- /* 415 */ "MSEXT_EXCEPT",
- /* 416 */ "MSEXT_FINALLY",
- /* 417 */ "MSEXT_LEAVE",
- /* 418 */ "MSEXT_INLINE",
- /* 419 */ "MSEXT_ASM",
- /* 420 */ "MSEXT_REGION",
- /* 421 */ "MSEXT_ENDREGION",
+ /* 404 */ "MSEXT_INT8",
+ /* 405 */ "MSEXT_INT16",
+ /* 406 */ "MSEXT_INT32",
+ /* 407 */ "MSEXT_INT64",
+ /* 408 */ "MSEXT_BASED",
+ /* 409 */ "MSEXT_DECLSPEC",
+ /* 410 */ "MSEXT_CDECL",
+ /* 411 */ "MSEXT_FASTCALL",
+ /* 412 */ "MSEXT_STDCALL",
+ /* 413 */ "MSEXT_TRY",
+ /* 414 */ "MSEXT_EXCEPT",
+ /* 415 */ "MSEXT_FINALLY",
+ /* 416 */ "MSEXT_LEAVE",
+ /* 417 */ "MSEXT_INLINE",
+ /* 418 */ "MSEXT_ASM",
+ /* 419 */ "MSEXT_REGION",
+ /* 420 */ "MSEXT_ENDREGION",
     
- /* 422 */ "IMPORT",
+ /* 421 */ "IMPORT",
     };
 
     // make sure, I have not forgotten any commas (as I did more than once)
@@ -291,113 +290,112 @@
     /* 316 */ "const_cast",
     /* 317 */ "continue",
     /* 318 */ "default",
- /* 319 */ "defined",
- /* 320 */ "delete",
- /* 321 */ "do",
- /* 322 */ "double",
- /* 323 */ "dynamic_cast",
- /* 324 */ "else",
- /* 325 */ "enum",
- /* 326 */ "explicit",
- /* 327 */ "export",
- /* 328 */ "extern",
- /* 329 */ "float",
- /* 330 */ "for",
- /* 331 */ "friend",
- /* 332 */ "goto",
- /* 333 */ "if",
- /* 334 */ "inline",
- /* 335 */ "int",
- /* 336 */ "long",
- /* 337 */ "mutable",
- /* 338 */ "namespace",
- /* 339 */ "new",
- /* 340 */ "operator",
- /* 341 */ "private",
- /* 342 */ "protected",
- /* 343 */ "public",
- /* 344 */ "register",
- /* 345 */ "reinterpret_cast",
- /* 346 */ "return",
- /* 347 */ "short",
- /* 348 */ "signed",
- /* 349 */ "sizeof",
- /* 350 */ "static",
- /* 351 */ "static_cast",
- /* 352 */ "struct",
- /* 353 */ "switch",
- /* 354 */ "template",
- /* 355 */ "this",
- /* 356 */ "throw",
- /* 357 */ "try",
- /* 358 */ "typedef",
- /* 359 */ "typeid",
- /* 360 */ "typename",
- /* 361 */ "union",
- /* 362 */ "unsigned",
- /* 363 */ "using",
- /* 364 */ "virtual",
- /* 365 */ "void",
- /* 366 */ "volatile",
- /* 367 */ "wchar_t",
- /* 368 */ "while",
- /* 369 */ "#define",
- /* 370 */ "#if",
- /* 371 */ "#ifdef",
- /* 372 */ "#ifndef",
- /* 373 */ "#else",
- /* 374 */ "#elif",
- /* 375 */ "#endif",
- /* 376 */ "#error",
- /* 377 */ "#line",
- /* 378 */ "#pragma",
- /* 379 */ "#undef",
- /* 380 */ "#warning",
- /* 381 */ "", // identifier
- /* 382 */ "", // octalint
- /* 383 */ "", // decimalint
- /* 384 */ "", // hexlit
- /* 385 */ "", // intlit
- /* 386 */ "", // longintlit
- /* 387 */ "", // floatlit
- /* 388 */ "", // ccomment
- /* 389 */ "", // cppcomment
- /* 390 */ "", // charlit
- /* 391 */ "", // stringlit
- /* 392 */ "", // contline
- /* 393 */ "", // space
- /* 394 */ "", // space2
- /* 395 */ "\n",
- /* 396 */ "##",
- /* 397 */ "#",
- /* 398 */ "", // any
+ /* 319 */ "delete",
+ /* 320 */ "do",
+ /* 321 */ "double",
+ /* 322 */ "dynamic_cast",
+ /* 323 */ "else",
+ /* 324 */ "enum",
+ /* 325 */ "explicit",
+ /* 326 */ "export",
+ /* 327 */ "extern",
+ /* 328 */ "float",
+ /* 329 */ "for",
+ /* 330 */ "friend",
+ /* 331 */ "goto",
+ /* 332 */ "if",
+ /* 333 */ "inline",
+ /* 334 */ "int",
+ /* 335 */ "long",
+ /* 336 */ "mutable",
+ /* 337 */ "namespace",
+ /* 338 */ "new",
+ /* 339 */ "operator",
+ /* 340 */ "private",
+ /* 341 */ "protected",
+ /* 342 */ "public",
+ /* 343 */ "register",
+ /* 344 */ "reinterpret_cast",
+ /* 345 */ "return",
+ /* 346 */ "short",
+ /* 347 */ "signed",
+ /* 348 */ "sizeof",
+ /* 349 */ "static",
+ /* 350 */ "static_cast",
+ /* 351 */ "struct",
+ /* 352 */ "switch",
+ /* 353 */ "template",
+ /* 354 */ "this",
+ /* 355 */ "throw",
+ /* 356 */ "try",
+ /* 357 */ "typedef",
+ /* 358 */ "typeid",
+ /* 359 */ "typename",
+ /* 360 */ "union",
+ /* 361 */ "unsigned",
+ /* 362 */ "using",
+ /* 363 */ "virtual",
+ /* 364 */ "void",
+ /* 365 */ "volatile",
+ /* 366 */ "wchar_t",
+ /* 367 */ "while",
+ /* 368 */ "#define",
+ /* 369 */ "#if",
+ /* 370 */ "#ifdef",
+ /* 371 */ "#ifndef",
+ /* 372 */ "#else",
+ /* 373 */ "#elif",
+ /* 374 */ "#endif",
+ /* 375 */ "#error",
+ /* 376 */ "#line",
+ /* 377 */ "#pragma",
+ /* 378 */ "#undef",
+ /* 379 */ "#warning",
+ /* 380 */ "", // identifier
+ /* 381 */ "", // octalint
+ /* 382 */ "", // decimalint
+ /* 383 */ "", // hexlit
+ /* 384 */ "", // intlit
+ /* 385 */ "", // longintlit
+ /* 386 */ "", // floatlit
+ /* 387 */ "", // ccomment
+ /* 388 */ "", // cppcomment
+ /* 389 */ "", // charlit
+ /* 390 */ "", // stringlit
+ /* 391 */ "", // contline
+ /* 392 */ "", // space
+ /* 393 */ "", // space2
+ /* 394 */ "\n",
+ /* 395 */ "##",
+ /* 396 */ "#",
+ /* 397 */ "", // any
+ /* 398 */ "#include",
     /* 399 */ "#include",
     /* 400 */ "#include",
- /* 401 */ "#include",
- /* 402 */ "", // eof
- /* 403 */ "", // eoi
- /* 404 */ "", // pp-number
+ /* 401 */ "", // eof
+ /* 402 */ "", // eoi
+ /* 403 */ "", // pp-number
 
               // MS extensions
- /* 405 */ "__int8",
- /* 406 */ "__int16",
- /* 407 */ "__int32",
- /* 408 */ "__int64",
- /* 409 */ "__based",
- /* 410 */ "__declspec",
- /* 411 */ "__cdecl",
- /* 412 */ "__fastcall",
- /* 413 */ "__stdcall",
- /* 414 */ "__try",
- /* 415 */ "__except",
- /* 416 */ "__finally",
- /* 417 */ "__leave",
- /* 418 */ "__inline",
- /* 419 */ "__asm",
- /* 420 */ "#region",
- /* 421 */ "#endregion",
-
- /* 422 */ "import",
+ /* 404 */ "__int8",
+ /* 405 */ "__int16",
+ /* 406 */ "__int32",
+ /* 407 */ "__int64",
+ /* 408 */ "__based",
+ /* 409 */ "__declspec",
+ /* 410 */ "__cdecl",
+ /* 411 */ "__fastcall",
+ /* 412 */ "__stdcall",
+ /* 413 */ "__try",
+ /* 414 */ "__except",
+ /* 415 */ "__finally",
+ /* 416 */ "__leave",
+ /* 417 */ "__inline",
+ /* 418 */ "__asm",
+ /* 419 */ "#region",
+ /* 420 */ "#endregion",
+
+ /* 421 */ "import",
     };
      
     // make sure, I have not forgotten any commas (as I did more than once)

Modified: branches/fix-links/libs/wave/src/wave_config_constant.cpp
==============================================================================
--- branches/fix-links/libs/wave/src/wave_config_constant.cpp (original)
+++ branches/fix-links/libs/wave/src/wave_config_constant.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/build/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/wave/test/build/Jamfile.v2 (original)
+++ branches/fix-links/libs/wave/test/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testlexers/cpp_tokens.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testlexers/cpp_tokens.hpp (original)
+++ branches/fix-links/libs/wave/test/testlexers/cpp_tokens.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testlexers/test_lexertl_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testlexers/test_lexertl_lexer.cpp (original)
+++ branches/fix-links/libs/wave/test/testlexers/test_lexertl_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testlexers/test_re2c_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testlexers/test_re2c_lexer.cpp (original)
+++ branches/fix-links/libs/wave/test/testlexers/test_re2c_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testlexers/test_slex_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testlexers/test_slex_lexer.cpp (original)
+++ branches/fix-links/libs/wave/test/testlexers/test_slex_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testlexers/test_xlex_lexer.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testlexers/test_xlex_lexer.cpp (original)
+++ branches/fix-links/libs/wave/test/testlexers/test_xlex_lexer.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/cmd_line_utils.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/cmd_line_utils.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/cmd_line_utils.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_001.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_001.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_001.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_002.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_002.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_002.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_003.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_003.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_003.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_004.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_004.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_004.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_005.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_005.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_005.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_006.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_006.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_006.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_007.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_007.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_007.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_008.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_008.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_008.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_009.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_009.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_009.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_010.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_010.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_010.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_011.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_011.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_011.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_012.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_012.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_012.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_013.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_013.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_013.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_014.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_014.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_014.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_015.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_015.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_015.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_016.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_016.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_016.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_017.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_017.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_017.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_018.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_018.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_018.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_019.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_019.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_019.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_020.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_020.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_020.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_021.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_021.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_021.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_022.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_022.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_022.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_023.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_023.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_023.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_024.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_024.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_024.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_025.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_025.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_025.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_026.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_026.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_026.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_027.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_027.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_027.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_028.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_028.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_028.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_029.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_029.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_029.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_030.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_030.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_030.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_031.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_031.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_031.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_032.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_032.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_032.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_033.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_033.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_033.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_034.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_034.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_034.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_035.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_035.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_035.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_036.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_036.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_036.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_1_037.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_1_037.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_1_037.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_001.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_001.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_001.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_002.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_002.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_002.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_003.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_003.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_003.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_004.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_004.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_004.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_005.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_005.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_005.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_006.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_006.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_006.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_007.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_007.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_007.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_008.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_008.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_008.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_009.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_009.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_009.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_010.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_010.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_010.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_011.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_011.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_011.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_012.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_012.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_012.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_013.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_013.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_013.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_014.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_014.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_014.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_015.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_015.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_015.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_016.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_016.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_016.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_2_017.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_2_017.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_2_017.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_3_001.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_3_001.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_3_001.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_3_002.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_3_002.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_3_002.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_3_003.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_3_003.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_3_003.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_3_004.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_3_004.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_3_004.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_4_001.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_4_001.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_4_001.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_4_002.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_4_002.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_4_002.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_4_003.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_4_003.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_4_003.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_4_004.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_4_004.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_4_004.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_001.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_001.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_001.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_002.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_002.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_002.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_003.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_003.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_003.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_004.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_004.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_004.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_005.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_005.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_005.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_006.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_006.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_006.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_007.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_007.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_007.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_007.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_007.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_007.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_008.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_008.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_008.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_009.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_009.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_009.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_010.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_010.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_010.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_011.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_011.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_011.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_012.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_012.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_012.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_013.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_013.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_013.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_014.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_014.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_014.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_015.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_015.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_015.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_016.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_016.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_016.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_017.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_017.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_017.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_018.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_018.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_018.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_019.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_019.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_019.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_020.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_020.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_020.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_021.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_021.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_021.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_022.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_022.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_022.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_023.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_023.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_023.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_024.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_024.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_024.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_025.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_025.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_025.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_026.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_026.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_026.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_027.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_027.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_027.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_028.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_028.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_028.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_029.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_029.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_029.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_030.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_030.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_030.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_031.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_031.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_031.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_031.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_031.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_031.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_032.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_032.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_032.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_033.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_033.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_033.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_034.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_034.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_034.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_01.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_01.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_01.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_02.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_02.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_02.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_03.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_03.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_03.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_04.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_04.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_04.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_05.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_05.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_05.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_06.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_06.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_06.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_07.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_07.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_07.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_08.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_08.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_08.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_09.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_09.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_09.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_10.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_10.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_10.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_11.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_11.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_11.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_12.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_12.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_12.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_13.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_13.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_13.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_14.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_14.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_14.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_15.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_15.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_5_035_15.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_001.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_001.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_001.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_002.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_002.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_002.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_003.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_003.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_003.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_004.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_004.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_004.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_005.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_005.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_005.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_006.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_006.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_006.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_007.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_007.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_007.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_008.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_008.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_008.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_009.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_009.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_009.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_010.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_010.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_010.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_011.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_011.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_011.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_012.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_012.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_012.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_013.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_013.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_013.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_014.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_014.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_014.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_015.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_015.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_015.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_016.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_016.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_016.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_017.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_017.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_017.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_018.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_018.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_018.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_019.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_019.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_019.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_020.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_020.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_020.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_021.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_021.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_021.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_022.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_022.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_022.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_023.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_023.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_023.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_024.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_024.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_024.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_025.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_025.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_025.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_026.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_026.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_026.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_027.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_027.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_027.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_028.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_028.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_028.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_029.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_029.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_029.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_029.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_029.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_029.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_030.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_030.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_030.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_030.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_030.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_030.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_031.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_031.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_031.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_032.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_032.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_032.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_033.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_033.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_033.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_034.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_034.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_034.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_035.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_035.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_035.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_036.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_036.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_036.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_037.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_037.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_037.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_038.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_038.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_038.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_039.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_039.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_039.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_040.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_040.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_040.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_041.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_041.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_041.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_042.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_042.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_042.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_043.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_043.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_043.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_044.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_044.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_044.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_045.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_045.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_045.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_046.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_046.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_046.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_047.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_047.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_047.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_048.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_048.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_048.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_049.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_049.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_049.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_050.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_050.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_050.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_051.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_051.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_051.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_052.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_052.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_052.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_053.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_053.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_053.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_054.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_054.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_054.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_055.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_055.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_055.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_056.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_056.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_056.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_057.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_057.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_057.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_058.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_058.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_058.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_059.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_059.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_059.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_060.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_060.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_060.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_061.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_061.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_061.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_062.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_062.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_062.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_063.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_063.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_063.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_063.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_063.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_063.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_064.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_064.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_064.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_065.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_065.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_065.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_066.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_066.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_066.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_066.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_066.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_066.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_067.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_067.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_067.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_067.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_067.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_067.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_068.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_068.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_068.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_6_069.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_6_069.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_6_069.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_001.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_001.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_001.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_002.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_002.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_002.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_003.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_003.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_003.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_004.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_004.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_004.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_005.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_005.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_005.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_006.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_006.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_006.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_007.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_007.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_007.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_008.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_008.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_008.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_009.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_009.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_009.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_010.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_010.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_010.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_011.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_011.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_011.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_012.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_012.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_012.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_013.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_013.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_013.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_014.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_014.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_014.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_015.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_015.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_015.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_016.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_016.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_016.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_016.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_016.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_016.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_017.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_017.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_017.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testfiles/t_9_018.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testfiles/t_9_018.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testfiles/t_9_018.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testwave.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testwave.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testwave.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testwave_app.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testwave_app.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testwave_app.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
@@ -435,7 +435,7 @@
         "Testwave: A test driver for the Boost.Wave C++ preprocessor library",
         "http://www.boost.org/",
         "",
- "Copyright (c) 2001-2007 Hartmut Kaiser, Distributed under the Boost",
+ "Copyright (c) 2001-2008 Hartmut Kaiser, Distributed under the Boost",
         "Software License, Version 1.0. (See accompanying file",
         "LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)",
         0

Modified: branches/fix-links/libs/wave/test/testwave/testwave_app.hpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testwave_app.hpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testwave_app.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testwave_app_dll.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testwave_app_dll.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testwave_app_dll.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/wave/test/testwave/testwave_dll.cpp
==============================================================================
--- branches/fix-links/libs/wave/test/testwave/testwave_dll.cpp (original)
+++ branches/fix-links/libs/wave/test/testwave/testwave_dll.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/libs/xpressive/doc/acknowledgements.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/acknowledgements.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/acknowledgements.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/actions.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/actions.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/actions.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/concepts.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/concepts.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/concepts.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/dynamic_regexes.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/dynamic_regexes.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/dynamic_regexes.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/examples.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/examples.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/examples.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/grammars.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/grammars.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/grammars.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/history.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/history.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/history.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/installation.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/installation.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/installation.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/introduction.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/introduction.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/introduction.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/matching.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/matching.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/matching.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/nyi.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/nyi.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/nyi.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/perf.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/perf.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/perf.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/preface.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/preface.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/preface.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/quick_start.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/quick_start.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/quick_start.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/regexpp_diffs.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/regexpp_diffs.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/regexpp_diffs.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/results.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/results.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/results.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/static_regexes.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/static_regexes.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/static_regexes.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/substitutions.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/substitutions.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/substitutions.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/tips_n_tricks.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/tips_n_tricks.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/tips_n_tricks.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/tokenization.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/tokenization.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/tokenization.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/traits.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/traits.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/traits.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/doc/xpressive.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/doc/xpressive.qbk (original)
+++ branches/fix-links/libs/xpressive/doc/xpressive.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/proto/doc/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/Jamfile.v2 (original)
+++ branches/fix-links/libs/xpressive/proto/doc/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,8 +6,8 @@
 import doxygen ;
 import quickbook ;
 
-wave-command = [ path.native ../../../../dist/bin/wave ] ;
-
+#wave-command = [ path.native ../../../../dist/bin/wave ] ;
+#
 ## Generate reference section using Doxygen
 #doxygen protodoc
 # :
@@ -36,15 +36,13 @@
 # ../../../../boost/xpressive/proto/context/default.hpp
 # ../../../../boost/xpressive/proto/context/null.hpp
 # ../../../../boost/xpressive/proto/transform/arg.hpp
-# ../../../../boost/xpressive/proto/transform/apply.hpp
-# ../../../../boost/xpressive/proto/transform/branch.hpp
-# ../../../../boost/xpressive/proto/transform/compose.hpp
-# ../../../../boost/xpressive/proto/transform/construct.hpp
+# ../../../../boost/xpressive/proto/transform/bind.hpp
+# ../../../../boost/xpressive/proto/transform/call.hpp
 # ../../../../boost/xpressive/proto/transform/fold.hpp
 # ../../../../boost/xpressive/proto/transform/fold_tree.hpp
-# ../../../../boost/xpressive/proto/transform/function.hpp
-# ../../../../boost/xpressive/proto/transform/list.hpp
+# ../../../../boost/xpressive/proto/transform/make.hpp
 # ../../../../boost/xpressive/proto/transform/pass_through.hpp
+# ../../../../boost/xpressive/proto/transform/when.hpp
 # :
 # <doxygen:param>EXTRACT_ALL=YES
 # <doxygen:param>HIDE_UNDOC_MEMBERS=NO
@@ -62,6 +60,8 @@
 xml proto
     :
         proto.qbk
+ :
+ <dependency>../test/examples.cpp
     ;
 
 boostbook standalone

Modified: branches/fix-links/libs/xpressive/proto/doc/acknowledgements.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/acknowledgements.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/acknowledgements.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/proto/doc/calculator.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/calculator.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/calculator.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -138,7 +138,7 @@
 You might notice that the `calculator_context` has a lot of boilerplate. It
 is fairly common for addition nodes to be handled by evaluating the left and
 right children and then adding the result, for instance. For this purpose,
-proto provides the _default_context_, which gives the operators their usual
+Boost.Proto provides the _default_context_, which gives the operators their usual
 meanings, and uses Boost.Typeof to deduce return types. In fact, the
 _callable_context_ from which our `calculator_context` inherits uses
 _default_context_ as a fall-back for any expression types you don't handle

Modified: branches/fix-links/libs/xpressive/proto/doc/examples.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/examples.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/examples.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/proto/doc/extensibility.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/extensibility.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/extensibility.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/proto/doc/grammars.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/grammars.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/grammars.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -268,8 +268,9 @@
 and logically negates it; `not_<Grammar>` will match any expression that
 `Grammar` does /not/ match.
 
-The _if_ template is used together with an MPL lambda expression, which is
-evaluated against expression types to find matches.
+The _if_ template is used together with a Proto transform that is evaluated
+against expression types to find matches. (Proto transforms will be described
+later.)
 
 The _and_ template is like _or_, except that each argument of the _and_ must
 match in order for the _and_ to match. As an example, consider the definition
@@ -279,34 +280,19 @@
     struct CharString
       : and_<
             terminal< _ >
- , if_< is_same< result_of::arg< mpl::_ >, char const * > >
+ , if_< is_same< _arg, char const * >() >
>
     {};
 
 This says that a `CharString` must be a terminal, /and/ its argument must be
 the same as `char const *`. Notice the template argument of _if_:
-`is_same< result_of::arg< mpl::_ >, char const * >`. This is an MPL lambda
-expression because it has the MPL placeholder `mpl::_` in it.
-
-[warning Do not confuse `mpl::_` with `proto::_`. The first is only useful in
-MPL lambda expressions. The second is Proto's grammar wildcard. The only place
-`mpl::_` should appear in your grammars is in an _if_, or in tranform::applyN<>,
-as we'll see later. Elsewhere in your grammars you should be using `proto::_`.]
+`is_same< _arg, char const * >()`. This is Proto transform that compares the
+argument of a terminal to `char const *`.
 
 The _if_ template has a couple of variants. In additon to `if_<Condition>` you
 can also say `if_<Condition, ThenGrammar>` and
 `if_<Condition, ThenGrammar, ElseGrammar>`. These let you select one sub-grammar
-or another based on the `Condition`. The following table shows their
-equivalencies:
-
-[table If-Then-Else Equivalencies
-[[Short-Cut Grammar][Equivalent Grammar]]
-[[`if_<Condition, ThenGrammar>`][`and_<if_<Condition>, ThenGrammar>`]]
-[[`if_<Condition, ThenGrammar, ElseGrammar>`][``or_<
- and_<if_<Condition>, ThenGrammar>
- , and_<not_<if_<Condition> >, ElseGrammar>
->``]]
-]
+or another based on the `Condition`.
 
 [endsect]
 

Modified: branches/fix-links/libs/xpressive/proto/doc/history.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/history.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/history.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -9,6 +9,11 @@
 
 [variablelist
 [
+ [January 11, 2008]
+ [Boost.Proto v3 brings separation of grammars and transforms and a
+ "round" lambda syntax for defining transforms in-place.]
+]
+[
     [April 15, 2007]
     [Boost.Xpressive is ported from Proto compilers to Proto transforms.
      Support for old Proto compilers is dropped.]

Modified: branches/fix-links/libs/xpressive/proto/doc/implementation.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/implementation.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/implementation.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/proto/doc/installation.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/installation.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/installation.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -9,9 +9,9 @@
 
 [heading Getting Proto]
 
-Currently the only way to get Proto is through CVS via the boost project on
-SourceForge.net. Just go to [@http://sf.net/projects/boost] and follow the
-instructions there for anonymous CVS access.
+Currently the only way to get Proto is through SVN via the boost project on
+SourceForge.net. Just go to [@http://svn.boost.org/trac/boost/wiki/BoostSubversion]
+and follow the instructions there for anonymous SVN access.
 
 [heading Building with Proto]
 
@@ -23,14 +23,14 @@
 
 [heading Requirements]
 
-Proto depends on Boost. You must use the version in CVS HEAD.
+Proto depends on Boost. You must use the version in SVN HEAD.
 
 [heading Supported Compilers]
 
 Currently, Boost.Proto is known to work on the following compilers:
 
 * Visual C++ 7.1 and higher
-* GNU C++ 3.2 and higher
+* GNU C++ 3.4 and higher
 * Intel on Linun 8.1 and higher
 * Intel on Windows 9.1 and higher
 

Modified: branches/fix-links/libs/xpressive/proto/doc/preface.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/preface.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/preface.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -61,6 +61,7 @@
 with Fusion's iterators and algorithms.
 
 The syntax for the grammar-matching features of `proto::matches<>` is inspired
-by MPL's lambda expressions.
+by MPL's lambda expressions, and by Aleksey Gurtovoy's
+[@http://lists.boost.org/Archives/boost/2002/11/39718.php "round" lambda] notation.
 
 [endsect]

Modified: branches/fix-links/libs/xpressive/proto/doc/proto.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/proto.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/proto.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
 [library Boost.Proto
     [quickbook 1.3]
     [authors [Niebler, Eric]]
- [copyright 2006 Eric Niebler]
+ [copyright 2008 Eric Niebler]
     [category template]
     [id proto]
     [dirname proto]
@@ -18,7 +18,7 @@
 ]
 
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -69,6 +69,7 @@
 [def _vararg_ [classref boost::proto::control::vararg `vararg<>`]]
 [def _default_context_ [classref boost::proto::context::default_context `default_context`]]
 [def _callable_context_ [classref boost::proto::context::callable_context `callable_context<>`]]
+[def _when_ [classref boost::proto::transform::when `when<>`]]
 
 [include preface.qbk]
 

Modified: branches/fix-links/libs/xpressive/proto/doc/protodoc.xml
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/protodoc.xml (original)
+++ branches/fix-links/libs/xpressive/proto/doc/protodoc.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,27 +1,27 @@
 <?xml version="1.0" standalone="yes"?>
 <library-reference><header name="boost/xpressive/proto/args.hpp"><para>Contains definition of args&lt;&gt; class template. </para><namespace name="boost"><namespace name="proto"><namespace name="argsns_"><struct name="args0"><template>
       <template-type-parameter name="Arg0"/>
- </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>mpl::void_</type></typedef><typedef name="arg2"><type>mpl::void_</type></typedef><typedef name="arg3"><type>mpl::void_</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef><data-member name="size" specifiers="static"><type>const long</type></data-member></struct><struct name="args1"><template>
+ </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><data-member name="size" specifiers="static"><type>const long</type></data-member><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>mpl::void_</type></typedef><typedef name="arg2"><type>mpl::void_</type></typedef><typedef name="arg3"><type>mpl::void_</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef></struct><struct name="args1"><template>
       <template-type-parameter name="Arg0"/>
- </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>mpl::void_</type></typedef><typedef name="arg2"><type>mpl::void_</type></typedef><typedef name="arg3"><type>mpl::void_</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef><data-member name="size" specifiers="static"><type>const long</type></data-member></struct><struct name="args2"><template>
+ </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><data-member name="size" specifiers="static"><type>const long</type></data-member><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>mpl::void_</type></typedef><typedef name="arg2"><type>mpl::void_</type></typedef><typedef name="arg3"><type>mpl::void_</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef></struct><struct name="args2"><template>
       <template-type-parameter name="Arg0"/>
       <template-type-parameter name="Arg1"/>
- </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>Arg1</type></typedef><typedef name="arg2"><type>mpl::void_</type></typedef><typedef name="arg3"><type>mpl::void_</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef><data-member name="size" specifiers="static"><type>const long</type></data-member></struct><struct name="args3"><template>
+ </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><data-member name="size" specifiers="static"><type>const long</type></data-member><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>Arg1</type></typedef><typedef name="arg2"><type>mpl::void_</type></typedef><typedef name="arg3"><type>mpl::void_</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef></struct><struct name="args3"><template>
       <template-type-parameter name="Arg0"/>
       <template-type-parameter name="Arg1"/>
       <template-type-parameter name="Arg2"/>
- </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>Arg1</type></typedef><typedef name="arg2"><type>Arg2</type></typedef><typedef name="arg3"><type>mpl::void_</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef><data-member name="size" specifiers="static"><type>const long</type></data-member></struct><struct name="args4"><template>
+ </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><data-member name="size" specifiers="static"><type>const long</type></data-member><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>Arg1</type></typedef><typedef name="arg2"><type>Arg2</type></typedef><typedef name="arg3"><type>mpl::void_</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef></struct><struct name="args4"><template>
       <template-type-parameter name="Arg0"/>
       <template-type-parameter name="Arg1"/>
       <template-type-parameter name="Arg2"/>
       <template-type-parameter name="Arg3"/>
- </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>Arg1</type></typedef><typedef name="arg2"><type>Arg2</type></typedef><typedef name="arg3"><type>Arg3</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef><data-member name="size" specifiers="static"><type>const long</type></data-member></struct><struct name="args5"><template>
+ </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><data-member name="size" specifiers="static"><type>const long</type></data-member><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>Arg1</type></typedef><typedef name="arg2"><type>Arg2</type></typedef><typedef name="arg3"><type>Arg3</type></typedef><typedef name="arg4"><type>mpl::void_</type></typedef></struct><struct name="args5"><template>
       <template-type-parameter name="Arg0"/>
       <template-type-parameter name="Arg1"/>
       <template-type-parameter name="Arg2"/>
       <template-type-parameter name="Arg3"/>
       <template-type-parameter name="Arg4"/>
- </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>Arg1</type></typedef><typedef name="arg2"><type>Arg2</type></typedef><typedef name="arg3"><type>Arg3</type></typedef><typedef name="arg4"><type>Arg4</type></typedef><data-member name="size" specifiers="static"><type>const long</type></data-member></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/context.hpp"><para>Includes all the context classes in the context/ sub-directory. </para></header><header name="boost/xpressive/proto/context/callable.hpp"><para>Definintion of callable_context&lt;&gt;, an evaluation co
ntext for proto::eval() that explodes each node and calls the derived context type with the expressions constituents. If the derived context doesn't have an overload that handles this node, fall-back to the default_context. TODO: make the fall-back configurable! </para><namespace name="boost"><namespace name="proto"><namespace name="context"><struct name="callable_eval"><template>
+ </template><purpose>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. </purpose><description><para>A type sequence, for use as the 2nd parameter to the <computeroutput>expr&lt;&gt;</computeroutput> class template. The types in the sequence correspond to the children of a node in an expression tree. </para></description><data-member name="size" specifiers="static"><type>const long</type></data-member><typedef name="arg0"><type>Arg0</type></typedef><typedef name="arg1"><type>Arg1</type></typedef><typedef name="arg2"><type>Arg2</type></typedef><typedef name="arg3"><type>Arg3</type></typedef><typedef name="arg4"><type>Arg4</type></typedef></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/context.hpp"><para>Includes all the context classes in the context/ sub-directory. </para></header><header name="boost/xpressive/proto/context/callable.hpp"><para>Definintion of callable_context&lt;&gt;, an evaluation co
ntext for proto::eval() that explodes each node and calls the derived context type with the expressions constituents. If the derived context doesn't have an overload that handles this node, fall-back to the default_context. TODO: make the fall-back configurable! </para><namespace name="boost"><namespace name="proto"><namespace name="context"><struct name="callable_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
       <template-nontype-parameter name="Arity"><type>long</type></template-nontype-parameter>
@@ -150,7 +150,7 @@
     </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::shift_right_assign</template-arg><template-arg>2</template-arg></specialization><typedef name="result_type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="ctx"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
- </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::multilpies_assign</template-arg><template-arg>2</template-arg></specialization><typedef name="result_type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="ctx"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
+ </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::multiplies_assign</template-arg><template-arg>2</template-arg></specialization><typedef name="result_type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="ctx"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
     </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::divides_assign</template-arg><template-arg>2</template-arg></specialization><typedef name="result_type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="ctx"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
@@ -189,22 +189,25 @@
     </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::if_else_</template-arg><template-arg>3</template-arg></specialization><typedef name="result_type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="ctx"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
- </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::comma</template-arg><template-arg>2</template-arg></specialization><typedef name="proto_arg0"><type><classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 0 &gt;::type, Context &gt;::type</type></typedef><typedef name="proto_arg1"><type><classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 1 &gt;::type, Context &gt;::type</type></typedef><typedef name="result_type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="ctx"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
+ </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::comma</template-arg><template-arg>2</template-arg></specialization><typedef name="result_type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="ctx"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="Context"/>
+ </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>0</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type()&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
     </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>1</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type()&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
- </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>2</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type(typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 1 &gt;::type, Context &gt;::type)&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
+ </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>2</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type(typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 1 &gt;::type &gt;::type, Context &gt;::type)&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
- </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>3</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type(typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 1 &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 2 &gt;::type, Context &gt;::type)&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
+ </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>3</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type(typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 1 &gt;::type &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 2 &gt;::type &gt;::type, Context &gt;::type)&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specializat
ion><struct-specialization name="default_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
- </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>4</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type(typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 1 &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 2 &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 3 &gt;::type, Context &gt;::type)&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></
parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
+ </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>4</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type(typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 1 &gt;::type &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 2 &gt;::type &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 3 &gt;::type &gt;::type, Context &gt;::type)&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><paramete
r name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="default_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
- </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>5</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type(typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 1 &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 2 &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 3 &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename proto::result_of::arg_c&lt; Expr, 4 &gt;::type, Context &gt;::type)&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</t
ype><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/context/null.hpp"><para>Definintion of null_context&lt;&gt;, an evaluation context for proto::eval() that simply evaluates each child expression, doesn't combine the results at all, and returns void. </para><namespace name="boost"><namespace name="proto"><namespace name="context"><struct name="null_eval"><template>
+ </template><specialization><template-arg>Expr</template-arg><template-arg>Context</template-arg><template-arg>proto::tag::function</template-arg><template-arg>5</template-arg></specialization><typedef name="function_type"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="result_type"><type>boost::result_of&lt; function_type(typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 1 &gt;::type &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 2 &gt;::type &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 3 &gt;::type &gt;::type, Context &gt;::type, typename <classname>proto::result_of::eval</classname>&lt; typename remove_reference&lt; typename proto::result_of::arg_c&lt; Expr, 4 &gt;::t
ype &gt;::type, Context &gt;::type)&gt;::type</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>result_type</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="context"><paramtype>Context &amp;</paramtype></parameter></method></method-group></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/context/null.hpp"><para>Definintion of null_context&lt;&gt;, an evaluation context for proto::eval() that simply evaluates each child expression, doesn't combine the results at all, and returns void. </para><namespace name="boost"><namespace name="proto"><namespace name="context"><struct name="null_eval"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Context"/>
       <template-nontype-parameter name="Arity"><type>long</type></template-nontype-parameter>
@@ -231,35 +234,35 @@
       <template-type-parameter name="ThisContext"><default>null_context const</default></template-type-parameter>
     </template><inherit access="public">boost::proto::context::null_eval&lt; Expr, ThisContext &gt;</inherit><description><para>null_context::eval </para></description></struct></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/debug.hpp"><para>Utilities for debugging proto expression trees </para><namespace name="boost"><namespace name="proto"><namespace name="functional"><struct name="display_expr"><method-group name="public member functions"><method name="operator()" cv="const"><type>void</type><template>
           <template-type-parameter name="Args"/>
- </template><parameter name="expr"><paramtype>expr&lt; <classname>tag::terminal</classname>, Args, 0 &gt; const &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>void</type><template>
+ </template><parameter name="expr"><paramtype>proto::expr&lt; <classname>tag::terminal</classname>, Args, 0 &gt; const &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>void</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="Args"/>
- </template><parameter name="expr"><paramtype>expr&lt; Tag, Args, 1 &gt; const &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>void</type><template>
+ </template><parameter name="expr"><paramtype>proto::expr&lt; Tag, Args, 1 &gt; const &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>void</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="Args"/>
- </template><parameter name="expr"><paramtype>expr&lt; Tag, Args, 0 &gt; const &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>void</type><template>
+ </template><parameter name="expr"><paramtype>proto::expr&lt; Tag, Args, 0 &gt; const &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>void</type><template>
           <template-type-parameter name="T"/>
- </template><parameter name="t"><paramtype>T const &amp;</paramtype></parameter></method></method-group><constructor><parameter name="depth"><paramtype>int</paramtype><default>0</default></parameter><parameter name="sout"><paramtype>std::ostream &amp;</paramtype><default>std::cout</default></parameter></constructor></struct></namespace><namespace name="tag"><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::posit</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::negate</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::dereference</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::complement</classname></paramtype></parameter></function><function name="proto_t
ag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::address_of</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::logical_not</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::pre_inc</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::pre_dec</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::post_inc</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::post_dec</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classna
me>tag::shift_left</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::shift_right</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::multiplies</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::divides</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::modulus</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::plus</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::minus</classname></paramtype></parameter></function><function name
="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::less</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::greater</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::less_equal</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::greater_equal</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::equal_to</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::not_equal_to</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramt
ype><classname>tag::logical_or</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::logical_and</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_and</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_or</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_xor</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::comma</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::mem_ptr</classname></paramtype></parameter></
function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::shift_left_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::shift_right_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::multilpies_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::divides_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::modulus_assign</classname></paramtype></parameter></function><function name="proto_tag_na
me"><type>char const *</type><parameter name=""><paramtype><classname>tag::plus_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::minus_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_and_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_or_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_xor_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::subscript</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><paramete
r name=""><paramtype><classname>tag::if_else_</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::function</classname></paramtype></parameter></function><data-member name="proto_tag_name"><type><classname>hidden_detail_::printable_tag</classname>&lt; Tag &gt;::type</type></data-member></namespace><function name="display_expr"><type>void</type><template>
+ </template><parameter name="t"><paramtype>T const &amp;</paramtype></parameter></method></method-group><constructor><parameter name="depth"><paramtype>int</paramtype><default>0</default></parameter><parameter name="sout"><paramtype>std::ostream &amp;</paramtype><default>std::cout</default></parameter></constructor></struct></namespace><namespace name="tag"><data-member name="proto_tag_name"><type><classname>hidden_detail_::printable_tag</classname>&lt; Tag &gt;::type</type></data-member><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::posit</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::negate</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::dereference</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *
</type><parameter name=""><paramtype><classname>tag::complement</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::address_of</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::logical_not</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::pre_inc</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::pre_dec</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::post_inc</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::post_dec</classna
me></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::shift_left</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::shift_right</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::multiplies</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::divides</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::modulus</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::plus</classname></paramtype></parameter></function><function name="proto_tag_name"><typ
e>char const *</type><parameter name=""><paramtype><classname>tag::minus</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::less</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::greater</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::less_equal</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::greater_equal</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::equal_to</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::not_equal
_to</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::logical_or</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::logical_and</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_and</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_or</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_xor</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::comma</classname></paramtype></parameter></function><function name=
"proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::mem_ptr</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::shift_left_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::shift_right_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::multiplies_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::divides_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><p
arameter name=""><paramtype><classname>tag::modulus_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::plus_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::minus_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_and_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_or_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::bitwise_xor_assign</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><clas
sname>tag::subscript</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::if_else_</classname></paramtype></parameter></function><function name="proto_tag_name"><type>char const *</type><parameter name=""><paramtype><classname>tag::function</classname></paramtype></parameter></function></namespace><function name="display_expr"><type>void</type><template>
           <template-type-parameter name="Expr"/>
         </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></function><function name="display_expr"><type>void</type><template>
           <template-type-parameter name="Expr"/>
         </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="sout"><paramtype>std::ostream &amp;</paramtype></parameter></function></namespace></namespace></header><header name="boost/xpressive/proto/deep_copy.hpp"><para>Replace all nodes stored by reference by nodes stored by value. </para><namespace name="boost"><namespace name="proto"><namespace name="functional"><struct name="deep_copy"><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
- </template><specialization><template-arg>This(Expr)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::deep_copy</classname>&lt; Expr &gt;::type</type><template>
+ </template><specialization><template-arg>This(Expr)</template-arg></specialization><inherit access="public">boost::proto::result_of::deep_copy&lt; Expr &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::deep_copy</classname>&lt; Expr &gt;::type</type><template>
           <template-type-parameter name="Expr"/>
         </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct></namespace><namespace name="result_of"><struct name="deep_copy"><template>
       <template-type-parameter name="Expr"/>
     </template></struct></namespace><data-member name="deep_copy"><type><classname>functional::deep_copy</classname> const</type></data-member></namespace></namespace></header><header name="boost/xpressive/proto/domain.hpp"><para>Contains definition of domain&lt;&gt; class template, for defining domains with a grammar for controlling operator overloading. </para><namespace name="boost"><namespace name="proto"><namespace name="domainns_"><struct name="domain"><template>
       <template-type-parameter name="Generator"/>
       <template-type-parameter name="Grammar"/>
- </template><inherit access="public">Generator</inherit><typedef name="grammar"><type>Grammar</type></typedef></struct><struct name="default_domain"><inherit access="public">boost::proto::domainns_::domain&lt; &gt;</inherit></struct><struct name="deduce_domain"/></namespace><namespace name="result_of"><struct name="is_domain"><template>
+ </template><inherit access="public">Generator</inherit><typedef name="grammar"><type>Grammar</type></typedef></struct><struct name="default_domain"><inherit access="public">boost::proto::domainns_::domain&lt; &gt;</inherit></struct><struct name="deduce_domain"><inherit access="public">boost::proto::domainns_::domain&lt; Generator, Grammar &gt;</inherit></struct></namespace><namespace name="result_of"><struct name="is_domain"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="EnableIf"/>
     </template></struct><struct name="domain_of"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="EnableIf"/>
- </template><typedef name="type"><type><classname>default_domain</classname></type></typedef></struct><struct-specialization name="is_domain"><template>
+ </template><typedef name="type"><type>default_domain</type></typedef></struct><struct-specialization name="is_domain"><template>
       <template-type-parameter name="T"/>
     </template><specialization><template-arg>T</template-arg><template-arg>typename T::proto_is_domain_</template-arg></specialization></struct-specialization><struct-specialization name="domain_of"><template>
       <template-type-parameter name="T"/>
@@ -279,34 +282,30 @@
     </template><typedef name="type"><type>Context::template <classname>eval</classname>&lt; Expr &gt;::result_type</type></typedef></struct></namespace><data-member name="eval"><type><classname>functional::eval</classname> const</type></data-member></namespace></namespace></header><header name="boost/xpressive/proto/expr.hpp"><para>Contains definition of expr&lt;&gt; class template. </para><namespace name="boost"><namespace name="proto"><namespace name="exprns_"><struct-specialization name="expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="Args"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>0</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="apply"><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><struct name="result"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>0</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="result"><template>
       <template-type-parameter name="Sig"/>
- </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 0 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type><classname>default_domain</classname></type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>void</type></typedef><typedef name="proto_arg2"><type>void</type></typedef><typedef name="proto_arg3"><type>void</
type></typedef><typedef name="proto_arg4"><type>void</type></typedef><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
-</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
+ </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 0 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type>default_domain</type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>void</type></typedef><typedef name="proto_arg2"><type>void</type></typedef><typedef name="proto_arg3"><type>void</type></typedef><typedef
 name="proto_arg4"><type>void</type></typedef><data-member name="arg0"><type>proto_arg0</type></data-member><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
+</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype><description><para>The rhs. </para></description></parameter><description><para>Subscript</para><para>
 
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv=""><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv=""><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv=""><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
+ </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv=""><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; <classname>ref_</classname>&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv=""><type>expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; <classname>ref_</classname>&lt; expr &gt; &gt; &gt; const</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const , const A0 &gt;::type const</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; ref_&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv=""><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; ref_&lt; expr &gt; &gt; &gt; const</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const, const A0 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const , const A0, const A1 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const, const A0, const A1 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const , const A0, const A1, const A2 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const, const A0, const A1, const A2 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const , const A0, const A1, const A2, const A3 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const, const A0, const A1, const A2, const A3 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
@@ -321,11 +320,7 @@
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><copy-assignment><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><data-member name="arg0"><type>proto_arg0</type></data-member><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name="State_"/>
- <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="make" cv=""><type>static expr</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><method-group name="public static functions"><method name="make" cv=""><type>static expr</type><template>
           <template-type-parameter name="A0"/>
         </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> object initialized with the specified arguments. </para></returns></method><method name="make" cv=""><type>static expr</type><template>
@@ -339,32 +334,28 @@
         </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name=""><paramtype><emphasis>unspecified</emphasis></paramtype><default>0</default></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method></method-group></struct-specialization><struct-specialization name="expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="Args"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>1</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="apply"><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><struct name="result"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>1</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="result"><template>
       <template-type-parameter name="Sig"/>
- </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 1 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type><classname>default_domain</classname></type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>void</type></typedef><typedef name="proto_arg2"><type>void</type></typedef><typedef name="proto_arg3"><type>void</
type></typedef><typedef name="proto_arg4"><type>void</type></typedef><typedef name="address_of_hack_type_"><description><para>If <computeroutput>Tag</computeroutput> is <computeroutput>boost::proto::tag::address_of</computeroutput> and <computeroutput>proto_arg0</computeroutput> is <computeroutput>proto::ref_&lt;T&gt;</computeroutput>, then <computeroutput>address_of_hack_type_</computeroutput> is <computeroutput>T*</computeroutput>. Otherwise, it is some undefined type. </para></description><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
+ </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 1 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type>default_domain</type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>void</type></typedef><typedef name="proto_arg2"><type>void</type></typedef><typedef name="proto_arg3"><type>void</type></typedef><typedef
 name="proto_arg4"><type>void</type></typedef><typedef name="address_of_hack_type_"><description><para>If <computeroutput>Tag</computeroutput> is <computeroutput>boost::proto::tag::address_of</computeroutput> and <computeroutput>proto_arg0</computeroutput> is <computeroutput>proto::ref_&lt;T&gt;</computeroutput>, then <computeroutput>address_of_hack_type_</computeroutput> is <computeroutput>T*</computeroutput>. Otherwise, it is some undefined type. </para></description><type><emphasis>unspecified</emphasis></type></typedef><data-member name="arg0"><type>proto_arg0</type></data-member><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
 </para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="conversion-operator" cv="const"><type>address_of_hack_type_</type><description><para>
 
-</para></description><returns><para>The address of <computeroutput>this-&gt;arg0</computeroutput> if <computeroutput>Tag</computeroutput> is <computeroutput>boost::proto::tag::address_of</computeroutput>. Otherwise, this function will fail to compile.</para></returns><notes><para>Proto overloads <computeroutput>operator&amp;</computeroutput>, which means that proto-ified objects cannot have their addresses taken, unless we use the following hack to make <computeroutput>&amp;x</computeroutput> implicitly convertible to <computeroutput>X*</computeroutput>. </para></notes></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
+</para></description><returns><para>The address of <computeroutput>this-&gt;arg0</computeroutput> if <computeroutput>Tag</computeroutput> is <computeroutput>boost::proto::tag::address_of</computeroutput>. Otherwise, this function will fail to compile.</para></returns><notes><para>Proto overloads <computeroutput>operator&amp;</computeroutput>, which means that proto-ified objects cannot have their addresses taken, unless we use the following hack to make <computeroutput>&amp;x</computeroutput> implicitly convertible to <computeroutput>X*</computeroutput>. </para></notes></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype><description><para>The rhs. </para></description></parameter><description><para>Subscript</para><para>
 
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; <classname>ref_</classname>&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const , const A0 &gt;::type const</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; ref_&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const, const A0 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const , const A0, const A1 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const, const A0, const A1 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const , const A0, const A1, const A2 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const, const A0, const A1, const A2 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const , const A0, const A1, const A2, const A3 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const, const A0, const A1, const A2, const A3 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
@@ -375,40 +366,32 @@
 
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing an assignment of <computeroutput>a</computeroutput> to <computeroutput>*this</computeroutput>. </para></returns></copy-assignment><copy-assignment><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><data-member name="arg0"><type>proto_arg0</type></data-member><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name="State_"/>
- <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="make" cv=""><type>static expr</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><method-group name="public static functions"><method name="make" cv=""><type>static expr</type><template>
           <template-type-parameter name="A0"/>
         </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> object initialized with the specified arguments. </para></returns></method></method-group></struct-specialization><struct-specialization name="expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="Args"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>2</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="apply"><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><struct name="result"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>2</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="result"><template>
       <template-type-parameter name="Sig"/>
- </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 2 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type><classname>default_domain</classname></type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>Args::arg1</type></typedef><typedef name="proto_arg2"><type>void</type></typedef><typedef name="proto_arg3"><type>
void</type></typedef><typedef name="proto_arg4"><type>void</type></typedef><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
-</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
+ </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 2 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type>default_domain</type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>Args::arg1</type></typedef><typedef name="proto_arg2"><type>void</type></typedef><typedef name="proto_arg3"><type>void</type></typedef><t
ypedef name="proto_arg4"><type>void</type></typedef><data-member name="arg0"><type>proto_arg0</type></data-member><data-member name="arg1"><type>proto_arg1</type></data-member><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
+</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype><description><para>The rhs. </para></description></parameter><description><para>Subscript</para><para>
 
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; <classname>ref_</classname>&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const , const A0 &gt;::type const</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; ref_&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const, const A0 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const , const A0, const A1 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const, const A0, const A1 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const , const A0, const A1, const A2 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const, const A0, const A1, const A2 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const , const A0, const A1, const A2, const A3 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const, const A0, const A1, const A2, const A3 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
@@ -419,41 +402,33 @@
 
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing an assignment of <computeroutput>a</computeroutput> to <computeroutput>*this</computeroutput>. </para></returns></copy-assignment><copy-assignment><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><data-member name="arg0"><type>proto_arg0</type></data-member><data-member name="arg1"><type>proto_arg1</type></data-member><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name="State_"/>
- <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="make" cv=""><type>static expr</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><method-group name="public static functions"><method name="make" cv=""><type>static expr</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
         </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> object initialized with the specified arguments. </para></returns></method></method-group></struct-specialization><struct-specialization name="expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="Args"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>3</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="apply"><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><struct name="result"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>3</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="result"><template>
       <template-type-parameter name="Sig"/>
- </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 3 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type><classname>default_domain</classname></type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>Args::arg1</type></typedef><typedef name="proto_arg2"><type>Args::arg2</type></typedef><typedef name="proto_arg3">
<type>void</type></typedef><typedef name="proto_arg4"><type>void</type></typedef><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
-</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
+ </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 3 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type>default_domain</type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>Args::arg1</type></typedef><typedef name="proto_arg2"><type>Args::arg2</type></typedef><typedef name="proto_arg3"><type>void</type></type
def><typedef name="proto_arg4"><type>void</type></typedef><data-member name="arg0"><type>proto_arg0</type></data-member><data-member name="arg1"><type>proto_arg1</type></data-member><data-member name="arg2"><type>proto_arg2</type></data-member><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
+</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype><description><para>The rhs. </para></description></parameter><description><para>Subscript</para><para>
 
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; <classname>ref_</classname>&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const , const A0 &gt;::type const</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; ref_&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const, const A0 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const , const A0, const A1 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const, const A0, const A1 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const , const A0, const A1, const A2 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const, const A0, const A1, const A2 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const , const A0, const A1, const A2, const A3 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const, const A0, const A1, const A2, const A3 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
@@ -464,11 +439,7 @@
 
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing an assignment of <computeroutput>a</computeroutput> to <computeroutput>*this</computeroutput>. </para></returns></copy-assignment><copy-assignment><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><data-member name="arg0"><type>proto_arg0</type></data-member><data-member name="arg1"><type>proto_arg1</type></data-member><data-member name="arg2"><type>proto_arg2</type></data-member><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name="State_"/>
- <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="make" cv=""><type>static expr</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><method-group name="public static functions"><method name="make" cv=""><type>static expr</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
@@ -476,30 +447,26 @@
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> object initialized with the specified arguments. </para></returns></method></method-group></struct-specialization><struct-specialization name="expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="Args"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>4</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="apply"><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><struct name="result"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>4</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="result"><template>
       <template-type-parameter name="Sig"/>
- </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 4 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type><classname>default_domain</classname></type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>Args::arg1</type></typedef><typedef name="proto_arg2"><type>Args::arg2</type></typedef><typedef name="proto_arg3">
<type>Args::arg3</type></typedef><typedef name="proto_arg4"><type>void</type></typedef><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
-</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
+ </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 4 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type>default_domain</type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>Args::arg1</type></typedef><typedef name="proto_arg2"><type>Args::arg2</type></typedef><typedef name="proto_arg3"><type>Args::arg3</type>
</typedef><typedef name="proto_arg4"><type>void</type></typedef><data-member name="arg0"><type>proto_arg0</type></data-member><data-member name="arg1"><type>proto_arg1</type></data-member><data-member name="arg2"><type>proto_arg2</type></data-member><data-member name="arg3"><type>proto_arg3</type></data-member><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
+</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype><description><para>The rhs. </para></description></parameter><description><para>Subscript</para><para>
 
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; <classname>ref_</classname>&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const , const A0 &gt;::type const</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; ref_&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const, const A0 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const , const A0, const A1 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const, const A0, const A1 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const , const A0, const A1, const A2 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const, const A0, const A1, const A2 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const , const A0, const A1, const A2, const A3 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const, const A0, const A1, const A2, const A3 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
@@ -510,11 +477,7 @@
 
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing an assignment of <computeroutput>a</computeroutput> to <computeroutput>*this</computeroutput>. </para></returns></copy-assignment><copy-assignment><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><data-member name="arg0"><type>proto_arg0</type></data-member><data-member name="arg1"><type>proto_arg1</type></data-member><data-member name="arg2"><type>proto_arg2</type></data-member><data-member name="arg3"><type>proto_arg3</type></data-member><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name="State_"/>
- <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="make" cv=""><type>static expr</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><method-group name="public static functions"><method name="make" cv=""><type>static expr</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
@@ -523,30 +486,26 @@
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> object initialized with the specified arguments. </para></returns></method></method-group></struct-specialization><struct-specialization name="expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="Args"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>5</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="apply"><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><struct name="result"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>Args</template-arg><template-arg>5</template-arg></specialization><purpose>Representation of a node in an expression tree. </purpose><description><para><computeroutput>proto::expr&lt;&gt;</computeroutput> is a node in an expression template tree. It is a container for its children sub-trees. It also serves as the terminal nodes of the tree.</para><para><computeroutput>Tag</computeroutput> is type that represents the operation encoded by this expression. It is typically one of the structs in the <computeroutput>boost::proto::tag</computeroutput> namespace, but it doesn't have to be. If the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput> then this <computeroutput>expr&lt;&gt;</computeroutput> type represents a leaf in the expression tree.</para><para><computeroutput>Args</computeroutput> is a type list representing the type of the children of this expression. It is an instanti
ation of one of <computeroutput>proto::args1&lt;&gt;</computeroutput>, <computeroutput>proto::args2&lt;&gt;</computeroutput>, etc. The children types must all themselves be either <computeroutput>expr&lt;&gt;</computeroutput> or <computeroutput>proto::ref_&lt;proto::expr&lt;&gt;&gt;</computeroutput>, unless the <computeroutput>Tag</computeroutput> type is <computeroutput>boost::proto::tag::terminal</computeroutput>, in which case <computeroutput>Args</computeroutput> must be <computeroutput>proto::args1&lt;T&gt;</computeroutput>, where <computeroutput>T</computeroutput> can be any type. </para></description><struct name="result"><template>
       <template-type-parameter name="Sig"/>
- </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 5 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type><classname>default_domain</classname></type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>Args::arg1</type></typedef><typedef name="proto_arg2"><type>Args::arg2</type></typedef><typedef name="proto_arg3">
<type>Args::arg3</type></typedef><typedef name="proto_arg4"><type>Args::arg4</type></typedef><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
-</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
+ </template><description><para>Encodes the return type of <computeroutput>expr&lt;&gt;operator()</computeroutput>, for use with <computeroutput>boost::result_of&lt;&gt;</computeroutput> </para></description><typedef name="type"><type>result_of::funop&lt; Sig, expr &gt;::type</type></typedef></struct><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arity"><type>mpl::long_&lt; 5 &gt;</type></typedef><typedef name="proto_base_expr"><type>expr</type></typedef><typedef name="proto_args"><type>Args</type></typedef><typedef name="proto_domain"><type>default_domain</type></typedef><typedef name="fusion_tag"><type>tag::proto_expr</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>expr</type></typedef><typedef name="proto_arg0"><type>Args::arg0</type></typedef><typedef name="proto_arg1"><type>Args::arg1</type></typedef><typedef name="proto_arg2"><type>Args::arg2</type></typedef><typedef name="proto_arg3"><type>Args::arg3</type>
</typedef><typedef name="proto_arg4"><type>Args::arg4</type></typedef><data-member name="arg0"><type>proto_arg0</type></data-member><data-member name="arg1"><type>proto_arg1</type></data-member><data-member name="arg2"><type>proto_arg2</type></data-member><data-member name="arg3"><type>proto_arg3</type></data-member><data-member name="arg4"><type>proto_arg4</type></data-member><method-group name="public member functions"><method name="proto_base" cv="const"><type>expr const &amp;</type><description><para>
+</para></description><returns><para>*this </para></returns></method><method name="proto_base" cv=""><type>expr &amp;</type><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype><description><para>The rhs. </para></description></parameter><description><para>Subscript</para><para>
 
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing <computeroutput>*this</computeroutput> subscripted with <computeroutput>a</computeroutput>. </para></returns></method><method name="operator[]" cv="const"><type>proto::expr&lt; <classname>tag::subscript</classname>, <classname>args2</classname>&lt; ref_&lt; expr const &gt;, typename <classname>result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; <classname>ref_</classname>&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
-</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const , const A0 &gt;::type const</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; ref_&lt; expr const &gt; &gt; &gt; const</type><description><para>Function call</para><para>
+</para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing the function invocation of <computeroutput/>(*this)(). </para></returns></method><method name="operator()" cv="const"><type><classname>result_of::funop1</classname>&lt; expr const, const A0 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const , const A0, const A1 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop2</classname>&lt; expr const, const A0, const A1 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const , const A0, const A1, const A2 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop3</classname>&lt; expr const, const A0, const A1, const A2 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
- </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const , const A0, const A1, const A2, const A3 &gt;::type const</type><template>
+ </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></method><method name="operator()" cv="const"><type><classname>result_of::funop4</classname>&lt; expr const, const A0, const A1, const A2, const A3 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
@@ -557,11 +516,7 @@
 
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> node representing an assignment of <computeroutput>a</computeroutput> to <computeroutput>*this</computeroutput>. </para></returns></copy-assignment><copy-assignment><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><data-member name="arg0"><type>proto_arg0</type></data-member><data-member name="arg1"><type>proto_arg1</type></data-member><data-member name="arg2"><type>proto_arg2</type></data-member><data-member name="arg3"><type>proto_arg3</type></data-member><data-member name="arg4"><type>proto_arg4</type></data-member><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name="State_"/>
- <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="make" cv=""><type>static expr</type><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter><description><para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para></description></copy-assignment><method-group name="public static functions"><method name="make" cv=""><type>static expr</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
@@ -570,16 +525,16 @@
         </template><parameter name="a0"><paramtype>A0 const &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 const &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 const &amp;</paramtype></parameter><parameter name="a3"><paramtype>A3 const &amp;</paramtype></parameter><parameter name="a4"><paramtype>A4 const &amp;</paramtype></parameter><description><para>
 </para></description><returns><para>A new <computeroutput>expr&lt;&gt;</computeroutput> object initialized with the specified arguments. </para></returns></method></method-group></struct-specialization></namespace><namespace name="result_of"><struct name="funop0"><template>
       <template-type-parameter name="Expr"/>
- </template><typedef name="type"><type>expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; <classname>ref_</classname>&lt; Expr &gt;&gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
+ </template><typedef name="type"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args1</classname>&lt; ref_&lt; Expr &gt;&gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="This"/>
     </template><specialization><template-arg>Expr()</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop0&lt; This &gt;</inherit></struct-specialization><struct-specialization name="funop"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="This"/>
- </template><specialization><template-arg>Expr const ()</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop0&lt; This const &gt;</inherit></struct-specialization><struct name="funop1"><template>
+ </template><specialization><template-arg>Expr const()</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop0&lt; Expr &gt;</inherit></struct-specialization><struct name="funop1"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="A0"/>
- </template><typedef name="type"><type>expr&lt; <classname>tag::function</classname>, <classname>args2</classname>&lt; <classname>ref_</classname>&lt; Expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A0 &gt;::type &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
+ </template><typedef name="type"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args2</classname>&lt; ref_&lt; Expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A0 &gt;::type &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="This"/>
@@ -587,11 +542,11 @@
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="This"/>
- </template><specialization><template-arg>Expr const (A0)</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop1&lt; This const , remove_reference&lt; A0 &gt;::type &gt;</inherit></struct-specialization><struct name="funop2"><template>
+ </template><specialization><template-arg>Expr const(A0)</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop1&lt; Expr, A0 &gt;</inherit></struct-specialization><struct name="funop2"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
- </template><typedef name="type"><type>expr&lt; <classname>tag::function</classname>, <classname>args3</classname>&lt; <classname>ref_</classname>&lt; Expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A0 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A1 &gt;::type &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
+ </template><typedef name="type"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args3</classname>&lt; ref_&lt; Expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A0 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A1 &gt;::type &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
@@ -601,12 +556,12 @@
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
       <template-type-parameter name="This"/>
- </template><specialization><template-arg>Expr const (A0</template-arg><template-arg>A1)</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop2&lt; This const , remove_reference&lt; A0 &gt;::type, remove_reference&lt; A1 &gt;::type &gt;</inherit></struct-specialization><struct name="funop3"><template>
+ </template><specialization><template-arg>Expr const(A0</template-arg><template-arg>A1)</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop2&lt; Expr, A0, A1 &gt;</inherit></struct-specialization><struct name="funop3"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
       <template-type-parameter name="A2"/>
- </template><typedef name="type"><type>expr&lt; <classname>tag::function</classname>, <classname>args4</classname>&lt; <classname>ref_</classname>&lt; Expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A0 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A1 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A2 &gt;::type &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
+ </template><typedef name="type"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args4</classname>&lt; ref_&lt; Expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A0 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A1 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A2 &gt;::type &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
@@ -618,13 +573,13 @@
       <template-type-parameter name="A1"/>
       <template-type-parameter name="A2"/>
       <template-type-parameter name="This"/>
- </template><specialization><template-arg>Expr const (A0</template-arg><template-arg>A1</template-arg><template-arg>A2)</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop3&lt; This const , remove_reference&lt; A0 &gt;::type, remove_reference&lt; A1 &gt;::type, remove_reference&lt; A2 &gt;::type &gt;</inherit></struct-specialization><struct name="funop4"><template>
+ </template><specialization><template-arg>Expr const(A0</template-arg><template-arg>A1</template-arg><template-arg>A2)</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop3&lt; Expr, A0, A1, A2 &gt;</inherit></struct-specialization><struct name="funop4"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
       <template-type-parameter name="A2"/>
       <template-type-parameter name="A3"/>
- </template><typedef name="type"><type>expr&lt; <classname>tag::function</classname>, <classname>args5</classname>&lt; <classname>ref_</classname>&lt; Expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A0 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A1 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A2 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A3 &gt;::type &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 &amp;</paramtype></parameter><parameter name="a3"><paramtype>A3 &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
+ </template><typedef name="type"><type>proto::expr&lt; <classname>tag::function</classname>, <classname>args5</classname>&lt; ref_&lt; Expr &gt;, typename <classname>result_of::as_arg</classname>&lt; A0 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A1 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A2 &gt;::type, typename <classname>result_of::as_arg</classname>&lt; A3 &gt;::type &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type const</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 &amp;</paramtype></parameter><parameter name="a3"><paramtype>A3 &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="funop"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
@@ -638,34 +593,38 @@
       <template-type-parameter name="A2"/>
       <template-type-parameter name="A3"/>
       <template-type-parameter name="This"/>
- </template><specialization><template-arg>Expr const (A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3)</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop4&lt; This const , remove_reference&lt; A0 &gt;::type, remove_reference&lt; A1 &gt;::type, remove_reference&lt; A2 &gt;::type, remove_reference&lt; A3 &gt;::type &gt;</inherit></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/extends.hpp"><para>Macros and a base class for defining end-user expression types </para><namespace name="boost"><namespace name="proto"><namespace name="exprns_"><struct name="is_proto_expr"><purpose>Empty type to be used as a dummy template parameter of POD expression wrappers. It allows argument-dependent lookup to find Proto's operator overloads. </purpose><description><para><computeroutput>proto::is_proto_expr</computeroutput> allows argument-dependent lookup
 to find Proto's operator overloads. For example:</para><para><programlisting>
-
-
-
-
-
-
-
-
-
-
-
-
-///
+ </template><specialization><template-arg>Expr const(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3)</template-arg><template-arg>This</template-arg></specialization><inherit access="public">boost::proto::result_of::funop4&lt; Expr, A0, A1, A2, A3 &gt;</inherit></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/extends.hpp"><para>Macros and a base class for defining end-user expression types </para><namespace name="boost"><namespace name="proto"><namespace name="exprns_"><struct name="is_proto_expr"><purpose>Empty type to be used as a dummy template parameter of POD expression wrappers. It allows argument-dependent lookup to find Proto's operator overloads. </purpose><description><para><computeroutput>proto::is_proto_expr</computeroutput> allows argument-dependent lookup to find Proto's operator overloads. For example:</para><para><programlisting> template&lt;typename T, typename Dummy = proto::is_proto_
expr&gt;
+ struct my_terminal
+ {
+ BOOST_PROTO_EXTENDS(
+ typename proto::terminal&lt;T&gt;::type
+ , my_terminal&lt;T&gt;
+ , default_domain
+ )
+ };
+
+ // ...
+ my_terminal&lt;int&gt; _1, _2;
+ _1 + _2; // OK, uses proto::operator+
 </programlisting></para><para>Without the second <computeroutput>Dummy</computeroutput> template parameter, Proto's operator overloads would not be considered by name lookup. </para></description></struct><struct name="extends"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Derived"/>
       <template-type-parameter name="Domain"/>
       <template-type-parameter name="Tag"/>
- </template><purpose>extends&lt;&gt; class template for adding behaviors to a proto expression template </purpose><struct name="apply"><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><struct name="result"><template>
+ </template><purpose>extends&lt;&gt; class template for adding behaviors to a proto expression template </purpose><struct name="result"><template>
       <template-type-parameter name="Sig"/>
- </template><typedef name="type"><type>boost::mpl::apply_wrap1&lt; Domain, typename boost::proto::result_of::funop&lt; Sig, Derived &gt;::type &gt;::type</type></typedef></struct><typedef name="proto_base_expr"><type>Expr</type></typedef><typedef name="proto_domain"><type>Domain</type></typedef><typedef name="proto_derived_expr"><type>Derived</type></typedef><typedef name="proto_tag"><type>Expr::proto_tag</type></typedef><typedef name="proto_args"><type>Expr::proto_args</type></typedef><typedef name="proto_arity"><type>Expr::proto_arity</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="fusion_tag"><type>boost::proto::tag::proto_expr</type></typedef><typedef name="proto_arg0"><type>Expr::proto_arg0</type></typedef><typedef name="proto_arg1"><type>Expr::proto_arg1</type></typedef><typedef name="proto_arg2"><type>Expr::proto_arg2</type></typedef><typedef name="proto_arg3"><type>Expr::proto_arg3</type></typedef><typedef name="proto_arg4"><type>Expr::proto_arg4</type></t
ypedef><method-group name="public member functions"><method name="proto_base" cv=""><type>Expr &amp;</type></method><method name="proto_base" cv="const"><type>Expr const &amp;</type></method><method name="operator[]" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, boost::proto::expr&lt; <classname>boost::proto::tag::subscript</classname>, <classname>boost::proto::args2</classname>&lt; boost::proto::ref_&lt; Derived const &gt;, typename <classname>boost::proto::result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; &gt;::type const</type><template>
+ </template><typedef name="type"><type>boost::mpl::apply_wrap1&lt; Domain, typename boost::proto::result_of::funop&lt; Sig, Derived &gt;::type &gt;::type</type></typedef></struct><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr_"/>
+ <template-type-parameter name="State_"/>
+ <template-type-parameter name="Visitor_"/>
+ </template><specialization><template-arg>This(Expr_</template-arg><template-arg>State_</template-arg><template-arg>Visitor_)</template-arg></specialization><typedef name="type"><type>Expr_</type></typedef></struct-specialization><data-member name="expr"><type>Expr</type></data-member><typedef name="proto_base_expr"><type>Expr</type></typedef><typedef name="proto_domain"><type>Domain</type></typedef><typedef name="proto_derived_expr"><type>Derived</type></typedef><typedef name="proto_tag"><type>Expr::proto_tag</type></typedef><typedef name="proto_args"><type>Expr::proto_args</type></typedef><typedef name="proto_arity"><type>Expr::proto_arity</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="fusion_tag"><type>boost::proto::tag::proto_expr</type></typedef><typedef name="proto_arg0"><type>Expr::proto_arg0</type></typedef><typedef name="proto_arg1"><type>Expr::proto_arg1</type></typedef><typedef name="proto_arg2"><type>Expr::proto_arg2</type></typedef><typedef name="pro
to_arg3"><type>Expr::proto_arg3</type></typedef><typedef name="proto_arg4"><type>Expr::proto_arg4</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type>Expr_ const &amp;</type><template>
+ <template-type-parameter name="Expr_"/>
+ <template-type-parameter name="State_"/>
+ <template-type-parameter name="Visitor_"/>
+ </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="proto_base" cv=""><type>Expr &amp;</type></method><method name="proto_base" cv="const"><type>Expr const &amp;</type></method><method name="operator[]" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, boost::proto::expr&lt; <classname>boost::proto::tag::subscript</classname>, <classname>boost::proto::args2</classname>&lt; boost::proto::ref_&lt; Derived const &gt;, typename <classname>boost::proto::result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; &gt;::type const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter></method><method name="operator[]" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, boost::proto::expr&lt; <classname>boost::proto::tag::subscript</classname>, <classname>boost::proto::args2</classname>&lt; boost::proto::ref_&lt; Derived const &gt;, typename <classname>boost::proto::result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; &gt;::type const</type><template>
+ </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter></method><method name="operator[]" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, boost::proto::expr&lt; <classname>boost::proto::tag::subscript</classname>, <classname>boost::proto::args2</classname>&lt; boost::proto::ref_&lt; Derived const &gt;, typename <classname>boost::proto::result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; &gt;::type const</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, typename <classname>boost::proto::result_of::funop0</classname>&lt; Derived const &gt;::type &gt;::type const</type></method><method name="operator()" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, typename <classname>boost::proto::result_of::funop1</classname>&lt; Derived const , const A0 &gt;::type &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
@@ -685,23 +644,24 @@
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter></copy-assignment><copy-assignment><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter></copy-assignment><data-member name="expr"><type>Expr</type></data-member><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name="State_"/>
- <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="make" cv=""><type>static Derived const</type><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="extends"><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter></copy-assignment><method-group name="public static functions"><method name="make" cv=""><type>static Derived const</type><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="extends"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Derived"/>
       <template-type-parameter name="Domain"/>
- </template><specialization><template-arg>Expr</template-arg><template-arg>Derived</template-arg><template-arg>Domain</template-arg><template-arg>tag::terminal</template-arg></specialization><purpose>extends&lt;&gt; class template for adding behaviors to a proto expression template </purpose><struct name="apply"><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><struct name="result"><template>
+ </template><specialization><template-arg>Expr</template-arg><template-arg>Derived</template-arg><template-arg>Domain</template-arg><template-arg>tag::terminal</template-arg></specialization><purpose>extends&lt;&gt; class template for adding behaviors to a proto expression template </purpose><struct name="result"><template>
       <template-type-parameter name="Sig"/>
- </template><typedef name="type"><type>boost::mpl::apply_wrap1&lt; Domain, typename boost::proto::result_of::funop&lt; Sig, Derived &gt;::type &gt;::type</type></typedef></struct><typedef name="proto_base_expr"><type>Expr</type></typedef><typedef name="proto_domain"><type>Domain</type></typedef><typedef name="proto_derived_expr"><type>Derived</type></typedef><typedef name="proto_tag"><type>Expr::proto_tag</type></typedef><typedef name="proto_args"><type>Expr::proto_args</type></typedef><typedef name="proto_arity"><type>Expr::proto_arity</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="fusion_tag"><type>boost::proto::tag::proto_expr</type></typedef><typedef name="proto_arg0"><type>Expr::proto_arg0</type></typedef><typedef name="proto_arg1"><type>Expr::proto_arg1</type></typedef><typedef name="proto_arg2"><type>Expr::proto_arg2</type></typedef><typedef name="proto_arg3"><type>Expr::proto_arg3</type></typedef><typedef name="proto_arg4"><type>Expr::proto_arg4</type></t
ypedef><method-group name="public member functions"><method name="extends" cv=""><type/></method><method name="extends" cv=""><type/><parameter name="that"><paramtype><classname>extends</classname> const &amp;</paramtype></parameter></method><method name="extends" cv=""><type/><parameter name="expr_"><paramtype>Expr const &amp;</paramtype></parameter></method><method name="proto_base" cv=""><type>Expr &amp;</type></method><method name="proto_base" cv="const"><type>Expr const &amp;</type></method><method name="operator[]" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, boost::proto::expr&lt; <classname>boost::proto::tag::subscript</classname>, <classname>boost::proto::args2</classname>&lt; boost::proto::ref_&lt; Derived const &gt;, typename <classname>boost::proto::result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; &gt;::type const</type><template>
+ </template><typedef name="type"><type>boost::mpl::apply_wrap1&lt; Domain, typename boost::proto::result_of::funop&lt; Sig, Derived &gt;::type &gt;::type</type></typedef></struct><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr_"/>
+ <template-type-parameter name="State_"/>
+ <template-type-parameter name="Visitor_"/>
+ </template><specialization><template-arg>This(Expr_</template-arg><template-arg>State_</template-arg><template-arg>Visitor_)</template-arg></specialization><typedef name="type"><type>Expr_</type></typedef></struct-specialization><data-member name="expr"><type>Expr</type></data-member><typedef name="proto_base_expr"><type>Expr</type></typedef><typedef name="proto_domain"><type>Domain</type></typedef><typedef name="proto_derived_expr"><type>Derived</type></typedef><typedef name="proto_tag"><type>Expr::proto_tag</type></typedef><typedef name="proto_args"><type>Expr::proto_args</type></typedef><typedef name="proto_arity"><type>Expr::proto_arity</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="fusion_tag"><type>boost::proto::tag::proto_expr</type></typedef><typedef name="proto_arg0"><type>Expr::proto_arg0</type></typedef><typedef name="proto_arg1"><type>Expr::proto_arg1</type></typedef><typedef name="proto_arg2"><type>Expr::proto_arg2</type></typedef><typedef name="pro
to_arg3"><type>Expr::proto_arg3</type></typedef><typedef name="proto_arg4"><type>Expr::proto_arg4</type></typedef><method-group name="public member functions"><method name="extends" cv=""><type/></method><method name="extends" cv=""><type/><parameter name="that"><paramtype><classname>extends</classname> const &amp;</paramtype></parameter></method><method name="extends" cv=""><type/><parameter name="expr_"><paramtype>Expr const &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>Expr_ const &amp;</type><template>
+ <template-type-parameter name="Expr_"/>
+ <template-type-parameter name="State_"/>
+ <template-type-parameter name="Visitor_"/>
+ </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="proto_base" cv=""><type>Expr &amp;</type></method><method name="proto_base" cv="const"><type>Expr const &amp;</type></method><method name="operator[]" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, boost::proto::expr&lt; <classname>boost::proto::tag::subscript</classname>, <classname>boost::proto::args2</classname>&lt; boost::proto::ref_&lt; Derived const &gt;, typename <classname>boost::proto::result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; &gt;::type const</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter></method><method name="operator[]" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, boost::proto::expr&lt; <classname>boost::proto::tag::subscript</classname>, <classname>boost::proto::args2</classname>&lt; boost::proto::ref_&lt; Derived const &gt;, typename <classname>boost::proto::result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; &gt;::type const</type><template>
+ </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter></method><method name="operator[]" cv="const"><type>boost::mpl::apply_wrap1&lt; Domain, boost::proto::expr&lt; <classname>boost::proto::tag::subscript</classname>, <classname>boost::proto::args2</classname>&lt; boost::proto::ref_&lt; Derived const &gt;, typename <classname>boost::proto::result_of::as_arg</classname>&lt; A const &gt;::type &gt; &gt; &gt;::type const</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter></method><method name="operator[]" cv=""><type>boost::mpl::apply_wrap1&lt; Domain, boost::proto::expr&lt; <classname>boost::proto::tag::subscript</classname>, <classname>boost::proto::args2</classname>&lt; boost::proto::ref_&lt; Derived &gt;, typename <classname>boost::proto::result_of::as_arg</classname>&lt; A &gt;::type &gt; &gt; &gt;::type const</type><template>
           <template-type-parameter name="A"/>
@@ -743,93 +703,103 @@
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter></copy-assignment><copy-assignment><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter></copy-assignment><data-member name="expr"><type>Expr</type></data-member><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name="State_"/>
- <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method><method name="make" cv=""><type>static Derived const</type><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/fusion.hpp"><para>Make any Proto parse tree a valid Fusion sequence </para><namespace name="boost"><namespace name="fusion"><namespace name="extension"><struct name="as_element"><template>
+ </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter></copy-assignment><method-group name="public static functions"><method name="make" cv=""><type>static Derived const</type><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/fusion.hpp"><para>Make any Proto expression a valid Fusion sequence </para><namespace name="boost"><namespace name="fusion"><namespace name="extension"><struct name="as_element"><template>
       <template-type-parameter name="Tag"/>
- </template><struct name="result"><template>
- <template-type-parameter name="Sig"/>
- </template></struct><struct-specialization name="result"><template>
+ </template><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
     </template><specialization><template-arg>This(Expr)</template-arg></specialization></struct-specialization></struct><struct-specialization name="is_view_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_flat_view</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Iterator"/>
     </template></struct></struct-specialization><struct-specialization name="is_view_impl"><template>
     </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Iterator"/>
     </template></struct></struct-specialization><struct-specialization name="value_of_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref_iterator</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr_iterator</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Iterator"/>
- </template><inherit access="public">boost::proto::result_of::arg&lt; Iterator::expr_type, Iterator::index &gt;</inherit></struct></struct-specialization><struct-specialization name="deref_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref_iterator</template-arg></specialization><struct name="apply"><template>
+ </template></struct></struct-specialization><struct-specialization name="deref_impl"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr_iterator</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Iterator"/>
- </template><typedef name="type"><type><classname>proto::result_of::arg</classname>&lt; typename Iterator::expr_type, typename Iterator::index &gt;::type const &amp;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type</type><parameter name="iter"><paramtype>Iterator const &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="advance_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref_iterator</template-arg></specialization><struct name="apply"><template>
+ </template><typedef name="type"><type>proto::result_of::arg_c&lt; typename Iterator::expr_type const, Iterator::index &gt;::type const &amp;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type</type><parameter name="iter"><paramtype>Iterator const &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="advance_impl"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr_iterator</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Iterator"/>
       <template-type-parameter name="N"/>
     </template><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static <classname>type</classname></type><parameter name="iter"><paramtype>Iterator const &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="distance_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref_iterator</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr_iterator</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="IteratorFrom"/>
       <template-type-parameter name="IteratorTo"/>
     </template></struct></struct-specialization><struct-specialization name="next_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref_iterator</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr_iterator</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Iterator"/>
     </template></struct></struct-specialization><struct-specialization name="prior_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref_iterator</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr_iterator</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Iterator"/>
     </template></struct></struct-specialization><struct-specialization name="category_of_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
     </template><typedef name="type"><type>random_access_traversal_tag</type></typedef></struct></struct-specialization><struct-specialization name="size_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
     </template></struct></struct-specialization><struct-specialization name="begin_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref</template-arg></specialization><struct name="apply"><template>
- <template-type-parameter name="Sequence"/>
- </template><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static <classname>type</classname></type><parameter name="seq"><paramtype>Sequence &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="end_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
- </template><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static <classname>type</classname></type><parameter name="seq"><paramtype>Sequence &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="value_at_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref</template-arg></specialization><struct name="apply"><template>
+ </template><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static <classname>type</classname></type><parameter name="seq"><paramtype>Sequence const &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="end_impl"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
- <template-type-parameter name="N"/>
- </template><typedef name="type"><type><classname>proto::result_of::arg</classname>&lt; Sequence, N &gt;::type</type></typedef></struct></struct-specialization><struct-specialization name="at_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_ref</template-arg></specialization><struct name="apply"><template>
+ </template><typedef name="type"><type><emphasis>unspecified</emphasis></type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static <classname>type</classname></type><parameter name="seq"><paramtype>Sequence const &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="value_at_impl"><template>
+ </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
- <template-type-parameter name="N"/>
- </template><typedef name="type"><type><classname>proto::result_of::arg</classname>&lt; Sequence, N &gt;::type const &amp;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type</type><parameter name="seq"><paramtype>Sequence &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="is_segmented_impl"><template>
+ <template-type-parameter name="Index"/>
+ </template></struct></struct-specialization><struct-specialization name="at_impl"><template>
     </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
+ <template-type-parameter name="Sequence"/>
+ <template-type-parameter name="Index"/>
+ </template><typedef name="type"><type>proto::result_of::arg_c&lt; Sequence, Index::value &gt;::type const &amp;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type</type><parameter name="seq"><paramtype>Sequence &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="is_segmented_impl"><template>
+ </template><specialization><template-arg>proto::tag::proto_flat_view</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Iterator"/>
     </template></struct></struct-specialization><struct-specialization name="segments_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_flat_view</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
- </template><typedef name="proto_tag"><type>Sequence::proto_tag</type></typedef><typedef name="type"><type>fusion::transform_view&lt; proto::ref_&lt; Sequence &gt;, <classname>as_element</classname>&lt; proto_tag &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type</type><parameter name="sequence"><paramtype>Sequence &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="category_of_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
+ </template><typedef name="proto_tag"><type>Sequence::proto_tag</type></typedef><typedef name="type"><type>fusion::transform_view&lt; typename Sequence::expr_type, <classname>as_element</classname>&lt; proto_tag &gt;&gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type</type><parameter name="sequence"><paramtype>Sequence &amp;</paramtype></parameter></method></method-group></struct></struct-specialization><struct-specialization name="category_of_impl"><template>
+ </template><specialization><template-arg>proto::tag::proto_flat_view</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
     </template><typedef name="type"><type>forward_traversal_tag</type></typedef></struct></struct-specialization><struct-specialization name="begin_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_flat_view</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
     </template></struct></struct-specialization><struct-specialization name="end_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_flat_view</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
     </template></struct></struct-specialization><struct-specialization name="size_impl"><template>
- </template><specialization><template-arg>proto::tag::proto_expr</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>proto::tag::proto_flat_view</template-arg></specialization><struct name="apply"><template>
       <template-type-parameter name="Sequence"/>
- </template></struct></struct-specialization></namespace></namespace><namespace name="proto"><struct name="children"><template>
+ </template></struct></struct-specialization></namespace></namespace><namespace name="proto"><struct name="flat_view"><template>
       <template-type-parameter name="Expr"/>
- </template><method-group name="public member functions"/><constructor><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></constructor></struct><struct name="eval_fun"><template>
+ </template><typedef name="expr_type"><type>Expr</type></typedef><typedef name="proto_tag"><type>Expr::proto_tag</type></typedef><typedef name="category"><type>fusion::forward_traversal_tag</type></typedef><typedef name="fusion_tag"><type>tag::proto_flat_view</type></typedef><data-member name="expr_"><type>Expr &amp;</type></data-member><method-group name="public member functions"/><constructor><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></constructor></struct><struct name="eval_fun"><template>
       <template-type-parameter name="Context"/>
- </template><struct name="result"><template>
- <template-type-parameter name="Sig"/>
- </template></struct><struct-specialization name="result"><template>
+ </template><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ </template><specialization><template-arg>This(Expr)</template-arg></specialization><inherit access="public">boost::proto::result_of::eval&lt; boost::remove_reference&lt; Expr &gt;::type, Context &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>proto::result_of::eval</classname>&lt; Expr, Context &gt;::type</type><template>
+ <template-type-parameter name="Expr"/>
+ </template><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></method></method-group><constructor><parameter name="ctx"><paramtype>Context &amp;</paramtype></parameter></constructor></struct><struct-specialization name="is_callable"><template>
+ </template><specialization><template-arg>functional::flatten</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ </template><specialization><template-arg>functional::pop_front</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ </template><specialization><template-arg>functional::reverse</template-arg></specialization></struct-specialization><namespace name="functional"><struct name="flatten"><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ </template><specialization><template-arg>This(Expr)</template-arg></specialization><typedef name="type"><type><classname>flat_view</classname>&lt; typename boost::remove_reference&lt; Expr &gt;::<classname>type</classname> const &gt;</type></typedef></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>flat_view</classname>&lt; Expr const &gt;</type><template>
+ <template-type-parameter name="Expr"/>
+ </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct name="pop_front"><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ </template><specialization><template-arg>This(Expr)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>fusion::result_of::pop_front&lt; Expr const &gt;::type</type><template>
+ <template-type-parameter name="Expr"/>
+ </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct name="reverse"><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
- </template><specialization><template-arg>This(Expr)</template-arg></specialization><typedef name="type"><type>Context::template eval&lt; typename remove_reference&lt; Expr &gt;::type &gt;::result_type</type></typedef></struct-specialization><method-group name="public member functions"/><constructor><parameter name="ctx"><paramtype>Context &amp;</paramtype></parameter></constructor></struct><function name="children_of"><type><classname>children</classname>&lt; Expr &gt;</type><template>
+ </template><specialization><template-arg>This(Expr)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>fusion::result_of::reverse&lt; Expr const &gt;::type</type><template>
           <template-type-parameter name="Expr"/>
- </template><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></function></namespace></namespace></header><header name="boost/xpressive/proto/generate.hpp"><para>Contains definition of generate&lt;&gt; class template, which end users can specialize for generating domain-specific expression wrappers. </para><namespace name="boost"><namespace name="proto"><namespace name="generatorns_"><struct name="default_generator"><struct name="apply"><template>
+ </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct></namespace><data-member name="flatten"><type><classname>functional::flatten</classname> const</type></data-member></namespace></namespace></header><header name="boost/xpressive/proto/generate.hpp"><para>Contains definition of generate&lt;&gt; class template, which end users can specialize for generating domain-specific expression wrappers. </para><namespace name="boost"><namespace name="proto"><namespace name="generatorns_"><struct name="default_generator"><struct name="apply"><template>
       <template-type-parameter name="Expr"/>
     </template><typedef name="type"><type>Expr</type></typedef></struct><method-group name="public static functions"><method name="make" cv=""><type>static Expr const &amp;</type><template>
           <template-type-parameter name="Expr"/>
@@ -845,20 +815,35 @@
       <template-type-parameter name="Expr"/>
     </template><typedef name="type"><type>Extends&lt; Expr &gt;</type></typedef></struct><method-group name="public static functions"><method name="make" cv=""><type>static Extends&lt; Expr &gt;</type><template>
           <template-type-parameter name="Expr"/>
+ </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct name="by_value_generator"><template>
+ <template-type-parameter name="Generator"/>
+ </template><struct name="apply"><template>
+ <template-type-parameter name="Expr"/>
+ </template></struct><method-group name="public static functions"><method name="make" cv=""><type>static <classname>apply</classname>&lt; Expr &gt;::type</type><template>
+ <template-type-parameter name="Expr"/>
         </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/literal.hpp"><para>The literal&lt;&gt; terminal wrapper, and the proto::lit() function for creating literal&lt;&gt; wrappers. </para><namespace name="boost"><namespace name="proto"><namespace name="utility"><struct name="literal"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="Domain"/>
- </template><inherit access="public">boost::proto::exprns_::extends&lt; Expr, Derived, Domain, Tag &gt;</inherit><typedef name="terminal_type"><type><classname>terminal</classname>&lt; T &gt;::type</type></typedef><typedef name="base_type"><type><classname>extends</classname>&lt; terminal_type, <classname>literal</classname>&lt; T, Domain &gt;, Domain &gt;</type></typedef><method-group name="public member functions"/><constructor><template>
+ </template><typedef name="terminal_type"><type><classname>terminal</classname>&lt; T &gt;::type</type></typedef><typedef name="base_type"><type>extends&lt; terminal_type, <classname>literal</classname>&lt; T, Domain &gt;, Domain &gt;</type></typedef><method-group name="public member functions"/><constructor><template>
           <template-type-parameter name="U"/>
         </template><parameter name="u"><paramtype>U &amp;</paramtype></parameter></constructor><constructor><template>
           <template-type-parameter name="U"/>
         </template><parameter name="u"><paramtype>U const &amp;</paramtype></parameter></constructor><constructor><template>
           <template-type-parameter name="U"/>
- </template><parameter name="u"><paramtype><classname>literal</classname>&lt; U, Domain &gt; const &amp;</paramtype></parameter></constructor></struct></namespace><overloaded-function name="lit"><signature><type><classname>literal</classname>&lt; T &amp; &gt;</type><template>
+ </template><parameter name="u"><paramtype><classname>literal</classname>&lt; U, Domain &gt; const &amp;</paramtype></parameter></constructor></struct></namespace><overloaded-function name="lit"><signature><type>literal&lt; T &amp; &gt;</type><template>
           <template-type-parameter name="T"/>
- </template><parameter name="t"><paramtype>T &amp;</paramtype></parameter></signature><signature><type><classname>literal</classname>&lt; T const &amp; &gt;</type><template>
+ </template><parameter name="t"><paramtype>T &amp;</paramtype></parameter></signature><signature><type>literal&lt; T const &amp; &gt;</type><template>
           <template-type-parameter name="T"/>
- </template><parameter name="t"><paramtype>T const &amp;</paramtype></parameter></signature><description><para>lit </para></description></overloaded-function></namespace></namespace></header><header name="boost/xpressive/proto/make_expr.hpp"><para>Given a Fusion sequence of arguments and the type of a proto Expression, unpacks the sequence into the Expression. </para><namespace name="boost"><namespace name="fusion"/><namespace name="proto"><namespace name="functional"><struct name="make_expr"><template>
+ </template><parameter name="t"><paramtype>T const &amp;</paramtype></parameter></signature><description><para>lit </para></description></overloaded-function></namespace></namespace></header><header name="boost/xpressive/proto/make_expr.hpp"><para>Given a Fusion sequence of arguments and the type of a proto Expression, unpacks the sequence into the Expression. </para><namespace name="boost"><namespace name="fusion"/><namespace name="proto"><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Tag"/>
+ <template-type-parameter name="Domain"/>
+ </template><specialization><template-arg>functional::make_expr&lt; Tag</template-arg><template-arg>Domain &gt;</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Tag"/>
+ <template-type-parameter name="Domain"/>
+ </template><specialization><template-arg>functional::unpack_expr&lt; Tag</template-arg><template-arg>Domain &gt;</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Tag"/>
+ <template-type-parameter name="Domain"/>
+ </template><specialization><template-arg>functional::unfused_expr&lt; Tag</template-arg><template-arg>Domain &gt;</template-arg></specialization></struct-specialization><namespace name="functional"><struct name="make_expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="Domain"/>
     </template><struct name="result"><template>
@@ -888,7 +873,7 @@
       <template-type-parameter name="A2"/>
       <template-type-parameter name="A3"/>
       <template-type-parameter name="A4"/>
- </template><specialization><template-arg>This(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4)</template-arg></specialization><inherit access="public">boost::proto::result_of::make_expr&lt; Tag, Domain, remove_reference&lt; A0 &gt;::type, remove_reference&lt; A1 &gt;::type, remove_reference&lt; A2 &gt;::type, remove_reference&lt; A3 &gt;::type, remove_reference&lt; A4 &gt;::type &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::make_expr</classname>&lt; Tag, Domain, A &gt;::type const</type><template>
+ </template><specialization><template-arg>This(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4)</template-arg></specialization><inherit access="public">boost::proto::result_of::make_expr&lt; Tag, Domain, remove_reference&lt; A0 &gt;::type, remove_reference&lt; A1 &gt;::type, remove_reference&lt; A2 &gt;::type, remove_reference&lt; A3 &gt;::type, remove_reference&lt; A4 &gt;::type &gt;</inherit></struct-specialization><typedef name="proto_is_callable_"><type>void</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::make_expr</classname>&lt; Tag, Domain, A &gt;::type const</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type><classname>result_of::make_expr</classname>&lt; Tag, Domain, const A0 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
@@ -918,28 +903,28 @@
     </template></struct><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="Sequence"/>
- </template><specialization><template-arg>This(Sequence)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::unpack_expr</classname>&lt; Tag, Domain, Sequence &gt;::type</type><template>
+ </template><specialization><template-arg>This(Sequence)</template-arg></specialization><inherit access="public">boost::proto::result_of::unpack_expr&lt; Tag, Sequence,, &gt;</inherit></struct-specialization><typedef name="proto_is_callable_"><type>void</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::unpack_expr</classname>&lt; Tag, Domain, Sequence &gt;::type</type><template>
           <template-type-parameter name="Sequence"/>
         </template><parameter name="sequence"><paramtype>Sequence const &amp;</paramtype></parameter></method></method-group></struct><struct name="unfused_expr_fun"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="Domain"/>
     </template><struct name="result"><template>
       <template-type-parameter name="Sequence"/>
- </template><inherit access="public">boost::proto::result_of::unpack_expr&lt; Tag, Domain, Sequence &gt;</inherit></struct><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>proto::result_of::unpack_expr</classname>&lt; Tag, Domain, Sequence &gt;::type</type><template>
+ </template><inherit access="public">boost::proto::result_of::unpack_expr&lt; Tag, Domain, Sequence &gt;</inherit></struct><typedef name="proto_is_callable_"><type>void</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>proto::result_of::unpack_expr</classname>&lt; Tag, Domain, Sequence &gt;::type</type><template>
           <template-type-parameter name="Sequence"/>
         </template><parameter name="sequence"><paramtype>Sequence const &amp;</paramtype></parameter></method></method-group></struct><struct name="unfused_expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="Domain"/>
- </template></struct><struct-specialization name="make_expr"><template>
+ </template><typedef name="proto_is_callable_"><type>void</type></typedef></struct><struct-specialization name="make_expr"><template>
       <template-type-parameter name="Domain"/>
     </template><specialization><template-arg>tag::terminal</template-arg><template-arg>Domain</template-arg></specialization><struct name="result"><template>
       <template-type-parameter name="Sig"/>
     </template></struct><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="A"/>
- </template><specialization><template-arg>This(A)</template-arg></specialization><inherit access="public">boost::proto::result_of::make_expr&lt; tag::terminal, Domain, A &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::make_expr</classname>&lt; <classname>tag::terminal</classname>, Domain, A &gt;::type</type><template>
+ </template><specialization><template-arg>This(A)</template-arg></specialization><inherit access="public">boost::proto::result_of::make_expr&lt; Tag, A0, A1, A2, A3, A4,, &gt;</inherit></struct-specialization><typedef name="proto_is_callable_"><type>void</type></typedef><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::make_expr</classname>&lt; <classname>tag::terminal</classname>, Domain, A &gt;::type</type><template>
           <template-type-parameter name="A"/>
- </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type><classname>result_of::make_expr</classname>&lt; <classname>tag::terminal</classname>, Domain, A const &gt;::type</type><template>
+ </template><parameter name="a"><paramtype>A &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type><classname>result_of::make_expr</classname>&lt; <classname>tag::terminal</classname>, Domain, A const &gt;::type</type><template>
           <template-type-parameter name="A"/>
         </template><parameter name="a"><paramtype>A const &amp;</paramtype></parameter></method></method-group></struct-specialization></namespace><namespace name="result_of"><struct name="unpack_expr"><template>
       <template-type-parameter name="Tag"/>
@@ -974,28 +959,28 @@
       <template-type-parameter name="A2"/>
       <template-type-parameter name="A3"/>
       <template-type-parameter name="A4"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>Domain</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4</template-arg><template-arg>typename Domain::proto_is_domain_</template-arg></specialization></struct-specialization></namespace><overloaded-function name="unpack_expr"><signature><type>lazy_disable_if&lt; <classname>is_domain</classname>&lt; Sequence &gt;, <classname>result_of::unpack_expr</classname>&lt; Tag, Sequence &gt;&gt;::type const</type><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>Domain</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4</template-arg><template-arg>typename Domain::proto_is_domain_</template-arg></specialization></struct-specialization></namespace><overloaded-function name="unpack_expr"><signature><type>lazy_disable_if&lt; is_domain&lt; Sequence &gt;, <classname>result_of::unpack_expr</classname>&lt; Tag, Sequence &gt;&gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="Sequence"/>
         </template><parameter name="sequence"><paramtype>Sequence const &amp;</paramtype></parameter></signature><signature><type><classname>result_of::unpack_expr</classname>&lt; Tag, Domain, Sequence2 &gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="Domain"/>
           <template-type-parameter name="Sequence2"/>
- </template><parameter name="sequence2"><paramtype>Sequence2 const &amp;</paramtype></parameter></signature><description><para>unpack_expr </para></description></overloaded-function><overloaded-function name="make_expr"><signature><type>lazy_disable_if&lt; <classname>is_domain</classname>&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, A0 &gt;&gt;::type const</type><template>
+ </template><parameter name="sequence2"><paramtype>Sequence2 const &amp;</paramtype></parameter></signature><description><para>unpack_expr </para></description></overloaded-function><overloaded-function name="make_expr"><signature><type>lazy_disable_if&lt; is_domain&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, A0 &gt;&gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="A0"/>
         </template><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter></signature><signature><type><classname>result_of::make_expr</classname>&lt; Tag, Domain, B0 &gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="Domain"/>
           <template-type-parameter name="B0"/>
- </template><parameter name="b0"><paramtype>B0 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; <classname>is_domain</classname>&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0 &gt;&gt;::type const</type><template>
+ </template><parameter name="b0"><paramtype>B0 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; is_domain&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0 &gt;&gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="A0"/>
         </template><parameter name="a0"><paramtype>const A0 &amp;</paramtype></parameter></signature><signature><type><classname>result_of::make_expr</classname>&lt; Tag, Domain, const B0 &gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="Domain"/>
           <template-type-parameter name="B0"/>
- </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; <classname>is_domain</classname>&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0, const A1 &gt;&gt;::type const</type><template>
+ </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; is_domain&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0, const A1 &gt;&gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
@@ -1004,7 +989,7 @@
           <template-type-parameter name="Domain"/>
           <template-type-parameter name="B0"/>
           <template-type-parameter name="B1"/>
- </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter><parameter name="b1"><paramtype>const B1 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; <classname>is_domain</classname>&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0, const A1, const A2 &gt;&gt;::type const</type><template>
+ </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter><parameter name="b1"><paramtype>const B1 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; is_domain&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0, const A1, const A2 &gt;&gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
@@ -1015,7 +1000,7 @@
           <template-type-parameter name="B0"/>
           <template-type-parameter name="B1"/>
           <template-type-parameter name="B2"/>
- </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter><parameter name="b1"><paramtype>const B1 &amp;</paramtype></parameter><parameter name="b2"><paramtype>const B2 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; <classname>is_domain</classname>&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0, const A1, const A2, const A3 &gt;&gt;::type const</type><template>
+ </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter><parameter name="b1"><paramtype>const B1 &amp;</paramtype></parameter><parameter name="b2"><paramtype>const B2 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; is_domain&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0, const A1, const A2, const A3 &gt;&gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
@@ -1028,7 +1013,7 @@
           <template-type-parameter name="B1"/>
           <template-type-parameter name="B2"/>
           <template-type-parameter name="B3"/>
- </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter><parameter name="b1"><paramtype>const B1 &amp;</paramtype></parameter><parameter name="b2"><paramtype>const B2 &amp;</paramtype></parameter><parameter name="b3"><paramtype>const B3 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; <classname>is_domain</classname>&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0, const A1, const A2, const A3, const A4 &gt;&gt;::type const</type><template>
+ </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter><parameter name="b1"><paramtype>const B1 &amp;</paramtype></parameter><parameter name="b2"><paramtype>const B2 &amp;</paramtype></parameter><parameter name="b3"><paramtype>const B3 &amp;</paramtype></parameter></signature><signature><type>lazy_disable_if&lt; is_domain&lt; A0 &gt;, <classname>result_of::make_expr</classname>&lt; Tag, const A0, const A1, const A2, const A3, const A4 &gt;&gt;::type const</type><template>
           <template-type-parameter name="Tag"/>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
@@ -1043,18 +1028,44 @@
           <template-type-parameter name="B2"/>
           <template-type-parameter name="B3"/>
           <template-type-parameter name="B4"/>
- </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter><parameter name="b1"><paramtype>const B1 &amp;</paramtype></parameter><parameter name="b2"><paramtype>const B2 &amp;</paramtype></parameter><parameter name="b3"><paramtype>const B3 &amp;</paramtype></parameter><parameter name="b4"><paramtype>const B4 &amp;</paramtype></parameter></signature><description><para>make_expr </para></description></overloaded-function></namespace></namespace></header><header name="boost/xpressive/proto/matches.hpp"><para>Contains definition of matches&lt;&gt; metafunction for determining if a given expression matches a given pattern. </para><namespace name="boost"><namespace name="proto"><namespace name="control"><struct name="not_"><template>
+ </template><parameter name="b0"><paramtype>const B0 &amp;</paramtype></parameter><parameter name="b1"><paramtype>const B1 &amp;</paramtype></parameter><parameter name="b2"><paramtype>const B2 &amp;</paramtype></parameter><parameter name="b3"><paramtype>const B3 &amp;</paramtype></parameter><parameter name="b4"><paramtype>const B4 &amp;</paramtype></parameter></signature><description><para>make_expr </para></description></overloaded-function></namespace></namespace></header><header name="boost/xpressive/proto/matches.hpp"><para>Contains definition of matches&lt;&gt; metafunction for determining if a given expression matches a given pattern. </para><namespace name="boost"><namespace name="proto"><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="G0"/>
+ <template-type-parameter name="G1"/>
+ <template-type-parameter name="G2"/>
+ <template-type-parameter name="G3"/>
+ <template-type-parameter name="G4"/>
+ <template-type-parameter name="G5"/>
+ <template-type-parameter name="G6"/>
+ <template-type-parameter name="G7"/>
+ </template><specialization><template-arg>or_&lt; G0</template-arg><template-arg>G1</template-arg><template-arg>G2</template-arg><template-arg>G3</template-arg><template-arg>G4</template-arg><template-arg>G5</template-arg><template-arg>G6</template-arg><template-arg>G7 &gt;</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="G0"/>
+ <template-type-parameter name="G1"/>
+ <template-type-parameter name="G2"/>
+ <template-type-parameter name="G3"/>
+ <template-type-parameter name="G4"/>
+ <template-type-parameter name="G5"/>
+ <template-type-parameter name="G6"/>
+ <template-type-parameter name="G7"/>
+ </template><specialization><template-arg>and_&lt; G0</template-arg><template-arg>G1</template-arg><template-arg>G2</template-arg><template-arg>G3</template-arg><template-arg>G4</template-arg><template-arg>G5</template-arg><template-arg>G6</template-arg><template-arg>G7 &gt;</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
       <template-type-parameter name="Grammar"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_identity_transform</inherit><typedef name="proto_base_expr"><type><classname>not_</classname></type></typedef></struct><struct name="if_"><template>
- <template-type-parameter name="Condition"/>
+ </template><specialization><template-arg>not_&lt; Grammar &gt;</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="If"/>
       <template-type-parameter name="Then"/>
       <template-type-parameter name="Else"/>
- </template><inherit access="public">boost::proto::control::or_&lt; and_&lt; if_&lt; Condition &gt;, Then &gt;, and_&lt; not_&lt; if_&lt; Condition &gt; &gt;, Else &gt; &gt;</inherit></struct><struct-specialization name="if_"><template>
- <template-type-parameter name="Condition"/>
+ </template><specialization><template-arg>if_&lt; If</template-arg><template-arg>Then</template-arg><template-arg>Else &gt;</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Grammar"/>
+ </template><specialization><template-arg>vararg&lt; Grammar &gt;</template-arg></specialization></struct-specialization><namespace name="control"><struct name="not_"><template>
+ <template-type-parameter name="Grammar"/>
+ </template><typedef name="proto_is_callable_"><type>void</type></typedef><typedef name="proto_base_expr"><type><classname>not_</classname></type></typedef></struct><struct name="if_"><template>
+ <template-type-parameter name="If"/>
       <template-type-parameter name="Then"/>
- </template><specialization><template-arg>Condition</template-arg><template-arg>Then</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::control::and_&lt; if_&lt; Condition &gt;, Then &gt;</inherit></struct-specialization><struct-specialization name="if_"><template>
- <template-type-parameter name="Condition"/>
- </template><specialization><template-arg>Condition</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_identity_transform</inherit><typedef name="proto_base_expr"><type><classname>if_</classname></type></typedef></struct-specialization><struct name="or_"><template>
+ <template-type-parameter name="Else"/>
+ </template><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization><typedef name="proto_base_expr"><type><classname>if_</classname></type></typedef></struct><struct name="or_"><template>
       <template-type-parameter name="G0"/>
       <template-type-parameter name="G1"/>
       <template-type-parameter name="G2"/>
@@ -1063,15 +1074,12 @@
       <template-type-parameter name="G5"/>
       <template-type-parameter name="G6"/>
       <template-type-parameter name="G7"/>
- </template><struct name="apply"><template>
+ </template><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template><typedef name="which"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="type"><type>which::template <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type></typedef></struct><typedef name="proto_base_expr"><type><classname>or_</classname></type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="and_"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization><typedef name="which"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="type"><type>which::template result&lt; void(Expr, State, Visitor) &gt;::type</type></typedef></struct-specialization><typedef name="proto_base_expr"><type><classname>or_</classname></type></typedef></struct><struct name="and_"><template>
       <template-type-parameter name="G0"/>
       <template-type-parameter name="G1"/>
       <template-type-parameter name="G2"/>
@@ -1080,25 +1088,19 @@
       <template-type-parameter name="G5"/>
       <template-type-parameter name="G6"/>
       <template-type-parameter name="G7"/>
- </template><struct name="apply"><template>
+ </template><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template><typedef name="which"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="type"><type>which::template <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type></typedef></struct><typedef name="proto_base_expr"><type><classname>and_</classname></type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="switch_"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization><typedef name="which"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="type"><type>which::template result&lt; void(Expr, State, Visitor) &gt;::type</type></typedef></struct-specialization><typedef name="proto_base_expr"><type><classname>and_</classname></type></typedef></struct><struct name="switch_"><template>
       <template-type-parameter name="Cases"/>
- </template><struct name="apply"><template>
+ </template><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><typedef name="proto_base_expr"><type><classname>switch_</classname></type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="exact"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization><typedef name="proto_base_expr"><type><classname>switch_</classname></type></typedef></struct><struct name="exact"><template>
       <template-type-parameter name="T"/>
     </template></struct><struct name="convertible_to"><template>
       <template-type-parameter name="T"/>
@@ -1107,9 +1109,7 @@
     </template><typedef name="proto_is_vararg_"><type>void</type></typedef></struct></namespace><namespace name="result_of"><struct name="matches"><template>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="Grammar"/>
- </template></struct></namespace><namespace name="wildcardns_"><struct name="_"><inherit access="public">boost::proto::has_transformns_::has_identity_transform</inherit><typedef name="proto_base_expr"><type><classname>_</classname></type></typedef><typedef name="proto_is_wildcard_"><type>void</type></typedef></struct><function name="is_wildcard_expression_fun"><type><emphasis>unspecified</emphasis></type><template>
- <template-type-parameter name="T"/>
- </template><parameter name=""><paramtype>T const *</paramtype></parameter></function></namespace></namespace></namespace></header><header name="boost/xpressive/proto/operators.hpp"><para>Contains all the overloaded operators that make it possible to build expression templates using proto components </para><namespace name="boost"><namespace name="proto"><struct name="is_extension"><template>
+ </template></struct></namespace><namespace name="wildcardns_"><struct name="_"><typedef name="proto_is_callable_"><type>void</type></typedef><typedef name="proto_base_expr"><type><classname>_</classname></type></typedef></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/operators.hpp"><para>Contains all the overloaded operators that make it possible to build expression templates using proto components </para><namespace name="boost"><namespace name="proto"><struct name="is_extension"><template>
       <template-type-parameter name="T"/>
     </template></struct><namespace name="exprns_"><function name="operator+"><type><emphasis>unspecified</emphasis></type><template>
           <template-type-parameter name="Arg"/>
@@ -1511,48 +1511,57 @@
         </template><parameter name="left"><paramtype>Left const &amp;</paramtype></parameter><parameter name="right"><paramtype>Right &amp;</paramtype></parameter></function><function name="operator^="><type><emphasis>unspecified</emphasis></type><template>
           <template-type-parameter name="Left"/>
           <template-type-parameter name="Right"/>
- </template><parameter name="left"><paramtype>Left const &amp;</paramtype></parameter><parameter name="right"><paramtype>Right const &amp;</paramtype></parameter></function><function name="if_else"><type><classname>boost::proto::result_of::make_expr</classname>&lt; <classname>tag::if_else_</classname>, <classname>deduce_domain</classname>, const A0, const A1, const A2 &gt;::type const</type><template>
+ </template><parameter name="left"><paramtype>Left const &amp;</paramtype></parameter><parameter name="right"><paramtype>Right const &amp;</paramtype></parameter></function><function name="if_else"><type><classname>boost::proto::result_of::make_expr</classname>&lt; <classname>tag::if_else_</classname>, deduce_domain, const A0, const A1, const A2 &gt;::type const</type><template>
           <template-type-parameter name="A0"/>
           <template-type-parameter name="A1"/>
           <template-type-parameter name="A2"/>
- </template><parameter name="a0"><paramtype>const A0 &amp;</paramtype></parameter><parameter name="a1"><paramtype>const A1 &amp;</paramtype></parameter><parameter name="a2"><paramtype>const A2 &amp;</paramtype></parameter><description><para>if_else </para></description></function></namespace></namespace></namespace></header><header name="boost/xpressive/proto/proto.hpp"><para>The proto expression template compiler and supporting utilities. </para></header><header name="boost/xpressive/proto/proto_fwd.hpp"><para>Forward declarations of all of proto's public types and functions. </para><namespace name="boost"><namespace name="proto"><namespace name="context"/><namespace name="control"><data-member name="N"><type>int const</type></data-member></namespace><namespace name="domainns_"/><namespace name="exops"/><namespace name="exprns_"/><namespace name="functional"/><namespace name="generatorns_"/><namespace name="has_transformns_"><struct name="has_identity_transform"><struct name="apply"><template>
+ </template><parameter name="a0"><paramtype>const A0 &amp;</paramtype></parameter><parameter name="a1"><paramtype>const A1 &amp;</paramtype></parameter><parameter name="a2"><paramtype>const A2 &amp;</paramtype></parameter><description><para>if_else </para></description></function></namespace></namespace></namespace></header><header name="boost/xpressive/proto/proto.hpp"><para>The proto expression template compiler and supporting utilities. </para></header><header name="boost/xpressive/proto/proto_fwd.hpp"><para>Forward declarations of all of proto's public types and functions. </para><namespace name="boost"><namespace name="proto"><namespace name="context"/><namespace name="control"><data-member name="N"><type>int const</type></data-member></namespace><namespace name="domainns_"/><namespace name="exops"/><namespace name="exprns_"/><namespace name="functional"><typedef name="make_terminal"><type><classname>make_expr</classname>&lt; <classname>tag::terminal</classname> &gt;</type></typedef><typedef nam
e="make_posit"><type><classname>make_expr</classname>&lt; <classname>tag::posit</classname> &gt;</type></typedef><typedef name="make_negate"><type><classname>make_expr</classname>&lt; <classname>tag::negate</classname> &gt;</type></typedef><typedef name="make_dereference"><type><classname>make_expr</classname>&lt; <classname>tag::dereference</classname> &gt;</type></typedef><typedef name="make_complement"><type><classname>make_expr</classname>&lt; <classname>tag::complement</classname> &gt;</type></typedef><typedef name="make_address_of"><type><classname>make_expr</classname>&lt; <classname>tag::address_of</classname> &gt;</type></typedef><typedef name="make_logical_not"><type><classname>make_expr</classname>&lt; <classname>tag::logical_not</classname> &gt;</type></typedef><typedef name="make_pre_inc"><type><classname>make_expr</classname>&lt; <classname>tag::pre_inc</classname> &gt;</type></typedef><typedef name="make_pre_dec"><type><classname>make_expr</classname>&lt; <classname>tag::pre_dec</classname> &g
t;</type></typedef><typedef name="make_post_inc"><type><classname>make_expr</classname>&lt; <classname>tag::post_inc</classname> &gt;</type></typedef><typedef name="make_post_dec"><type><classname>make_expr</classname>&lt; <classname>tag::post_dec</classname> &gt;</type></typedef><typedef name="make_shift_left"><type><classname>make_expr</classname>&lt; <classname>tag::shift_left</classname> &gt;</type></typedef><typedef name="make_shift_right"><type><classname>make_expr</classname>&lt; <classname>tag::shift_right</classname> &gt;</type></typedef><typedef name="make_multiplies"><type><classname>make_expr</classname>&lt; <classname>tag::multiplies</classname> &gt;</type></typedef><typedef name="make_divides"><type><classname>make_expr</classname>&lt; <classname>tag::divides</classname> &gt;</type></typedef><typedef name="make_modulus"><type><classname>make_expr</classname>&lt; <classname>tag::modulus</classname> &gt;</type></typedef><typedef name="make_plus"><type><classname>make_expr</classname>&lt; <classna
me>tag::plus</classname> &gt;</type></typedef><typedef name="make_minus"><type><classname>make_expr</classname>&lt; <classname>tag::minus</classname> &gt;</type></typedef><typedef name="make_less"><type><classname>make_expr</classname>&lt; <classname>tag::less</classname> &gt;</type></typedef><typedef name="make_greater"><type><classname>make_expr</classname>&lt; <classname>tag::greater</classname> &gt;</type></typedef><typedef name="make_less_equal"><type><classname>make_expr</classname>&lt; <classname>tag::less_equal</classname> &gt;</type></typedef><typedef name="make_greater_equal"><type><classname>make_expr</classname>&lt; <classname>tag::greater_equal</classname> &gt;</type></typedef><typedef name="make_equal_to"><type><classname>make_expr</classname>&lt; <classname>tag::equal_to</classname> &gt;</type></typedef><typedef name="make_not_equal_to"><type><classname>make_expr</classname>&lt; <classname>tag::not_equal_to</classname> &gt;</type></typedef><typedef name="make_logical_or"><type><classname>make_
expr</classname>&lt; <classname>tag::logical_or</classname> &gt;</type></typedef><typedef name="make_logical_and"><type><classname>make_expr</classname>&lt; <classname>tag::logical_and</classname> &gt;</type></typedef><typedef name="make_bitwise_and"><type><classname>make_expr</classname>&lt; <classname>tag::bitwise_and</classname> &gt;</type></typedef><typedef name="make_bitwise_or"><type><classname>make_expr</classname>&lt; <classname>tag::bitwise_or</classname> &gt;</type></typedef><typedef name="make_bitwise_xor"><type><classname>make_expr</classname>&lt; <classname>tag::bitwise_xor</classname> &gt;</type></typedef><typedef name="make_comma"><type><classname>make_expr</classname>&lt; <classname>tag::comma</classname> &gt;</type></typedef><typedef name="make_mem_ptr"><type><classname>make_expr</classname>&lt; <classname>tag::mem_ptr</classname> &gt;</type></typedef><typedef name="make_assign"><type><classname>make_expr</classname>&lt; <classname>tag::assign</classname> &gt;</type></typedef><typedef name="
make_shift_left_assign"><type><classname>make_expr</classname>&lt; <classname>tag::shift_left_assign</classname> &gt;</type></typedef><typedef name="make_shift_right_assign"><type><classname>make_expr</classname>&lt; <classname>tag::shift_right_assign</classname> &gt;</type></typedef><typedef name="make_multiplies_assign"><type><classname>make_expr</classname>&lt; <classname>tag::multiplies_assign</classname> &gt;</type></typedef><typedef name="make_divides_assign"><type><classname>make_expr</classname>&lt; <classname>tag::divides_assign</classname> &gt;</type></typedef><typedef name="make_modulus_assign"><type><classname>make_expr</classname>&lt; <classname>tag::modulus_assign</classname> &gt;</type></typedef><typedef name="make_plus_assign"><type><classname>make_expr</classname>&lt; <classname>tag::plus_assign</classname> &gt;</type></typedef><typedef name="make_minus_assign"><type><classname>make_expr</classname>&lt; <classname>tag::minus_assign</classname> &gt;</type></typedef><typedef name="make_bitwise
_and_assign"><type><classname>make_expr</classname>&lt; <classname>tag::bitwise_and_assign</classname> &gt;</type></typedef><typedef name="make_bitwise_or_assign"><type><classname>make_expr</classname>&lt; <classname>tag::bitwise_or_assign</classname> &gt;</type></typedef><typedef name="make_bitwise_xor_assign"><type><classname>make_expr</classname>&lt; <classname>tag::bitwise_xor_assign</classname> &gt;</type></typedef><typedef name="make_subscript"><type><classname>make_expr</classname>&lt; <classname>tag::subscript</classname> &gt;</type></typedef><typedef name="make_if_else"><type><classname>make_expr</classname>&lt; <classname>tag::if_else_</classname> &gt;</type></typedef><typedef name="make_function"><type><classname>make_expr</classname>&lt; <classname>tag::function</classname> &gt;</type></typedef></namespace><namespace name="generatorns_"/><namespace name="has_transformns_"><struct name="has_identity_transform"><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
+ <template-type-parameter name="State_"/>
+ <template-type-parameter name="Visitor_"/>
+ </template><specialization><template-arg>This(Expr_</template-arg><template-arg>State_</template-arg><template-arg>Visitor_)</template-arg></specialization><typedef name="type"><type>Expr_</type></typedef></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>Expr_ const &amp;</type><template>
           <template-type-parameter name="Expr_"/>
           <template-type-parameter name="State_"/>
           <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method></method-group></struct></namespace><namespace name="op"/><namespace name="refns_"/><namespace name="result_of"/><namespace name="tag"/><namespace name="transform"/><namespace name="utility"/><namespace name="wildcardns_"/></namespace></namespace></header><header name="boost/xpressive/proto/ref.hpp"><para>Utility for storing a sub-expr by reference </para><namespace name="boost"><namespace name="proto"><namespace name="functional"><struct name="unref"><struct name="result"><template>
- <template-type-parameter name="T"/>
- </template></struct><struct-specialization name="result"><template>
+ </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method></method-group></struct></namespace><namespace name="op"/><namespace name="refns_"/><namespace name="result_of"/><namespace name="tag"/><namespace name="transform"><struct name="callable"><typedef name="proto_is_callable_"><type>void</type></typedef></struct><typedef name="arg0"><type><classname>arg_c</classname>&lt; 0 &gt;</type></typedef><typedef name="arg1"><type><classname>arg_c</classname>&lt; 1 &gt;</type></typedef><typedef name="arg2"><type><classname>arg_c</classname>&lt; 2 &gt;</type></typedef><typedef name="arg3"><type><classname>arg_c</classname>&lt; 3 &gt;</type></typedef><typedef name="arg4"><type><classname>arg_c</classname>&lt; 4 &gt;</type></typedef><typedef name="arg5"><type><classname>arg_c</classname>&lt; 5 &gt;</type></typedef><typedef name="arg6">
<type><classname>arg_c</classname>&lt; 6 &gt;</type></typedef><typedef name="arg7"><type><classname>arg_c</classname>&lt; 7 &gt;</type></typedef><typedef name="arg8"><type><classname>arg_c</classname>&lt; 8 &gt;</type></typedef><typedef name="arg9"><type><classname>arg_c</classname>&lt; 9 &gt;</type></typedef><typedef name="arg"><type><classname>arg0</classname></type></typedef><typedef name="left"><type><classname>arg0</classname></type></typedef><typedef name="right"><type><classname>arg1</classname></type></typedef></namespace><namespace name="utility"/><namespace name="wildcardns_"/><typedef name="_make_terminal"><type><classname>functional::make_terminal</classname></type></typedef><typedef name="_make_posit"><type><classname>functional::make_posit</classname></type></typedef><typedef name="_make_negate"><type><classname>functional::make_negate</classname></type></typedef><typedef name="_make_dereference"><type><classname>functional::make_dereference</classname></type></typedef><typedef name="_make_comp
lement"><type><classname>functional::make_complement</classname></type></typedef><typedef name="_make_address_of"><type><classname>functional::make_address_of</classname></type></typedef><typedef name="_make_logical_not"><type><classname>functional::make_logical_not</classname></type></typedef><typedef name="_make_pre_inc"><type><classname>functional::make_pre_inc</classname></type></typedef><typedef name="_make_pre_dec"><type><classname>functional::make_pre_dec</classname></type></typedef><typedef name="_make_post_inc"><type><classname>functional::make_post_inc</classname></type></typedef><typedef name="_make_post_dec"><type><classname>functional::make_post_dec</classname></type></typedef><typedef name="_make_shift_left"><type><classname>functional::make_shift_left</classname></type></typedef><typedef name="_make_shift_right"><type><classname>functional::make_shift_right</classname></type></typedef><typedef name="_make_multiplies"><type><classname>functional::make_multiplies</classname></type></typedef><typ
edef name="_make_divides"><type><classname>functional::make_divides</classname></type></typedef><typedef name="_make_modulus"><type><classname>functional::make_modulus</classname></type></typedef><typedef name="_make_plus"><type><classname>functional::make_plus</classname></type></typedef><typedef name="_make_minus"><type><classname>functional::make_minus</classname></type></typedef><typedef name="_make_less"><type><classname>functional::make_less</classname></type></typedef><typedef name="_make_greater"><type><classname>functional::make_greater</classname></type></typedef><typedef name="_make_less_equal"><type><classname>functional::make_less_equal</classname></type></typedef><typedef name="_make_greater_equal"><type><classname>functional::make_greater_equal</classname></type></typedef><typedef name="_make_equal_to"><type><classname>functional::make_equal_to</classname></type></typedef><typedef name="_make_not_equal_to"><type><classname>functional::make_not_equal_to</classname></type></typedef><typedef name
="_make_logical_or"><type><classname>functional::make_logical_or</classname></type></typedef><typedef name="_make_logical_and"><type><classname>functional::make_logical_and</classname></type></typedef><typedef name="_make_bitwise_and"><type><classname>functional::make_bitwise_and</classname></type></typedef><typedef name="_make_bitwise_or"><type><classname>functional::make_bitwise_or</classname></type></typedef><typedef name="_make_bitwise_xor"><type><classname>functional::make_bitwise_xor</classname></type></typedef><typedef name="_make_comma"><type><classname>functional::make_comma</classname></type></typedef><typedef name="_make_mem_ptr"><type><classname>functional::make_mem_ptr</classname></type></typedef><typedef name="_make_assign"><type><classname>functional::make_assign</classname></type></typedef><typedef name="_make_shift_left_assign"><type><classname>functional::make_shift_left_assign</classname></type></typedef><typedef name="_make_shift_right_assign"><type><classname>functional::make_shift_right
_assign</classname></type></typedef><typedef name="_make_multiplies_assign"><type><classname>functional::make_multiplies_assign</classname></type></typedef><typedef name="_make_divides_assign"><type><classname>functional::make_divides_assign</classname></type></typedef><typedef name="_make_modulus_assign"><type><classname>functional::make_modulus_assign</classname></type></typedef><typedef name="_make_plus_assign"><type><classname>functional::make_plus_assign</classname></type></typedef><typedef name="_make_minus_assign"><type><classname>functional::make_minus_assign</classname></type></typedef><typedef name="_make_bitwise_and_assign"><type><classname>functional::make_bitwise_and_assign</classname></type></typedef><typedef name="_make_bitwise_or_assign"><type><classname>functional::make_bitwise_or_assign</classname></type></typedef><typedef name="_make_bitwise_xor_assign"><type><classname>functional::make_bitwise_xor_assign</classname></type></typedef><typedef name="_make_subscript"><type><classname>function
al::make_subscript</classname></type></typedef><typedef name="_make_if_else"><type><classname>functional::make_if_else</classname></type></typedef><typedef name="_make_function"><type><classname>functional::make_function</classname></type></typedef><typedef name="_flatten"><type><classname>functional::flatten</classname></type></typedef><typedef name="_pop_front"><type><classname>functional::pop_front</classname></type></typedef><typedef name="_reverse"><type><classname>functional::reverse</classname></type></typedef><typedef name="_deep_copy"><type><classname>functional::deep_copy</classname></type></typedef><typedef name="_expr"><type><classname>transform::expr</classname></type></typedef><typedef name="_state"><type><classname>transform::state</classname></type></typedef><typedef name="_visitor"><type><classname>transform::visitor</classname></type></typedef><typedef name="_arg0"><type><classname>transform::arg0</classname></type></typedef><typedef name="_arg1"><type><classname>transform::arg1</classname>
</type></typedef><typedef name="_arg2"><type><classname>transform::arg2</classname></type></typedef><typedef name="_arg3"><type><classname>transform::arg3</classname></type></typedef><typedef name="_arg4"><type><classname>transform::arg4</classname></type></typedef><typedef name="_arg5"><type><classname>transform::arg5</classname></type></typedef><typedef name="_arg6"><type><classname>transform::arg6</classname></type></typedef><typedef name="_arg7"><type><classname>transform::arg7</classname></type></typedef><typedef name="_arg8"><type><classname>transform::arg8</classname></type></typedef><typedef name="_arg9"><type><classname>transform::arg9</classname></type></typedef><typedef name="_arg"><type><classname>transform::arg</classname></type></typedef><typedef name="_left"><type><classname>transform::left</classname></type></typedef><typedef name="_right"><type><classname>transform::right</classname></type></typedef></namespace></namespace></header><header name="boost/xpressive/proto/ref.hpp"><para>Utility f
or storing a sub-expr by reference </para><namespace name="boost"><namespace name="proto"><namespace name="functional"><struct name="unref"><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="T"/>
- </template><specialization><template-arg>This(T)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>T &amp;</type><template>
+ </template><specialization><template-arg>This(T)</template-arg></specialization><inherit access="public">boost::proto::result_of::unref&lt; T &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>T &amp;</type><template>
           <template-type-parameter name="T"/>
         </template><parameter name="t"><paramtype>T &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>T const &amp;</type><template>
           <template-type-parameter name="T"/>
         </template><parameter name="t"><paramtype>T const &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>T &amp;</type><template>
           <template-type-parameter name="T"/>
- </template><parameter name="t"><paramtype><classname>ref_</classname>&lt; T &gt; &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>T &amp;</type><template>
+ </template><parameter name="t"><paramtype>ref_&lt; T &gt; &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type>T &amp;</type><template>
           <template-type-parameter name="T"/>
- </template><parameter name="t"><paramtype><classname>ref_</classname>&lt; T &gt; const &amp;</paramtype></parameter></method></method-group></struct></namespace><namespace name="refns_"><struct name="ref_"><template>
+ </template><parameter name="t"><paramtype>ref_&lt; T &gt; const &amp;</paramtype></parameter></method></method-group></struct></namespace><namespace name="refns_"><struct name="ref_"><template>
       <template-type-parameter name="Expr"/>
- </template><typedef name="proto_base_expr"><type>Expr::proto_base_expr</type></typedef><typedef name="proto_tag"><type>Expr::proto_tag</type></typedef><typedef name="proto_args"><type>Expr::proto_args</type></typedef><typedef name="proto_arity"><type>Expr::proto_arity</type></typedef><typedef name="proto_domain"><type>Expr::proto_domain</type></typedef><typedef name="fusion_tag"><type>tag::proto_ref</type></typedef><typedef name="proto_is_ref_"><type>void</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>Expr</type></typedef><typedef name="proto_arg0"><type>Expr::proto_arg0</type></typedef><typedef name="proto_arg1"><type>Expr::proto_arg1</type></typedef><typedef name="proto_arg2"><type>Expr::proto_arg2</type></typedef><typedef name="proto_arg3"><type>Expr::proto_arg3</type></typedef><typedef name="proto_arg4"><type>Expr::proto_arg4</type></typedef><method-group name="public member functions"><method name="proto_base" cv="const"><type>mpl:
:if_&lt; is_const &lt; Expr &gt;, proto_base_expr const &amp;, proto_base_expr &amp; &gt;::type</type></method></method-group><data-member name="expr"><type>Expr &amp;</type></data-member><method-group name="public static functions"><method name="make" cv=""><type>static <classname>ref_</classname>&lt; Expr &gt;</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="ref_"><template>
+ </template><typedef name="proto_base_expr"><type>Expr::proto_base_expr</type></typedef><typedef name="proto_tag"><type>Expr::proto_tag</type></typedef><typedef name="proto_args"><type>Expr::proto_args</type></typedef><typedef name="proto_arity"><type>Expr::proto_arity</type></typedef><typedef name="proto_domain"><type>Expr::proto_domain</type></typedef><typedef name="proto_is_ref_"><type>void</type></typedef><typedef name="proto_is_expr_"><type>void</type></typedef><typedef name="proto_derived_expr"><type>Expr</type></typedef><typedef name="proto_arg0"><type>Expr::proto_arg0</type></typedef><typedef name="proto_arg1"><type>Expr::proto_arg1</type></typedef><typedef name="proto_arg2"><type>Expr::proto_arg2</type></typedef><typedef name="proto_arg3"><type>Expr::proto_arg3</type></typedef><typedef name="proto_arg4"><type>Expr::proto_arg4</type></typedef><data-member name="expr"><type>Expr &amp;</type></data-member><method-group name="public member functions"><method name="proto_base" cv="const"><type>mpl::i
f_&lt; is_const &lt; Expr &gt;, proto_base_expr const &amp;, proto_base_expr &amp; &gt;::type</type></method></method-group><method-group name="public static functions"><method name="make" cv=""><type>static <classname>ref_</classname>&lt; Expr &gt;</type><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></method></method-group></struct><struct-specialization name="ref_"><template>
       <template-type-parameter name="Expr"/>
     </template><specialization><template-arg>ref_&lt; Expr &gt;</template-arg></specialization></struct-specialization></namespace><namespace name="result_of"><struct name="unref"><template>
       <template-type-parameter name="T"/>
     </template><typedef name="type"><type>T</type></typedef><typedef name="reference"><type>T &amp;</type></typedef><typedef name="const_reference"><type>T const &amp;</type></typedef></struct><struct-specialization name="unref"><template>
       <template-type-parameter name="T"/>
- </template><specialization><template-arg>ref_&lt; T &gt;</template-arg></specialization><typedef name="type"><type>T::proto_derived_expr</type></typedef><typedef name="reference"><type>T &amp;</type></typedef><typedef name="const_reference"><type>T &amp;</type></typedef></struct-specialization><struct-specialization name="unref"><template>
+ </template><specialization><template-arg>ref_&lt; T &gt;</template-arg></specialization><typedef name="type"><type>T</type></typedef><typedef name="reference"><type>T &amp;</type></typedef><typedef name="const_reference"><type>T &amp;</type></typedef></struct-specialization><struct-specialization name="unref"><template>
+ <template-type-parameter name="T"/>
+ </template><specialization><template-arg>ref_&lt; T const &gt;</template-arg></specialization><typedef name="type"><type>T</type></typedef><typedef name="reference"><type>T const &amp;</type></typedef><typedef name="const_reference"><type>T const &amp;</type></typedef></struct-specialization><struct-specialization name="unref"><template>
       <template-type-parameter name="T"/>
     </template><specialization><template-arg>T &amp;</template-arg></specialization><typedef name="type"><type>T</type></typedef><typedef name="reference"><type>T &amp;</type></typedef><typedef name="const_reference"><type>T &amp;</type></typedef></struct-specialization><struct-specialization name="unref"><template>
       <template-type-parameter name="T"/>
- </template><specialization><template-arg>T const &amp;</template-arg></specialization><typedef name="type"><type>T</type></typedef><typedef name="reference"><type>T const &amp;</type></typedef><typedef name="const_reference"><type>T const &amp;</type></typedef></struct-specialization></namespace><data-member name="unref"><type><classname>functional::unref</classname> const</type></data-member></namespace></namespace></header><header name="boost/xpressive/proto/tags.hpp"><para>Contains the tags for all the overloadable operators in C++ </para><namespace name="boost"><namespace name="proto"><namespace name="tag"><struct name="terminal"><purpose>Tag type for terminals; aka, leaves in the expression tree. </purpose></struct><struct name="posit"><purpose>Tag type for the unary + operator. </purpose></struct><struct name="negate"><purpose>Tag type for the unary - operator. </purpose></struct><struct name="dereference"><purpose>Tag type for the unary * operator. </purpose></struct><struct name="complement"><pu
rpose>Tag type for the unary ~ operator. </purpose></struct><struct name="address_of"><purpose>Tag type for the unary &amp; operator. </purpose></struct><struct name="logical_not"><purpose>Tag type for the unary ! operator. </purpose></struct><struct name="pre_inc"><purpose>Tag type for the unary prefix ++ operator. </purpose></struct><struct name="pre_dec"><purpose>Tag type for the unary prefix -- operator. </purpose></struct><struct name="post_inc"><purpose>Tag type for the unary postfix ++ operator. </purpose></struct><struct name="post_dec"><purpose>Tag type for the unary postfix -- operator. </purpose></struct><struct name="shift_left"><purpose>Tag type for the binary &lt;&lt; operator. </purpose></struct><struct name="shift_right"><purpose>Tag type for the binary &gt;&gt; operator. </purpose></struct><struct name="multiplies"><purpose>Tag type for the binary * operator. </purpose></struct><struct name="divides"><purpose>Tag type for the binary / operator. </purpose></struct><struct name="modulus"><purp
ose>Tag type for the binary % operator. </purpose></struct><struct name="plus"><purpose>Tag type for the binary + operator. </purpose></struct><struct name="minus"><purpose>Tag type for the binary - operator. </purpose></struct><struct name="less"><purpose>Tag type for the binary &lt; operator. </purpose></struct><struct name="greater"><purpose>Tag type for the binary &gt; operator. </purpose></struct><struct name="less_equal"><purpose>Tag type for the binary &lt;= operator. </purpose></struct><struct name="greater_equal"><purpose>Tag type for the binary &gt;= operator. </purpose></struct><struct name="equal_to"><purpose>Tag type for the binary == operator. </purpose></struct><struct name="not_equal_to"><purpose>Tag type for the binary != operator. </purpose></struct><struct name="logical_or"><purpose>Tag type for the binary || operator. </purpose></struct><struct name="logical_and"><purpose>Tag type for the binary &amp;&amp; operator. </purpose></struct><struct name="bitwise_and"><purpose>Tag type for the b
inary &amp; operator. </purpose></struct><struct name="bitwise_or"><purpose>Tag type for the binary | operator. </purpose></struct><struct name="bitwise_xor"><purpose>Tag type for the binary ^ operator. </purpose></struct><struct name="comma"><purpose>Tag type for the binary , operator. </purpose></struct><struct name="mem_ptr"><purpose>Tag type for the binary -&gt;* operator. </purpose></struct><struct name="assign"><purpose>Tag type for the binary = operator. </purpose></struct><struct name="shift_left_assign"><purpose>Tag type for the binary &lt;&lt;= operator. </purpose></struct><struct name="shift_right_assign"><purpose>Tag type for the binary &gt;&gt;= operator. </purpose></struct><struct name="multilpies_assign"><purpose>Tag type for the binary *= operator. </purpose></struct><struct name="divides_assign"><purpose>Tag type for the binary /= operator. </purpose></struct><struct name="modulus_assign"><purpose>Tag type for the binary = operator. </purpose></struct><struct name="plus_assign"><purpose>Tag
type for the binary += operator. </purpose></struct><struct name="minus_assign"><purpose>Tag type for the binary -= operator. </purpose></struct><struct name="bitwise_and_assign"><purpose>Tag type for the binary &amp;= operator. </purpose></struct><struct name="bitwise_or_assign"><purpose>Tag type for the binary |= operator. </purpose></struct><struct name="bitwise_xor_assign"><purpose>Tag type for the binary ^= operator. </purpose></struct><struct name="subscript"><purpose>Tag type for the binary subscript operator. </purpose></struct><struct name="if_else_"><purpose>Tag type for the ternary ?: conditional operator. </purpose></struct><struct name="function"><purpose>Tag type for the nary function call operator. </purpose></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/traits.hpp"><para>Contains definitions for arg&lt;&gt;, arg_c&lt;&gt;, left&lt;&gt;, right&lt;&gt;, tag&lt;&gt;, and the helper functions arg(), arg_c(), left() and right(). </para><namespace name="bo
ost"><namespace name="proto"><namespace name="functional"><struct name="as_expr"><template>
+ </template><specialization><template-arg>T const &amp;</template-arg></specialization><typedef name="type"><type>T</type></typedef><typedef name="reference"><type>T const &amp;</type></typedef><typedef name="const_reference"><type>T const &amp;</type></typedef></struct-specialization></namespace><data-member name="unref"><type><classname>functional::unref</classname> const</type></data-member></namespace></namespace></header><header name="boost/xpressive/proto/tags.hpp"><para>Contains the tags for all the overloadable operators in C++ </para><namespace name="boost"><namespace name="proto"><namespace name="tag"><struct name="terminal"><purpose>Tag type for terminals; aka, leaves in the expression tree. </purpose></struct><struct name="posit"><purpose>Tag type for the unary + operator. </purpose></struct><struct name="negate"><purpose>Tag type for the unary - operator. </purpose></struct><struct name="dereference"><purpose>Tag type for the unary * operator. </purpose></struct><struct name="complement"><pu
rpose>Tag type for the unary ~ operator. </purpose></struct><struct name="address_of"><purpose>Tag type for the unary &amp; operator. </purpose></struct><struct name="logical_not"><purpose>Tag type for the unary ! operator. </purpose></struct><struct name="pre_inc"><purpose>Tag type for the unary prefix ++ operator. </purpose></struct><struct name="pre_dec"><purpose>Tag type for the unary prefix -- operator. </purpose></struct><struct name="post_inc"><purpose>Tag type for the unary postfix ++ operator. </purpose></struct><struct name="post_dec"><purpose>Tag type for the unary postfix -- operator. </purpose></struct><struct name="shift_left"><purpose>Tag type for the binary &lt;&lt; operator. </purpose></struct><struct name="shift_right"><purpose>Tag type for the binary &gt;&gt; operator. </purpose></struct><struct name="multiplies"><purpose>Tag type for the binary * operator. </purpose></struct><struct name="divides"><purpose>Tag type for the binary / operator. </purpose></struct><struct name="modulus"><purp
ose>Tag type for the binary % operator. </purpose></struct><struct name="plus"><purpose>Tag type for the binary + operator. </purpose></struct><struct name="minus"><purpose>Tag type for the binary - operator. </purpose></struct><struct name="less"><purpose>Tag type for the binary &lt; operator. </purpose></struct><struct name="greater"><purpose>Tag type for the binary &gt; operator. </purpose></struct><struct name="less_equal"><purpose>Tag type for the binary &lt;= operator. </purpose></struct><struct name="greater_equal"><purpose>Tag type for the binary &gt;= operator. </purpose></struct><struct name="equal_to"><purpose>Tag type for the binary == operator. </purpose></struct><struct name="not_equal_to"><purpose>Tag type for the binary != operator. </purpose></struct><struct name="logical_or"><purpose>Tag type for the binary || operator. </purpose></struct><struct name="logical_and"><purpose>Tag type for the binary &amp;&amp; operator. </purpose></struct><struct name="bitwise_and"><purpose>Tag type for the b
inary &amp; operator. </purpose></struct><struct name="bitwise_or"><purpose>Tag type for the binary | operator. </purpose></struct><struct name="bitwise_xor"><purpose>Tag type for the binary ^ operator. </purpose></struct><struct name="comma"><purpose>Tag type for the binary , operator. </purpose></struct><struct name="mem_ptr"><purpose>Tag type for the binary -&gt;* operator. </purpose></struct><struct name="assign"><purpose>Tag type for the binary = operator. </purpose></struct><struct name="shift_left_assign"><purpose>Tag type for the binary &lt;&lt;= operator. </purpose></struct><struct name="shift_right_assign"><purpose>Tag type for the binary &gt;&gt;= operator. </purpose></struct><struct name="multiplies_assign"><purpose>Tag type for the binary *= operator. </purpose></struct><struct name="divides_assign"><purpose>Tag type for the binary /= operator. </purpose></struct><struct name="modulus_assign"><purpose>Tag type for the binary = operator. </purpose></struct><struct name="plus_assign"><purpose>Tag
type for the binary += operator. </purpose></struct><struct name="minus_assign"><purpose>Tag type for the binary -= operator. </purpose></struct><struct name="bitwise_and_assign"><purpose>Tag type for the binary &amp;= operator. </purpose></struct><struct name="bitwise_or_assign"><purpose>Tag type for the binary |= operator. </purpose></struct><struct name="bitwise_xor_assign"><purpose>Tag type for the binary ^= operator. </purpose></struct><struct name="subscript"><purpose>Tag type for the binary subscript operator. </purpose></struct><struct name="if_else_"><purpose>Tag type for the ternary ?: conditional operator. </purpose></struct><struct name="function"><purpose>Tag type for the nary function call operator. </purpose></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/traits.hpp"><para>Contains definitions for arg&lt;&gt;, arg_c&lt;&gt;, left&lt;&gt;, right&lt;&gt;, tag&lt;&gt;, and the helper functions arg(), arg_c(), left() and right(). </para><namespace name="bo
ost"><namespace name="proto"><struct name="is_callable"><template>
+ <template-type-parameter name="T"/>
+ </template></struct><struct name="is_aggregate"><template>
+ <template-type-parameter name="T"/>
+ </template><description><para>is_aggregate </para></description></struct><struct-specialization name="is_callable"><template>
+ </template><specialization><template-arg>proto::_</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ </template><specialization><template-arg>proto::callable</template-arg></specialization></struct-specialization><struct-specialization name="is_aggregate"><template>
+ <template-type-parameter name="Tag"/>
+ <template-type-parameter name="Args"/>
+ <template-nontype-parameter name="N"><type>long</type></template-nontype-parameter>
+ </template><specialization><template-arg>proto::expr&lt; Tag</template-arg><template-arg>Args</template-arg><template-arg>N &gt;</template-arg></specialization></struct-specialization><namespace name="functional"><struct name="as_expr"><template>
       <template-type-parameter name="Domain"/>
- </template><struct name="result"><template>
- <template-type-parameter name="Sig"/>
- </template></struct><struct-specialization name="result"><template>
+ </template><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="T"/>
     </template><specialization><template-arg>This(T)</template-arg></specialization><inherit access="public">boost::proto::result_of::as_expr&lt; remove_reference&lt; T &gt;::type, Domain &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::as_expr</classname>&lt; T, Domain &gt;::result_type</type><template>
@@ -1561,9 +1570,7 @@
           <template-type-parameter name="T"/>
         </template><parameter name="t"><paramtype>T const &amp;</paramtype></parameter></method></method-group></struct><struct name="as_arg"><template>
       <template-type-parameter name="Domain"/>
- </template><struct name="result"><template>
- <template-type-parameter name="Sig"/>
- </template></struct><struct-specialization name="result"><template>
+ </template><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="T"/>
     </template><specialization><template-arg>This(T)</template-arg></specialization><inherit access="public">boost::proto::result_of::as_arg&lt; remove_reference&lt; T &gt;::type, Domain &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::as_arg</classname>&lt; T, Domain &gt;::type</type><template>
@@ -1572,9 +1579,7 @@
           <template-type-parameter name="T"/>
         </template><parameter name="t"><paramtype>T const &amp;</paramtype></parameter></method></method-group></struct><struct name="arg_c"><template>
       <template-nontype-parameter name="N"><type>long</type></template-nontype-parameter>
- </template><struct name="result"><template>
- <template-type-parameter name="Sig"/>
- </template></struct><struct-specialization name="result"><template>
+ </template><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
     </template><specialization><template-arg>This(Expr)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>result_of::arg_c&lt; Expr, N &gt;::reference</type><template>
@@ -1583,208 +1588,202 @@
           <template-type-parameter name="Expr"/>
         </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct name="arg"><template>
       <template-type-parameter name="N"/>
- </template><struct name="result"><template>
- <template-type-parameter name="Sig"/>
- </template></struct><struct-specialization name="result"><template>
+ </template><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
- </template><specialization><template-arg>This(Expr)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::arg</classname>&lt; Expr, N &gt;::reference</type><template>
+ </template><specialization><template-arg>This(Expr)</template-arg></specialization><inherit access="public">boost::proto::result_of::arg&lt; Expr, N &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::arg</classname>&lt; Expr, N &gt;::reference</type><template>
           <template-type-parameter name="Expr"/>
         </template><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type><classname>result_of::arg</classname>&lt; Expr, N &gt;::const_reference</type><template>
           <template-type-parameter name="Expr"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct name="left"><struct name="result"><template>
- <template-type-parameter name="Sig"/>
- </template></struct><struct-specialization name="result"><template>
+ </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct name="left"><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
- </template><specialization><template-arg>This(Expr)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::left</classname>&lt; Expr &gt;::reference</type><template>
+ </template><specialization><template-arg>This(Expr)</template-arg></specialization><inherit access="public">boost::proto::result_of::left&lt; Expr &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::left</classname>&lt; Expr &gt;::reference</type><template>
           <template-type-parameter name="Expr"/>
         </template><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type><classname>result_of::left</classname>&lt; Expr &gt;::const_reference</type><template>
           <template-type-parameter name="Expr"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct name="right"><struct name="result"><template>
- <template-type-parameter name="Sig"/>
- </template></struct><struct-specialization name="result"><template>
+ </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct><struct name="right"><struct-specialization name="result"><template>
       <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
- </template><specialization><template-arg>This(Expr)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::right</classname>&lt; Expr &gt;::reference</type><template>
+ </template><specialization><template-arg>This(Expr)</template-arg></specialization><inherit access="public">boost::proto::result_of::right&lt; Expr &gt;</inherit></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type><classname>result_of::right</classname>&lt; Expr &gt;::reference</type><template>
           <template-type-parameter name="Expr"/>
         </template><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></method><method name="operator()" cv="const"><type><classname>result_of::right</classname>&lt; Expr &gt;::const_reference</type><template>
           <template-type-parameter name="Expr"/>
         </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></method></method-group></struct></namespace><namespace name="op"><struct name="terminal"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_identity_transform</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::terminal</classname>, <classname>args0</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::terminal</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="if_else_"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::terminal</classname>, <classname>args0</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::terminal</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="if_else_"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
       <template-type-parameter name="V"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::if_else_</classname>, <classname>args3</classname>&lt; T, U, V &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::if_else_</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><typedef name="proto_arg2"><type>V</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="unary_expr"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::if_else_</classname>, <classname>args3</classname>&lt; T, U, V &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::if_else_</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><typedef name="proto_arg2"><type>V</type></typedef></struct><struct name="unary_expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; Tag, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="binary_expr"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; Tag, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="binary_expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; Tag, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="posit"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; Tag, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="posit"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::posit</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::posit</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="negate"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::posit</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::posit</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="negate"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::negate</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::negate</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="dereference"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::negate</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::negate</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="dereference"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::dereference</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::dereference</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="complement"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::dereference</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::dereference</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="complement"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::complement</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::complement</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="address_of"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::complement</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::complement</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="address_of"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::address_of</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::address_of</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="logical_not"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::address_of</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::address_of</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="logical_not"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::logical_not</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::logical_not</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="pre_inc"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::logical_not</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::logical_not</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="pre_inc"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::pre_inc</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::pre_inc</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="pre_dec"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::pre_inc</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::pre_inc</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="pre_dec"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::pre_dec</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::pre_dec</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="post_inc"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::pre_dec</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::pre_dec</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="post_inc"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::post_inc</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::post_inc</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="post_dec"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::post_inc</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::post_inc</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="post_dec"><template>
       <template-type-parameter name="T"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::post_dec</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::post_dec</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="shift_left"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::post_dec</classname>, <classname>args1</classname>&lt; T &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::post_dec</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef></struct><struct name="shift_left"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::shift_left</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::shift_left</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="shift_right"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::shift_left</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::shift_left</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="shift_right"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::shift_right</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::shift_right</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="multiplies"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::shift_right</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::shift_right</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="multiplies"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::multiplies</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::multiplies</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="divides"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::multiplies</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::multiplies</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="divides"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::divides</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::divides</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="modulus"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::divides</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::divides</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="modulus"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::modulus</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::modulus</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="plus"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::modulus</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::modulus</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="plus"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::plus</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::plus</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="minus"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::plus</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::plus</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="minus"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::minus</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::minus</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="less"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::minus</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::minus</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="less"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::less</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::less</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="greater"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::less</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::less</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="greater"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::greater</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::greater</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="less_equal"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::greater</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::greater</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="less_equal"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::less_equal</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::less_equal</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="greater_equal"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::less_equal</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::less_equal</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="greater_equal"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::greater_equal</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::greater_equal</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="equal_to"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::greater_equal</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::greater_equal</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="equal_to"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::equal_to</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::equal_to</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="not_equal_to"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::equal_to</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::equal_to</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="not_equal_to"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::not_equal_to</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::not_equal_to</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="logical_or"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::not_equal_to</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::not_equal_to</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="logical_or"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::logical_or</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::logical_or</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="logical_and"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::logical_or</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::logical_or</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="logical_and"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::logical_and</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::logical_and</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="bitwise_and"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::logical_and</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::logical_and</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="bitwise_and"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::bitwise_and</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_and</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="bitwise_or"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::bitwise_and</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_and</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="bitwise_or"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::bitwise_or</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_or</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="bitwise_xor"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::bitwise_or</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_or</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="bitwise_xor"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::bitwise_xor</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_xor</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="comma"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::bitwise_xor</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_xor</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="comma"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::comma</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::comma</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="mem_ptr"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::comma</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::comma</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="mem_ptr"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::mem_ptr</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::mem_ptr</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::mem_ptr</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::mem_ptr</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="shift_left_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="shift_left_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::shift_left_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::shift_left_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="shift_right_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::shift_left_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::shift_left_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="shift_right_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::shift_right_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::shift_right_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="multilpies_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::shift_right_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::shift_right_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="multiplies_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::multilpies_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::multilpies_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="divides_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::multiplies_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::multiplies_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="divides_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::divides_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::divides_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="modulus_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::divides_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::divides_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="modulus_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::modulus_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::modulus_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="plus_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::modulus_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::modulus_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="plus_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::plus_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::plus_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="minus_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::plus_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::plus_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="minus_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::minus_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::minus_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="bitwise_and_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::minus_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::minus_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="bitwise_and_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::bitwise_and_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_and_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="bitwise_or_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::bitwise_and_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_and_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="bitwise_or_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::bitwise_or_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_or_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="bitwise_xor_assign"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::bitwise_or_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_or_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="bitwise_xor_assign"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::bitwise_xor_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_xor_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct name="subscript"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::bitwise_xor_assign</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::bitwise_xor_assign</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct name="subscript"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="U"/>
- </template><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::subscript</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::subscript</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef><method-group name="public member functions"/><constructor/></struct><struct-specialization name="function"><template>
+ </template><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::subscript</classname>, <classname>args2</classname>&lt; T, U &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::subscript</classname></type></typedef><typedef name="proto_arg0"><type>T</type></typedef><typedef name="proto_arg1"><type>U</type></typedef></struct><struct-specialization name="function"><template>
       <template-type-parameter name="A0"/>
- </template><specialization><template-arg>A0</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::function</classname>, <classname>args1</classname>&lt; A0 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg2"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></ty
pedef></struct-specialization><struct-specialization name="nary_expr"><template>
+ </template><specialization><template-arg>A0</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::function</classname>, <classname>args1</classname>&lt; A0 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg2"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-spec
ialization name="nary_expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="A0"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; Tag, <classname>args1</classname>&lt; A0 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg2"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specializa
tion name="function"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; Tag, <classname>args1</classname>&lt; A0 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg2"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="function"><template>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
- </template><specialization><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::function</classname>, <classname>args2</classname>&lt; A0, A1 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specializatio
n><struct-specialization name="nary_expr"><template>
+ </template><specialization><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::function</classname>, <classname>args2</classname>&lt; A0, A1 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="nary_expr">
<template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; Tag, <classname>args2</classname>&lt; A0, A1 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="function"><templa
te>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; Tag, <classname>args2</classname>&lt; A0, A1 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="function"><template>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
       <template-type-parameter name="A2"/>
- </template><specialization><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::function</classname>, <classname>args3</classname>&lt; A0, A1, A2 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization nam
e="nary_expr"><template>
+ </template><specialization><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::function</classname>, <classname>args3</classname>&lt; A0, A1, A2 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="nary_expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
       <template-type-parameter name="A2"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; Tag, <classname>args3</classname>&lt; A0, A1, A2 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="function"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>void</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; Tag, <classname>args3</classname>&lt; A0, A1, A2 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="function"><template>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
       <template-type-parameter name="A2"/>
       <template-type-parameter name="A3"/>
- </template><specialization><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::function</classname>, <classname>args4</classname>&lt; A0, A1, A2, A3 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type>A3</type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="nary_expr"><template>
+ </template><specialization><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::function</classname>, <classname>args4</classname>&lt; A0, A1, A2, A3 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type>A3</type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="nary_expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
       <template-type-parameter name="A2"/>
       <template-type-parameter name="A3"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; Tag, <classname>args4</classname>&lt; A0, A1, A2, A3 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type>A3</type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="function"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>void</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; Tag, <classname>args4</classname>&lt; A0, A1, A2, A3 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type>A3</type></typedef><typedef name="proto_arg4"><type><emphasis>unspecified</emphasis></type></typedef></struct-specialization><struct-specialization name="function"><template>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
       <template-type-parameter name="A2"/>
       <template-type-parameter name="A3"/>
       <template-type-parameter name="A4"/>
- </template><specialization><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; <classname>proto::tag::function</classname>, <classname>args5</classname>&lt; A0, A1, A2, A3, A4 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type>A3</type></typedef><typedef name="proto_arg4"><type>A4</type></typedef></struct-specialization><struct-specialization name="nary_expr"><template>
+ </template><specialization><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; <classname>proto::tag::function</classname>, <classname>args5</classname>&lt; A0, A1, A2, A3, A4 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type><classname>proto::tag::function</classname></type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type>A3</type></typedef><typedef name="proto_arg4"><type>A4</type></typedef></struct-specialization><struct-specialization name="nary_expr"><template>
       <template-type-parameter name="Tag"/>
       <template-type-parameter name="A0"/>
       <template-type-parameter name="A1"/>
       <template-type-parameter name="A2"/>
       <template-type-parameter name="A3"/>
       <template-type-parameter name="A4"/>
- </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4</template-arg><template-arg>void</template-arg></specialization><inherit access="public">boost::proto::has_transformns_::has_pass_through_transform&lt; Grammar &gt;</inherit><typedef name="type"><type>expr&lt; Tag, <classname>args5</classname>&lt; A0, A1, A2, A3, A4 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type>A3</type></typedef><typedef name="proto_arg4"><type>A4</type></typedef></struct-specialization></namespace><namespace name="result_of"><struct name="is_ref"><template>
+ </template><specialization><template-arg>Tag</template-arg><template-arg>A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4</template-arg><template-arg>void</template-arg></specialization><typedef name="proto_is_callable_"><type>int</type></typedef><typedef name="type"><type>proto::expr&lt; Tag, <classname>args5</classname>&lt; A0, A1, A2, A3, A4 &gt; &gt;</type></typedef><typedef name="proto_base_expr"><type>type</type></typedef><typedef name="proto_tag"><type>Tag</type></typedef><typedef name="proto_arg0"><type>A0</type></typedef><typedef name="proto_arg1"><type>A1</type></typedef><typedef name="proto_arg2"><type>A2</type></typedef><typedef name="proto_arg3"><type>A3</type></typedef><typedef name="proto_arg4"><type>A4</type></typedef></struct-specialization></namespace><namespace name="result_of"><struct name="is_ref"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="EnableIf"/>
     </template></struct><struct name="is_expr"><template>
@@ -1792,19 +1791,17 @@
       <template-type-parameter name="EnableIf"/>
     </template></struct><struct name="tag_of"><template>
       <template-type-parameter name="Expr"/>
- </template><typedef name="type"><type>Expr::proto_tag</type></typedef></struct><struct name="id"><template>
- <template-type-parameter name="Expr"/>
- </template><inherit access="public">boost::proto::result_of::deep_copy&lt; Expr &gt;</inherit></struct><struct name="as_expr"><template>
+ </template><typedef name="type"><type>Expr::proto_tag</type></typedef></struct><struct name="as_expr"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="Domain"/>
       <template-type-parameter name="EnableIf"/>
- </template><typedef name="proto_arg0"><type>mpl::eval_if&lt; mpl::or_&lt; boost::is_array&lt; T &gt;, is_function&lt; T &gt; &gt;, add_reference&lt; T &gt;, remove_cv&lt; T &gt;&gt;::type</type></typedef><typedef name="expr_type"><type>expr&lt; <classname>proto::tag::terminal</classname>, <classname>args0</classname>&lt; proto_arg0 &gt; &gt;</type></typedef><typedef name="type"><type>Domain::template apply&lt; expr_type &gt;::type</type></typedef><typedef name="result_type"><type>type const</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static result_type</type><template>
+ </template><typedef name="proto_arg0"><type>mpl::eval_if&lt; mpl::or_&lt; boost::is_array&lt; T &gt;, is_function&lt; T &gt; &gt;, add_reference&lt; T &gt;, remove_cv&lt; T &gt;&gt;::type</type></typedef><typedef name="expr_type"><type>proto::expr&lt; <classname>proto::tag::terminal</classname>, <classname>args0</classname>&lt; proto_arg0 &gt; &gt;</type></typedef><typedef name="type"><type>Domain::template apply&lt; expr_type &gt;::type</type></typedef><typedef name="result_type"><type>type const</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static result_type</type><template>
           <template-type-parameter name="T2"/>
         </template><parameter name="t"><paramtype>T2 &amp;</paramtype></parameter></method></method-group></struct><struct name="as_arg"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="Domain"/>
       <template-type-parameter name="EnableIf"/>
- </template><typedef name="expr_type"><type>expr&lt; <classname>proto::tag::terminal</classname>, <classname>args0</classname>&lt; T &amp; &gt; &gt;</type></typedef><typedef name="type"><type>Domain::template apply&lt; expr_type &gt;::type</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type</type><template>
+ </template><typedef name="expr_type"><type>proto::expr&lt; <classname>proto::tag::terminal</classname>, <classname>args0</classname>&lt; T &amp; &gt; &gt;</type></typedef><typedef name="type"><type>Domain::template apply&lt; expr_type &gt;::type</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type</type><template>
           <template-type-parameter name="T2"/>
         </template><parameter name="t"><paramtype>T2 &amp;</paramtype></parameter></method></method-group></struct><struct name="arg"><template>
       <template-type-parameter name="Expr"/>
@@ -1849,9 +1846,9 @@
         </template><parameter name="t"><paramtype>T2 &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="as_arg"><template>
       <template-type-parameter name="T"/>
       <template-type-parameter name="Domain"/>
- </template><specialization><template-arg>T</template-arg><template-arg>Domain</template-arg><template-arg>typename T::proto_is_expr_</template-arg></specialization><typedef name="type"><type><classname>ref_</classname>&lt; T &gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static <classname>type</classname></type><template>
+ </template><specialization><template-arg>T</template-arg><template-arg>Domain</template-arg><template-arg>typename T::proto_is_expr_</template-arg></specialization><typedef name="type"><type>ref_&lt; T &gt;</type></typedef><method-group name="public static functions"><method name="call" cv=""><type>static type</type><template>
           <template-type-parameter name="T2"/>
- </template><parameter name="t"><paramtype>T2 &amp;</paramtype></parameter></method></method-group></struct-specialization></namespace><function name="implicit_expr"><type><emphasis>unspecified</emphasis></type><template>
+ </template><parameter name="t"><paramtype>T2 &amp;</paramtype></parameter></method></method-group></struct-specialization></namespace><data-member name="left"><type><classname>functional::left</classname> const</type></data-member><data-member name="right"><type><classname>functional::right</classname> const</type></data-member><function name="implicit_expr"><type><emphasis>unspecified</emphasis></type><template>
           <template-type-parameter name="A0"/>
         </template><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter></function><function name="implicit_expr"><type><emphasis>unspecified</emphasis></type><template>
           <template-type-parameter name="A0"/>
@@ -1873,11 +1870,11 @@
           <template-type-parameter name="A4"/>
         </template><parameter name="a0"><paramtype>A0 &amp;</paramtype></parameter><parameter name="a1"><paramtype>A1 &amp;</paramtype></parameter><parameter name="a2"><paramtype>A2 &amp;</paramtype></parameter><parameter name="a3"><paramtype>A3 &amp;</paramtype></parameter><parameter name="a4"><paramtype>A4 &amp;</paramtype></parameter></function><overloaded-function name="as_expr"><signature><type><classname>result_of::as_expr</classname>&lt; T &gt;::result_type</type><template>
           <template-type-parameter name="T"/>
- </template><parameter name="t"><paramtype>T &amp;</paramtype></parameter></signature><signature><type><classname>result_of::as_expr</classname>&lt; T const &gt;::result_type</type><template>
+ </template><parameter name="t"><paramtype>T &amp;</paramtype></parameter></signature><signature><type><classname>result_of::as_expr</classname>&lt; T const &gt;::result_type</type><template>
           <template-type-parameter name="T"/>
         </template><parameter name="t"><paramtype>T const &amp;</paramtype></parameter></signature><description><para>as_expr </para></description></overloaded-function><overloaded-function name="as_arg"><signature><type><classname>result_of::as_arg</classname>&lt; T &gt;::type</type><template>
           <template-type-parameter name="T"/>
- </template><parameter name="t"><paramtype>T &amp;</paramtype></parameter></signature><signature><type><classname>result_of::as_arg</classname>&lt; T const &gt;::type</type><template>
+ </template><parameter name="t"><paramtype>T &amp;</paramtype></parameter></signature><signature><type><classname>result_of::as_arg</classname>&lt; T const &gt;::type</type><template>
           <template-type-parameter name="T"/>
         </template><parameter name="t"><paramtype>T const &amp;</paramtype></parameter></signature><description><para>as_arg </para></description></overloaded-function><overloaded-function name="arg"><signature><type><classname>result_of::unref</classname>&lt; typename Expr::proto_base_expr::proto_arg0 &gt;::reference</type><template>
           <template-type-parameter name="Expr"/>
@@ -1889,328 +1886,387 @@
         </template><parameter name="expr"><paramtype>Expr &amp;</paramtype></parameter></signature><signature><type>result_of::arg_c&lt; Expr, N &gt;::const_reference</type><template>
           <template-nontype-parameter name="N"><type>long</type></template-nontype-parameter>
           <template-type-parameter name="Expr"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></signature><description><para>arg_c </para></description></overloaded-function><data-member name="left"><type><classname>functional::left</classname> const</type></data-member><data-member name="right"><type><classname>functional::right</classname> const</type></data-member></namespace></namespace></header><header name="boost/xpressive/proto/transform.hpp"><para>Includes all the transforms in the transform/ sub-directory. </para></header><header name="boost/xpressive/proto/transform/apply.hpp"><para>Proto transforms for applying MPL placeholder expressions. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct name="always"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Always"/>
- <template-type-parameter name="Factory"/>
- </template><struct name="apply"><template>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Always</type></typedef></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static Always</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name=""><paramtype>Expr const &amp;</paramtype></parameter><parameter name=""><paramtype>State const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="apply1"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Lambda"/>
- <template-type-parameter name="Factory"/>
- </template><struct name="apply"><template>
+ </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter></signature><description><para>arg_c </para></description></overloaded-function></namespace></namespace></header><header name="boost/xpressive/proto/transform.hpp"><para>Includes all the transforms in the transform/ sub-directory. </para></header><header name="boost/xpressive/proto/transform/arg.hpp"><para>Contains definition of the argN transforms. </para><namespace name="boost"><namespace name="proto"><struct name="_arg_c"><template>
+ <template-nontype-parameter name="I"><type>int</type></template-nontype-parameter>
+ </template><inherit access="public">boost::proto::transform::arg_c&lt; I &gt;</inherit></struct><struct-specialization name="is_callable"><template>
+ <template-nontype-parameter name="I"><type>int</type></template-nontype-parameter>
+ </template><specialization><template-arg>_arg_c&lt; I &gt;</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ </template><specialization><template-arg>transform::expr</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ </template><specialization><template-arg>transform::state</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ </template><specialization><template-arg>transform::visitor</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ <template-nontype-parameter name="I"><type>int</type></template-nontype-parameter>
+ </template><specialization><template-arg>transform::arg_c&lt; I &gt;</template-arg></specialization></struct-specialization><namespace name="transform"><struct name="expr"><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization><typedef name="type"><type>Expr</type></typedef></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>Expr const &amp;</type><template>
           <template-type-parameter name="Expr"/>
           <template-type-parameter name="State"/>
           <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="apply2"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Lambda"/>
- <template-type-parameter name="Factory"/>
- </template><struct name="apply"><template>
+ </template><parameter name="expr_"><paramtype>Expr const &amp;</paramtype></parameter><parameter name=""><paramtype>State const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="state"><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization><typedef name="type"><type>State</type></typedef></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>State const &amp;</type><template>
           <template-type-parameter name="Expr"/>
           <template-type-parameter name="State"/>
           <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="apply3"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Lambda"/>
- <template-type-parameter name="Factory"/>
- </template><struct name="apply"><template>
+ </template><parameter name=""><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state_"><paramtype>State const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="visitor"><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization><typedef name="type"><type>Visitor</type></typedef></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>Visitor &amp;</type><template>
           <template-type-parameter name="Expr"/>
           <template-type-parameter name="State"/>
           <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/arg.hpp"><para>Proto transforms for extracting arguments from expressions. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct name="arg"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="N"/>
- </template><struct name="apply"><template>
+ </template><parameter name=""><paramtype>Expr const &amp;</paramtype></parameter><parameter name=""><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor_"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="arg_c"><template>
+ <template-nontype-parameter name="I"><type>int</type></template-nontype-parameter>
+ </template><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template><inherit access="public">boost::proto::result_of::arg&lt; Grammar::template apply&lt; Expr, State, Visitor &gt;::type, N &gt;</inherit></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization><method-group name="public member functions"><method name="operator()" cv="const"><type>proto::result_of::arg_c&lt; Expr, I &gt;::type</type><template>
           <template-type-parameter name="Expr"/>
           <template-type-parameter name="State"/>
           <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="arg_c"><template>
- <template-type-parameter name="Grammar"/>
- <template-nontype-parameter name="N"><type>long</type></template-nontype-parameter>
- </template><struct name="apply"><template>
+ </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name=""><paramtype>State const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/bind.hpp"><para>Contains definition of the bind&lt;&gt; transform. </para><namespace name="boost"><namespace name="proto"><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>transform::bind&lt; Fun &gt;</template-arg></specialization></struct-specialization><namespace name="transform"><struct name="bind"><template>
+ <template-type-parameter name="Fun"/>
+ </template><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="left"><template>
- <template-type-parameter name="Grammar"/>
- </template><struct name="apply"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct><struct-specialization name="bind"><template>
+ <template-type-parameter name="Return"/>
+ </template><specialization><template-arg>Return()</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template><inherit access="public">boost::proto::result_of::left&lt; Grammar::template apply&lt; Expr, State, Visitor &gt;::type &gt;</inherit></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="right"><template>
- <template-type-parameter name="Grammar"/>
- </template><struct name="apply"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="bind"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ </template><specialization><template-arg>Return(A0)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template><inherit access="public">boost::proto::result_of::right&lt; Grammar::template apply&lt; Expr, State, Visitor &gt;::type &gt;</inherit></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="identity"><template>
- <template-type-parameter name="Grammar"/>
- </template><struct name="apply"><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>Expr_</type></typedef></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static Expr_ const &amp;</type><template>
- <template-type-parameter name="Expr_"/>
- <template-type-parameter name="State_"/>
- <template-type-parameter name="Visitor_"/>
- </template><parameter name="expr_"><paramtype>Expr_ const &amp;</paramtype></parameter><parameter name=""><paramtype>State_ const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor_ &amp;</paramtype></parameter></method></method-group></struct><struct name="state"><template>
- <template-type-parameter name="Grammar"/>
- </template><struct name="apply"><template>
- <template-type-parameter name=""/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="bind"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ </template><specialization><template-arg>Return(A0</template-arg><template-arg>A1)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
- <template-type-parameter name=""/>
- </template><typedef name="type"><type>State</type></typedef></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static State const &amp;</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name=""><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state_"><paramtype>State const &amp;</paramtype></parameter><parameter name=""><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="visitor"><template>
- <template-type-parameter name="Grammar"/>
- </template><struct name="apply"><template>
- <template-type-parameter name=""/>
- <template-type-parameter name=""/>
       <template-type-parameter name="Visitor"/>
- </template><typedef name="type"><type>Visitor</type></typedef></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static Visitor &amp;</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name=""><paramtype>Expr const &amp;</paramtype></parameter><parameter name=""><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor_"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/branch.hpp"><para>A special-purpose proto transform for transforming one branch of the expression tree separately from the rest. Given an expression and a new state, it transforms the expression using the new state. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct name="branch"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="BranchState"/>
- </template><struct name="apply"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="bind"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ </template><specialization><template-arg>Return(A0</template-arg><template-arg>A1</template-arg><template-arg>A2)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name=""><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/compose.hpp"><para>A special-purpose proto transform for composing two transfomations. Given two Grammars, expressions that match the first grammar are transformed according to that grammar, and the result is forwarded to the second for further transformation. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct name="compose"><template>
- <template-type-parameter name="Grammar1"/>
- <template-type-parameter name="Grammar2"/>
- </template><struct name="apply"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="bind"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ <template-type-parameter name="A3"/>
+ </template><specialization><template-arg>Return(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template><typedef name="type"><type>Grammar2::template <classname>apply</classname>&lt; typename Grammar1::template <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type, State, Visitor &gt;::type</type></typedef></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/construct.hpp"><para>For constructing an arbitrary type from a bunch of transforms. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct-specialization name="construct"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Result"/>
- </template><specialization><template-arg>Grammar</template-arg><template-arg>Result()</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="bind"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ <template-type-parameter name="A3"/>
+ <template-type-parameter name="A4"/>
+ </template><specialization><template-arg>Return(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public static functions"><method name="call" cv=""><type>static apply&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group><method-group name="private static functions"/></struct-specialization><struct-specialization name="construct"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Result"/>
- <template-type-parameter name="Arg0"/>
- </template><specialization><template-arg>Grammar</template-arg><template-arg>Result(Arg0)</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/call.hpp"><para>Contains definition of the call&lt;&gt; transform. </para><namespace name="boost"><namespace name="proto"><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>transform::call&lt; Fun &gt;</template-arg></specialization></struct-specialization><namespace name="transform"><struct name="call"><template>
+ <template-type-parameter name="Fun"/>
+ </template><inherit access="public">Fun</inherit><typedef name="proto_is_callable_"><type>void</type></typedef></struct><struct-specialization name="call"><template>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>Fun()</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public static functions"><method name="call" cv=""><type>static apply&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group><method-group name="private static functions"/></struct-specialization><struct-specialization name="construct"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Result"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="call"><template>
+ <template-type-parameter name="Fun"/>
       <template-type-parameter name="Arg0"/>
- <template-type-parameter name="Arg1"/>
- </template><specialization><template-arg>Grammar</template-arg><template-arg>Result(Arg0</template-arg><template-arg>Arg1)</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>Fun(Arg0)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public static functions"><method name="call" cv=""><type>static apply&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group><method-group name="private static functions"/></struct-specialization><struct-specialization name="construct"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Result"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="call"><template>
+ <template-type-parameter name="Fun"/>
       <template-type-parameter name="Arg0"/>
       <template-type-parameter name="Arg1"/>
- <template-type-parameter name="Arg2"/>
- </template><specialization><template-arg>Grammar</template-arg><template-arg>Result(Arg0</template-arg><template-arg>Arg1</template-arg><template-arg>Arg2)</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>Fun(Arg0</template-arg><template-arg>Arg1)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public static functions"><method name="call" cv=""><type>static apply&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group><method-group name="private static functions"/></struct-specialization><struct-specialization name="construct"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Result"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="call"><template>
+ <template-type-parameter name="Fun"/>
       <template-type-parameter name="Arg0"/>
       <template-type-parameter name="Arg1"/>
       <template-type-parameter name="Arg2"/>
- <template-type-parameter name="Arg3"/>
- </template><specialization><template-arg>Grammar</template-arg><template-arg>Result(Arg0</template-arg><template-arg>Arg1</template-arg><template-arg>Arg2</template-arg><template-arg>Arg3)</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>Fun(Arg0</template-arg><template-arg>Arg1</template-arg><template-arg>Arg2)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public static functions"><method name="call" cv=""><type>static apply&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group><method-group name="private static functions"/></struct-specialization><struct-specialization name="construct"><template>
- <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Result"/>
- <template-type-parameter name="Arg0"/>
- <template-type-parameter name="Arg1"/>
- <template-type-parameter name="Arg2"/>
- <template-type-parameter name="Arg3"/>
- <template-type-parameter name="Arg4"/>
- </template><specialization><template-arg>Grammar</template-arg><template-arg>Result(Arg0</template-arg><template-arg>Arg1</template-arg><template-arg>Arg2</template-arg><template-arg>Arg3</template-arg><template-arg>Arg4)</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="call"><template>
+ <template-type-parameter name="Fun"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ <template-type-parameter name="A3"/>
+ </template><specialization><template-arg>Fun(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public static functions"><method name="call" cv=""><type>static apply&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group><method-group name="private static functions"/></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/fold.hpp"><para>A special-purpose proto transform for merging sequences of binary operations. It transforms the right operand and passes the result as state while transforming the left. Or, it might do the left first, if you choose. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct-specialization name="fold"><template>
- <template-type-parameter name="Grammar"/>
- </template><specialization><template-arg>Grammar</template-arg><template-arg>void</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="call"><template>
+ <template-type-parameter name="Fun"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ <template-type-parameter name="A3"/>
+ <template-type-parameter name="A4"/>
+ </template><specialization><template-arg>Fun(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"><method name="fold" cv=""><type/></method></method-group><method-group name="public static functions"><method name="call" cv=""><type>static apply&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct-specialization><struct-specialization name="reverse_fold"><template>
- <template-type-parameter name="Grammar"/>
- </template><specialization><template-arg>Grammar</template-arg><template-arg>void</template-arg></specialization><struct name="apply"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/fold.hpp"><para>Contains definition of the fold&lt;&gt; and reverse_fold&lt;&gt; transforms. </para><namespace name="boost"><namespace name="proto"><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Sequence"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>transform::fold&lt; Sequence</template-arg><template-arg>State</template-arg><template-arg>Fun &gt;</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Sequence"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>transform::reverse_fold&lt; Sequence</template-arg><template-arg>State</template-arg><template-arg>Fun &gt;</template-arg></specialization></struct-specialization><namespace name="transform"><struct name="fold"><template>
+ <template-type-parameter name="Sequence"/>
+ <template-type-parameter name="State0"/>
+ <template-type-parameter name="Fun"/>
+ </template><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"><method name="reverse_fold" cv=""><type/></method></method-group><method-group name="public static functions"><method name="call" cv=""><type>static apply&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/fold_tree.hpp"><para>A higher-level transform that uses the fold, and branch transforms to recursively fold a tree. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct name="fold_tree"><template>
- <template-type-parameter name="Tag"/>
- <template-type-parameter name="Grammar"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct><struct name="reverse_fold"><template>
+ <template-type-parameter name="Sequence"/>
       <template-type-parameter name="State"/>
- </template><description><para>fold_tree </para></description></struct><struct name="reverse_fold_tree"><template>
- <template-type-parameter name="Tag"/>
- <template-type-parameter name="Grammar"/>
+ <template-type-parameter name="Fun"/>
+ </template><inherit access="public">boost::proto::transform::fold&lt; Sequence, State0, Fun &gt;</inherit></struct><struct-specialization name="fold"><template>
+ <template-type-parameter name="State0"/>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>_</template-arg><template-arg>State0</template-arg><template-arg>Fun</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
- </template><description><para>reverse_fold_tree </para></description></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/function.hpp"><para>Proto transforms for applying a function object. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct name="function1"><template>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="reverse_fold"><template>
+ <template-type-parameter name="State0"/>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>_</template-arg><template-arg>State0</template-arg><template-arg>Fun</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/fold_tree.hpp"><namespace name="boost"><namespace name="proto"><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Sequence"/>
+ <template-type-parameter name="State0"/>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>transform::fold_tree&lt; Sequence</template-arg><template-arg>State0</template-arg><template-arg>Fun &gt;</template-arg></specialization></struct-specialization><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Sequence"/>
+ <template-type-parameter name="State0"/>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>transform::reverse_fold_tree&lt; Sequence</template-arg><template-arg>State0</template-arg><template-arg>Fun &gt;</template-arg></specialization></struct-specialization><namespace name="transform"><struct name="fold_tree"><template>
+ <template-type-parameter name="Sequence"/>
+ <template-type-parameter name="State0"/>
+ <template-type-parameter name="Fun"/>
+ </template><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization><typedef name="impl"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="type"><type>impl::template result&lt; void(Expr, State, Visitor) &gt;::type</type></typedef></struct-specialization></struct><struct name="reverse_fold_tree"><template>
+ <template-type-parameter name="Sequence"/>
+ <template-type-parameter name="State0"/>
+ <template-type-parameter name="Fun"/>
+ </template><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization><typedef name="impl"><type><emphasis>unspecified</emphasis></type></typedef><typedef name="type"><type>impl::template result&lt; void(Expr, State, Visitor) &gt;::type</type></typedef></struct-specialization></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/make.hpp"><para>Contains definition of the make&lt;&gt; transform. </para><namespace name="boost"><namespace name="proto"><struct-specialization name="is_callable"><template>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>transform::make&lt; Fun &gt;</template-arg></specialization></struct-specialization><namespace name="transform"><struct name="make"><template>
+ <template-type-parameter name="Fun"/>
+ </template><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct><struct-specialization name="make"><template>
+ <template-type-parameter name="Return"/>
+ </template><specialization><template-arg>Return()</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="make"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ </template><specialization><template-arg>Return(A0)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="make"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ </template><specialization><template-arg>Return(A0</template-arg><template-arg>A1)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="make"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ </template><specialization><template-arg>Return(A0</template-arg><template-arg>A1</template-arg><template-arg>A2)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="make"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ <template-type-parameter name="A3"/>
+ </template><specialization><template-arg>Return(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization><struct-specialization name="make"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ <template-type-parameter name="A3"/>
+ <template-type-parameter name="A4"/>
+ </template><specialization><template-arg>Return(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
+ <template-type-parameter name="Expr"/>
+ <template-type-parameter name="State"/>
+ <template-type-parameter name="Visitor"/>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct-specialization></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/pass_through.hpp"><para>TODO </para><namespace name="boost"><namespace name="proto"><struct-specialization name="is_callable"><template>
       <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Function1"/>
- </template><struct name="apply"><template>
+ </template><specialization><template-arg>transform::pass_through&lt; Grammar &gt;</template-arg></specialization></struct-specialization><namespace name="transform"><struct name="pass_through"><template>
+ <template-type-parameter name="Grammar"/>
+ </template><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="function2"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/when.hpp"><para>Definition of when transform. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct name="when"><template>
       <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Function2"/>
- </template><struct name="apply"><template>
+ <template-type-parameter name="Fun"/>
+ </template><inherit access="public">Fun</inherit><typedef name="proto_base_expr"><type>Grammar::proto_base_expr</type></typedef></struct><struct-specialization name="when"><template>
+ <template-type-parameter name="Grammar"/>
+ <template-type-parameter name="Fun"/>
+ </template><specialization><template-arg>Grammar</template-arg><template-arg>Fun *</template-arg></specialization><inherit access="public">boost::proto::transform::when&lt; Grammar, Fun &gt;</inherit></struct-specialization><struct name="otherwise"><template>
+ <template-type-parameter name="Fun"/>
+ </template><inherit access="public">boost::proto::transform::when&lt; _, Fun &gt;</inherit></struct><struct-specialization name="when"><template>
+ <template-type-parameter name="Grammar"/>
+ <template-type-parameter name="Return"/>
+ </template><specialization><template-arg>Grammar</template-arg><template-arg>Return()</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="function3"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization><typedef name="when_function_type_"><type>Return</type></typedef><typedef name="proto_base_expr"><type>Grammar::proto_base_expr</type></typedef></struct-specialization><struct-specialization name="when"><template>
       <template-type-parameter name="Grammar"/>
- <template-type-parameter name="Function3"/>
- </template><struct name="apply"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ </template><specialization><template-arg>Grammar</template-arg><template-arg>Return(A0)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/list.hpp"><para>A special-purpose proto transform for putting things into a fusion::cons&lt;&gt; list. </para><namespace name="boost"><namespace name="proto"><namespace name="transform"><struct name="list"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization><typedef name="when_function_type_"><type>Return</type></typedef><typedef name="proto_base_expr"><type>Grammar::proto_base_expr</type></typedef></struct-specialization><struct-specialization name="when"><template>
       <template-type-parameter name="Grammar"/>
- </template><struct name="apply"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ </template><specialization><template-arg>Grammar</template-arg><template-arg>Return(A0</template-arg><template-arg>A1)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template><typedef name="type"><type>fusion::cons&lt; typename Grammar::template <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type, State &gt;</type></typedef></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct><struct name="tail"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization><typedef name="when_function_type_"><type>Return</type></typedef><typedef name="proto_base_expr"><type>Grammar::proto_base_expr</type></typedef></struct-specialization><struct-specialization name="when"><template>
       <template-type-parameter name="Grammar"/>
- </template><struct name="apply"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ </template><specialization><template-arg>Grammar</template-arg><template-arg>Return(A0</template-arg><template-arg>A1</template-arg><template-arg>A2)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template><typedef name="type"><type>Grammar::template <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type::cdr_type</type></typedef></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct></namespace></namespace></namespace></header><header name="boost/xpressive/proto/transform/pass_through.hpp"><para>TODO </para><namespace name="boost"><namespace name="proto"><namespace name="has_transformns_"><struct name="has_pass_through_transform"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization><typedef name="when_function_type_"><type>Return</type></typedef><typedef name="proto_base_expr"><type>Grammar::proto_base_expr</type></typedef></struct-specialization><struct-specialization name="when"><template>
       <template-type-parameter name="Grammar"/>
- </template><struct name="apply"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ <template-type-parameter name="A3"/>
+ </template><specialization><template-arg>Grammar</template-arg><template-arg>Return(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct></namespace><namespace name="transform"><struct name="pass_through"><template>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization><typedef name="when_function_type_"><type>Return</type></typedef><typedef name="proto_base_expr"><type>Grammar::proto_base_expr</type></typedef></struct-specialization><struct-specialization name="when"><template>
       <template-type-parameter name="Grammar"/>
- </template><struct name="apply"><template>
+ <template-type-parameter name="Return"/>
+ <template-type-parameter name="A0"/>
+ <template-type-parameter name="A1"/>
+ <template-type-parameter name="A2"/>
+ <template-type-parameter name="A3"/>
+ <template-type-parameter name="A4"/>
+ </template><specialization><template-arg>Grammar</template-arg><template-arg>Return(A0</template-arg><template-arg>A1</template-arg><template-arg>A2</template-arg><template-arg>A3</template-arg><template-arg>A4)</template-arg></specialization><inherit access="public">boost::proto::transform::callable</inherit><struct-specialization name="result"><template>
+ <template-type-parameter name="This"/>
       <template-type-parameter name="Expr"/>
       <template-type-parameter name="State"/>
       <template-type-parameter name="Visitor"/>
- </template></struct><method-group name="public member functions"/><constructor/><method-group name="public static functions"><method name="call" cv=""><type>static <classname>apply</classname>&lt; Expr, State, Visitor &gt;::type</type><template>
- <template-type-parameter name="Expr"/>
- <template-type-parameter name="State"/>
- <template-type-parameter name="Visitor"/>
- </template><parameter name="expr"><paramtype>Expr const &amp;</paramtype></parameter><parameter name="state"><paramtype>State const &amp;</paramtype></parameter><parameter name="visitor"><paramtype>Visitor &amp;</paramtype></parameter></method></method-group></struct></namespace></namespace></namespace></header></library-reference>
+ </template><specialization><template-arg>This(Expr</template-arg><template-arg>State</template-arg><template-arg>Visitor)</template-arg></specialization></struct-specialization><typedef name="when_function_type_"><type>Return</type></typedef><typedef name="proto_base_expr"><type>Grammar::proto_base_expr</type></typedef></struct-specialization></namespace></namespace></namespace></header></library-reference>

Modified: branches/fix-links/libs/xpressive/proto/doc/quick_start.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/quick_start.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/quick_start.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/proto/doc/rationale.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/rationale.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/rationale.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 [/
- / Copyright (c) 2006 Eric Niebler
+ / Copyright (c) 2008 Eric Niebler
  /
  / Distributed under the Boost Software License, Version 1.0. (See accompanying
  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

Modified: branches/fix-links/libs/xpressive/proto/doc/transforms.qbk
==============================================================================
--- branches/fix-links/libs/xpressive/proto/doc/transforms.qbk (original)
+++ branches/fix-links/libs/xpressive/proto/doc/transforms.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,30 +28,50 @@
 are to be transformed. Just as the grammar is defined recursively, so too
 is the tree transformation.
 
-A grammar decorated with transforms has a static member function named
-`call()` which takes three parameters:
-
-* `expr` -- the expression to transform
-* `state` -- the state of the transformation so far
-* `visitor` -- any optional auxiliary mutable state information
-
-It also has a nested `apply<>` template which is used to calculate the return
-type of the `call()` member function.
-
-Let's say we have a grammar called `Grammar`, an expression template
-object called `expr` that matches the grammar, and `state` and `visitor`
-objects of your choosing. What happens when you call
-`Grammar::call(expr, state, visitor)`? Well, if `Grammar` were defined as
-`shift_right< Rule1, Rule2 >`, for instance, it might transform the left
-child of `expr` according to `Rule1`'s transform, do the same thing to the
-right child using `Rule2`, and combine the results somehow. Of course, `Rule1`
-and `Rule2` might be defined in terms of other rules with other transforms, so
-the process executes recursively. Some transforms, the `fold<>` in particular,
-use the result of transforming one child as the `state` parameter when
-transforming the other child. In this way, the results of the recursive
-transformations can be accumulated bottom-up.
-
-That's it, in a nutshell. Now let's crack this nut and peek inside.
+You associate transforms with your grammar rules using _when_. For instance,
+you might want to promote all `int` terminals to `long`. You would say
+`when< terminal<int>, terminal<long>::type(_arg) >`. Here,
+`terminal<long>::type(_arg)` is an example of a Proto transform. It says to
+create an object of type `terminal<long>::type` and initialize it with the
+result of the `_arg` transform. `_arg` is a transform defined by Proto which
+essentially calls `proto::arg()` on the current expression.
+
+[note The transform above might look a little strange at first. It appears
+to be constructing a temporary object in place. In fact, it is a
+/function type/. Since `terminal<long>::type` and `_arg` are types,
+`terminal<long>::type(_arg)` is actually the type of a function that takes
+`_arg` as a parameter as returns `terminal<long>::type`. That is immaterial;
+there is no such function in reality. Rather, Proto interprets this function
+type as a transform, the effect of which is described above. The resemblance
+to an in-place construction of a temporary object is intentional. It is a
+concise and natural notation for specifying transforms. Proto transforms use
+function types extensively, as we'll see.]
+
+A grammar decorated with transforms is a function object which takes three
+parameters:
+
+* `expr` -- the Proto expression to transform
+* `state` -- the initial state of the transformation
+* `visitor` -- any optional mutable state information
+
+Grammars with transforms are proper function objects, so you can use
+`boost::result_of<>` to calculate their return types. So, applying a
+transform typically looks like this:
+
+ // Assuming we have an expression to transform,
+ // an initial state, and a visitor ...
+ Expr expr;
+ State state;
+ Visitor visitor;
+
+ // ... calculate the result type of applying
+ // Grammar's transform ...
+ typedef typename
+ boost::result_of<Grammar(Expr, State, Visitor)>::type
+ result_type;
+
+ // ... and apply Grammar's transform:
+ result_type result = Grammar()(expr, state, visitor);
 
 [/==========================================]
 [section Example: Calculator Arity Transform]
@@ -87,14 +107,14 @@
 
 We can immediately write the calculator grammar as follows:
 
-[CalculatorGrammar]
+[CalcGrammar]
 
 We can read this as follows: a calculator expression is either placeholder 1,
 placeholder 2, some other terminal, or some unary or binary operator whose
 operands are calculator expressions. Recall that `proto::_` is a wildcard which
 matches anything. So `terminal< _ >` will match any terminal, and
-`unary_expr< _, CalculatorGrammar >` will match any unary expression
-for which the operand matches CalculatorGrammar (the `_` matches any operator
+`unary_expr< _, CalcArity >` will match any unary expression
+for which the operand matches CalcArity (the `_` matches any operator
 tag).
 
 [/============================]
@@ -117,129 +137,151 @@
 The total arity of a calculator expression is found by recursively evaluating
 the arity of all of the sub-expressions and taking the maximum.
 
-Let's look at the sub-expression for placeholder 1. It is matched by this part
-of our grammar: `terminal< placeholder1 >`. We want to associate this
+Let's look at the sub-expression for the placeholder `_1`. It is matched by this
+part of our grammar: `terminal< placeholder1 >`. We want to associate this
 part of our grammar with an arity of `1`. We do that by attaching a transform.
 Since the arity of an expression can be evaluated at compile time, let's use
 `mpl::int_<1>` to represent the arity of the first placeholder. The following
 attaches a transform that always evaluates to `mpl::int_<1>`:
 
- transform::always< terminal< placeholder1 >, mpl::int_<1> >
+ when< terminal< placeholder1 >, mpl::int_<1>() >
 
 This grammar rule will match any `placeholder1` terminal, and will transform it
-to `mpl::int_<1>`. Likewise, we will use the `transform::always<>` transform to
-transform `placeholder2` terminals into `mpl::int_<2>`, and other terminals
-into `mpl::int_<0>`.
+to a (default-constructed) `mpl::int_<1>` object. As described previously,
+`mpl::int_<1>()` is a function type, but Proto interprets it as an object to
+construct. We will have a similar transform to convert `placeholder2` terminals
+into `mpl::int_<2>`, and other terminals into `mpl::int_<0>`.
 
 Next, let's write a transform for unary operators that returns the arity of the
 operand. It is simply:
 
- transform::arg< unary_expr< _, CalculatorGrammar > >
-
-As you might expect, the `transform::arg<>` transform returns the argument of the
-unary expression. This looks simple, but there is quite a lot going on here.
-
-First, you should know that transforms are written so that they can be chained.
-So `transform::arg<>` invokes the transform associated with
-`unary_expr< _, CalculatorGrammar >` before it does anything else.
-
-That begs the question, what does `unary_expr<>`'s transform do? Well,
-`unary_expr< _, CalculatorGrammar >` has a default transform
-associated with it. It is a /pass-through/ transform. When an expression
-of the form `expr< T, arg1< X > >` is passed to the transform, its `apply<>`
-member template will invoke the `CalculatorGrammar` transform (which we haven't
-completely defined yet -- patience) on `X` resulting in `Y`, and then
-reassemble the expression as `expr< T, arg1< Y > >`.
-
-[note You may have noticed that Proto types like `unary_expr<>` serve several
-different but related roles. In particular, `unary_expr<>` is ...
-
-... [*a meta-function]: `unary_expr<T, X>::type` is a typedef for
-`expr<T, args1<X> >`.
-
-... [*a grammar]: `unary_expr<U, Y>` is a simle grammar that matches
-`expr<T, args1<X> >` if an only if `U` is `T` or `proto::_`, and `Y` is a
-grammar that matches `X`.
-
-... [*a transform]: `unary_expr<U, Y>::apply<expr<T, args1<X> >, S, V>::type`
-applies `unary_expr<>`'s pass-through transform to `expr<T, args1<X> >` with
-state `S` and visitor `V`. The result is
-`expr<T, args1< Y::apply<X, S, V>::type > >`.
-]
+ when< unary_expr< _, CalcArity >, CalcArity(_arg) >
 
-So, putting a few things together, consider the calculator expression `+_1`,
-which would have the following type:
+The transform `CalcArity(_arg)` recursively applies the `CalcArity`
+transform to the child node of the unary expression. As you might have noticed,
+`CalcArity(_arg)` is another function type, but Proto interprets this one
+differently. Rather than trying to construct a `CalcArity` object, Proto
+knows this is a function object and invokes it instead.
+
+[note When using function types as Proto transforms, they can either represent
+an object to construct or a function to call. It is similar to C++ where the
+syntax `foo(x)` can either be interpreted as an object to construct or a
+function to call, depending on whether `foo` is a type or a function. Proto
+can't know in general which is the case, so it uses a trait, `proto::is_callable<>`,
+to differentiate. `is_callable< mpl::int_<1> >::value` is false so `mpl::int_<1>()`
+is an object to construct, but `is_callable< CalcArity >::value` is true so
+`CalcArity(_arg)` is a function to call. (`is_callable< CalcArity >::value` is true
+because `CalcArity` inherits from `proto::or_<>`, which is callable.)]
+
+[/
+ That begs the question, what does `unary_expr<>`'s transform do? Well,
+ `unary_expr< _, CalcArity >` has a default transform
+ associated with it. It is a /pass-through/ transform. When an expression
+ of the form `expr< T, arg1< X > >` is passed to the transform, its `apply<>`
+ member template will invoke the `CalcArity` transform (which we haven't
+ completely defined yet -- patience) on `X` resulting in `Y`, and then
+ reassemble the expression as `expr< T, arg1< Y > >`.
+
+ [note You may have noticed that Proto types like `unary_expr<>` serve several
+ different but related roles. In particular, `unary_expr<>` is ...
+
+ ... [*a meta-function]: `unary_expr<T, X>::type` is a typedef for
+ `expr<T, args1<X> >`.
+
+ ... [*a grammar]: `unary_expr<U, Y>` is a simle grammar that matches
+ `expr<T, args1<X> >` if an only if `U` is `T` or `proto::_`, and `Y` is a
+ grammar that matches `X`.
+
+ ... [*a transform]: `unary_expr<U, Y>::apply<expr<T, args1<X> >, S, V>::type`
+ applies `unary_expr<>`'s pass-through transform to `expr<T, args1<X> >` with
+ state `S` and visitor `V`. The result is
+ `expr<T, args1< Y::apply<X, S, V>::type > >`.
+ ]
+
+ So, putting a few things together, consider the calculator expression `+_1`,
+ which would have the following type:
+
+ expr< tag::posit, arg1<
+ expr< tag::terminal, arg0< placeholder1 > >
+ > >
+
+ If we executed the `unary_expr< _, CalcArity >` transform on this
+ expression, we would expect to get:
+
+ expr< tag::posit, arg1<
+ mpl::int_<1>
+ > >
+
+ And if we added the `transform::arg<>` transform also, as in
+ `transform::arg< unary_expr< _, CalcArity > >`, we expect the result
+ to be:
 
- expr< tag::posit, arg1<
- expr< tag::terminal, arg0< placeholder1 > >
- > >
+ mpl::int_<1>
 
-If we executed the `unary_expr< _, CalculatorGrammar >` transform on this
-expression, we would expect to get:
+ Which is exactly what we want.
 
- expr< tag::posit, arg1<
- mpl::int_<1>
- > >
+ [note *Default Transforms*
 
-And if we added the `transform::arg<>` transform also, as in
-`transform::arg< unary_expr< _, CalculatorGrammar > >`, we expect the result
-to be:
-
- mpl::int_<1>
-
-Which is exactly what we want.
-
-[note *Default Transforms*
-
-All the tools Proto provides for defining grammar rules have default transforms
-associated with them. Just as `unary_expr<>` has a pass-through transform,
-so too does `binary_expr<>`, `shift_right<>`, and all the others.
-`proto::or_<>` has a default transform which evaluates the transform of the
-branch that matched. `proto::and_<>`'s default transform evaluates the
-transform of the last branch. Even `proto::expr<>`, `proto::if_<>`,
-`proto::not_<>`, and `proto::_` have no-op default transforms that simply return
-unmodified the expressions passed to them.
+ All the tools Proto provides for defining grammar rules have default transforms
+ associated with them. Just as `unary_expr<>` has a pass-through transform,
+ so too does `binary_expr<>`, `shift_right<>`, and all the others.
+ `proto::or_<>` has a default transform which evaluates the transform of the
+ branch that matched. `proto::and_<>`'s default transform evaluates the
+ transform of the last branch. Even `proto::expr<>`, `proto::if_<>`,
+ `proto::not_<>`, and `proto::_` have no-op default transforms that simply return
+ unmodified the expressions passed to them.
+ ]
 ]
 
 The arity of a binary operator is the maximum of the arity of the left and
-right operands. Proto does not provide a transform that can help us directly,
-but we can easily write our own. This is what it looks like, and we'll describe
-it below:
-
-[binary_max]
-
-This transform will be used as follows:
-`binary_max< binary_expr< _, CalculatorGrammar, CalculatorGrammar > >`.
-First, note that the transform is a template that takes a Grammar as a template
-parameter. It inherits from the Grammar, as all transforms must. Next, we
-define a nested `apply<>` template which calculates the return type. The first
-thing it does is invoke `Grammar`'s transform. Recall that `binary_expr<>`
-has a pass-through transform. Given an expression like
-`expr< T, arg2< A, B > >`, it transforms it to `expr< T, arg2< X, Y > >`, where
-`X` and `Y` are the results of transforming `A` and `B` according to
-`CalculatorGrammar`.
-
-Next, we extract from this transformed binary expression the left and right
-argument types. As the arguments were transformed in the previous step, we
-expect them to already be of the form `mpl::int_<N>`. Then we use `mpl::max<>`
-to find the maximum, and we're done.
-
-The static `call()` member function is needed to complete the transform
-interface. It simply returns a default-constructed object, which will be an
-instantiation of `mpl::int_<>`.
+right operands. We can specify this with the help of `mpl::max<>`, which is a
+so-called meta-function that computes the maximum of two compile-time integers.
+The transform is described below:
+
+ when<
+ binary_expr< _, CalcArity, CalcArity >
+ , mpl::max< CalcArity(_left), CalcArity(_right) >()
+ >
+
+The above says to match binary calculator expressions and compute their
+arity by first computing the arity of the left and right children and then
+taking their maximum.
+
+There's a lot going on in the above transform, so let's take it one piece
+at a time, starting with the parts we know. `CalcArity(_left)`
+will calculate the arity of the left child, returning a compile-time integer.
+Likewise for `CalcArity(_right)`. What is new is that these two
+transforms are nested within another: `mpl::max<...>()`. Proto notices that
+`mpl::max<...>` is not callable, so this transform is interpreted as an
+object to construct rather than a function to invoke. Using meta-programming
+tricks, Proto disassembles the `mpl::max<...>` template looking for nested
+Proto transforms to apply. It finds two and applies them, resulting in
+`mpl::max< mpl::int_<X>, mpl::int_<Y> >`.
+
+Having first applied any nested transforms, Proto then looks to see if
+`mpl::max<X, Y>` has a nested `::type` typedef. This is a common convention
+used by meta-functions. In this case, `mpl::max<>::type` is a typedef
+for `mpl::int_< Z >` where `Z` is the maximum of `X` and `Y`. The trailing
+`()` on the transform indicates that the result should be default-constructed,
+so this transform returns `mpl::int_<Z>()`. And we're done.
+
+[note Had `mpl::max<>` not had a nested `::type` typedef, the transform
+would have created and returned a default-constructed `mpl::max<>` object
+instead. That is, the result of substituting nested transforms need not
+of necessity have a nested `::type` typedef, but it is used if it is there.]
 
-Piecing it all together, the complete `CalculatorGrammar` looks like this:
+Piecing it all together, the complete `CalcArity` looks like this:
 
-[CalculatorArityGrammar]
+[CalcArity]
 
-We can use our CalculatorGrammar transform to calculate the arity of any
+We can use our `CalcArity` transform to calculate the arity of any
 calculator expression:
 
     int i = 0; // not used, dummy state and visitor parameter
 
- std::cout << CalculatorGrammar::call( lit(100) * 200, i, i) << '\n';
- std::cout << CalculatorGrammar::call( (_1 - _1) / _1 * 100, i, i) << '\n';
- std::cout << CalculatorGrammar::call( (_2 - _1) / _2 * 100, i, i) << '\n';
+ std::cout << CalcArity()( lit(100) * 200, i, i) << '\n';
+ std::cout << CalcArity()( (_1 - _1) / _1 * 100, i, i) << '\n';
+ std::cout << CalcArity()( (_2 - _1) / _2 * 100, i, i) << '\n';
 
 This displays the following:
 
@@ -257,67 +299,91 @@
 [section Canned Transforms]
 [/========================]
 
-Some transforms are generally useful, so Proto provides them. They are
-described below. Each is of the form:
-
- boost::proto::transform::``[~transform-name]``< Grammar ``[~\[, additional args ...\]]`` >
+So far, we've seen how to write custom transforms using function types.
+These were implemented in terms of more primitive transforms provided by
+Proto, such as `_arg`, `_left`, and `_right`. This section describes those
+transforms and others in detail.
 
-They each inherit from their `Grammar` parameter; therefore, they themselves
-match the same expressions as `Grammar` does. As transforms, they all have
-nested static `call()` member functions that accept `expr`, `state`, and
-`visitor` parameters, as well as `apply<>` member templates for calculating
-the return type of `call()`. The tables below show what `call()` and `apply<>`
-do for each of the transforms that Proto provides.
+All the transforms defined in this section are of the following form:
 
-[section:arg_c_and_friends [^arg<>], [^arc_c<>], [^left<>] and [^right<>]]
-
- namespace boost { namespace proto { namespace transform
+ struct some_transform : callable
     {
- template<typename Grammar, typename N = mpl::long_<0> >
- struct arg;
+ template<typename Sig>
+ struct result;
 
- template<typename Grammar, long N>
- struct arg_c;
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ {
+ typedef ... type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<void(Expr, State, Visitor)>::type
+ operator()(Expr const &expr, State const &state, Visitor &visitor) const
+ {
+ return ...;
+ }
+ };
+
+So defined, `some_transform` is a transform "in the raw". It can be used
+without needing to explicitly specify any arguments to the transform. These
+are the building blocks from which you can compose larger transforms using
+function types.
 
- template<typename Grammar>
- struct left;
+[section:arg_c_and_friends [^_arg], [^_left], and [^_right]]
 
- template<typename Grammar>
- struct right;
- }}}
+ namespace boost { namespace proto
+ {
+ namespace transform
+ {
+ template<long N>
+ struct arg_c;
+
+ typedef arg_c<0> arg0;
+ typedef arg_c<1> arg1;
+ ...
+ typedef arg_c<9> arg9;
+
+ typedef arg_c<0> arg;
+ typedef arg_c<0> left;
+ typedef arg_c<1> right;
+ }
+
+ typedef transform::arg0 _arg0;
+ typedef transform::arg1 _arg1;
+ ...
+ typedef transform::arg9 _arg9;
+
+ typedef transform::arg _arg;
+ typedef transform::left _left;
+ typedef transform::right _right;
+ }}
 
 These transforms are useful for extracting the ['[^N]]th argument from an
-expression. The `left<Grammar>` transform is equivalent to the
-`arg_c<Grammar, 0>` transform, and the `right<Grammar>` transform is equivalent
-to the `arg_c<Grammar, 1>` transform.
+expression. The `_left` transform is equivalent to the `arg_c<0>` transform,
+and the `_right` transform is equivalent to the `arg_c<1>` transform.
 
 [table
     [ [Expression]
         [Returns]
     ]
- [ [`transform::arg<Grammar, N>::apply<Expr, State, Visitor>::type`]
- [`proto::result_of::arg<typename Grammar::apply<Expr, State, Visitor>::type, N>::type`]
- ]
- [ [`transform::arg<Grammar, N>::call(expr, state, visitor)`]
- [`proto::arg<N>(Grammar::call(expr, state, visitor))`]
- ]
- [ [`transform::arg_c<Grammar, N>::apply<Expr, State, Visitor>::type`]
- [`proto::result_of::arg_c<typename Grammar::apply<Expr, State, Visitor>::type, N>::type`]
+ [ [`transform::arg_c<N>::result<void(Expr, State, Visitor)>::type`]
+ [`proto::result_of::arg_c<Expr, N>::type`]
     ]
- [ [`transform::arg_c<Grammar, N>::call(expr, state, visitor)`]
- [`proto::arg_c<N>(Grammar::call(expr, state, visitor))`]
+ [ [`transform::arg_c<N>()(expr, state, visitor)`]
+ [`proto::arg_c<N>(expr)`]
     ]
- [ [`transform::left<Grammar>::apply<Expr, State, Visitor>::type`]
- [`proto::result_of::left<typename Grammar::apply<Expr, State, Visitor>::type>::type`]
+ [ [`transform::left::result<void(Expr, State, Visitor)>::type`]
+ [`proto::result_of::left<Expr>::type`]
     ]
- [ [`transform::left<Grammar>::call(expr, state, visitor)`]
- [`proto::left(Grammar::call(expr, state, visitor))`]
+ [ [`transform::left()(expr, state, visitor)`]
+ [`proto::left(expr)`]
     ]
- [ [`transform::right<Grammar>::apply<Expr, State, Visitor>::type`]
- [`proto::result_of::right<typename Grammar::apply<Expr, State, Visitor>::type>::type`]
+ [ [`transform::right::result<void(Expr, State, Visitor)>::type`]
+ [`proto::result_of::right<Expr>::type`]
     ]
- [ [`transform::right<Grammar>::call(expr, state, visitor)`]
- [`proto::right(Grammar::call(expr, state, visitor))`]
+ [ [`transform::right()(expr, state, visitor)`]
+ [`proto::right(expr)`]
     ]
 ]
 
@@ -325,391 +391,459 @@
 
     // Matches an integer terminal and extracts the int.
     struct Int
- : transform::arg< terminal<int> >
+ : when< terminal<int>, _arg >
     {};
 
 [endsect]
 
-[section:identity_and_friends [^identity<>], [^state<>] and [^visitor<>]]
+[section:identity_and_friends [^_expr], [^_state] and [^_visitor]]
 
- namespace boost { namespace proto { namespace transform
+ namespace boost { namespace proto
     {
- template<typename Grammar>
- struct identity;
-
- template<typename Grammar>
- struct state;
-
- template<typename Grammar>
- struct visitor;
- }}}
-
-The `identity<>`, `state<>` and `visitor<>` transforms merely return the
-`expr`, `state` and `visitor` arguments, respectively.
+ namespace transform
+ {
+ struct expr;
+ struct state;
+ struct visitor;
+ }
+
+ typedef transform::expr _expr;
+ typedef transform::state _state;
+ typedef transform::visitor _visitor;
+ }}
+
+The `expr`, `state` and `visitor` transforms merely return the
+`expr`, `state` and `visitor` arguments, respectively. Proto's
+wildcard pattern, `_`, behaves like `transform::expr` when used
+as a transform.
 
 [table
     [ [Expression]
         [Returns]
     ]
- [ [`transform::identity<Grammar>::apply<Expr, State, Visitor>::type`]
+ [ [`_::result<void(Expr, State, Visitor)>::type`]
+ [`Expr`]
+ ]
+ [ [`_()(expr_, state, visitor)`]
+ [`expr_`]
+ ]
+ [ [`transform::expr::result<void(Expr, State, Visitor)>::type`]
         [`Expr`]
     ]
- [ [`transform::identity<Grammar>::call(expr, state, visitor)`]
- [`expr`]
+ [ [`transform::expr()(expr_, state, visitor)`]
+ [`expr_`]
     ]
- [ [`transform::state<Grammar>::apply<Expr, State, Visitor>::type`]
+ [ [`transform::state::result<void(Expr, State, Visitor)>::type`]
         [`State`]
     ]
- [ [`transform::state<Grammar>::call(expr, state, visitor)`]
- [`state`]
+ [ [`transform::state()(expr, state_, visitor)`]
+ [`state_`]
     ]
- [ [`transform::visitor<Grammar>::apply<Expr, State, Visitor>::type`]
+ [ [`transform::visitor::result<void(Expr, State, Visitor)>::type`]
         [`Visitor`]
     ]
- [ [`transform::visitor<Grammar>::call(expr, state, visitor)`]
- [`visitor`]
+ [ [`transform::visitor()(expr, state, visitor_)`]
+ [`visitor_`]
     ]
 ]
 
 Example:
 
     // Matches a subscript expression where the left- and right-hand operands
- // match MyGrammar, returns the expression unmodified; that is, without
- // applying MyGrammar's transforms to the left and right operands, as would
- // happen by default.
+ // match MyGrammar, returns the expression unmodified
     struct Subscript
- : transform::identity< subscript<MyGrammar, MyGrammar> >
+ : when< subscript<MyGrammar, MyGrammar>, _expr >
     {};
 
 [endsect]
 
-[section:always [^always<>]]
+[section:call [^call<>]]
 
- namespace boost { namespace proto { namespace transform
+ namespace boost { namespace proto
     {
- template<typename Grammar, typename Always, typename Factory = ``[~default-factory]``>
- struct always;
- }}}
+ namespace transform
+ {
+ template<typename Fun>
+ struct call;
+ }
+
+ using transform::call;
+ }}
+
+The `call<>` transform is used to invoke callable transforms and evaluate
+their arguments. When you use a callable transform as in
+`when< posit<_>, Callable(_arg) >`, the `call<>` transform is used behind
+the scenes to evaluate `Callable(_arg)`. In fact, for any callable
+transform, the following short- and long-forms are equivalent:
+
+[table
+ [ [Short From]
+ [Long Form] ]
+ [ [ `when< Grammar, Callable(Tran1, Tran2...) >` ]
+ [ `when< Grammar, call< Callable(Tran1, Tran2...) > >` ] ]
+]
+
+You might decide to use `call<>` explicitly in cases when Proto
+can't figure out that a given transform is callable. (See the discussion on
+the `is_callable<>` trait TODO LINK.) Rather than specialize
+`proto::is_callable<>` for your transform, you can simply wrap its use in
+`call<>`, instead.
+
+[tip For users of legacy compilers like MSVC 7.1, `call<>` is useful to work
+around compiler bugs. Doubly-nested transforms such as `Callable(_arg1(_arg2))`
+cause older compilers problems, but the equivalent `Callable(call<_arg1(_arg2)>)`
+solves the problem.]
 
-The `always<>` transform always returns a certain type. By default, its
-`call()` member returns a default constructed object of that type, but you can
-configure this with the optional `Factory` parameter.
+The semantics of `call<>` are described in the table below:
 
 [table
     [ [Expression]
         [Returns]
     ]
- [ [`transform::always<Grammar, Type, Factory>::apply<Expr, State, Visitor>::type`]
- [`Type`]
- ]
- [ [`transform::always<Grammar, Type, Factory>::call(expr, state, visitor)`]
- [`Factory()()`]
+ [ [`call<Fun(A0, A1, ... AN)>::result<void(Expr, State, Visitor)>::type`]
+ [``boost::result_of<Fun(
+ when<_, A0>::result<void(Expr, State, Visitor)>::type
+ , when<_, A1>::result<void(Expr, State, Visitor)>::type
+ ...
+ , when<_, AN>::result<void(Expr, State, Visitor)>::type
+)>::type``]
+ ]
+ [ [`call<Fun(A0, A1, ... AN)>()(expr, state, visitor)`]
+ [``Fun()(
+ when<_, A0>()(expr, state, visitor)
+ , when<_, A1>()(expr, state, visitor)
+ ...
+ , when<_, AN>()(expr, state, visitor)
+)``]
     ]
 ]
 
+The target of a callable transform can be any function object that implements
+the Boost.ResultOf protocol. Function objects that take up to
+`BOOST_PROTO_MAX_ARITY` are handled.
+
+For callable transforms that take 0, 1, or 2 arguments, special handling is done
+to see if the transform actually expects 3 arguments, as Proto's primitive
+transforms do. (This can be detected with meta-programming tricks.) So, even
+though a transform like `_arg1` requires three parameters: expression,
+state and visitor; it can be "called" with just one, like `_arg1(_arg2)`. Proto
+treats this as if were `call<_arg1(_arg2, _state, _visitor)>`.
+
+If no transform arguments are specified at all, as in `call<_arg1>`, this is
+the same as `_arg1`. For this reason, `call<_arg1>(_arg2)` is the same as
+`call<_arg1(_arg2)>`.
+
 Example:
 
- // Match a placeholder terminal and return the arity of the
- // placeholder.
- struct PlaceholderArity
- : transform::always< terminal<placeholder1>, mpl::int_<1> >
- {};
+[LazyMakePair2]
 
 [endsect]
 
-[section:applyn [^apply1<>], [^apply2<>] and [^apply3<>]]
+[section:make [^make<>]]
 
- namespace boost { namespace proto { namespace transform
+ namespace boost { namespace proto
     {
- template<typename Grammar, typename Lambda, typename Factory = ``[~default-factory]``>
- struct apply1;
-
- template<typename Grammar, typename Lambda, typename Factory = ``[~default-factory]``>
- struct apply2;
-
- template<typename Grammar, typename Lambda, typename Factory = ``[~default-factory]``>
- struct apply3;
- }}}
-
-The `apply1<>` transform invokes an MPL lambda expression with the Proto
-expression as the argument, `apply2<>` uses the expression and the state
-as arguments and `apply3<>` uses the expression, state and visitor.
+ namespace transform
+ {
+ template<typename Fun>
+ struct make;
+ }
+
+ using transform::make;
+ }}
+
+The `make<>` transform is used to construct objects and evaluate
+their constructor arguments. When you use an object transform as in
+`when< posit<_>, Object(_arg) >`, the `make<>` transform is used behind
+the scenes to evaluate `Object(_arg)`. In fact, for any object
+transform, the following short- and long-forms are equivalent:
 
 [table
- [ [Expression]
- [Returns]
- ]
- [ [`transform::apply1<Grammar, Lambda, Factory>::apply<Expr, State, Visitor>::type`]
- [`mpl::apply1<Lambda, typename Grammar::apply<Expr, State, Visitor>::type>::type`]
- ]
- [ [`transform::apply1<Grammar, Lambda, Factory>::call(expr, state, visitor)`]
- [`Factory()(Grammar::call(expr, state, visitor))`]
- ]
- [ [`transform::apply2<Grammar, Lambda, Factory>::apply<Expr, State, Visitor>::type`]
- [`mpl::apply2<Lambda, typename Grammar::apply<Expr, State, Visitor>::type, State>::type`]
- ]
- [ [`transform::apply2<Grammar, Lambda, Factory>::call(expr, state, visitor)`]
- [`Factory()(Grammar::call(expr, state, visitor), state)`]
- ]
- [ [`transform::apply3<Grammar, Lambda, Factory>::apply<Expr, State, Visitor>::type`]
- [`mpl::apply3<Lambda, typename Grammar::apply<Expr, State, Visitor>::type, State, Visitor>::type`]
- ]
- [ [`transform::apply3<Grammar, Lambda, Factory>::call(expr, state, visitor)`]
- [`Factory()(Grammar::call(expr, state, visitor), state, visitor)`]
- ]
+ [ [Short From]
+ [Long Form] ]
+ [ [ `when< Grammar, Object(Tran1, Tran2...) >` ]
+ [ `when< Grammar, make< Object(Tran1, Tran2...) > >` ] ]
 ]
 
-The `call()` member functions of Proto's `applyN<>` transforms simply return a
-default constructed object of the appropriate type by default. If you want a
-different behavior, you can specify a `Factory` type as the third template
-parameter.
-
-Example:
-
- // Another way to implement a transform that calculates the arity of a
- // binary Calculator expression. This code is functionally equivalent to
- // the binary_max<> transform defined above. The mpl::max<...> type below
- // is an MPL Placeholder expression (note the use of mpl::_) that
- // mpl::apply1<> knows how to evaluate. The effect of the
- // BinaryCalculatorArity grammar is to match binary Calculator expressions,
- // evaluate the arity of the left and right sub-expressions and return the
- // maximum of the two.
- struct BinaryCalculatorArity
- : transform::apply1<
- binary_expr<_, CalculatorArity, CalculatorArity>
- , mpl::max<result_of::left<mpl::_>, result_of::right<mpl::_> >
- >
- {};
+You might decide to use `make<>` to explicitly differentiate object
+transforms from callable transforms. (See `call<>`.)
 
-[endsect]
+[tip For users of legacy compilers like MSVC 7.1, `make<>` is useful to work
+around compiler bugs. Doubly-nested transforms such as `Object1(Object2(_arg))`
+cause older compilers problems, but the equivalent `Object1(make<Object2(_arg)>)`
+solves the problem.]
+
+The `make<>` transform checks to see if the resulting object type is a template.
+If it is, the template type is disassembled to find nested transforms. Proto
+considers the following types to represent transforms:
+
+[def __type__ [~type]]
+[def __X__ X\']
+[def __X0__ X0\']
+[def __X1__ X1\']
+
+* Function types
+* Function pointer types
+* Types for which `proto::is_callable<__type__>::value` is `true`
+
+When an object transform with a template type such as
+`Object<X0,X1,...>(Args...)` is evaluated with a given
+`Expr`, `State`, and `Visitor`, the result type is
+`make_<Object<X0,X1,...>, Expr, State, Visitor>::type` which is
+defined as follows. For each `X` in `X0,X1,...`, do:
+
+* If `X` is a template like `Object2<Y0,Y1,...>`, then let `__X__`
+ be `make_<Object2<Y0,Y1,...>, Expr, State, Visitor>::type`
+ (which evaluates this procedure recursively). Note whether any
+ substitutions took place during this operation.
+* Otherwise, if `X` is a transform, then let `__X__` be
+ `when<_, X>::result<void(Expr, State, Visitor)>::type`.
+ Note that a substitution took place.
+* Otherwise, let `__X__` be `X`, and note that no substitution
+ took place.
+* If any substitutions took place in any of the above steps and
+ `Object<__X0__,__X1__,...>` has a nested `::type` typedef, the
+ result type is `Object<__X0__,__X1__,...>::type`.
+* Otherwise, the result type is `Object<__X0__,__X1__,...>`.
 
-[section:branch [^branch<>]]
+Note that `when<>` is implemented in terms of `call<>` and `make<>`,
+so the above procedure is evaluated recursively.
 
- namespace boost { namespace proto { namespace transform
- {
- template<typename Grammar, typename BranchState>
- struct branch;
- }}}
+Given the above description of the `make_<>` helper, the semantics
+of the `make<>` transform is described as follows:
 
-The `branch<>` transform applies `Grammar`'s transform with a new `state`
-parameter. This is useful when you want to compile a branch of the expression
-tree independently of the rest; for example, when you want to fold everything
-under a certain child node into a list.
+[def __AN__ A[~N]]
 
 [table
     [ [Expression]
         [Returns]
     ]
- [ [`transform::branch<Grammar, BranchState>::apply<Expr, State, Visitor>::type`]
- [`typename Grammar::template apply<Expr, BranchState, Visitor>::type`]
+ [ [`make<Object(A0, A1, ... __AN__)>::result<void(Expr, State, Visitor)>::type`]
+ [`make_<Object, Expr, State, Visitor>::type`]
     ]
- [ [`transform::branch<Grammar, BranchState>::call(expr, state, visitor)`]
- [`Grammar::call(expr, BranchState(), visitor)`]
+ [ [`make<Object(A0, A1, ... __AN__)>()(expr, state, visitor)`]
+ [``make_<Object, Expr, State, Visitor>::type(
+ when<_, A0>()(expr, state, visitor)
+ , when<_, A1>()(expr, state, visitor)
+ ...
+ , when<_, __AN__>()(expr, state, visitor)
+)``]
     ]
 ]
 
+Objects with constructors that take up to `BOOST_PROTO_MAX_ARITY` are handled.
+Some types are so-called /aggregates/ that do not have constructors; rather,
+they use /aggregate initialization/. For these types, you can specialize
+`proto::is_aggregate<>` and Proto will use a brace initializer list to
+initialize the object rather than a constructor. Proto knows that `proto::expr<>`
+is such an aggregate, so if you use object transforms to "construct" a
+new node in an expression tree, the right thing happens.
+
+If no transform arguments are specified at all, as in `make<Object>`, this is
+the same as `make<Object()>`.
+
 Example:
 
-See the [link reverse_fold_example [^reverse_fold<>] example].
+[LazyMakePair]
 
 [endsect]
 
-[section:compose [^compose<>]]
+[section:bind [^bind<>]]
 
- namespace boost { namespace proto { namespace transform
+ namespace boost { namespace proto
     {
- template<typename Grammar1, typename Grammar2>
- struct compose;
- }}}
+ namespace transform
+ {
+ template<typename Fun>
+ struct bind;
+ }
+
+ using transform::bind;
+ }}
+
+Sometimes you would like a higher-order transform that returns another
+transform to be evaluated. This can happen when you have a transform
+whose behavior needs to be parameterized on the current state of the
+transformation. For these situations, you can use the `bind<>` transform,
+which is essentially an invocation of the `make<>` transform (to evaluate
+any nested transforms and create the higher-order transform) followed
+by an invocation of `call<>` (to actually execute the higher-order
+transform).
 
-The `compose<>` transform applies two transformations in succession. It
-inherits from `Grammar1`, so it matches whatever `Grammar1` matches. The
-result of applying `Grammar1`'s transform is passed to `Grammar2`'s transform,
-along with the `state` and `visitor` parameters. It is assumed that the
-result of applying `Grammar1`'s transform is an expression that matches
-the grammar specified by `Grammar2`.
-
-The `compose<>` transform is useful in situations where you would like to
-preprocess a node in the expression tree before forwarding it on for further
-processing.
+The behavior of `bind<>` is easily specified in terms of `make<>` and
+`call<>`.
 
 [table
     [ [Expression]
         [Returns]
     ]
- [ [`transform::compose<Grammar1, Grammar2>::apply<Expr, State, Visitor>::type`]
- [``typename Grammar2::template apply<
- typename Grammar1::template apply<Expr, State, Visitor>::type
- , State
- , Visitor
->::type``]
- ]
- [ [`transform::compose<Grammar1, Grammar2>::call(expr, state, visitor)`]
- [``Grammar2::call(
- Grammar1::call(expr, state, visitor), state, visitor)``]
+ [ [`bind<Object(A0, A1, ... __AN__)>::result<void(Expr, State, Visitor)>::type`]
+ [``call<
+ make<Object>::result<void(Expr, State, Visitor)>::type(A0, A1, ... __AN__)
+>::result<void(Expr, State, Visitor)>::type``]
+ ]
+ [ [`bind<Object(A0, A1, ... __AN__)>()(expr, state, visitor)`]
+ [``call<
+ make<Object>::result<void(Expr, State, Visitor)>::type(A0, A1, ... __AN__)
+>()(expr, state, visitor)``]
     ]
 ]
 
-Example:
-
- // A fragment of a Calculator grammar which uses compose<> to process
- // a node in the expression tree after it has been preprocessed by
- // an arg<> transform.
- struct Calculator
- : or_<
- // ...
- transform::compose<
- // Match anything of the form +X, and
- // extract X, discarding the +.
- transform::arg<posit<_> >
- // Now invoke the Calculator transform on X
- , Calculator
- >
- >
- {};
+If no transform arguments are specified at all, as in `bind<Object>`, this is
+the same as `bind<Object(_expr, _state, _visitor)>`.
 
 [endsect]
 
-[section:list [^list<>]]
+[section:when [^when<>]]
 
- namespace boost { namespace proto { namespace transform
+ namespace boost { namespace proto
     {
- template<typename Grammar>
- struct list;
- }}}
+ namespace transform
+ {
+ template<typename Grammar, typename Transform = Grammar>
+ struct when;
+ }
+
+ using transform::when;
+ }}
+
+`when<>` associates a grammar rule with a transform. It can be used
+in a grammar in place of the rule; that is, it behaves as a grammar
+rule. Expression tree nodes that match the grammar rule are processed
+with the associated transform; that it, `when<>` also behaves like
+a transform.
+
+When no transform is specified, as with `when< posit<Calculator> >`,
+the grammar is treated as the transform. Every grammar element has
+a default transform. For most, such as `posit<>`, the default transform
+is `pass_through<>`.
 
-`list<>` is a simple transform that builds a fusion cons list, using the
-transformed expression as the list's head, and the state as the list's tail.
+The `when<>` transform is easily specified in terms of `call<>`,
+`make<>`, and the `is_callable<>` trait.
 
 [table
     [ [Expression]
         [Returns]
     ]
- [ [`transform::list<Grammar>::apply<Expr, State, Visitor>::type`]
- [``fusion::cons<
- typename Grammar::template apply<Expr, State, Visitor>::type
- , State
->``]
- ]
- [ [`transform::list<Grammar>::call(expr, state, visitor)`]
- [``fusion::cons<
- typename Grammar::template apply<Expr, State, Visitor>::type
- , State
->(Grammar::call(expr, state, visitor), state)``]
+ [ [`when<Grammar, R(A0, A1, ... __AN__)>::result<void(Expr, State, Visitor)>::type`]
+ [``mpl::if_<
+ is_callable<R>
+ , call<R(A0, A1, ... __AN__)>
+ , make<R(A0, A1, ... __AN__)>
+>::type::result<void(Expr, State, Visitor)>::type``]
+ ]
+ [ [`when<Grammar, R(A0, A1, ... __AN__)>()(expr, state, visitor)`]
+ [``mpl::if_<
+ is_callable<R>
+ , call<R(A0, A1, ... __AN__)>
+ , make<R(A0, A1, ... __AN__)>
+>::type()(expr, state, visitor)``]
     ]
 ]
 
-Example:
-
-See the [link reverse_fold_example [^reverse_fold<>] example].
+If no transform arguments are specified, as in `when<Grammar, _arg>`, the
+transform is assumed to be callable; that is, it is equivalent to
+`when<Grammar, call<_arg> >`.
 
 [endsect]
 
 [section:fold [^fold<>] and [^reverse_fold<>]]
 
- namespace boost { namespace proto { namespace transform
+ namespace boost { namespace proto
     {
- template<typename Grammar, typename State = void>
- struct fold;
-
- template<typename Grammar, typename State = void>
- struct reverse_fold;
- }}}
+ namespace transform
+ {
+ template<typename Sequence, typename State0, typename Fun>
+ struct fold;
+
+ template<typename Sequence, typename State0, typename Fun>
+ struct reverse_fold;
+ }
+
+ using transform::fold;
+ using transform::reverse_fold;
+ }}
 
 The transforms `fold<>` and `reverse_fold<>` are akin to the
-`std::accumulate()` algorithm in the STL. They iterate over some sequence and
-accumulate some state at each element. For Proto's `fold<>` and
-`reverse_fold<>`, the "elements" of the sequence are actually pairs consisting
-of the corresponding child grammars and expressions. The state is accumulated
-by applying the child grammar's transform to the corresponding child
-expression. The result of one transform is used as the state of the next
-transform, such that the transforms nest like Russian dolls. The `fold<>`
+`std::accumulate()` algorithm in the STL, or the `fold()` algorithm in
+Boost.Fusion. They iterate over some sequence and
+accumulate some state at each element. The `fold<>`
 transform iterates over the children in order, starting with the 0th child.
 The `reverse_fold<>` transform does it in reverse order, starting with the Nth
 child. (Note that for building things like cons lists, you'll often want to
 built it back-to-front with `reverse_fold<>`.)
 
-[def __arg_N__ proto_arg[~N]]
-[def __arg_N_sub_1__ proto_arg[~N-1]]
+Both `fold<>` and `reverse_fold<>` are implemented in terms of `fusion::fold<>`.
+The three template parameters must each be Proto transforms. The have the following
+meaning:
+
+* `Sequence`: A Proto transform that returns a Fusion sequence.
+* `State`: A Proto transform that returns the initial state of the fold.
+* `Fun`: A Proto transform representing the operation to perform at each
+ iteration of the fold algorithm.
+
+Often, the `Sequence` parameter is `proto::_`, which returns the current node
+in the Proto expression tree. Tree nodes are valid Fusion sequences, where
+the children are the elements of the sequence.
+
+The semantics of the `fold<>` and `reverse_fold<>` transforms can both be
+understood in terms of a helper struct, `as_callable<>`, which binds the
+visitor and the `Fun` transform into a binary function object for use by
+`fusion::fold()`. `as_callable<>` has the following behavior:
 
 [table
     [ [Expression]
         [Returns]
     ]
- [ [`transform::fold<Grammar>::apply<Expr, State, Visitor>::type`]
- [``typename Grammar::__arg_N__::apply<
- typename Expr::__arg_N__::proto_base_expr
- , typename Grammar::__arg_N_sub_1__::apply<
- typename Expr::__arg_N_sub_1__::proto_base_expr
- , // ...
- typename Grammar::proto_arg0::apply<
- typename Expr::proto_arg0::proto_base_expr, State, Visitor>::type
- // ...
- , Visitor
- >::type
- , Visitor
+ [ [`as_callable<Fun, Visitor>::result<void(Expr, State)>::type`]
+ [`when<_, Fun>::result<void(Expr, State, Visitor)>::type`]
+ ]
+ [ [`as_callable<Fun, Visitor>(visitor)(expr, state)`]
+ [`when<_, Fun>()(expr, state, visitor)`]
+ ]
+]
+
+With the above `as_callable<>` adaptor, `fold<>` and `reverse_fold<>`
+can be easily implemented in terms of `fusion::fold<>`:
+
+[table
+ [ [Expression]
+ [Returns]
+ ]
+ [ [`fold<Sequence, State0, Fun>::result<void(Expr, State, Visitor)>::type`]
+ [``fusion::result_of::fold<
+ when<_, Sequence>::result<void(Expr, State, Visitor)>::type
+ , when<_, State0>::result<void(Expr, State, Visitor)>::type
+ , as_callable<Fun, Visitor>
>::type``]
     ]
- [ [`transform::fold<Grammar>::call(expr, state, visitor)`]
- [``Grammar::__arg_N__::call(
- proto::arg_c<N>(expr)
- , Grammar::__arg_N_sub_1__::call(
- proto::arg_c<N-1>(expr)
- , // ...
- Grammar::proto_arg0::call(
- proto::arg_c<0>(expr), state, visitor)
- // ...
- , visitor
- )
- , visitor
+ [ [`fold<Sequence, State0, Fun>()(expr, state, visitor)`]
+ [``fusion::fold(
+ when<_, Sequence>()(expr, state, visitor)
+ , when<_, State0>()(expr, state, visitor)
+ , as_callable<Fun, Visitor>(visitor)
 )``]
     ]
- [ [`transform::reverse_fold<Grammar>::apply<Expr, State, Visitor>::type`]
- [``typename Grammar::proto_arg0::apply<
- typename Expr::proto_arg0::proto_base_expr
- , typename Grammar::proto_arg1::apply<
- typename Expr::proto_arg1::proto_base_expr
- , // ...
- typename Grammar::__arg_N__::apply<
- typename Expr::__arg_N__::proto_base_expr, State, Visitor>::type
- // ...
- , Visitor
+ [ [`reverse_fold<Sequence, State0, Fun>::result<void(Expr, State, Visitor)>::type`]
+ [``fusion::result_of::fold<
+ fusion::result_of::reverse<
+ when<_, Sequence>::result<void(Expr, State, Visitor)>::type
>::type
- , Visitor
+ , when<_, State0>::result<void(Expr, State, Visitor)>::type
+ , as_callable<Fun, Visitor>
>::type``]
     ]
- [ [`transform::reverse_fold<Grammar>::call(expr, state, visitor)`]
- [``Grammar::proto_arg0::call(
- proto::arg_c<0>(expr)
- , Grammar::proto_arg1::call(
- proto::arg_c<1>(expr)
- , // ...
- Grammar::__arg_N__::call(
- proto::arg_c<N>(expr), state, visitor)
- // ...
- , visitor
+ [ [`reverse_fold<Sequence, State0, Fun>()(expr, state, visitor)`]
+ [``fusion::fold(
+ fusion::reverse(
+ when<_, Sequence>()(expr, state, visitor)
     )
- , visitor
+ , when<_, State0>()(expr, state, visitor)
+ , as_callable<Fun, Visitor>(visitor)
 )``]
     ]
 ]
 
-Both the `fold<>` and `reverse_fold<>` transforms take an optional `State`
-template parameter. For non-`void` `State` parameters, the following
-equivalances hold:
-
-[table fold<> and reverse_fold<> Equivalencies
- [[Short-Cut Grammar] [Equivalent Grammar]]
- [[`transform::fold<Grammar, State>`] [``transform::branch<
- transform::fold<Grammar>
- , State
->``]]
- [[`transform::reverse_fold<Grammar, State>`][``transform::branch<
- transform::reverse_fold<Grammar>
- , State
->``]]
-]
-
 [#reverse_fold_example]Example:
 
 [AsArgList]
@@ -718,164 +852,117 @@
 
 [section:fold_tree [^fold_tree<>] and [^reverse_fold_tree<>]]
 
- namespace boost { namespace proto { namespace transform
+ namespace boost { namespace proto
     {
- template<typename Tag, typename Grammar, typename State = void>
- struct fold_tree;
-
- template<typename Tag, typename Grammar, typename State = void>
- struct reverse_fold_tree;
- }}}
+ namespace transform
+ {
+ template<typename Sequence, typename State0, typename Fun>
+ struct fold_tree;
+
+ template<typename Sequence, typename State0, typename Fun>
+ struct reverse_fold_tree;
+ }
+
+ using transform::fold;
+ using transform::reverse_fold;
+ }}
 
 The `fold_tree<>` and `reverse_fold_tree<>` transforms recursively apply the
 `fold<>` and `reverse_fold<>` transforms to sub-trees that all share a common
-`Tag` type. This is useful for flattening trees into lists; for example, you
+tag type. This is useful for flattening trees into lists; for example, you
 might use `reverse_fold_tree<>` to flatten an expression tree like `a | b | c`
 into a Fusion list like `cons(a, cons(b, cons(c)))`.
 
 The `fold_tree<>` and `reverse_fold_tree<>` transforms are unlike the other
 transforms that Proto provides in that they operate on entire sub-trees rather
-than just single nodes within the tree. As a result, their interface is
-different. The `Tag` parameter is the type of the operator tag that behaves
-like a separator. The `Grammar` parameter represents that grammar that the
-separated sub-expressions must match, and the transform that will be applied
-to each. The optional `State` parameter is the initial state of the transform.
+than just single nodes within the tree.
 
 These are higher-level transforms, implemented in terms of the `fold<>`
-transform. They are probably best understood in terms of their definition,
-which is fairly small.
+and `reverse_fold<>` transforms and helper structs `fold_tree_<>` and
+`reverse_fold_tree_<>`, one of which is shown below:
 
- namespace detail
- {
- // fold_tree_ either recurses into the expression, if its Tag
- // matches, or else ends the recursion by matching Grammar and
- // applying its transform.
- template<typename Tag, typename Grammar>
- struct fold_tree_
- : or_<
- transform::fold<
- nary_expr<Tag, vararg<fold_tree_<Tag, Grammar> > >
- >
- , Grammar
- >
- {};
- }
-
- template<typename Tag, typename Grammar, typename State = void>
- struct fold_tree
- : transform::fold<
- nary_expr<Tag, vararg<detail::fold_tree_<Tag, Grammar> > >
- , State
+ // fold_tree_ either recurses into the expression, if its Grammar
+ // matches, or else ends the recursion by matching Grammar and
+ // applying its transform.
+ template<typename Grammar, typename Fun>
+ struct fold_tree_
+ : or_<
+ when<Grammar, fold<_, _state, fold_tree_<Grammar, Fun> > >
+ , when<_, Fun>
>
     {};
+
+The `reverse_fold_tree_<>` helper is specified similarly, only with
+`reverse_fold<>` instead of `fold<>`. With these two helpers, we can
+specify the behavior of `fold_tree<>` and `reverse_fold_tree<>` as
+follows:
 
-The `reverse_fold_tree<>` transform is specified similarly, only with
-`reverse_fold<>` instead of `fold<>`.
-
-Example:
-
-[FoldTreeToList]
-
-[endsect]
-
-[section:construct [^construct<>]]
-
- namespace boost { namespace proto { namespace transform
- {
- template<typename Grammar, typename Constructor>
- struct construct;
- }}}
-
-The `construct<>` transform is a flexible tool for transforming expressions
-into other types of objects. With it, you can specify both the type of the
-object to construct as well as what parameters to pass to its constructor. A
-typical usage of the `construct<>` transform is like this:
-
- transform::construct<
- terminal<float>
- , terminal<double>::type(transform::arg<_>)
+[table
+ [ [Expression]
+ [Returns]
+ ]
+ [ [``fold_tree<Sequence, State0, Fun>
+ ::result<void(Expr, State, Visitor)>::type``]
+ [``fold<
+ Sequence
+ , State0
+ , fold_tree_<
+ nary_expr<Expr::proto_tag, vararg<_> >
+ , Fun
>
-
-The first template parameter is the grammar to match; in this case, terminals
-of type `float`. The second template parameter might look a little strange. It
-is actually a function type, but here we're using it to describe what object to
-construct and how to initialize it. In this case, we will be constructing a
-`double` terminal, using the argument from the `float` terminal. This transform
-effectively promotes a `float` to a `double`.
-
-The `Constructor` template parameter is a function type of the following form:
-
- ResultType(Transform1, Transform2, ...)
-
-where `Transform1`, `Transform2`, etc, are Proto transforms. They specify what
-arguments should be used to construct the `ResultType` object. The way it works
-is as follows. Consider the transform `transform::construct<G, R(T)>`, and an
-expression object `e` of type `E` that matches `G`. Then the result will be an
-object of type `R` constructed like this:
-
- E2 e2 = G::call(e, s, v);
- R(T::call(e2, s, v));
-
-where `s` and `v` are some state and visitor parameters, and `E2` is the return
-type of `G::call(e,s,v)`. Note that `G`'s transform is applied first, followed
-by `T`'s transform.
-
-The result type itself may be specified in terms of Proto transforms. In that
-case, the return type is the result of applying the transforms and substituting
-the transforms with the results. Consider the following code that matches an
-invocation of a lazy `make_pair_` function, and actually returns a
-`std::pair<>` of the correct type.
-
-[LazyMakePair]
-
-Notice that the result type, `std::pair<...>`, is specified in terms of Proto
-transforms. Notice also that Proto transforms are used to specify how to
-construct the `std::pair<>` object. We can now use the `MakePair` transform to
-convert a lazy `make_pair_()` function invocation into an actual `std::pair<>`:
-
-[LazyMakePairTest]
-
-The above code would display the following:
-
-[pre
-1
-3.14
+>::result<void(Expr, State, Visitor)>::type``]
+ ]
+ [ [`fold_tree<Sequence, State0, Fun>()(expr, state, visitor)`]
+ [``fold<
+ Sequence
+ , State0
+ , fold_tree_<
+ nary_expr<Expr::proto_tag, vararg<_> >
+ , Fun
+ >
+>()(expr, state, visitor)``]
+ ]
+ [ [``reverse_fold_tree<Sequence, State0, Fun>
+ ::result<void(Expr, State, Visitor)>::type``]
+ [``reverse_fold<
+ Sequence
+ , State0
+ , reverse_fold_tree_<
+ nary_expr<Expr::proto_tag, vararg<_> >
+ , Fun
+ >
+>::result<void(Expr, State, Visitor)>::type``]
+ ]
+ [ [`reverse_fold_tree<Sequence, State0, Fun>()(expr, state, visitor)`]
+ [``reverse_fold<
+ Sequence
+ , State0
+ , reverse_fold_tree_<
+ nary_expr<Expr::proto_tag, vararg<_> >
+ , Fun
+ >
+>()(expr, state, visitor)``]
+ ]
 ]
 
-When building the result type, if the result of applying a Proto transform is a
-type that has a nested `::type` member typedef, then that type is used instead.
-For instance, here is a transform that matches an integer and negates it lazily
-by wrapping it in a `negate<>` node.
-
-[NegateInt]
-
-The return type is `negate<_>`, but what is actually constructed is
-`negate<terminal<int>::type>::type`. This behavior should seem familiar if you
-have ever used MPL Placeholder expressions.
-
-The `construct<>` transform gives you a simple and convenient syntax for
-creating temporary sub-objects. In the `Constructor` expression
-`ResultType(Transform1, Transform2)`, if the type of `Transform1` is a function
-type, then it is converted into the transform `construct<_, Transform1>`. The
-following example demonstrates how to match an integer, promote it to a long
-integer, and lazily square it.
-
-[SquareAndPromoteInt]
+Example:
 
-The "arguments" to the constructor are `terminal<long>::type(transform::arg<_>)`,
-which is short-cut syntax for a nested `construct<>` transform. [footnote The
-short-cut syntax for nested constructors does not work on MSVC due to compiler
-bugs.]
+[FoldTreeToList]
 
 [endsect]
 
 [section:pass_through [^pass_through<>]]
 
- namespace boost { namespace proto { namespace transform
+ namespace boost { namespace proto
     {
- template<typename Grammar>
- struct pass_through;
- }}}
+ namespace transform
+ {
+ template<typename Grammar>
+ struct pass_through;
+ }
+
+ using transform::pass_through;
+ }}
 
 The `pass_through<>` transform iterates over the pairs of
 children in the grammar and the expression, applying the child grammar's
@@ -895,22 +982,30 @@
     [ [Expression]
         [Returns]
     ]
- [ [`transform::pass_through<Grammar>::apply<Expr, State, Visitor>::type`]
+ [ [``transform::pass_through<Grammar>
+ ::result<void(Expr, State, Visitor)>::type``]
         [``typename nary_expr<
- typename Expr::proto_tag
- , typename Grammar::proto_arg0::apply<typename Expr::proto_arg0::proto_base_expr, State, Visitor>::type
- , typename Grammar::proto_arg1::apply<typename Expr::proto_arg1::proto_base_expr, State, Visitor>::type
+ Expr::proto_tag
+ , result_of::arg_c<Grammar, 0>::type::result<
+ void(result_of::arg_c<Expr, 0>::type, State, Visitor)>::type
+ , result_of::arg_c<Grammar, 1>::type::result<
+ void(result_of::arg_c<Expr, 1>::type, State, Visitor)>::type
     // ...
- , typename Grammar::__arg_N__::apply<typename Expr::__arg_N__::proto_base_expr, State, Visitor>::type
+ , result_of::arg_c<Grammar, N>::type::result<
+ void(result_of::arg_c<Expr, N>::type, State, Visitor)>::type
>::type``]
     ]
- [ [`transform::pass_through<Grammar>::call(expr, state, visitor)`]
- [``transform::pass_through<Grammar>::apply<Expr, State, Visitor>::type::make(
- Grammar::proto_arg0::call(proto::arg_c<0>(expr), state, visitor)
- , Grammar::proto_arg1::call(proto::arg_c<1>(expr), state, visitor)
- // ...
- , Grammar::__arg_N__::call(proto::arg_c<N>(expr), state, visitor)
-)``]
+ [ [`transform::pass_through<Grammar>()(expr, state, visitor)`]
+ [``transform::pass_through<Grammar>
+ ::result<void(Expr, State, Visitor)>::type::make(
+ result_of::arg_c<Grammar, 0>::type()(
+ proto::arg_c<0>(expr), state, visitor)
+ , result_of::arg_c<Grammar, 1>::type()(
+ proto::arg_c<1>(expr), state, visitor)
+ // ...
+ , result_of::arg_c<Grammar, N>::type()(
+ proto::arg_c<N>(expr), state, visitor)
+ )``]
     ]
 ]
 
@@ -922,4 +1017,210 @@
 
 [endsect]
 
+[/======================================================]
+[section:user_defined_transforms User-Defined Transforms]
+[/======================================================]
+
+In previous sections, we've seen how to compose larger transforms
+out of smaller transforms using function types.
+We've also seen the primitive transforms that Proto provides.
+So-called primitive transforms can be used without specifying
+arguments, like `_arg0` which returns the first child of the
+current node. But primitive transforms are not special in any way.
+They are merely ternary function objects that take the current
+expression, state and visitor as arguments.
+
+You can define your own primitive transforms. You might want to
+do this if your transform is complicated and composing it out
+of primitives becomes unwieldy. You might also do this
+to work around compiler bugs on legacy compilers that makes
+composing transforms using function types problematic. Finally,
+you might also decide to define your own primitive transforms
+to improve compile times. Since Proto can simply invoke a
+primitive transform directly without having to process arguments
+or differentiate callable transforms from object transforms,
+primitive transforms are more efficient.
+
+To define your own primitive transform, merely define a ternary
+function object that accepts an expression, a state and a visitor.
+Here, for example, is how Proto defines the `arg_c<>` transform:
+
+ namespace boost { namespace proto { namespace transform
+ {
+ // A transform that returns the I-th child
+ template<int I>
+ struct arg_c : callable
+ {
+ // Nested "result" template, used by
+ // boost::result_of<> to compute the
+ // return type of the function.
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
+ : proto::result_of::arg_c<Expr, I>
+ {};
+
+ // Function call operator that actually
+ // executes the transform.
+ template<typename Expr, typename State, typename Visitor>
+ typename proto::result_of::arg_c<Expr, I>::type
+ operator ()(Expr const &expr, State const &, Visitor &) const
+ {
+ return proto::arg_c<I>(expr);
+ }
+ };
+ }}}
+
+ namespace boost { namespace proto
+ {
+ // Note that arg_c<I> is callable, so that
+ // it can be used with arguments, as:
+ // arg_c<0>(arg_c<1>)
+ template<int I>
+ struct is_callable<transform::arg_c<I> >
+ : mpl::true_
+ {};
+ }}
+
+There is nothing particularly special about the definition of
+`arg_c<>`. It is just an ordinary polymorphic function object. The
+only interesting bit is the `is_callable<>` specialization, which
+will be described in the section called "Making Your Transform
+Callable".
+
+Once you have defined such a ternary function object, you can use
+it as a transform without any arguments and Proto will automatically
+pass it the current expression, state and visitor parameters.
+
+[endsect]
+
+[/=================================================]
+[section:is_callable Making Your Transform Callable]
+[/=================================================]
+
+Transforms are typically of the form `when< Something, R(A0,A1,...) >`. The
+question is whether `R` represents a function to call or an object to
+construct, and the answer determines how `when<>` evaluates the transform.
+`when<>` uses the `is_callable<>` trait to disambiguate between the two.
+Proto does its best to guess whether a transform is callable or not, but
+it doesn't always get it right. It's best to know the rules Proto uses,
+so that you know when you need to specialize `is_callable<>`.
+
+The first thing to know is that templates are not considered callable
+by default. This is true ['even if the template inherits from
+`proto::callable`]. Consider the following erroneous transform:
+
+ // Proto can't tell this defines a
+ // callable transform!
+ template<typename T>
+ struct times2 : callable
+ {
+ typedef T result_type;
+
+ T operator()(T i) const
+ {
+ return i * 2;
+ }
+ };
+
+ // ERROR! This is not going to
+ // multiply the int by 2.
+ struct IntTimes2
+ : when< terminal<int>, times2<int>(_arg) >
+ {};
+
+The problem is that Proto doesn't know that `times2<int>` is a callable
+transform. Instead, it assumes it's an object transform and will try to
+construct a `times2<int>` object and initialize it will an `int`. That
+will not compile.
+
+[note Why can't Proto tell that `times2<int>` is callable? After all,
+it inherits from `proto::callable`, and that is detectable, right?
+In fact, determining whether some type `X<Y>` inherits from
+`callable` will cause the template `X<Y>` to be instantiated. That's a
+problem for a type like `std::vector<_arg(_arg1)>()`, which is a valid
+transform that default-constructs a particular instantiation of
+`std::vector<>`. But `std::vector<>` will not suffer to be instantiated
+with `_arg(_arg1)` as a template parameter! As a result, Proto has
+to assume that a type `X<Y>` represents an object transform and not
+a callable transform.]
+
+There are a couple of solutions to the `times2<int>` problem. One
+solution is to wrap the transform in `call<>`. This forces Proto to
+treat `times2<int>` as callable:
+
+ // OK, calls times2<int>
+ struct IntTimes2
+ : when< terminal<int>, call<times2<int>(_arg)> >
+ {};
+
+This can be a bit of a pain, because we need to wrap every use of
+`times2<int>`, which can be tedious and error prone, and makes our
+grammar cluttered and harder to read.
+
+Another solution is to specialize `proto::is_callable<>` on our
+`times2<>` template:
+
+ namespace boost { namespace proto
+ {
+ template<typename T>
+ struct is_callable<times2<T> >
+ : mpl::true_
+ {};
+ }}
+
+ // OK, times2<> is callable
+ struct IntTimes2
+ : when< terminal<int>, times2<int>(_arg) >
+ {};
+
+This is better, but still a pain because of the need to open
+Proto's namespace.
+
+You could simply make sure that the transform is not
+a template. Consider the following:
+
+ // No longer a template!
+ struct times2int : times2<int> {};
+
+ // OK, times2int is callable
+ struct IntTimes2
+ : when< terminal<int>, times2int(_arg) >
+ {};
+
+This works because now Proto can tell that `times2int` inherits
+(indirectly) from `proto::callable`. Any non-template types can
+be safely checked for inheritance because, as they are not
+templates, there is no worry about instantiation errors.
+
+There is one last way to tell Proto that `times2<>` is callable.
+You could add an extra dummy template parameter that defaults
+to `proto::callable`:
+
+ // Proto will recognize this as callable
+ template<typename T, typename Dummy = callable>
+ struct times2 : callable
+ {
+ typedef T result_type;
+
+ T operator()(T i) const
+ {
+ return i * 2;
+ }
+ };
+
+ // OK, this works!
+ struct IntTimes2
+ : when< terminal<int>, times2<int>(_arg) >
+ {};
+
+Note that in addition to the extra template parameter, `times2<>`
+still inherits from `callable`. That's not necessary in this example
+but it's good style because any types derived from `times2<>` (as
+`times2int` defined above) will still be considered callable.
+
+[endsect]
+
 [endsect]

Modified: branches/fix-links/libs/xpressive/proto/example/calc1.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/calc1.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/calc1.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -36,7 +36,7 @@
 
     // Handle the evaluation of the placeholder terminals
     template<typename I>
- double operator()(proto::tag::terminal, arg<I>) const
+ double operator ()(proto::tag::terminal, arg<I>) const
     {
         return d[ I() - 1 ];
     }
@@ -60,7 +60,7 @@
     // Displays "6"
     std::cout << evaluate( _1 * _2, 3.0, 2.0 ) << std::endl;
 
- // Displays "1.5"
+ // Displays "0.5"
     std::cout << evaluate( (_1 - _2) / _2, 3.0, 2.0 ) << std::endl;
 
     return 0;

Modified: branches/fix-links/libs/xpressive/proto/example/calc2.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/calc2.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/calc2.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
 //
 // This example enhances the simple arithmetic expression evaluator
 // in calc1.cpp by using proto::extends to make arithemetic
-// expressions immediately evaluatable with operator(), a-la a
+// expressions immediately evaluatable with operator (), a-la a
 // function object
 
 #include <iostream>
@@ -17,7 +17,7 @@
 // Will be used to define the placeholders _1 and _2
 template<typename I> struct arg {};
 
-// For expressions in the calculator domain, operator()
+// For expressions in the calculator domain, operator ()
 // will be special; it will evaluate the expression.
 struct calculator_domain;
 
@@ -40,14 +40,14 @@
 
     // Handle the evaluation of the placeholder terminals
     template<typename I>
- double operator()(proto::tag::terminal, arg<I>) const
+ double operator ()(proto::tag::terminal, arg<I>) const
     {
         return d[ I() - 1 ];
     }
 };
 
 // Wrap all calculator expressions in this type, which defines
-// operator() to evaluate the expression.
+// operator () to evaluate the expression.
 template<typename Expr>
 struct calculator_expression
   : proto::extends<Expr, calculator_expression<Expr>, calculator_domain>
@@ -55,27 +55,27 @@
     typedef
         proto::extends<Expr, calculator_expression<Expr>, calculator_domain>
     base_type;
-
+
     explicit calculator_expression(Expr const &expr = Expr())
       : base_type(expr)
     {}
 
- using base_type::operator=;
+ using base_type::operator =;
 
- // Override operator() to evaluate the expression
- double operator()() const
+ // Override operator () to evaluate the expression
+ double operator ()() const
     {
         calculator_context const ctx;
         return proto::eval(*this, ctx);
     }
 
- double operator()(double d1) const
+ double operator ()(double d1) const
     {
         calculator_context const ctx(d1);
         return proto::eval(*this, ctx);
     }
 
- double operator()(double d1, double d2) const
+ double operator ()(double d1, double d2) const
     {
         calculator_context const ctx(d1, d2);
         return proto::eval(*this, ctx);
@@ -100,7 +100,7 @@
     // Displays "6"
     std::cout << ( _1 * _2 )( 3.0, 2.0 ) << std::endl;
 
- // Displays "1.5"
+ // Displays "0.5"
     std::cout << ( (_1 - _2) / _2 )( 3.0, 2.0 ) << std::endl;
 
     return 0;

Modified: branches/fix-links/libs/xpressive/proto/example/calc3.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/calc3.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/calc3.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,7 +5,7 @@
 //
 // This example enhances the arithmetic expression evaluator
 // in calc2.cpp by using a proto transform to calculate the
-// number of arguments an expression requires and using a
+// number of arguments an expression requires and using a
 // compile-time assert to guarantee that the right number of
 // arguments are actually specified.
 
@@ -15,59 +15,11 @@
 #include <boost/mpl/min_max.hpp>
 #include <boost/xpressive/proto/proto.hpp>
 #include <boost/xpressive/proto/context.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/fold.hpp>
-#include <boost/xpressive/proto/transform/apply.hpp>
+#include <boost/xpressive/proto/transform.hpp>
 using namespace boost;
 
 // Will be used to define the placeholders _1 and _2
-template<typename I> struct arg { typedef I arity; };
-
-// A meta-function for getting a placeholder terminal's arity.
-template<typename Arg>
-struct arg_arity
-{
- typedef typename Arg::arity type;
-};
-
-// A custom transform that fetches the arity of a placeholder terminal
-template<typename Grammar>
-struct placeholder_arity
- : Grammar
-{
- template<typename Expr, typename, typename>
- struct apply
- : arg_arity<typename proto::result_of::arg<Expr>::type>
- {};
-
- //// If this transform had a runtime counterpart, it would look like this:
- //template<typename Expr, typename State, typename Visitor>
- //static typename apply<Expr, State, Visitor>::type
- //call(Expr const &expr, State const &state, Visitor &visitor)
- //{
- // ... do stuff ...
- //}
-};
-
-// A custom transforms for calculating the max arity of a calculator expression
-template<typename Grammar>
-struct max_arity
- : Grammar
-{
- template<typename Expr, typename State, typename Visitor>
- struct apply
- {
- // Calculate the arity of the current expression.
- typedef typename Grammar::template apply<Expr, State, Visitor>::type arity;
- // The old maximum is passed along in the State parameter by
- // proto::transform::fold<> (see below). The new maximum is the
- // larger of the old maximum and the arity we just calculated.
- typedef typename mpl::max<arity, State>::type type;
- };
-
- // As with placeholder_arity<> above, placeholder_arity<> has no need
- // for a call() member function.
-};
+template<typename I> struct placeholder : I {};
 
 using proto::_;
 
@@ -79,41 +31,18 @@
 // expression arity for each of the three cases.
 struct CalculatorGrammar
   : proto::or_<
- // placeholders have a non-zero arity ...
- placeholder_arity< proto::terminal< arg<_> > >
 
- //// This accomplishes the same thing without the need to
- //// define a separate placeholder_arity<> transform, but
- //// is a little more cryptic.
- //proto::transform::apply1<
- // proto::terminal< arg<_> >
- // , arg_arity< proto::result_of::arg<mpl::_> >
- //>
+ // placeholders have a non-zero arity ...
+ proto::when< proto::terminal< placeholder<_> >, proto::_arg >
 
         // Any other terminals have arity 0 ...
- , proto::transform::always< proto::terminal<_>, mpl::int_<0> >
+ , proto::when< proto::terminal<_>, mpl::int_<0>() >
+
         // For any non-terminals, find the arity of the children and
         // take the maximum. This is recursive.
- , proto::transform::fold<
- // This matches any non-terminal for which the children
- // are themselves calculator expressions.
- proto::nary_expr<_, proto::vararg< max_arity< CalculatorGrammar > > >
-
- //// This accomplishes the same thing without the need to
- //// define a separate max_arity<> transform, but is a little
- //// more cryptic.
- //proto::nary_expr<
- // _
- // , proto::vararg<
- // // Here, mpl::_1 will be replaced with the result of applying
- // // the CalculatorGrammar transform (i.e., the arity of the
- // // child node), and mpl::_2 will be replaced with the State of
- // // the transformation so far (i.e., the maximum arity found so
- // // far).
- // proto::transform::apply2<CalculatorGrammar, mpl::max<mpl::_1, mpl::_2> >
- // >
- //>
- >
+ , proto::when< proto::nary_expr<_, proto::vararg<_> >
+ , proto::fold<_, mpl::int_<0>(), mpl::max<CalculatorGrammar, proto::_state>() > >
+
>
 {};
 
@@ -122,10 +51,10 @@
 // is not used, is mpl::void_.
 template<typename Expr>
 struct calculator_arity
- : CalculatorGrammar::apply<Expr, mpl::int_<0>, mpl::void_>
+ : boost::result_of<CalculatorGrammar(Expr, mpl::int_<0>, mpl::void_)>
 {};
 
-// For expressions in the calculator domain, operator()
+// For expressions in the calculator domain, operator ()
 // will be special; it will evaluate the expression.
 struct calculator_domain;
 
@@ -148,14 +77,14 @@
 
     // Handle the evaluation of the placeholder terminals
     template<typename I>
- double operator()(proto::tag::terminal, arg<I>) const
+ double operator ()(proto::tag::terminal, placeholder<I>) const
     {
         return d[ I() - 1 ];
     }
 };
 
 // Wrap all calculator expressions in this type, which defines
-// operator() to evaluate the expression.
+// operator () to evaluate the expression.
 template<typename Expr>
 struct calculator_expression
   : proto::extends<Expr, calculator_expression<Expr>, calculator_domain>
@@ -163,15 +92,15 @@
     typedef
         proto::extends<Expr, calculator_expression<Expr>, calculator_domain>
     base_type;
-
+
     explicit calculator_expression(Expr const &expr = Expr())
       : base_type(expr)
     {}
 
- using base_type::operator=;
+ using base_type::operator =;
 
- // Override operator() to evaluate the expression
- double operator()() const
+ // Override operator () to evaluate the expression
+ double operator ()() const
     {
         // Assert that the expression has arity 0
         BOOST_MPL_ASSERT_RELATION(0, ==, calculator_arity<Expr>::type::value);
@@ -179,7 +108,7 @@
         return proto::eval(*this, ctx);
     }
 
- double operator()(double d1) const
+ double operator ()(double d1) const
     {
         // Assert that the expression has arity 1
         BOOST_MPL_ASSERT_RELATION(1, ==, calculator_arity<Expr>::type::value);
@@ -187,7 +116,7 @@
         return proto::eval(*this, ctx);
     }
 
- double operator()(double d1, double d2) const
+ double operator ()(double d1, double d2) const
     {
         // Assert that the expression has arity 2
         BOOST_MPL_ASSERT_RELATION(2, ==, calculator_arity<Expr>::type::value);
@@ -202,8 +131,8 @@
 {};
 
 // Define some placeholders (notice they're wrapped in calculator_expression<>)
-calculator_expression<proto::terminal< arg< mpl::int_<1> > >::type> const _1;
-calculator_expression<proto::terminal< arg< mpl::int_<2> > >::type> const _2;
+calculator_expression<proto::terminal< placeholder< mpl::int_<1> > >::type> const _1;
+calculator_expression<proto::terminal< placeholder< mpl::int_<2> > >::type> const _2;
 
 // Now, our arithmetic expressions are immediately executable function objects:
 int main()
@@ -214,7 +143,7 @@
     // Displays "6"
     std::cout << ( _1 * _2 )( 3.0, 2.0 ) << std::endl;
 
- // Displays "1.5"
+ // Displays "0.5"
     std::cout << ( (_1 - _2) / _2 )( 3.0, 2.0 ) << std::endl;
 
     // This won't compile because the arity of the

Modified: branches/fix-links/libs/xpressive/proto/example/hello.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/hello.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/hello.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -10,7 +10,7 @@
 #include <boost/typeof/std/ostream.hpp>
 using namespace boost;
 
-proto::terminal< std::ostream & >::type cout_ = { std::cout };
+proto::terminal< std::ostream & >::type cout_ = {std::cout};
 
 template< typename Expr >
 void evaluate( Expr const & expr )

Modified: branches/fix-links/libs/xpressive/proto/example/lazy_vector.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/lazy_vector.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/lazy_vector.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -22,13 +22,13 @@
 using proto::_;
 
 // This grammar describes which lazy vector expressions
-// are allowed; namely, vector terminals and addition
+// are allowed; namely, vector terminals and addition
 // and subtraction of lazy vector expressions.
 struct LazyVectorGrammar
   : proto::or_<
         proto::terminal< std::vector<_> >
- , proto::plus< LazyVectorGrammar, LazyVectorGrammar>
- , proto::minus< LazyVectorGrammar, LazyVectorGrammar>
+ , proto::plus< LazyVectorGrammar, LazyVectorGrammar >
+ , proto::minus< LazyVectorGrammar, LazyVectorGrammar >
>
 {};
 
@@ -57,7 +57,7 @@
     {
         typedef typename proto::result_of::arg<Expr>::type::value_type result_type;
 
- result_type operator()( Expr const & expr, lazy_subscript_context & ctx ) const
+ result_type operator ()( Expr const & expr, lazy_subscript_context & ctx ) const
         {
             return proto::arg( expr )[ ctx.subscript_ ];
         }
@@ -67,7 +67,7 @@
 };
 
 // Here is the domain-specific expression wrapper, which overrides
-// operator[] to evaluate the expression using the lazy_subscript_context.
+// operator [] to evaluate the expression using the lazy_subscript_context.
 template<typename Expr>
 struct lazy_vector_expr
   : proto::extends<Expr, lazy_vector_expr<Expr>, lazy_vector_domain>

Modified: branches/fix-links/libs/xpressive/proto/example/mixed.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/mixed.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/mixed.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -18,12 +18,14 @@
 #include <boost/xpressive/proto/proto.hpp>
 #include <boost/xpressive/proto/debug.hpp>
 #include <boost/xpressive/proto/context.hpp>
+#include <boost/xpressive/proto/transform.hpp>
 #include <boost/typeof/std/list.hpp>
 #include <boost/typeof/std/vector.hpp>
 #include <boost/typeof/std/complex.hpp>
 
-using namespace boost;
-using proto::_;
+namespace proto = boost::proto;
+namespace mpl = boost::mpl;
+using namespace proto;
 
 template<typename Expr>
 struct MixedExpr;
@@ -38,30 +40,24 @@
     Iter it;
 };
 
-template<typename Cont>
-iterator_wrapper<typename Cont::const_iterator> cbegin(Cont const &cont)
+struct begin : proto::callable
 {
- return iterator_wrapper<typename Cont::const_iterator>(cont.begin());
-}
-
-template<typename Grammar>
-struct begin
- : Grammar
-{
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : proto::terminal<
- iterator_wrapper<
- typename proto::result_of::arg<Expr>::type::const_iterator
- >
+ template<class Sig>
+ struct result;
+
+ template<class This, class Cont>
+ struct result<This(Cont)>
+ : proto::result_of::as_expr<
+ iterator_wrapper<typename boost::remove_reference<Cont>::type::const_iterator>
>
     {};
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+
+ template<typename Cont>
+ typename result<begin(Cont const &)>::type
+ operator ()(Cont const &cont) const
     {
- return proto::as_expr(cbegin(proto::arg(expr)));
+ iterator_wrapper<typename Cont::const_iterator> it(cont.begin());
+ return proto::as_expr(it);
     }
 };
 
@@ -69,10 +65,10 @@
 // begin iterators
 struct Begin
   : proto::or_<
- begin< proto::terminal< std::vector<_, _> > >
- , begin< proto::terminal< std::list<_, _> > >
- , proto::terminal<_>
- , proto::nary_expr<_, proto::vararg<Begin> >
+ when< proto::terminal< std::vector<_, _> >, begin(_arg) >
+ , when< proto::terminal< std::list<_, _> >, begin(_arg) >
+ , when< proto::terminal<_> >
+ , when< proto::nary_expr<_, proto::vararg<Begin> > >
>
 {};
 
@@ -93,7 +89,7 @@
     {
         typedef typename std::iterator_traits<Iter>::reference result_type;
 
- result_type operator()(Expr &expr, DereferenceCtx const &) const
+ result_type operator ()(Expr &expr, DereferenceCtx const &) const
         {
             return *proto::arg(expr).it;
         }
@@ -117,7 +113,7 @@
     {
         typedef void result_type;
 
- result_type operator()(Expr &expr, IncrementCtx const &) const
+ result_type operator ()(Expr &expr, IncrementCtx const &) const
         {
             ++proto::arg(expr).it;
         }
@@ -148,11 +144,14 @@
 };
 
 // A vector grammar is a terminal or some op that is not an
-// assignment op. (Assignment will be handles specially.)
+// assignment op. (Assignment will be handled specially.)
 struct MixedGrammar
   : proto::or_<
         proto::terminal<_>
- , proto::and_<proto::nary_expr<_, proto::vararg<MixedGrammar> >, proto::not_<AssignOps> >
+ , proto::and_<
+ proto::nary_expr<_, proto::vararg<MixedGrammar> >
+ , proto::not_<AssignOps>
+ >
>
 {};
 
@@ -172,7 +171,7 @@
     {}
 private:
     // hide this:
- using proto::extends<Expr, MixedExpr<Expr>, MixedDomain>::operator[];
+ using proto::extends<Expr, MixedExpr<Expr>, MixedDomain>::operator [];
 };
 
 // Define a trait type for detecting vector and list terminals, to
@@ -201,7 +200,7 @@
     struct assign_op
     {
         template<typename T, typename U>
- void operator()(T &t, U const &u) const
+ void operator ()(T &t, U const &u) const
         {
             t = u;
         }
@@ -210,7 +209,7 @@
     struct plus_assign_op
     {
         template<typename T, typename U>
- void operator()(T &t, U const &u) const
+ void operator ()(T &t, U const &u) const
         {
             t += u;
         }
@@ -219,7 +218,7 @@
     struct minus_assign_op
     {
         template<typename T, typename U>
- void operator()(T &t, U const &u) const
+ void operator ()(T &t, U const &u) const
         {
             t -= u;
         }
@@ -227,26 +226,36 @@
 
     struct sin_
     {
- template<typename Sig> struct result {};
+ template<typename Sig>
+ struct result;
+
         template<typename This, typename Arg>
         struct result<This(Arg)>
- : remove_const<typename remove_reference<Arg>::type>
+ : boost::remove_const<typename boost::remove_reference<Arg>::type>
         {};
 
         template<typename Arg>
- Arg operator()(Arg const &arg) const
+ Arg operator ()(Arg const &arg) const
         {
             return std::sin(arg);
         }
     };
 
- BOOST_PROTO_DEFINE_FUNCTION_TEMPLATE(
- 1
- , sin
+ template<typename A>
+ typename proto::result_of::make_expr<
+ proto::tag::function
       , MixedDomain
- , (boost::proto::tag::function)
- , ((sin_))
- )
+ , sin_ const
+ , A const
+ >::type sin(A const &a)
+ {
+ return proto::result_of::make_expr<
+ proto::tag::function
+ , MixedDomain
+ , sin_ const
+ , A const
+ >::call(sin_(), a);
+ }
 
     template<typename FwdIter, typename Expr, typename Op>
     void evaluate(FwdIter begin, FwdIter end, Expr const &expr, Op op)
@@ -254,7 +263,7 @@
         int i = 0;
         IncrementCtx const inc = {};
         DereferenceCtx const deref = {};
- typename Begin::apply<Expr, int, int>::type expr2 = Begin::call(expr, i, i);
+ typename boost::result_of<Begin(Expr, int, int)>::type expr2 = Begin()(expr, i, i);
         for(; begin != end; ++begin)
         {
             op(*begin, proto::eval(expr2, deref));

Modified: branches/fix-links/libs/xpressive/proto/example/rgb.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/rgb.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/rgb.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -11,9 +11,7 @@
 
 #include <iostream>
 #include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/apply.hpp>
-#include <boost/xpressive/proto/transform/compose.hpp>
+#include <boost/xpressive/proto/transform.hpp>
 using namespace boost::proto;
 
 struct RedTag
@@ -40,35 +38,49 @@
     }
 };
 
-typedef terminal<RedTag>::type Red;
-typedef terminal<BlueTag>::type Blue;
-typedef terminal<GreenTag>::type Green;
+typedef terminal<RedTag>::type RedT;
+typedef terminal<BlueTag>::type BlueT;
+typedef terminal<GreenTag>::type GreenT;
+
+struct Red;
+struct Blue;
+struct Green;
 
 ///////////////////////////////////////////////////////////////////////////////
 // A transform that produces new colors according to some arbitrary rules:
 // red & green give blue, red & blue give green, blue and green give red.
+struct Red
+ : or_<
+ plus<Green, Blue>
+ , plus<Blue, Green>
+ , plus<Red, Red>
+ , terminal<RedTag>
+ >
+{};
+
+struct Green
+ : or_<
+ plus<Red, Blue>
+ , plus<Blue, Red>
+ , plus<Green, Green>
+ , terminal<GreenTag>
+ >
+{};
+
+struct Blue
+ : or_<
+ plus<Red, Green>
+ , plus<Green, Red>
+ , plus<Blue, Blue>
+ , terminal<BlueTag>
+ >
+{};
+
 struct RGB
   : or_<
- // leave terminals as they are
- terminal<_>
- , transform::compose<
- // Match binary nodes, convert left and right to terminals
- plus<RGB, RGB>
- // Forward resulting binary expression to the following transform
- , or_<
- // Green + Blue -> Red
- transform::always<plus<Green, Blue>, Red>
- , transform::always<plus<Blue, Green>, Red>
- // Red + Green -> Blue
- , transform::always<plus<Red, Green>, Blue>
- , transform::always<plus<Green, Red>, Blue>
- // Red + Blue -> Green
- , transform::always<plus<Red, Blue>, Green>
- , transform::always<plus<Blue, Red>, Green>
- // else (both same color), select the left operand
- , transform::left<_>
- >
- >
+ when< Red, RedTag() >
+ , when< Blue, BlueTag() >
+ , when< Green, GreenTag() >
>
 {};
 
@@ -76,14 +88,14 @@
 void printColor(Expr const & expr)
 {
     int i = 0; // dummy state and visitor parameter, not used
- std::cout << arg(RGB::call(expr, i, i)) << std::endl;
+ std::cout << RGB()(expr, i, i) << std::endl;
 }
 
 int main()
 {
- printColor(Red() + Green());
- printColor(Red() + Green() + Blue());
- printColor(Red() + (Green() + Blue()));
+ printColor(RedT() + GreenT());
+ printColor(RedT() + GreenT() + BlueT());
+ printColor(RedT() + (GreenT() + BlueT()));
 
     return 0;
 }

Modified: branches/fix-links/libs/xpressive/proto/example/tarray.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/tarray.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/tarray.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -52,7 +52,7 @@
 
     // Index array terminals with our subscript. Everything
     // else will be handled by the default evaluation context.
- int operator()(proto::tag::terminal, int const (&data)[3]) const
+ int operator ()(proto::tag::terminal, int const (&data)[3]) const
     {
         return data[this->i_];
     }
@@ -68,43 +68,43 @@
 
     TArrayPrintCtx() {}
 
- std::ostream &operator()(proto::tag::terminal, int i) const
+ std::ostream &operator ()(proto::tag::terminal, int i) const
     {
         return std::cout << i;
     }
 
- std::ostream &operator()(proto::tag::terminal, int const (&arr)[3]) const
+ std::ostream &operator ()(proto::tag::terminal, int const (&arr)[3]) const
     {
         return std::cout << '{' << arr[0] << ", " << arr[1] << ", " << arr[2] << '}';
     }
 
     template<typename L, typename R>
- std::ostream &operator()(proto::tag::plus, L const &l, R const &r) const
+ std::ostream &operator ()(proto::tag::plus, L const &l, R const &r) const
     {
         return std::cout << '(' << l << " + " << r << ')';
     }
 
     template<typename L, typename R>
- std::ostream &operator()(proto::tag::minus, L const &l, R const &r) const
+ std::ostream &operator ()(proto::tag::minus, L const &l, R const &r) const
     {
         return std::cout << '(' << l << " - " << r << ')';
     }
 
     template<typename L, typename R>
- std::ostream &operator()(proto::tag::multiplies, L const &l, R const &r) const
+ std::ostream &operator ()(proto::tag::multiplies, L const &l, R const &r) const
     {
         return std::cout << l << " * " << r;
     }
 
     template<typename L, typename R>
- std::ostream &operator()(proto::tag::divides, L const &l, R const &r) const
+ std::ostream &operator ()(proto::tag::divides, L const &l, R const &r) const
     {
         return std::cout << l << " / " << r;
     }
 };
 
 // Here is the domain-specific expression wrapper, which overrides
-// operator[] to evaluate the expression using the TArraySubscriptCtx.
+// operator [] to evaluate the expression using the TArraySubscriptCtx.
 template<typename Expr>
 struct TArrayExpr
   : proto::extends<Expr, TArrayExpr<Expr>, TArrayDomain>
@@ -143,9 +143,9 @@
         (*this)[2] = k;
     }
 
- // Here we override operator[] to give read/write access to
+ // Here we override operator [] to give read/write access to
     // the elements of the array. (We could use the TArrayExpr
- // operator[] if we made the subscript context smarter about
+ // operator [] if we made the subscript context smarter about
     // returning non-const reference when appropriate.)
     int &operator [](std::ptrdiff_t i)
     {
@@ -157,13 +157,13 @@
         return proto::arg(*this)[i];
     }
 
- // Here we define a operator= for TArray terminals that
+ // Here we define a operator = for TArray terminals that
     // takes a TArray expression.
     template< typename Expr >
     TArray &operator =(Expr const & expr)
     {
         // proto::as_expr<TArrayDomain>(expr) is the same as
- // expr unless expr is an integer, in which case it
+ // expr unless expr is an integer, in which case it
         // is made into a TArrayExpr terminal first.
         return this->assign(proto::as_expr<TArrayDomain>(expr));
     }

Modified: branches/fix-links/libs/xpressive/proto/example/vec3.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/vec3.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/vec3.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,12 +16,11 @@
 #include <boost/xpressive/proto/proto.hpp>
 #include <boost/xpressive/proto/context.hpp>
 #include <boost/xpressive/proto/proto_typeof.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/fold.hpp>
-#include <boost/xpressive/proto/transform/apply.hpp>
-#include <boost/xpressive/proto/transform/function.hpp>
-using namespace boost::proto;
+#include <boost/xpressive/proto/transform.hpp>
+
 namespace mpl = boost::mpl;
+namespace proto = boost::proto;
+using namespace proto;
 
 // Here is an evaluation context that indexes into a Vec3
 // expression, and combines the result.
@@ -36,7 +35,7 @@
 
     // Index array terminals with our subscript. Everything
     // else will be handled by the default evaluation context.
- int operator()(tag::terminal, int const (&arr)[3]) const
+ int operator ()(tag::terminal, int const (&arr)[3]) const
     {
         return arr[this->i_];
     }
@@ -45,41 +44,40 @@
 };
 
 // Here is an evaluation context that counts the number
-// of Vec3 terminals in an expression.
+// of Vec3 terminals in an expression.
 struct CountLeavesCtx
   : callable_context< CountLeavesCtx, null_context >
 {
     CountLeavesCtx()
       : count(0)
       {}
-
+
       typedef void result_type;
-
- void operator()(tag::terminal, int const(&)[3])
+
+ void operator ()(tag::terminal, int const(&)[3])
       {
           ++this->count;
       }
-
+
       int count;
 };
 
+struct iplus : std::plus<int>, callable {};
+
 // Here is a transform that does the same thing as the above context.
 // It demonstrates the use of the std::plus<> function object
-// with the function2 transform. With minor modifications, this
+// with the fold transform. With minor modifications, this
 // transform could be used to calculate the leaf count at compile
-// time, rather at runtime.
+// time, rather than at runtime.
 struct CountLeaves
   : or_<
         // match a Vec3 terminal, return 1
- transform::always<terminal<int[3]>, mpl::int_<1> >
+ when<terminal<int[3]>, mpl::int_<1>() >
         // match a terminal, return int() (which is 0)
- , transform::always<terminal<_>, int>
+ , when<terminal<_>, int() >
         // fold everything else, using std::plus<> to add
         // the leaf count of each child to the accumulated state.
- , transform::fold<
- nary_expr<_, vararg<transform::function2<CountLeaves, std::plus<int> > > >
- , int // initial state of the fold is int() (which is 0)
- >
+ , otherwise< fold<_, int(), iplus(CountLeaves, _state) > >
>
 {};
 
@@ -94,17 +92,17 @@
         (*this)[2] = k;
     }
 
- int &operator[](int i)
+ int &operator [](int i)
     {
- return arg(*this)[i];
+ return proto::arg(*this)[i];
     }
 
- int const &operator[](int i) const
+ int const &operator [](int i) const
     {
- return arg(*this)[i];
+ return proto::arg(*this)[i];
     }
 
- // Here we define a operator= for Vec3 terminals that
+ // Here we define a operator = for Vec3 terminals that
     // takes a Vec3 expression.
     template< typename Expr >
     Vec3 &operator =(Expr const & expr)
@@ -134,10 +132,10 @@
     // CountLeavesCtx evaluation context.
     CountLeavesCtx ctx;
     eval(expr, ctx);
-
+
     // This is another way to count the leaves using a transform.
     int i = 0;
- assert( CountLeaves::call(expr, i, i) == ctx.count );
+ assert( CountLeaves()(expr, i, i) == ctx.count );
 
     return ctx.count;
 }

Modified: branches/fix-links/libs/xpressive/proto/example/vector.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/example/vector.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/example/vector.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -42,7 +42,7 @@
     {
         typedef T result_type;
 
- T operator()(Expr &expr, VectorSubscriptCtx const &ctx) const
+ T operator ()(Expr &expr, VectorSubscriptCtx const &ctx) const
         {
             return proto::arg(expr)[ctx.i_];
         }
@@ -73,11 +73,11 @@
     {
         typedef void result_type;
 
- result_type operator()(Expr &expr, VectorSizeCtx const &ctx) const
+ result_type operator ()(Expr &expr, VectorSizeCtx const &ctx) const
         {
             if(ctx.size_ != proto::arg(expr).size())
             {
- throw std::invalid_argument("LHS and RHS are not compatible");
+ throw std::runtime_error("LHS and RHS are not compatible");
             }
         }
     };
@@ -124,7 +124,7 @@
 {};
 
 // Here is VectorExpr, which extends a proto expr type by
-// giving it an operator[] which uses the VectorSubscriptCtx
+// giving it an operator [] which uses the VectorSubscriptCtx
 // to evaluate an expression with a given index.
 template<typename Expr>
 struct VectorExpr

Modified: branches/fix-links/libs/xpressive/proto/test/calculator.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/test/calculator.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/test/calculator.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -22,36 +22,36 @@
       : i_(i)
     {}
 
- int operator()(proto::tag::terminal, placeholder) const
+ int operator ()(proto::tag::terminal, placeholder) const
     {
         return this->i_;
     }
 
- int operator()(proto::tag::terminal, int j) const
+ int operator ()(proto::tag::terminal, int j) const
     {
         return j;
     }
 
     template<typename Left, typename Right>
- int operator()(proto::tag::plus, Left const &left, Right const &right) const
+ int operator ()(proto::tag::plus, Left const &left, Right const &right) const
     {
         return proto::eval(left, *this) + proto::eval(right, *this);
     }
 
     template<typename Left, typename Right>
- int operator()(proto::tag::minus, Left const &left, Right const &right) const
+ int operator ()(proto::tag::minus, Left const &left, Right const &right) const
     {
         return proto::eval(left, *this) - proto::eval(right, *this);
     }
 
     template<typename Left, typename Right>
- int operator()(proto::tag::multiplies, Left const &left, Right const &right) const
+ int operator ()(proto::tag::multiplies, Left const &left, Right const &right) const
     {
         return proto::eval(left, *this) * proto::eval(right, *this);
     }
 
     template<typename Left, typename Right>
- int operator()(proto::tag::divides, Left const &left, Right const &right) const
+ int operator ()(proto::tag::divides, Left const &left, Right const &right) const
     {
         return proto::eval(left, *this) / proto::eval(right, *this);
     }
@@ -70,7 +70,7 @@
     {}
 
     template<typename T>
- result_type operator()(T const &t) const
+ result_type operator ()(T const &t) const
     {
         Fun fun(t);
         return proto::eval(this->expr_, fun);

Modified: branches/fix-links/libs/xpressive/proto/test/examples.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/test/examples.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/test/examples.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// matches.hpp
+// examples2.hpp
 //
 // Copyright 2006 Eric Niebler. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
@@ -9,30 +9,32 @@
 #include <boost/config.hpp>
 #include <boost/mpl/min_max.hpp>
 #include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/fold.hpp>
-#include <boost/xpressive/proto/transform/branch.hpp>
-#include <boost/xpressive/proto/transform/list.hpp>
-#include <boost/xpressive/proto/transform/apply.hpp>
-#include <boost/xpressive/proto/transform/construct.hpp>
-#include <boost/xpressive/proto/transform/fold_tree.hpp>
+#include <boost/xpressive/proto/transform.hpp>
 #include <boost/utility/result_of.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/fusion/include/pop_front.hpp>
 #include <boost/test/unit_test.hpp>
 
-using namespace boost::proto;
+namespace proto = boost::proto;
 namespace mpl = boost::mpl;
 namespace fusion = boost::fusion;
 
+using namespace proto;
+using namespace transform;
+
 struct placeholder1 {};
 struct placeholder2 {};
 
 namespace test1
 {
-//[ CalculatorGrammar
+//[ CalcGrammar
     using namespace boost::proto;
 
+ // This is the grammar for calculator expressions,
+ // to which we will attach transforms for computing
+ // the expressions' arity.
     /*<< A Calculator expression is ... >>*/
- struct CalculatorGrammar
+ struct CalcArity
       : or_<
             /*<< placeholder1, or ... >>*/
             terminal< placeholder1 >
@@ -41,48 +43,95 @@
           /*<< some other terminal, or ... >>*/
           , terminal< _ >
           /*<< a unary expression where the operand is a calculator expression, or ... >>*/
- , unary_expr< _, CalculatorGrammar >
- /*<< a binary expression where the operands are calculator expressions, or ... >>*/
- , binary_expr< _, CalculatorGrammar, CalculatorGrammar >
+ , unary_expr< _, CalcArity >
+ /*<< a binary expression where the operands are calculator expressions >>*/
+ , binary_expr< _, CalcArity, CalcArity >
>
     {};
 //]
 }
 
-//[ binary_max
+//[ binary_arity
+/*<< The `CalculatorArity` is a transform for calculating
+the arity of a calculator expression. It will be define in
+terms of `binary_arity`, which is defined in terms of
+`CalculatorArity`; hence, the definition is recursive.>>*/
+struct CalculatorArity;
+
+// A custom transform that returns the arity of a unary
+// calculator expression by finding the arity of the
+// child expression.
+struct unary_arity
+ /*<< Custom transforms should inherit from
+ callable. In some cases, (e.g., when the transform
+ is a template), it is also necessary to specialize
+ the proto::is_callable<> trait. >>*/
+ : callable
+{
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ /*<< Transforms have a nested `result<>` for calculating their return type. >>*/
+ struct result<This(Expr, State, Visitor)>
+ {
+ /*<< Get the child. >>*/
+ typedef typename result_of::arg<Expr>::type child_expr;
+
+ /*<< Apply `CalculatorArity` to find the arity of the child. >>*/
+ typedef typename boost::result_of<CalculatorArity(child_expr, State, Visitor)>::type type;
+ };
+
+ template<typename Expr, typename State, typename Visitor>
+ typename result<unary_arity(Expr, State, Visitor)>::type
+ /*<< Transforms have a nested `operator ()` member function. >>*/
+ operator ()(Expr const &, State const &, Visitor &) const
+ {
+ /*<< The `unary_arity` transform doesn't have an interesting
+ runtime counterpart, so just return a default-constructed object
+ of the correct type. >>*/
+ return typename result<unary_arity(Expr, State, Visitor)>::type();
+ }
+};
+
 // A custom transform that returns the arity of a binary
 // calculator expression by finding the maximum of the
-// arities of the two children expressions.
-/*<< All transforms take a Grammar as a template parameter. >>*/
-template<typename Grammar>
-struct binary_max
- /*<< All transforms must inherit from the `Grammar`, so that the transform
- IS-A `Grammar`, and matches the same expressions that `Grammar` does. >>*/
- : Grammar
+// arities of the mpl::int_<2> children expressions.
+struct binary_arity
+ /*<< All custom transforms should inherit from
+ callable. In some cases, (e.g., when the transform
+ is a template), it is also necessary to specialize
+ the proto::is_callable<> trait. >>*/
+ : callable
 {
- template<typename Expr, typename State, typename Visitor>
- /*<< Transforms have a nested `apply<>` for calculating their return type. >>*/
- struct apply
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename Expr, typename State, typename Visitor>
+ /*<< Transforms have a nested `result<>` for calculating their return type. >>*/
+ struct result<This(Expr, State, Visitor)>
     {
- /*<< Apply `Grammar`'s transform. This is what makes it possible to chain transforms. >>*/
- typedef typename mpl::apply_wrap3<Grammar, Expr, State, Visitor>::type expr_type;
- /*<< After applying `Grammar`'s transform, the children expressions have been
- replaced with their arities. >>*/
- typedef typename result_of::left<expr_type>::type left_arity;
- typedef typename result_of::right<expr_type>::type right_arity;
+ /*<< Get the left and right children. >>*/
+ typedef typename result_of::left<Expr>::type left_expr;
+ typedef typename result_of::right<Expr>::type right_expr;
+
+ /*<< Apply `CalculatorArity` to find the arity of the left and right children. >>*/
+ typedef typename boost::result_of<CalculatorArity(left_expr, State, Visitor)>::type left_arity;
+ typedef typename boost::result_of<CalculatorArity(right_expr, State, Visitor)>::type right_arity;
+
         /*<< The return type is the maximum of the children's arities. >>*/
         typedef typename mpl::max<left_arity, right_arity>::type type;
     };
 
     template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
+ typename result<binary_arity(Expr, State, Visitor)>::type
     /*<< Transforms have a nested `call()` member function. >>*/
- call(Expr const &, State const &, Visitor &)
+ operator ()(Expr const &, State const &, Visitor &) const
     {
- /*<< Usually, the `call()` member function invokes the `Grammar`'s `call()` function,
- as `Grammar::call(expr,state,visitor)`, but this transform doesn't have an interesting
- runtime counterpart, so just return a default-constructed object of the correct type. >>*/
- return typename apply<Expr, State, Visitor>::type();
+ /*<< The `binary_arity` transform doesn't have an interesting
+ runtime counterpart, so just return a default-constructed object
+ of the correct type. >>*/
+ return typename result<binary_arity(Expr, State, Visitor)>::type();
     }
 };
 //]
@@ -91,76 +140,98 @@
 terminal< placeholder2 >::type const _2 = {{}};
 
 //[ CalculatorArityGrammar
-struct CalculatorGrammar
+struct CalculatorArity
   : or_<
- transform::always< terminal< placeholder1 >, mpl::int_<1> >
- , transform::always< terminal< placeholder2 >, mpl::int_<2> >
- , transform::always< terminal< _ >, mpl::int_<0> >
- , transform::arg< unary_expr< _, CalculatorGrammar > >
- , binary_max< binary_expr< _, CalculatorGrammar, CalculatorGrammar > >
+ when< terminal< placeholder1 >, mpl::int_<1>() >
+ , when< terminal< placeholder2 >, mpl::int_<2>() >
+ , when< terminal<_>, mpl::int_<0>() >
+ , when< unary_expr<_, _>, unary_arity >
+ , when< binary_expr<_, _, _>, binary_arity >
+ >
+{};
+//]
+
+//[ CalcArity
+struct CalcArity
+ : or_<
+ when< terminal< placeholder1 >,
+ mpl::int_<1>()
+ >
+ , when< terminal< placeholder2 >,
+ mpl::int_<2>()
+ >
+ , when< terminal<_>,
+ mpl::int_<0>()
+ >
+ , when< unary_expr<_, CalcArity>,
+ CalcArity(_arg)
+ >
+ , when< binary_expr<_, CalcArity, CalcArity>,
+ mpl::max<CalcArity(_left),
+ CalcArity(_right)>()
+ >
>
 {};
 //]
 
+// BUGBUG find workaround for this
+#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+#define _pop_front(x) call<_pop_front(x)>
+#define _arg(x) call<_arg(x)>
+#endif
+
 //[ AsArgList
 // This transform matches function invocations such as foo(1,'a',"b")
 // and transforms them into Fusion cons lists of their arguments. In this
 // case, the result would be cons(1, cons('a', cons("b", nil()))).
 struct ArgsAsList
- /*<< Use a `branch<>` transform to use `fusion::nil` as the initial
- state of this transformation. >>*/
- : transform::branch<
- /*<< Use a `reverse_fold<>` transform to iterate over the children
- of this node in reverse order, building a fusion list from back to
- front. >>*/
- transform::reverse_fold<
- /*<< The `Grammar` we're matching is a function invocation. >>*/
- function<
- /*<< The first child expression of a `function<>` node is the
- function being invoked. We don't want that in our list, so use
- the `state<>` transform to effectively skip it. (Recall that
- we're building a list in the state parameter, and that the
- `state<>` transform just returns the state unmodified. So this
- says to match a `terminal<>` but to not add it to the list.) >>*/
- transform::state<terminal<_> >
- /*<< We use `vararg<>` here because the function expression we're
- matching can have an arbitrary number of arguments. >>*/
- , vararg<
- /*<< The `list<>` transform puts the rest of the function
- arguments in a fusion cons list. >>*/
- transform::list<
- /*<< The arguments to the function are terminals.
- Extract the argument from each terminal before putting
- them into the list. >>*/
- transform::arg<terminal<_> >
- >
- >
- >
- >
- /*<< Here is the initial state used by this transform. >>*/
- , fusion::nil
- >
+ : when<
+ function<terminal<_>, vararg<terminal<_> > >
+ /*<< Use a `reverse_fold<>` transform to iterate over the children
+ of this node in reverse order, building a fusion list from back to
+ front. >>*/
+ , reverse_fold<
+ /*<< The first child expression of a `function<>` node is the
+ function being invoked. We don't want that in our list, so use
+ `pop_front()` to remove it. >>*/
+ _pop_front(_)
+ /*<< `nil` is the initial state used by the `reverse_fold<>`
+ transform. >>*/
+ , fusion::nil()
+ /*<< Put the rest of the function arguments in a fusion cons
+ list. >>*/
+ , fusion::cons<_arg, _state>(_arg, _state)
+ >
+ >
 {};
 //]
 
 //[ FoldTreeToList
-// This grammar describes what counts as the terminals in expressions
-// of the form (_1=1,'a',"b"), which will be flattened using
-// reverse_fold_tree<> below.
-struct Terminals
- : or_<
- transform::arg<transform::right<assign<_, terminal<_> > > >
- , transform::arg<terminal<_> >
- >
-{};
-
 // This transform matches expressions of the form (_1=1,'a',"b")
 // (note the use of the comma operator) and transforms it into a
 // Fusion cons list of their arguments. In this case, the result
 // would be cons(1, cons('a', cons("b", nil()))).
 struct FoldTreeToList
- /*<< Fold all terminals that are separated by commas into a Fusion cons list. >>*/
- : transform::reverse_fold_tree<tag::comma, transform::list<Terminals>, fusion::nil>
+ : or_<
+ // This grammar describes what counts as the terminals in expressions
+ // of the form (_1=1,'a',"b"), which will be flattened using
+ // reverse_fold_tree<> below.
+ when<assign<_, terminal<_> >
+ , _arg(_right)
+ >
+ , when<terminal<_>
+ , _arg
+ >
+ , when<
+ comma<FoldTreeToList, FoldTreeToList>
+ /*<< Fold all terminals that are separated by commas into a Fusion cons list. >>*/
+ , reverse_fold_tree<
+ _
+ , fusion::nil()
+ , fusion::cons<FoldTreeToList, _state>(FoldTreeToList, _state)
+ >
+ >
+ >
 {};
 //]
 
@@ -169,12 +240,14 @@
 // them to doubles.
 struct Promote
   : or_<
- /*<< Match a `terminal<float>`, then construct a `terminal<double>::type` with the `float`. >>*/
- transform::construct<terminal<float>, terminal<double>::type(transform::arg<_>) >
- , terminal<_>
- /*<< `nary_expr<>` has a pass-through transform which will transform each child
- sub-expression using the `Promote` transform. >>*/
- , nary_expr<_, vararg<Promote> >
+ /*<< Match a `terminal<float>`, then construct a
+ `terminal<double>::type` with the `float`. >>*/
+ when<terminal<float>, terminal<double>::type(_arg) >
+ , when<terminal<_> >
+ /*<< `nary_expr<>` has a pass-through transform which
+ will transform each child sub-expression using the
+ `Promote` transform. >>*/
+ , when<nary_expr<_, vararg<Promote> > >
>
 {};
 //]
@@ -187,40 +260,77 @@
 // `make_pair_(1, 3.14)` and actually builds a `std::pair<>`
 // from the arguments.
 struct MakePair
- : transform::construct<
+ : when<
         /*<< Match expressions like `make_pair_(1, 3.14)` >>*/
         function<terminal<make_pair_tag>, terminal<_>, terminal<_> >
       /*<< Return `std::pair<F,S>(f,s)` where `f` and `s` are the
- first and second arguments to the lazy `make_pair_()` function >>*/
- , std::pair<
- transform::arg<transform::arg_c<_, 1> >
- , transform::arg<transform::arg_c<_, 2> >
- >(
- transform::arg<transform::arg_c<_, 1> >
- , transform::arg<transform::arg_c<_, 2> >
- )
+ first and second arguments to the lazy `make_pair_()` function.
+ (This uses `proto:::make<>` under the covers to evaluate the
+ transform.)>>*/
+ , std::pair<_arg(_arg1), _arg(_arg2)>(_arg(_arg1), _arg(_arg2))
>
 {};
 //]
 
+namespace lazy_make_pair2
+{
+ //[ LazyMakePair2
+ struct make_pair_tag {};
+ terminal<make_pair_tag>::type const make_pair_ = {{}};
+
+ // Like std::make_pair(), only as a function object.
+ /*<<Inheriting from `proto::callable` lets Proto know
+ that this is a callable transform, so we can use it
+ without having to wrap it in `proto::call<>`.>>*/
+ struct make_pair : proto::callable
+ {
+ template<typename Sig> struct result;
+
+ template<typename This, typename First, typename Second>
+ struct result<This(First, Second)>
+ {
+ typedef std::pair<First, Second> type;
+ };
+
+ template<typename First, typename Second>
+ std::pair<First, Second>
+ operator()(First const &first, Second const &second) const
+ {
+ return std::make_pair(first, second);
+ }
+ };
+
+ // This transform matches lazy function invocations like
+ // `make_pair_(1, 3.14)` and actually builds a `std::pair<>`
+ // from the arguments.
+ struct MakePair
+ : when<
+ /*<< Match expressions like `make_pair_(1, 3.14)` >>*/
+ function<terminal<make_pair_tag>, terminal<_>, terminal<_> >
+ /*<< Return `make_pair()(f,s)` where `f` and `s` are the
+ first and second arguments to the lazy `make_pair_()` function.
+ (This uses `proto:::call<>` under the covers to evaluate the
+ transform.)>>*/
+ , make_pair(_arg(_arg1), _arg(_arg2))
+ >
+ {};
+ //]
+}
+
+
 //[ NegateInt
 struct NegateInt
- : transform::construct<
- terminal<int>
- , negate<_>(_)
- >
+ : when<terminal<int>, negate<_>(_)>
 {};
 //]
 
 #ifndef BOOST_MSVC
 //[ SquareAndPromoteInt
 struct SquareAndPromoteInt
- : transform::construct<
+ : when<
         terminal<int>
- , multiplies<terminal<long>::type, terminal<long>::type>::type(
- terminal<long>::type(transform::arg<_>)
- , terminal<long>::type(transform::arg<_>)
- )
+ , multiplies<terminal<long>::type, terminal<long>::type>::type
+ (terminal<long>::type(_arg), terminal<long>::type(_arg))
>
 {};
 //]
@@ -231,23 +341,27 @@
     //[ CalculatorArityTest
     int i = 0; // not used, dummy state and visitor parameter
 
- std::cout << CalculatorGrammar::call( lit(100) * 200, i, i) << '\n';
- std::cout << CalculatorGrammar::call( (_1 - _1) / _1 * 100, i, i) << '\n';
- std::cout << CalculatorGrammar::call( (_2 - _1) / _2 * 100, i, i) << '\n';
+ std::cout << CalculatorArity()( lit(100) * 200, i, i) << '\n';
+ std::cout << CalculatorArity()( (_1 - _1) / _1 * 100, i, i) << '\n';
+ std::cout << CalculatorArity()( (_2 - _1) / _2 * 100, i, i) << '\n';
     //]
 
- BOOST_CHECK_EQUAL(0, CalculatorGrammar::call( lit(100) * 200, i, i));
- BOOST_CHECK_EQUAL(1, CalculatorGrammar::call( (_1 - _1) / _1 * 100, i, i));
- BOOST_CHECK_EQUAL(2, CalculatorGrammar::call( (_2 - _1) / _2 * 100, i, i));
+ BOOST_CHECK_EQUAL(0, CalculatorArity()( lit(100) * 200, i, i));
+ BOOST_CHECK_EQUAL(1, CalculatorArity()( (_1 - _1) / _1 * 100, i, i));
+ BOOST_CHECK_EQUAL(2, CalculatorArity()( (_2 - _1) / _2 * 100, i, i));
+
+ BOOST_CHECK_EQUAL(0, CalcArity()( lit(100) * 200, i, i));
+ BOOST_CHECK_EQUAL(1, CalcArity()( (_1 - _1) / _1 * 100, i, i));
+ BOOST_CHECK_EQUAL(2, CalcArity()( (_2 - _1) / _2 * 100, i, i));
 
     using boost::fusion::cons;
     using boost::fusion::nil;
- cons<int, cons<char, cons<char const (&)[2]> > > args(ArgsAsList::call( _1(1, 'a', "b"), i, i ));
+ cons<int, cons<char, cons<std::string> > > args(ArgsAsList()( _1(1, 'a', std::string("b")), i, i ));
     BOOST_CHECK_EQUAL(args.car, 1);
     BOOST_CHECK_EQUAL(args.cdr.car, 'a');
     BOOST_CHECK_EQUAL(args.cdr.cdr.car, std::string("b"));
 
- cons<int, cons<char, cons<char const (&)[2]> > > lst(FoldTreeToList::call( (_1 = 1, 'a', "b"), i, i ));
+ cons<int, cons<char, cons<std::string> > > lst(FoldTreeToList()( (_1 = 1, 'a', std::string("b")), i, i ));
     BOOST_CHECK_EQUAL(lst.car, 1);
     BOOST_CHECK_EQUAL(lst.cdr.car, 'a');
     BOOST_CHECK_EQUAL(lst.cdr.cdr.car, std::string("b"));
@@ -255,13 +369,13 @@
     plus<
         terminal<double>::type
       , terminal<double>::type
- >::type p = Promote::call( lit(1.f) + 2.f, i, i );
+ >::type p = Promote()( lit(1.f) + 2.f, i, i );
 
     //[ LazyMakePairTest
     int j = 0; // not used, dummy state and visitor parameter
 
- std::pair<int, double> p2 = MakePair::call( make_pair_(1, 3.14), j, j );
-
+ std::pair<int, double> p2 = MakePair()( make_pair_(1, 3.14), j, j );
+
     std::cout << p2.first << std::endl;
     std::cout << p2.second << std::endl;
     //]
@@ -269,13 +383,20 @@
     BOOST_CHECK_EQUAL(p2.first, 1);
     BOOST_CHECK_EQUAL(p2.second, 3.14);
 
- NegateInt::call(lit(1), i, i);
+ std::pair<int, double> p3 = lazy_make_pair2::MakePair()( lazy_make_pair2::make_pair_(1, 3.14), j, j );
+
+ std::cout << p3.first << std::endl;
+ std::cout << p3.second << std::endl;
+
+ BOOST_CHECK_EQUAL(p3.first, 1);
+ BOOST_CHECK_EQUAL(p3.second, 3.14);
+
+ NegateInt()(lit(1), i, i);
 #ifndef BOOST_MSVC
- SquareAndPromoteInt::call(lit(1), i, i);
+ SquareAndPromoteInt()(lit(1), i, i);
 #endif
 }
 
-
 using namespace boost::unit_test;
 ///////////////////////////////////////////////////////////////////////////////
 // init_unit_test_suite

Modified: branches/fix-links/libs/xpressive/proto/test/lambda.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/test/lambda.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/test/lambda.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -10,13 +10,14 @@
 #include <boost/mpl/int.hpp>
 #include <boost/mpl/min_max.hpp>
 #include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/identity.hpp>
 #include <boost/mpl/next_prior.hpp>
 #if BOOST_VERSION < 103500
 # include <boost/spirit/fusion/sequence/at.hpp>
 # include <boost/spirit/fusion/sequence/tuple.hpp>
 namespace boost { namespace fusion { namespace result_of { using namespace meta; }}}
 #else
-# include <boost/fusion/include/tuple.hpp>
+# include <boost/fusion/tuple.hpp>
 #endif
 #include <boost/typeof/typeof.hpp>
 #include <boost/typeof/std/sstream.hpp>
@@ -26,9 +27,7 @@
 #include <boost/type_traits/add_reference.hpp>
 #include <boost/xpressive/proto/proto.hpp>
 #include <boost/xpressive/proto/context.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/fold.hpp>
-#include <boost/xpressive/proto/transform/apply.hpp>
+#include <boost/xpressive/proto/transform.hpp>
 #include <boost/test/unit_test.hpp>
 #include <boost/test/floating_point_comparison.hpp>
 
@@ -48,76 +47,61 @@
     typedef I arity;
 };
 
-// Some custom transforms for calculating the max arity of a lambda expression
-template<typename Grammar>
-struct max_arity
- : Grammar
-{
- template<typename Expr, typename State, typename Visitor>
- struct apply
- {
- typedef typename Grammar::template apply<Expr, State, Visitor>::type arity;
- typedef typename mpl::max<arity, State>::type type;
- };
-};
-
-template<typename Grammar>
+template<typename T>
 struct placeholder_arity
- : Grammar
 {
- template<typename Expr, typename, typename>
- struct apply
- : mpl::next<typename proto::result_of::arg<Expr>::type::arity>
- {};
+ typedef typename T::arity type;
 };
 
-using proto::_;
+namespace grammar
+{
+ using namespace proto;
+ using namespace transform;
 
-// The lambda grammar, with the transforms for calculating the max arity
-struct LambdaGrammar
- : proto::or_<
- placeholder_arity< proto::terminal< placeholder<_> > >
- , proto::transform::always< proto::terminal<_>, mpl::int_<0> >
- , proto::transform::fold<
- proto::nary_expr<_, proto::vararg< max_arity< LambdaGrammar > > >
+ // The lambda grammar, with the transforms for calculating the max arity
+ struct Lambda
+ : or_<
+ when< terminal< placeholder<_> >, mpl::next<placeholder_arity<_arg> >() >
+ , when< terminal<_>, mpl::int_<0>() >
+ , when< nary_expr<_, vararg<_> >, fold<_, mpl::int_<0>(), mpl::max<Lambda,_state>()> >
>
- >
-{};
+ {};
+}
 
 // simple wrapper for calculating a lambda expression's arity.
 template<typename Expr>
 struct lambda_arity
- : LambdaGrammar::apply<Expr, mpl::int_<0>, mpl::void_>
+ : boost::result_of<grammar::Lambda(Expr, mpl::void_, mpl::void_)>
 {};
 
 // The lambda context is the same as the default context
 // with the addition of special handling for lambda placeholders
 template<typename Tuple>
 struct lambda_context
+ : proto::callable_context<lambda_context<Tuple> const>
 {
     lambda_context(Tuple const &args)
       : args_(args)
     {}
 
- template<typename Expr, typename EnableIf = void>
- struct eval
- : proto::default_eval<Expr, lambda_context<Tuple> >
+ template<typename Sig>
+ struct result;
+
+ template<typename This, typename I>
+ struct result<This(proto::tag::terminal, placeholder<I> const &)>
+ : fusion::result_of::at<Tuple, I>
     {};
 
- template<typename Expr>
- struct eval<Expr, typename enable_if<proto::matches<Expr, proto::terminal<placeholder<_> > > >::type>
+ template<typename I>
+ typename fusion::result_of::at<Tuple, I>::type
+ operator ()(proto::tag::terminal, placeholder<I> const &) const
     {
- typedef typename proto::result_of::arg<Expr>::type::arity index;
- typedef typename fusion::result_of::at<Tuple, index>::type result_type;
- result_type operator()(Expr const &expr, lambda_context<Tuple> &ctx)
- {
-#if BOOST_VERSION < 103500
- return fusion::at<index::value>(ctx.args_);
-#else
- return fusion::at<index>(ctx.args_);
-#endif
- }
- };
+ #if BOOST_VERSION < 103500
+ return fusion::at<I::value>(this->args_);
+ #else
+ return fusion::at<I>(this->args_);
+ #endif
+ }
 
     Tuple args_;
 };
@@ -139,8 +123,8 @@
       , proto::result_of::eval<T const, lambda_context<fusion::tuple<> > >
>::type nullary_type;
 
- // Define our operator() that evaluates the lambda expression.
- nullary_type operator()() const
+ // Define our operator () that evaluates the lambda expression.
+ nullary_type operator ()() const
     {
         fusion::tuple<> args;
         lambda_context<fusion::tuple<> > ctx(args);
@@ -149,7 +133,7 @@
 
     template<typename A0>
     typename proto::result_of::eval<T const, lambda_context<fusion::tuple<A0 const &> > >::type
- operator()(A0 const &a0) const
+ operator ()(A0 const &a0) const
     {
         fusion::tuple<A0 const &> args(a0);
         lambda_context<fusion::tuple<A0 const &> > ctx(args);
@@ -158,7 +142,7 @@
 
     template<typename A0, typename A1>
     typename proto::result_of::eval<T const, lambda_context<fusion::tuple<A0 const &, A1 const &> > >::type
- operator()(A0 const &a0, A1 const &a1) const
+ operator ()(A0 const &a0, A1 const &a1) const
     {
         fusion::tuple<A0 const &, A1 const &> args(a0, a1);
         lambda_context<fusion::tuple<A0 const &, A1 const &> > ctx(args);

Modified: branches/fix-links/libs/xpressive/proto/test/matches.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/test/matches.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/test/matches.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -11,6 +11,7 @@
 #include <boost/mpl/placeholders.hpp>
 #include <boost/type_traits/is_same.hpp>
 #include <boost/xpressive/proto/proto.hpp>
+#include <boost/xpressive/proto/transform.hpp>
 #include <boost/test/unit_test.hpp>
 
 using namespace boost;
@@ -48,8 +49,8 @@
>
 {};
 
-terminal< std::istream & >::type const cin_ = { std::cin };
-terminal< std::ostream & >::type const cout_ = { std::cout };
+terminal< std::istream & >::type const cin_ = {std::cin};
+terminal< std::ostream & >::type const cout_ = {std::cout};
 
 struct Anything
   : or_<
@@ -130,20 +131,20 @@
     assert_matches< terminal<convertible_to<int> > >( as_arg((int_convertible())) );
     assert_matches< terminal<convertible_to<int> > >( as_expr((int_convertible())) );
 
- assert_matches< if_<is_same<proto::result_of::arg<mpl::_>, int> > >( lit(1) );
- assert_not_matches< if_<is_same<proto::result_of::arg<mpl::_>, int> > >( lit('a') );
+ assert_matches< if_<is_same<_arg, int>() > >( lit(1) );
+ assert_not_matches< if_<is_same<_arg, int>() > >( lit('a') );
 
     assert_matches<
         and_<
             terminal<_>
- , if_<is_same<proto::result_of::arg<mpl::_>, int> >
+ , if_<is_same<_arg, int>() >
>
>( lit(1) );
 
     assert_not_matches<
         and_<
             terminal<_>
- , if_<is_same<proto::result_of::arg<mpl::_>, int> >
+ , if_<is_same<_arg, int>() >
>
>( lit('a') );
 
@@ -155,10 +156,18 @@
     assert_matches< terminal<char const (&)[6]> >( as_arg("hello") );
     assert_matches< terminal<char const (&)[6]> >( as_expr("hello") );
 
+ assert_matches< terminal<char [6]> >( lit("hello") );
+ assert_matches< terminal<char [6]> >( as_arg("hello") );
+ assert_matches< terminal<char [6]> >( as_expr("hello") );
+
     assert_matches< terminal<char const (&)[N]> >( lit("hello") );
     assert_matches< terminal<char const (&)[N]> >( as_arg("hello") );
     assert_matches< terminal<char const (&)[N]> >( as_expr("hello") );
 
+ assert_matches< terminal<char [N]> >( lit("hello") );
+ assert_matches< terminal<char [N]> >( as_arg("hello") );
+ assert_matches< terminal<char [N]> >( as_expr("hello") );
+
     assert_matches< terminal<std::string> >( lit(std::string("hello")) );
     assert_matches< terminal<std::string> >( as_arg(std::string("hello")) );
     assert_matches< terminal<std::string> >( as_expr(std::string("hello")) );
@@ -201,15 +210,15 @@
 
     assert_matches<
         or_<
- if_<is_same<proto::result_of::arg<mpl::_>, char> >
- , if_<is_same<proto::result_of::arg<mpl::_>, int> >
+ if_<is_same<_arg, char>() >
+ , if_<is_same<_arg, int>() >
>
>( lit(1) );
 
     assert_not_matches<
         or_<
- if_<is_same<proto::result_of::arg<mpl::_>, char> >
- , if_<is_same<proto::result_of::arg<mpl::_>, int> >
+ if_<is_same<_arg, char>() >
+ , if_<is_same<_arg, int>() >
>
>( lit(1u) );
 
@@ -244,3 +253,4 @@
 
     return test;
 }
+

Modified: branches/fix-links/libs/xpressive/proto/test/proto_fusion.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/test/proto_fusion.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/test/proto_fusion.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -65,7 +65,7 @@
     {}
 
     template<typename Op>
- void operator()(Op const &op) const
+ void operator ()(Op const &op) const
     {
         this->sout_ << '(' << boost::addressof(op) << ')';
     }
@@ -75,41 +75,43 @@
 
 void test1()
 {
+ using boost::proto::flatten;
+
     std::stringstream sout;
 
     // Test for 1-way branching "tree"
     sout.str("");
- boost::fusion::for_each(!!!!(a_ >> b_), to_string(sout));
+ boost::fusion::for_each(flatten(!!!!(a_ >> b_)), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)", sout.str());
 
     // Tests for 2-way branching trees
     sout.str("");
- boost::fusion::for_each(a_ >> b_ >> c_, to_string(sout));
+ boost::fusion::for_each(flatten(a_ >> b_ >> c_), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b)(c)", sout.str());
 
     sout.str("");
- boost::fusion::for_each(a_ | b_ | c_, to_string(sout));
+ boost::fusion::for_each(flatten(a_ | b_ | c_), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b)(c)", sout.str());
 
     sout.str("");
- boost::fusion::for_each(a_ >> b_ | c_ >> d_, to_string(sout));
+ boost::fusion::for_each(flatten(a_ >> b_ | c_ >> d_), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)(c>>d)", sout.str());
 
     sout.str("");
- boost::fusion::for_each(a_ | b_ >> c_ | d_, to_string(sout));
+ boost::fusion::for_each(flatten(a_ | b_ >> c_ | d_), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b>>c)(d)", sout.str());
 
     sout.str("");
- boost::fusion::for_each(a_ >> b_ | c_ >> d_ | e_ >> f_ >> g_, to_string(sout));
+ boost::fusion::for_each(flatten(a_ >> b_ | c_ >> d_ | e_ >> f_ >> g_), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)(c>>d)(e>>f>>g)", sout.str());
 
     sout.str("");
- boost::fusion::for_each(a_ >> b_ | c_ >> d_ | e_ >> (f_ | g_) >> h_, to_string(sout));
+ boost::fusion::for_each(flatten(a_ >> b_ | c_ >> d_ | e_ >> (f_ | g_) >> h_), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)(c>>d)(e>>f|g>>h)", sout.str());
 
     // Test for n-way branching tree
     sout.str("");
- boost::fusion::for_each(a_(b_(c_ >> d_, e_ | f_), g_ >> h_)(i_), to_string(sout));
+ boost::fusion::for_each(flatten(a_(b_(c_ >> d_, e_ | f_), g_ >> h_)(i_)), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b)(c>>d)(e|f)(g>>h)(i)", sout.str());
 }
 

Modified: branches/fix-links/libs/xpressive/proto/test/proto_fusion_s.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/test/proto_fusion_s.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/test/proto_fusion_s.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -55,7 +55,7 @@
     {}
 
     template<typename Op>
- void operator()(Op const &op) const
+ void operator ()(Op const &op) const
     {
         this->sout_ << '(' << boost::addressof(op.proto_base()) << ')';
     }
@@ -65,6 +65,8 @@
 
 void test1()
 {
+ using boost::proto::flatten;
+
     boost::proto::terminal<char>::type a_ = {'a'};
     boost::proto::terminal<char>::type b_ = {'b'};
     boost::proto::terminal<char>::type c_ = {'c'};
@@ -79,37 +81,37 @@
 
     // Test for 1-way branching "tree"
     sout.str("");
- boost::fusion::for_each_s(!!!!(a_ >> b_), to_string(sout));
+ boost::fusion::for_each_s(flatten(!!!!(a_ >> b_)), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)", sout.str());
 
     // Tests for 2-way branching trees
     sout.str("");
- boost::fusion::for_each_s(a_ >> b_ >> c_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ >> b_ >> c_), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b)(c)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ | b_ | c_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ | b_ | c_), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b)(c)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ >> b_ | c_ >> d_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ >> b_ | c_ >> d_), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)(c>>d)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ | b_ >> c_ | d_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ | b_ >> c_ | d_), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b>>c)(d)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ >> b_ | c_ >> d_ | e_ >> f_ >> g_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ >> b_ | c_ >> d_ | e_ >> f_ >> g_), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)(c>>d)(e>>f>>g)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ >> b_ | c_ >> d_ | e_ >> (f_ | g_) >> h_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ >> b_ | c_ >> d_ | e_ >> (f_ | g_) >> h_), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)(c>>d)(e>>f|g>>h)", sout.str());
 
     // Test for n-way branching tree
     sout.str("");
- boost::fusion::for_each_s(a_(b_(c_ >> d_, e_ | f_), g_ >> h_)(i_), to_string(sout));
+ boost::fusion::for_each_s(flatten(a_(b_(c_ >> d_, e_ | f_), g_ >> h_)(i_)), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b)(c>>d)(e|f)(g>>h)(i)", sout.str());
 }
 
@@ -134,6 +136,8 @@
 
 void test2()
 {
+ using boost::proto::flatten;
+
     My<boost::proto::terminal<char>::type> a_ = {{'a'}};
     My<boost::proto::terminal<char>::type> b_ = {{'b'}};
     My<boost::proto::terminal<char>::type> c_ = {{'c'}};
@@ -148,37 +152,37 @@
 
     // Test for 1-way branching "tree"
     sout.str("");
- boost::fusion::for_each_s(!!!!(a_ >> b_), to_string(sout));
+ boost::fusion::for_each_s(flatten(!!!!(a_ >> b_)), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)", sout.str());
 
     // Tests for 2-way branching trees
     sout.str("");
- boost::fusion::for_each_s(a_ >> b_ >> c_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ >> b_ >> c_), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b)(c)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ | b_ | c_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ | b_ | c_), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b)(c)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ >> b_ | c_ >> d_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ >> b_ | c_ >> d_), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)(c>>d)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ | b_ >> c_ | d_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ | b_ >> c_ | d_), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b>>c)(d)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ >> b_ | c_ >> d_ | e_ >> f_ >> g_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ >> b_ | c_ >> d_ | e_ >> f_ >> g_), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)(c>>d)(e>>f>>g)", sout.str());
 
     sout.str("");
- boost::fusion::for_each_s(a_ >> b_ | c_ >> d_ | e_ >> (f_ | g_) >> h_, to_string(sout));
+ boost::fusion::for_each_s(flatten(a_ >> b_ | c_ >> d_ | e_ >> (f_ | g_) >> h_), to_string(sout));
     BOOST_CHECK_EQUAL("(a>>b)(c>>d)(e>>f|g>>h)", sout.str());
 
     // Test for n-way branching tree
     sout.str("");
- boost::fusion::for_each_s(a_(b_(c_ >> d_, e_ | f_), g_ >> h_)(i_), to_string(sout));
+ boost::fusion::for_each_s(flatten(a_(b_(c_ >> d_, e_ | f_), g_ >> h_)(i_)), to_string(sout));
     BOOST_CHECK_EQUAL("(a)(b)(c>>d)(e|f)(g>>h)(i)", sout.str());
 }
 

Modified: branches/fix-links/libs/xpressive/proto/test/toy_spirit.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/test/toy_spirit.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/test/toy_spirit.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -339,95 +339,86 @@
         bool in_skip_;
     };
 
- // remove_case
- template<typename Grammar>
- struct remove_case;
-
- template<>
- struct remove_case<CharParser>
+ struct as_ichar_parser : proto::callable
     {
         typedef proto::function<
             ianychar_p
           , proto::terminal<char>::type
           , proto::terminal<char>::type
- >::type type;
+ >::type result_type;
 
         template<typename Expr>
- static type call(Expr const &expr)
+ result_type operator()(Expr const &expr) const
         {
             char lo = std::tolower(proto::arg(proto::arg_c<1>(expr)));
             char hi = std::toupper(proto::arg(proto::arg_c<1>(expr)));
- type that = {ichar_, {lo}, {hi}};
+ result_type that = {ichar_, {lo}, {hi}};
             return that;
         }
     };
 
- template<>
- struct remove_case<CharRangeParser>
+ struct as_ichar_range_parser : proto::callable
     {
         typedef proto::function<
             ianychar_range_p
           , proto::terminal<char>::type
           , proto::terminal<char>::type
- >::type type;
+ >::type result_type;
 
         template<typename Expr>
- static type call(Expr const &expr)
+ result_type operator()(Expr const &expr) const
         {
             char lo = proto::arg(proto::arg_c<1>(expr));
             char hi = proto::arg(proto::arg_c<2>(expr));
- type that = {ichar_range_, {lo}, {hi}};
+ result_type that = {ichar_range_, {lo}, {hi}};
             return that;
         }
     };
 
- template<>
- struct remove_case<CharLiteral>
+ struct as_ichar_literal : proto::callable
     {
         typedef proto::function<
             ianychar_p
           , proto::terminal<char>::type
           , proto::terminal<char>::type
- >::type type;
+ >::type result_type;
 
         template<typename Expr>
- static type call(Expr const &expr)
+ result_type operator()(Expr const &expr) const
         {
             char lo = std::tolower(proto::arg(expr));
             char hi = std::toupper(proto::arg(expr));
- type that = {ichar_, {lo}, {hi}};
+ result_type that = {ichar_, {lo}, {hi}};
             return that;
         }
     };
 
- template<>
- struct remove_case<NTBSLiteral>
+ struct as_intbs_literal : proto::callable
     {
         typedef proto::function<
             ianystr_p
           , proto::terminal<std::string>::type
- >::type type;
+ >::type result_type;
 
         template<typename Expr>
- static type call(Expr const &expr)
+ result_type operator()(Expr const &expr) const
         {
- type that = {istr_, {utility::to_istr(proto::arg(expr))}};
+ result_type that = {istr_, {utility::to_istr(proto::arg(expr))}};
             return that;
         }
     };
 
- template<>
- struct remove_case<StdStringLiteral>
+ struct as_istdstring_literal : proto::callable
     {
         typedef proto::function<
             ianystr_p
           , proto::terminal<std::string>::type
- >::type type;
+ >::type result_type;
 
         template<typename Expr>
- static type call(Expr const &expr)
+ result_type operator()(Expr const &expr) const
         {
- type that = {istr_, {utility::to_istr(proto::arg(expr).c_str())}};
+ result_type that = {istr_, {utility::to_istr(proto::arg(expr).c_str())}};
             return that;
         }
     };
@@ -436,31 +427,13 @@
     // Transforms
     ///////////////////////////////////////////////////////////////////////////
 
- template<typename Grammar>
- struct case_sensitive
- : Grammar
+ struct skip_primitives : proto::callable
     {
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : remove_case<Grammar>
- {};
+ template<typename Sig>
+ struct result;
 
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &, Visitor &)
- {
- return apply<Expr, State, Visitor>::call(expr);
- }
- };
-
- template<typename Grammar>
- struct skip_primitives
- : Grammar
- {
- skip_primitives();
-
- template<typename Expr, typename State, typename Visitor>
- struct apply
+ template<typename This, typename Expr, typename State, typename Visitor>
+ struct result<This(Expr, State, Visitor)>
         {
             typedef typename proto::shift_right<
                 typename proto::dereference<State>::type
@@ -469,10 +442,10 @@
         };
 
         template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
+ typename result<void(Expr, State, Visitor)>::type
+ operator()(Expr const &expr, State const &state, Visitor &visitor) const
         {
- typedef typename apply<Expr, State, Visitor>::type type;
+ typedef typename result<void(Expr, State, Visitor)>::type type;
             type that = {{state}, expr};
             return that;
         }
@@ -481,16 +454,17 @@
     ///////////////////////////////////////////////////////////////////////////
     // Grammar
     ///////////////////////////////////////////////////////////////////////////
+ using proto::_;
 
     struct SpiritGrammar;
 
     struct SpiritCaseSensitivePrimitives
       : proto::or_<
- case_sensitive<CharParser>
- , case_sensitive<CharLiteral>
- , case_sensitive<NTBSLiteral>
- , case_sensitive<CharRangeParser>
- , case_sensitive<StdStringLiteral>
+ proto::when<CharParser, as_ichar_parser(_)>
+ , proto::when<CharLiteral, as_ichar_literal(_)>
+ , proto::when<NTBSLiteral, as_intbs_literal(_)>
+ , proto::when<CharRangeParser, as_ichar_range_parser(_)>
+ , proto::when<StdStringLiteral, as_istdstring_literal(_)>
>
     {};
 
@@ -535,7 +509,7 @@
     struct SkipperGrammar
       : proto::or_<
             SpiritComposites<SkipperGrammar>
- , skip_primitives<SpiritPrimitives>
+ , proto::when<SpiritPrimitives, skip_primitives>
>
     {};
 
@@ -546,11 +520,11 @@
     struct no_case_directive
     {
         template<typename Expr>
- typename SpiritGrammar::apply<Expr, mpl::void_, mpl::void_>::type const
+ typename SpiritGrammar::result<void(Expr, mpl::void_, mpl::void_)>::type const
         operator [](Expr const &expr) const
         {
             mpl::void_ null;
- return SpiritGrammar::call(expr, null, null);
+ return SpiritGrammar()(expr, null, null);
         }
     };
 
@@ -565,11 +539,11 @@
         {}
 
         template<typename Expr>
- typename SkipperGrammar::apply<Expr, Skipper, mpl::void_>::type const
+ typename SkipperGrammar::result<void(Expr, Skipper, mpl::void_)>::type const
         operator [](Expr const &expr) const
         {
             mpl::void_ null;
- return SkipperGrammar::call(expr, this->skip_, null);
+ return SkipperGrammar()(expr, this->skip_, null);
         }
     private:
         Skipper skip_;

Modified: branches/fix-links/libs/xpressive/proto/test/toy_spirit2.cpp
==============================================================================
--- branches/fix-links/libs/xpressive/proto/test/toy_spirit2.cpp (original)
+++ branches/fix-links/libs/xpressive/proto/test/toy_spirit2.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// toy_spirit2.cpp
+// toy_spirit3.cpp
 //
 // Copyright 2006 Eric Niebler. Distributed under the Boost
 // Software License, Version 1.0. (See accompanying file
@@ -7,25 +7,25 @@
 
 #include <cctype>
 #include <string>
+#include <cstring>
 #include <iomanip>
 #include <iostream>
+#include <boost/version.hpp>
 #include <boost/assert.hpp>
 #include <boost/mpl/assert.hpp>
 #include <boost/utility/result_of.hpp>
 #include <boost/type_traits/is_same.hpp>
 #include <boost/xpressive/proto/proto.hpp>
-#include <boost/xpressive/proto/transform/arg.hpp>
-#include <boost/xpressive/proto/transform/construct.hpp>
-#include <boost/xpressive/proto/transform/fold_tree.hpp>
-#include <boost/xpressive/proto/transform/list.hpp>
+#include <boost/xpressive/proto/transform.hpp>
 #if BOOST_VERSION < 103500
 # include <boost/spirit/fusion/algorithm/for_each.hpp>
 # include <boost/spirit/fusion/algorithm/fold.hpp>
 # include <boost/spirit/fusion/algorithm/any.hpp>
 #else
-#include <boost/fusion/include/for_each.hpp>
-#include <boost/fusion/include/fold.hpp>
-#include <boost/fusion/include/any.hpp>
+# include <boost/fusion/include/for_each.hpp>
+# include <boost/fusion/include/fold.hpp>
+# include <boost/fusion/include/cons.hpp>
+# include <boost/fusion/include/any.hpp>
 #endif
 #include <boost/test/unit_test.hpp>
 
@@ -70,7 +70,7 @@
             FwdIter tmp = begin;
             std::string::const_iterator istr = str.begin(), estr = str.end();
             for(; istr != estr; ++tmp, istr += 2)
- if(tmp == end || *tmp != *istr && *tmp != *(istr+1))
+ if(tmp == end || (*tmp != *istr && *tmp != *(istr+1)))
                     return false;
             begin = tmp;
             return true;
@@ -101,44 +101,22 @@
         }
     } // namespace utility
 
- // Composite parser that contains a Fusion cons-list of other parsers
- // OR
- // A compiler that compiles an expression and wraps the result in
- // a composite<> wrapper
- template<typename Tag, typename List>
- struct composite
+ template<typename List>
+ struct alternate
     {
- composite(List const &list)
+ explicit alternate(List const &list)
           : elems(list)
         {}
-
         List elems;
     };
 
- template<typename Tag, typename Grammar>
- struct as_composite
- : Grammar
- {
- as_composite();
-
- // The apply<> struct and the call() member are to satisfy the
- // proto compiler/transform protocol
- template<typename Expr, typename State, typename Visitor>
- struct apply
- {
- typedef composite<
- Tag
- , typename Grammar::template apply<Expr, State, Visitor>::type
- > type;
- };
-
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return typename apply<Expr, State, Visitor>::type
- (Grammar::call(expr, state, visitor));
- }
+ template<typename List>
+ struct sequence
+ {
+ explicit sequence(List const &list)
+ : elems(list)
+ {}
+ List elems;
     };
 
     struct char_range
@@ -171,205 +149,111 @@
     struct ichar_range
       : std::pair<char, char>
     {
- ichar_range(char_range const &rng)
- : std::pair<char, char>(rng)
+ ichar_range(char from, char to)
+ : std::pair<char, char>(from, to)
         {}
     };
 
     // The no-case directive
     struct no_case_tag {};
 
- // The no-case transform, applies the tree-transform with
- // mpl::true_ as the visitor.
- template<typename Grammar>
- struct no_case_transform
- : Grammar
+ struct True : mpl::true_ {};
+
+ ///////////////////////////////////////////////////////////////////////////////
+ /// Begin Spirit grammar here
+ ///////////////////////////////////////////////////////////////////////////////
+ namespace grammar
     {
- no_case_transform();
+ using namespace proto;
+ using namespace fusion;
+ using namespace transform;
 
- template<typename Expr, typename State, typename>
- struct apply
- : Grammar::template apply<Expr, State, mpl::true_>
- {};
+ struct SpiritExpr;
 
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &)
- {
- mpl::true_ case_sensitive;
- return Grammar::call(expr, state, case_sensitive);
- }
- };
+ struct AnyChar
+ : terminal<char_tag>
+ {};
 
- // remove_case specializations for stripping case-sensitivity from parsers
- template<typename T, bool CaseSensitive>
- struct remove_case
- {
- typedef T type;
- template<typename U> static U const &call(U const &t)
- {
- return t;
- }
- };
+ struct CharLiteral
+ : terminal<char>
+ {};
 
- template<>
- struct remove_case<char, true>
- {
- typedef ichar type;
- static ichar call(char ch)
- {
- return ichar(ch);
- }
- };
+ struct NTBSLiteral
+ : terminal<char const *>
+ {};
 
- template<>
- struct remove_case<char const *, true>
- {
- typedef istr type;
- static istr call(char const *sz)
- {
- return istr(sz);
- }
- };
+ struct CharParser
+ : function<AnyChar, CharLiteral>
+ {};
 
- template<typename T, std::size_t N>
- struct remove_case<T(&)[N], true>
- : remove_case<char const *, true>
- {};
+ struct CharRangeParser
+ : function<AnyChar, CharLiteral, CharLiteral>
+ {};
 
- template<>
- struct remove_case<char_range, true>
- {
- typedef ichar_range type;
- static ichar_range call(char_range const &rng)
- {
- return ichar_range(rng);
- }
- };
+ struct NoCase
+ : terminal<no_case_tag>
+ {};
 
- // A case-sensitive transform that removes case conditionally, depending on
- // a compile-time flag carried by the visitor.
- template<typename Grammar>
- struct case_sensitive
- : Grammar
- {
- case_sensitive();
+ // The visitor determines the case-sensitivity of the terminals
+ typedef _visitor _icase;
 
- template<typename Expr, typename State, typename Visitor>
- struct apply
- : remove_case<
- typename Grammar::template apply<Expr, State, Visitor>::type
- , Visitor::value
+ // Ugh, would be nice to find a work-around for this:
+ #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
+ #define _arg(x) call<_arg(x)>
+ #define True() make<True()>
+ #endif
+
+ // Extract the arg from terminals
+ struct SpiritTerminal
+ : or_<
+ when< AnyChar, _arg >
+ , when< CharLiteral, if_<_icase, ichar(_arg), _arg> >
+ , when< CharParser, if_<_icase, ichar(_arg(_arg1)), _arg(_arg1)> > // char_('a')
+ , when< NTBSLiteral, if_<_icase, istr(_arg), char const*(_arg)> >
+ , when< CharRangeParser, if_<_icase
+ , ichar_range(_arg(_arg1), _arg(_arg2))
+ , char_range(_arg(_arg1), _arg(_arg2))> > // char_('a','z')
>
         {};
 
- template<typename Expr, typename State, typename Visitor>
- static typename apply<Expr, State, Visitor>::type
- call(Expr const &expr, State const &state, Visitor &visitor)
- {
- return apply<Expr, State, Visitor>::call(Grammar::call(expr, state, visitor));
- }
- };
-
- ///////////////////////////////////////////////////////////////////////////////
- /// Begin ToySpiritGrammar here
- ///////////////////////////////////////////////////////////////////////////////
+ struct FoldToList
+ : reverse_fold_tree<_, nil(), cons<SpiritExpr, _state>(SpiritExpr, _state)>
+ {};
 
- struct ToySpiritGrammar;
+ // sequence rule folds all >>'s together into a list
+ // and wraps the result in a sequence<> wrapper
+ struct SpiritSequence
+ : when< shift_right<SpiritExpr, SpiritExpr>, sequence<FoldToList>(FoldToList) >
+ {};
 
- struct AnyChar
- : proto::terminal<char_tag>
- {};
-
- struct CharLiteral
- : proto::terminal<char>
- {};
-
- struct NTBSLiteral
- : proto::terminal<char const *>
- {};
-
- struct CharParser
- : proto::function<AnyChar, CharLiteral>
- {};
-
- struct CharRangeParser
- : proto::function<AnyChar, CharLiteral, CharLiteral>
- {};
-
- struct NoCase
- : proto::terminal<no_case_tag>
- {};
-
- // Extract the arg from terminals
- struct ToySpiritTerminal
- : proto::or_<
- proto::transform::arg< AnyChar >
- , case_sensitive< proto::transform::arg< CharLiteral > >
- , case_sensitive< proto::transform::arg< NTBSLiteral > >
- , case_sensitive<
- proto::transform::arg< proto::transform::arg_c< CharParser, 1 > > // char_('a')
- >
- , case_sensitive<
- proto::transform::construct< // char_('a','z')
- CharRangeParser
- , char_range(
- proto::transform::arg< proto::transform::arg_c< proto::_, 1 > >
- , proto::transform::arg< proto::transform::arg_c< proto::_, 2 > >
- )
- >
- >
- >
- {};
+ // alternate rule folds all |'s together into a list
+ // and wraps the result in a alternate<> wrapper
+ struct SpiritAlternate
+ : when< bitwise_or<SpiritExpr, SpiritExpr>, alternate<FoldToList>(FoldToList) >
+ {};
 
- // sequence rule folds all >>'s together into a list
- // and wraps the result in a composite<> wrapper
- struct ToySpiritSequence
- : as_composite<
- proto::tag::shift_right
- , proto::transform::reverse_fold_tree<
- proto::tag::shift_right
- , proto::transform::list<ToySpiritGrammar>
- , fusion::nil
- >
- >
- {};
+ // Directives such as no_case are handled here
+ struct SpiritDirective
+ : when< subscript<NoCase, SpiritExpr>, SpiritExpr(_right, _state, True()) >
+ {};
 
- // alternate rule folds all |'s together into a list
- // and wraps the result in a composite<> wrapper
- struct ToySpiritAlternate
- : as_composite<
- proto::tag::bitwise_or
- , proto::transform::reverse_fold_tree<
- proto::tag::bitwise_or
- , proto::transform::list<ToySpiritGrammar>
- , fusion::nil
+ // A SpiritExpr is an alternate, a sequence, a directive or a terminal
+ struct SpiritExpr
+ : or_<
+ SpiritSequence
+ , SpiritAlternate
+ , SpiritDirective
+ , SpiritTerminal
>
- >
- {};
+ {};
 
- // Directives such as no_case are handled here
- struct ToySpiritDirective
- : no_case_transform<
- proto::transform::arg_c<
- proto::subscript< NoCase, ToySpiritGrammar >
- , 1
- >
- >
- {};
+ } // namespace grammar
 
- // A ToySpiritGrammar is an alternate, a sequence, a directive or a terminal
- struct ToySpiritGrammar
- : proto::or_<
- ToySpiritSequence
- , ToySpiritAlternate
- , ToySpiritDirective
- , ToySpiritTerminal
- >
- {};
+ using grammar::SpiritExpr;
+ using grammar::NoCase;
 
     ///////////////////////////////////////////////////////////////////////////////
- /// End ToySpiritGrammar
+ /// End SpiritExpr
     ///////////////////////////////////////////////////////////////////////////////
 
     // Globals
@@ -384,7 +268,7 @@
         {}
 
         template<typename T>
- bool operator()(T const &t) const
+ bool operator ()(T const &t) const
         {
             Iterator tmp = this->first;
             if((*static_cast<Derived const *>(this))(t))
@@ -404,43 +288,43 @@
 
     template<typename Iterator>
     struct parser
- : with_reset<Iterator, parser<Iterator> >
+ : spirit2::with_reset<Iterator, parser<Iterator> >
     {
- typedef with_reset<Iterator, parser<Iterator> > with_reset;
+ typedef spirit2::with_reset<Iterator, parser<Iterator> > with_reset;
 
         parser(Iterator begin, Iterator end)
           : with_reset(begin, end)
         {}
 
-#if BOOST_VERSION < 103500
+ #if BOOST_VERSION < 103500
         template<typename, typename> // used by fusion::fold
         struct apply
         {
             typedef bool type;
         };
-#else
+ #else
         typedef bool result_type; // used by fusion::fold
-#endif
+ #endif
 
         template<typename T>
- bool operator()(T const &t, bool success) const // used by fusion::fold
+ bool operator ()(T const &t, bool success) const // used by fusion::fold
         {
             return success && (*this)(t);
         }
 
         template<typename List>
- bool operator()(composite<proto::tag::bitwise_or, List> const &alternates) const
+ bool operator ()(alternate<List> const &alternates) const
         {
             return fusion::any(alternates.elems, *static_cast<with_reset const *>(this));
         }
 
         template<typename List>
- bool operator()(composite<proto::tag::shift_right, List> const &sequence) const
+ bool operator ()(sequence<List> const &sequence) const
         {
             return fusion::fold(sequence.elems, true, *this);
         }
 
- bool operator()(char_tag ch) const
+ bool operator ()(char_tag ch) const
         {
             if(this->done())
                 return false;
@@ -448,7 +332,7 @@
             return true;
         }
 
- bool operator()(char ch) const
+ bool operator ()(char ch) const
         {
             if(this->done() || ch != *this->first)
                 return false;
@@ -456,7 +340,7 @@
             return true;
         }
 
- bool operator()(ichar ich) const
+ bool operator ()(ichar ich) const
         {
             if(this->done() || !utility::char_icmp(*this->first, ich.lo_, ich.hi_))
                 return false;
@@ -464,17 +348,17 @@
             return true;
         }
 
- bool operator()(char const *sz) const
+ bool operator ()(char const *sz) const
         {
             return utility::string_cmp(sz, this->first, this->second);
         }
 
- bool operator()(istr const &s) const
+ bool operator ()(istr const &s) const
         {
             return utility::string_icmp(s.str_, this->first, this->second);
         }
 
- bool operator()(char_range rng) const
+ bool operator ()(char_range rng) const
         {
             if(this->done() || !utility::in_range(*this->first, rng.first, rng.second))
                 return false;
@@ -482,7 +366,7 @@
             return true;
         }
 
- bool operator()(ichar_range rng) const
+ bool operator ()(ichar_range rng) const
         {
             if(this->done() || !utility::in_irange(*this->first, rng.first, rng.second))
                 return false;
@@ -492,20 +376,20 @@
     };
 
     template<typename Rule, typename Iterator>
- typename enable_if<proto::matches< Rule, ToySpiritGrammar >, bool >::type
+ typename enable_if<proto::matches< Rule, SpiritExpr >, bool >::type
     parse_impl(Rule const &rule, Iterator begin, Iterator end)
     {
         mpl::false_ is_case_sensitive;
         parser<Iterator> parse_fun(begin, end);
- return parse_fun(ToySpiritGrammar::call(rule, 0, is_case_sensitive));
+ return parse_fun(SpiritExpr()(rule, 0, is_case_sensitive));
     }
 
     // 2nd overload provides a short error message for invalid rules
     template<typename Rule, typename Iterator>
- typename disable_if<proto::matches< Rule, ToySpiritGrammar >, bool >::type
+ typename disable_if<proto::matches< Rule, SpiritExpr >, bool >::type
     parse_impl(Rule const &rule, Iterator begin, Iterator end)
     {
- BOOST_MPL_ASSERT((proto::matches<Rule, ToySpiritGrammar>));
+ BOOST_MPL_ASSERT((proto::matches<Rule, SpiritExpr>));
         return false;
     }
 
@@ -519,15 +403,14 @@
 
 }}
 
-using namespace boost;
-
-void test_toy_spirit2()
+void test_toy_spirit3()
 {
- using spirit2::no_case;
+ using boost::spirit2::no_case;
+ using boost::char_;
     std::string hello("abcd");
 
     BOOST_CHECK(
- spirit2::parse(
+ boost::spirit2::parse(
             "abcd"
           , hello.begin()
           , hello.end()
@@ -535,7 +418,7 @@
     );
 
     BOOST_CHECK(
- spirit2::parse(
+ boost::spirit2::parse(
             char_ >> char_('b') >> 'c' >> char_
           , hello.begin()
           , hello.end()
@@ -543,7 +426,7 @@
     );
 
     BOOST_CHECK(
- !spirit2::parse(
+ !boost::spirit2::parse(
             char_ >> char_('b') >> 'c' >> 'D'
           , hello.begin()
           , hello.end()
@@ -551,7 +434,7 @@
     );
 
     BOOST_CHECK(
- spirit2::parse(
+ boost::spirit2::parse(
             char_ >> char_('b') >> 'c' >> 'e'
           | char_ >> no_case[char_('B') >> "C" >> char_('D','Z')]
           , hello.begin()
@@ -568,7 +451,7 @@
 {
     test_suite *test = BOOST_TEST_SUITE("test proto, grammars and tree transforms");
 
- test->add(BOOST_TEST_CASE(&test_toy_spirit2));
+ test->add(BOOST_TEST_CASE(&test_toy_spirit3));
 
     return test;
 }

Modified: branches/fix-links/libs/xpressive/test/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/xpressive/test/Jamfile.v2 (original)
+++ branches/fix-links/libs/xpressive/test/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -13,6 +13,7 @@
         <toolset>msvc-8.0:<define>_CRT_SECURE_NO_DEPRECATE
         <toolset>msvc-9.0:<define>_SCL_SECURE_NO_DEPRECATE
         <toolset>gcc:<cxxflags>-ftemplate-depth-1024
+ <toolset>darwin:<cxxflags>-ftemplate-depth-1024
 # <toolset>gcc:<cxxflags>-W
 # <toolset>gcc:<cxxflags>-Wall
 # <toolset>msvc:<cxxflags>-W4
@@ -56,6 +57,7 @@
          [ run test_symbols.cpp ]
          [ run test_dynamic.cpp ]
          [ run test_dynamic_grammar.cpp ]
+ [ run test_skip.cpp ]
          [ link multiple_defs1.cpp multiple_defs2.cpp : : multiple_defs ]
          [ compile test_basic_regex.cpp ]
          [ compile test_match_results.cpp ]

Modified: branches/fix-links/status/Jamfile.v2
==============================================================================
--- branches/fix-links/status/Jamfile.v2 (original)
+++ branches/fix-links/status/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,6 +24,7 @@
 
 # Tests from Jamfiles in individual library test subdirectories
 # Please keep these in alphabetic order by test-suite name
+build-project ../libs/accumulators/test ; # test-suite accumulators
 build-project ../libs/algorithm/minmax/test ; # test-suite algorith/minmax
 build-project ../libs/algorithm/string/test ; # test-suite algorithm/string
 build-project ../libs/asio/test ; # test-suite asio
@@ -86,6 +87,8 @@
 build-project ../libs/tuple/test ; # test-suite tuple
 build-project ../libs/type_traits/test ; # test-suite type_traits
 build-project ../libs/typeof/test ; # test-suite typeof
+build-project ../libs/unordered/test/unordered ; # test-suite unordered
+build-project ../libs/unordered/test/exception ; # test-suite unordered-exception
 build-project ../libs/utility/enable_if/test ; # test-suite utility/enable_if
 build-project ../libs/utility/test ; # test-suite utility
 build-project ../libs/variant/test ; # test-suite variant

Modified: branches/fix-links/status/explicit-failures-markup.xml
==============================================================================
--- branches/fix-links/status/explicit-failures-markup.xml (original)
+++ branches/fix-links/status/explicit-failures-markup.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -37,6 +37,27 @@
 
     <!-- /////////////// Libraries /////////////// -->
 
+ <!-- accumulators -->
+ <library name="accumulators">
+ <mark-unusable>
+ <toolset name="sun-5.7"/>
+ <toolset name="sun-5.8"/>
+ <toolset name="sun-5.9"/>
+ <toolset name="borland-*"/>
+ </mark-unusable>
+ <mark-expected-failures>
+ <test name="tail_variate_means"/>
+ <test name="weighted_tail_variate_means"/>
+ <toolset name="gcc-4.2.1*"/>
+ <note author="Boris Gubenko" refid="42"/>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="weighted_kurtosis"/>
+ <toolset name="acc"/>
+ <note author="Boris Gubenko" refid="38"/>
+ </mark-expected-failures>
+ </library>
+
     <!-- minmax -->
     <library name="algorithm/minmax">
       <mark-unusable>
@@ -1504,14 +1525,7 @@
         <mark-expected-failures>
             <test name="member_ccs"/>
             <test name="member_ccs_exact"/>
- <toolset name="acc*"/>
- <toolset name="darwin-4.0.1"/>
- <toolset name="gcc-*"/>
- <toolset name="hp_cxx*"/>
- <toolset name="intel*"/>
- <toolset name="msvc-*_64"/>
- <toolset name="msvc-*wm*"/>
- <toolset name="pathscale-*"/>
+ <toolset name="*"/>
             <note author="Tobias Schwinger">
               Not all compilers/platforms implement nonstandard calling conventions.
               <hr/>
@@ -1522,14 +1536,7 @@
         <mark-expected-failures>
             <test name="nonmember_ccs"/>
             <test name="nonmember_ccs_exact"/>
- <toolset name="acc*"/>
- <toolset name="darwin-4.0.1"/>
- <toolset name="gcc-*"/>
- <toolset name="hp_cxx*"/>
- <toolset name="intel*"/>
- <toolset name="msvc-*_64"/>
- <toolset name="msvc-*wm*"/>
- <toolset name="pathscale-*"/>
+ <toolset name="*"/>
             <note author="Tobias Schwinger">
               Not all compilers/platforms implement nonstandard calling conventions.
             </note>
@@ -1865,19 +1872,45 @@
 
     <!-- iostreams -->
     <library name="iostreams">
- <mark-unusable>
- <toolset name="sunpro-5_3-sunos"/>
- <toolset name="dmc-8_43-stlport-4_5_3"/>
- <note author="Jonathan Turkanis" refid="17"/>
- </mark-unusable>
         <mark-expected-failures>
- <!-- STLPort bug -->
+ <test name="auto_close_test"/>
+ <test name="component_access_test"/>
+ <test name="compose_test"/>
+ <test name="counter_test"/>
+ <test name="filtering_stream_test"/>
+ <test name="flush_test"/>
+ <test name="line_filter_test"/>
+ <test name="newline_test"/>
+ <test name="pipeline_test"/>
+ <test name="regex_filter_test"/>
+ <test name="restrict_test"/>
             <test name="seekable_file_test"/>
- <toolset name="borland-5.6*"/>
- <toolset name="iw-7_1-vc6-stlp-4_5_3"/>
+ <test name="seekable_filter_test"/>
+ <test name="sequence_test"/>
+ <test name="slice_test"/>
+ <test name="stdio_filter_test"/>
+ <test name="tee_test"/>
+ <test name="wide_stream_test"/>
+ <toolset name="sun-5.7"/>
+ <toolset name="sun-5.8"/>
+ <note author="Jonathan Turkanis" date="09 Jan 2008" refid="2"/>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="bzip2_test"/>
+ <toolset name="gcc-3.4.3_sunos"/>
+ <note author="Caleb Epstein">
+ No bzip2 support on the testing machine and no way to
+ disable this test with BBv2 at present.
+ </note>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="bzip2_test"/>
+ <test name="file_descriptor_test"/>
+ <test name="mapped_file_test"/>
             <toolset name="*como-4_3_3*"/>
- <toolset name="*stlport"/>
- <note author="Jonathan Turkanis" refid="4"/>
+ <note author="Jonathan Turkanis">
+ compiler can't compile "windows.h" in strict mode
+ </note>
         </mark-expected-failures>
         <mark-expected-failures>
             <!-- Insufficient wide character support -->
@@ -1891,6 +1924,7 @@
             <toolset name="gcc-3.4.5_mingw"/>
             <toolset name="*cygwin*"/>
             <toolset name="gcc-3.3.6-osf1"/>
+ <toolset name="gcc-3.4.2_hpux_pa_risc"/>
             <note author="Jonathan Turkanis" refid="19"/>
         </mark-expected-failures>
         <mark-expected-failures>
@@ -1901,34 +1935,35 @@
             <note author="Jim Douglas" date="12 Feb 06" refid="36"/>
         </mark-expected-failures>
         <mark-expected-failures>
- <test name="bzip2_test"/>
- <test name="file_descriptor_test"/>
- <test name="mapped_file_test"/>
- <toolset name="*como-4_3_3*"/>
+ <test name="compose_test"/>
+ <toolset name="msvc-6.5_stlport4"/>
             <note author="Jonathan Turkanis">
- compiler can't compile "windows.h" in strict mode
+ These six tests pass individually but cause a compiler stack overflow
+ when compiled as a group
             </note>
         </mark-expected-failures>
         <mark-expected-failures>
- <test name="gzip_test"/>
- <test name="zlib_test"/>
- <toolset name="como-4_3_3-vc7_1"/>
- <note author="Jonathan Turkanis">
- The failure reflects a problem with the build system: the zlib
- object files are generated in the wrong directory.
+ <test name="compose_test"/>
+ <toolset name="gcc-3.4.6_linux_ia64"/>
+ <note author="Boris Gubenko">
+ On this platform, linking this test takes longer than 10 minutes
+ which is a time limit specified for bjam. When linked manually,
+ the test succeeds.
             </note>
         </mark-expected-failures>
- <mark-expected-failures>
- <test name="stdio_filter_test"/>
- <toolset name="*como-4_3_3*"/>
- <note author="Jonathan Turkanis" refid="0"/>
- </mark-expected-failures>
         <mark-expected-failures reason="?">
             <test name="direct_adapter_test"/>
             <test name="gzip_test"/>
             <toolset name="gcc-2.95.3-linux"/>
             <note author="Jonathan Turkanis" refid="29"/>
         </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="file_descriptor_test"/>
+ <toolset name="gcc-cygwin-3.4.4"/>
+ <note author="Vladimir Prus">
+ The test fails at runtime for unknown reasons.
+ </note>
+ </mark-expected-failures>
         <mark-expected-failures reason="?">
             <test name="file_descriptor_test"/>
             <toolset name="gcc-3_4_4-cygwin"/>
@@ -1942,17 +1977,28 @@
             <toolset name="msvc-6.5*"/>
             <toolset name="msvc-7.0"/>
             <toolset name="gcc-2.95.3*"/>
+ <toolset name="sun-5.*"/>
+ <toolset name="vacpp"/>
             <note author="Jonathan Turkanis" refid="2"/>
         </mark-expected-failures>
         <mark-expected-failures>
- <test name="finite_state_filter_test"/>
- <toolset name="cw-9.4"/>
- <note author="Jonathan Turkanis" date="20 Dec 06">
- I'm not sure whether CodeWarrior is correct to report that the member
- in question is inaccessible; however, when the member is made public
- an internal error occur that I have not been able to fix, so for
- now the question is moot.
- </note>
+ <test name="finite_state_filter_test"/>
+ <toolset name="cw-9.4"/>
+ <note author="Jonathan Turkanis" date="20 Dec 06">
+ I'm not sure whether CodeWarrior is correct to report that the member
+ in question is inaccessible; however, when the member is made public
+ an internal error occur that I have not been able to fix, so for
+ now the question is moot.
+ </note>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="gzip_test"/>
+ <test name="zlib_test"/>
+ <toolset name="como-4_3_3-vc7_1"/>
+ <note author="Jonathan Turkanis">
+ The failure reflects a problem with the build system: the zlib
+ object files are generated in the wrong directory.
+ </note>
         </mark-expected-failures>
         <mark-expected-failures>
             <test name="mapped_file_test"/>
@@ -1962,37 +2008,54 @@
             </note>
         </mark-expected-failures>
         <mark-expected-failures>
- <test name="compose_test"/>
- <toolset name="borland-5.6*"/>
- <note author="Jonathan Turkanis">
- Fails to compile on some installations but not others; may
- depend on which compiler updates have been installed
+ <test name="restrict_test"/>
+ <toolset name="vacpp"/>
+ <note author="Jonathan Turkanis" date="06 Jan 2008">
+ "restrict" is treated as a keyword on this platform (as in C99);
+ use the alias "slice" instead, defined in
+ "boost/iostreams/slice.hpp."
             </note>
         </mark-expected-failures>
         <mark-expected-failures>
- <test name="compose_test"/>
- <toolset name="msvc-6.5_stlport4"/>
- <note author="Jonathan Turkanis">
- These six tests pass individually but cause a compiler stack overflow
- when compiled as a group
+ <!-- STLPort bug -->
+ <test name="seekable_file_test"/>
+ <toolset name="borland-5.6*"/>
+ <toolset name="iw-7_1-vc6-stlp-4_5_3"/>
+ <toolset name="*como-4_3_3*"/>
+ <toolset name="sun-5.*"/>
+ <toolset name="*stlport"/>
+ <toolset name="pgi-7.0"/>
+ <note author="Jonathan Turkanis" refid="4"/>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="stdio_filter_test"/>
+ <toolset name="*como-4_3_3*"/>
+ <note author="Jonathan Turkanis" refid="0"/>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="stream_offset_64bit_test"/>
+ <toolset name="borland-*"/>
+ <note author="Jonathan Turkanis" date="04 Jan 2008">
+ The Borland runtime library defines fpos_t as a 32-bit long,
+ incapable of storing large offsets (see stdio.h)
             </note>
         </mark-expected-failures>
         <mark-expected-failures>
- <test name="bzip2_test"/>
- <toolset name="gcc-3.4.3_sunos"/>
- <note author="Caleb Epstein">
- No bzip2 support on the testing machine and no way to
- disable this test with BBv2 at present.
+ <test name="stream_offset_64bit_test"/>
+ <toolset name="sun-5.*"/>
+ <note author="Jonathan Turkanis" date="06 Jan 2008">
+ In STLPort, streampos consists of a long together with a
+ conversion state; on this platform, long is a 32-bit type
             </note>
         </mark-expected-failures>
         <mark-expected-failures>
- <test name="file_descriptor_test"/>
- <toolset name="gcc-cygwin-3.4.4"/>
- <note author="Vladimir Prus">
- The test fails at runtime for unknown reasons.
+ <test name="stream_offset_64bit_test"/>
+ <toolset name="vacpp*"/>
+ <note author="Jonathan Turkanis" date="09 Jan 2008">
+ This platform uses the Dinkumware fpos, but std::streamsize and
+ std::fpos_t are both 32-bit types.
             </note>
         </mark-expected-failures>
-
     </library>
 
     <!-- lambda -->
@@ -4091,6 +4154,13 @@
                 were split into multiple source files.
                 </note>
             </mark-failure>
+ <mark-failure>
+ <toolset name="gcc-3.4.6_linux_ia64"/>
+ <note author="Boris Gubenko">
+ It looks like a compiler issue: the test fails with gcc 3.4.6
+ and succeeds with gcc 4.2.1.
+ </note>
+ </mark-failure>
         </test>
     </library>
 
@@ -4355,8 +4425,8 @@
             <toolset name="hp_cxx-65*"/>
             <toolset name="msvc-6.5*"/>
             <toolset name="msvc-7.0*"/>
+ <toolset name="pgi-7*"/>
             <toolset name="sun-5*"/>
- <toolset name="hp_cxx-65*"/>
             <note author="Andreas Huber" refid="17"/>
         </mark-unusable>
         <mark-unusable>
@@ -4406,19 +4476,23 @@
             <test name="CameraExample"/>
             <test name="CustomReactionTest*"/>
             <test name="PerformanceExample"/>
- <test name="TransitionTest*"/>
             <toolset name="cw-9*"/>
             <note author="Andreas Huber" refid="29"/>
         </mark-expected-failures>
         <mark-expected-failures reason="?">
             <test name="CustomReactionTest*"/>
- <test name="TransitionTest*"/>
             <toolset name="hp_cxx-71*"/>
             <note author="Andreas Huber" refid="29"/>
         </mark-expected-failures>
         <mark-expected-failures reason="?">
             <test name="TransitionTest*"/>
+ <toolset name="cw-9*"/>
+ <toolset name="hp_cxx-71*"/>
             <toolset name="intel-linux-9.1"/>
+ <toolset name="intel-linux-10.0"/>
+ <toolset name="intel-darwin-9.1"/>
+ <toolset name="intel-darwin-10.0"/>
+ <toolset name="vacpp-8.0"/>
             <note author="Andreas Huber" refid="29"/>
         </mark-expected-failures>
         <mark-expected-failures reason="?">
@@ -4428,7 +4502,6 @@
             <note author="Andreas Huber" refid="29"/>
         </mark-expected-failures>
         <mark-expected-failures reason="?">
- <test name="TransitionTest*"/>
             <test name="InvalidTransitionTest1Relaxed"/>
             <test name="StopWatchExample"/>
             <toolset name="vacpp-8.0"/>
@@ -4450,6 +4523,8 @@
         </mark-expected-failures>
         <mark-expected-failures reason="?">
             <test name="DllTest*"/>
+ <toolset name="intel-darwin-9.1"/>
+ <toolset name="intel-darwin-10.0"/>
             <toolset name="msvc-8.0~wm5~stlport5.1"/>
             <note author="Andreas Huber" refid="29"/>
         </mark-expected-failures>

Modified: branches/fix-links/tools/bcp/add_path.cpp
==============================================================================
--- branches/fix-links/tools/bcp/add_path.cpp (original)
+++ branches/fix-links/tools/bcp/add_path.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -40,11 +40,16 @@
 void bcp_implementation::add_directory(const fs::path& p)
 {
    //
- // don't add files created by build system
+ // Don't add files created by build system:
    //
    if((p.leaf() == "bin") || (p.leaf() == "bin-stage"))
       return;
    //
+ // Don't add version control directories:
+ //
+ if((p.leaf() == "CVS") || (p.leaf() == ".svn"))
+ return;
+ //
    // don't add directories not under version control:
    //
    if(m_cvs_mode && !fs::exists(m_boost_path / p / "CVS/Entries"))

Modified: branches/fix-links/tools/boostbook/doc/reference.dtdxml
==============================================================================
--- branches/fix-links/tools/boostbook/doc/reference.dtdxml (original)
+++ branches/fix-links/tools/boostbook/doc/reference.dtdxml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2513,6 +2513,8 @@
 <content-model-expanded>
   <sequence-group>
     <element-name name="default" occurrence="?"/>
+ <element-name name="purpose" occurrence="?"/>
+ <element-name name="description" occurrence="?"/>
   </sequence-group>
 </content-model-expanded>
 <content-model>

Modified: branches/fix-links/tools/boostbook/doc/reference.xml
==============================================================================
--- branches/fix-links/tools/boostbook/doc/reference.xml (original)
+++ branches/fix-links/tools/boostbook/doc/reference.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2102,7 +2102,7 @@
       <refpurpose>A single value of an enumeration</refpurpose>
     </refnamediv>
     <refsynopsisdiv>enumvalue ::=
- (<link linkend="boostbook.dtd.default">default</link>?)
+ (<link linkend="boostbook.dtd.default">default</link>?, <link linkend="boostbook.dtd.purpose">purpose</link>?, <link linkend="boostbook.dtd.description">description</link>?)
 </refsynopsisdiv>
     <refsection>
       <title>Attributes</title>

Modified: branches/fix-links/tools/boostbook/dtd/boostbook.dtd
==============================================================================
--- branches/fix-links/tools/boostbook/dtd/boostbook.dtd (original)
+++ branches/fix-links/tools/boostbook/dtd/boostbook.dtd 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -210,7 +210,7 @@
     name CDATA #REQUIRED
     %boost.common.attrib;>
 
-<!ELEMENT enumvalue (default?)>
+<!ELEMENT enumvalue (default?, purpose?, description?)>
 <!ATTLIST enumvalue
     name CDATA #REQUIRED
     %boost.common.attrib;>

Modified: branches/fix-links/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl
==============================================================================
--- branches/fix-links/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl (original)
+++ branches/fix-links/tools/boostbook/xsl/doxygen/doxygen2boostbook.xsl 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -37,11 +37,14 @@
   <!-- The title that will be used for the BoostBook library reference emitted.
        If left blank, BoostBook will assign a default title. -->
   <xsl:param name="boost.doxygen.reftitle" select="''"/>
-
+
   <!-- The id used for the library-reference. By default, it is the normalized
        form of the reftitle. -->
   <xsl:param name="boost.doxygen.refid" select="''"/>
 
+ <!-- The directory into which png files corresponding to LaTeX formulas will be found. -->
+ <xsl:param name="boost.doxygen.formuladir" select="'images/'"/>
+
   <xsl:output method="xml" indent="no" standalone="yes"/>
 
   <xsl:key name="compounds-by-kind" match="compounddef" use="@kind"/>
@@ -1358,18 +1361,25 @@
   </xsl:template>
 
   <!--
- Eric Niebler: 4-4-2007
- Here is some half-baked support for LaTeX formulas in
+ Eric Niebler: Jan-8-2008
+ Here is some 3/4-baked support for LaTeX formulas in
   Doxygen comments. Doxygen doesn't generate the PNG files
   when outputting XML. In order to use this code, you must
   run Doxygen first to generate HTML (and the PNG files for
- the formulas), then copy the PNG files into the images/
- directory, and then build the docs with bjam. Commented
- out until something better comes along.
+ the formulas). You can do this in a Jamfile with
+ "doxygen foo.html : <sources, etc...> ; ", where the ".html"
+ is significant. Then the png files should be copied into the
+ images/ directory (or another place relative to the html/
+ directory, as specified by $boost.doxygen.formuladir XSL
+ parameter). This can be done with a custom action in a
+ Jamfile. Finally, the docs can be built as normal.
+ See libs/accumulators/doc/Jamfile.v2 for a working example.
+ -->
   <xsl:template match="formula" mode="passthrough">
     <xsl:choose>
       <xsl:when test="substring(*|text(), 1, 2) = '\['">
         <equation>
+ <title/>
           <alt>
             <xsl:value-of select="*|text()"/>
           </alt>
@@ -1377,7 +1387,7 @@
             <imageobject role="html">
               <imagedata format="PNG" align="center">
                 <xsl:attribute name="fileref">
- <xsl:value-of select="concat(concat('images/form_', @id), '.png')"/>
+ <xsl:value-of select="concat(concat(concat($boost.doxygen.formuladir, 'form_'), @id), '.png')"/>
                 </xsl:attribute>
               </imagedata>
             </imageobject>
@@ -1398,7 +1408,7 @@
             <imageobject role="html">
               <imagedata format="PNG">
                 <xsl:attribute name="fileref">
- <xsl:value-of select="concat(concat('images/form_', @id), '.png')"/>
+ <xsl:value-of select="concat(concat(concat($boost.doxygen.formuladir, 'form_'), @id), '.png')"/>
                 </xsl:attribute>
               </imagedata>
             </imageobject>
@@ -1412,6 +1422,4 @@
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
- -->
  </xsl:stylesheet>
-
\ No newline at end of file

Modified: branches/fix-links/tools/boostbook/xsl/type.xsl
==============================================================================
--- branches/fix-links/tools/boostbook/xsl/type.xsl (original)
+++ branches/fix-links/tools/boostbook/xsl/type.xsl 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -836,6 +836,7 @@
   <xsl:template name="print-access-specification">
     <xsl:param name="indentation" select="0"/>
     <xsl:param name="specification" select="'public'"/>
+
     <xsl:text>&#10;</xsl:text>
     <xsl:call-template name="indent">
       <xsl:with-param name="indentation" select="$indentation"/>
@@ -873,11 +874,12 @@
     <xsl:if test="ancestor::class|ancestor::class-specialization|
                   ancestor::struct|ancestor::struct-specialization|
                   ancestor::union|ancestor::union-specialization">
- <xsl:text>&#10;&#10;</xsl:text>
+ <xsl:text>&#10;</xsl:text>
 
       <!-- If this nested class has a "purpose" element, use it as a
            comment. -->
       <xsl:if test="purpose">
+ <xsl:text>&#10;</xsl:text>
         <xsl:call-template name="indent">
           <xsl:with-param name="indentation" select="$indentation"/>
         </xsl:call-template>
@@ -1144,7 +1146,7 @@
 
     <!-- Spacing -->
     <xsl:if
- test="not(local-name(preceding-sibling::*[position()=1])=local-name(.))">
+ test="not(local-name(preceding-sibling::*[position()=1])=local-name(.)) and (position() &gt; 1)">
       <xsl:text>&#10;</xsl:text>
     </xsl:if>
 
@@ -1161,7 +1163,7 @@
       <xsl:text> </xsl:text>
     </xsl:if>
 
- <xsl:apply-templates select="type/*|type/text()" mode="annotation"/>
+ <xsl:apply-templates select="type" mode="highlight"/>
     <xsl:text> </xsl:text>
     <xsl:value-of select="@name"/>
     <xsl:text>;</xsl:text>

Modified: branches/fix-links/tools/build/v2/build-system.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build-system.jam (original)
+++ branches/fix-links/tools/build/v2/build-system.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,717 +1,882 @@
-# Copyright 2003, 2005, 2007 Dave Abrahams
-# Copyright 2006, 2007 Rene Rivera
-# Copyright 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-# This file is part of Boost.Build version 2. You can think of it as
-# forming the main() routine. It is invoked by the bootstrapping code
-# in bootstrap.jam.
-#
-# The version of bootstrap.jam invoking this lives in
-# tools/build/kernel until BBv1 is retired, so that BBv1 can have its
-# bootstrap.jam in this directory.
+# Copyright 2003, 2005, 2007 Dave Abrahams
+# Copyright 2006, 2007 Rene Rivera
+# Copyright 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
-import project ;
-import targets ;
-import sequence ;
-import modules ;
-import feature ;
-import property-set ;
-import build-request ;
-import errors : error ;
-import virtual-target ;
-import "class" : new ;
-import toolset ;
-import regex ;
+# This file is part of Boost Build version 2. You can think of it as forming the
+# the main() routine. It is invoked by the bootstrapping code in bootstrap.jam.
 
+import build-request ;
 import builtin ;
+import "class" : new ;
+import errors ;
+import feature ;
 import make ;
+import modules ;
 import os ;
-
+import path ;
+import project ;
+import property-set ;
+import regex ;
+import sequence ;
+import targets ;
+import toolset ;
 import version ;
+import virtual-target ;
 
-# Returns the location of the build system. The primary use case
-# is building Boost, where it's sometimes needed to get location
-# of other components (like BoostBook files), and it's convenient
-# to use location relatively to Boost.Build path.
-rule location ( )
-{
- local r = [ modules.binding build-system ] ;
- return $(r:P) ;
-}
 
-# Returns the property set with the
-# free features from the currently processed
+################################################################################
+#
+# Module global data.
+#
+################################################################################
+
+# Shortcut used in this module for accessing used command-line parameters.
+.argv = [ modules.peek : ARGV ] ;
+
+# Flag indicating we should display additional debugging information related to
+# locating and loading Boost Build configuration files.
+.debug-config = [ MATCH ^(--debug-configuration)$ : $(.argv) ] ;
+
+# Legacy option doing too many things, some of which are not even documented.
+# Should be phased out.
+# * Disables loading site and user configuration files.
+# * Disables auto-configuration for toolsets specified explicitly on the
+# command-line.
+# * Causes --toolset command-line options to be ignored.
+# * Prevents the default toolset from being used even if no toolset has been
+# configured at all.
+.legacy-ignore-config = [ MATCH ^(--ignore-config)$ : $(.argv) ] ;
+
+# The cleaning is tricky. Say, if user says 'bjam --clean foo' where 'foo' is a
+# directory, then we want to clean targets which are in 'foo' as well as those
+# in any children Jamfiles under foo but not in any unrelated Jamfiles. To
+# achieve this we collect a list of projects under which cleaning is allowed.
+.project-targets = ;
+
+# Virtual targets obtained when building main targets references on the command
+# line. When running 'bjam --clean main_target' we want to clean only files
+# belonging to that main target so we need to record which targets are produced
+# for it.
+.results-of-main-targets = ;
+
+# Was an XML dump requested?
+.out-xml = [ MATCH ^--out-xml=(.*)$ : $(.argv) ] ;
+
+# Default toolset & version to be used in case no other toolset has been used
+# explicitly by either the loaded configuration files, the loaded project build
+# scripts or an explicit toolset request on the command line. If not specified,
+# an arbitrary default will be used based on the current host OS. This value,
+# while not strictly necessary, has been added to allow testing Boost-Build's
+# default toolset usage functionality.
+.default-toolset = ;
+.default-toolset-version = ;
+
+
+################################################################################
+#
+# Public rules.
+#
+################################################################################
+
+# Returns the property set with the free features from the currently processed
 # build request.
+#
 rule command-line-free-features ( )
 {
     return $(.command-line-free-features) ;
 }
 
 
+# Returns the location of the build system. The primary use case is building
+# Boost where it's sometimes needed to get the location of other components
+# (e.g. BoostBook files) and it's convenient to use locations relative to the
+# Boost Build path.
+#
+rule location ( )
+{
+ local r = [ modules.binding build-system ] ;
+ return $(r:P) ;
+}
 
-# Check if we can load 'test-config.jam'. If we can, load it and
-# ignore user configs.
 
-local argv = [ modules.peek : ARGV ] ;
+# Sets the default toolset & version to be used in case no other toolset has
+# been used explicitly by either the loaded configuration files, the loaded
+# project build scripts or an explicit toolset request on the command line. For
+# more detailed information see the comment related to used global variables.
+#
+rule set-default-toolset ( toolset : version ? )
+{
+ .default-toolset = $(toolset) ;
+ .default-toolset-version = $(version) ;
+}
 
-local test-config = [ GLOB [ os.environ BOOST_BUILD_PATH ] : test-config.jam ] ;
 
-local debug-config = [ MATCH ^(--debug-configuration)$ : [ modules.peek : ARGV ] ] ;
+################################################################################
+#
+# Local rules.
+#
+################################################################################
 
-if $(test-config)
+# Returns actual Jam targets to be used for executing a clean request.
+#
+local rule actual-clean-targets ( )
 {
- if $(debug-config)
- {
- ECHO "notice: loading test-config.jam from"
- [ NORMALIZE_PATH $(test-config[1]) ] ;
- ECHO "notice: user-config.jam and site-config.jam will be ignored" ;
- }
-
- module test-config
+ # Construct a list of projects explicitly detected as targets on this build
+ # system run. These are the projects under which cleaning is allowed.
+ for local t in $(targets)
     {
- import toolset : using : using ;
+ if [ class.is-a $(t) : project-target ]
+ {
+ .project-targets += [ $(t).project-module ] ;
+ }
     }
- import test-config ;
-}
 
-local ignore-config ;
-if $(test-config) || --ignore-config in [ modules.peek : ARGV ]
-{
- ignore-config = true ;
-}
+ # Construct a list of targets explicitly detected on this build system run
+ # as a result of building main targets.
+ local targets-to-clean ;
+ for local t in $(.results-of-main-targets)
+ {
+ # Don't include roots or sources.
+ targets-to-clean += [ virtual-target.traverse $(t) ] ;
+ }
+ targets-to-clean = [ sequence.unique $(targets-to-clean) ] ;
 
-local user-path = [ os.home-directories ] [ os.environ BOOST_BUILD_PATH ] ;
-
-# Unless ignore-config is set, load the configuration file in
-# $(path)/$(basename).jam
-local rule load-config ( basename : path + )
-{
- if ! $(ignore-config)
+ local to-clean ;
+ for local t in [ virtual-target.all-targets ]
     {
- if $(debug-config)
+ local p = [ $(t).project ] ;
+
+ # Remove only derived targets.
+ if [ $(t).action ]
         {
- ECHO notice: searching \"$(path)\" for \"$(basename).jam\" ;
- local where = [ GLOB $(path) : $(basename).jam ] ;
- if $(where)
- {
- ECHO notice: loading $(basename).jam from
- [ NORMALIZE_PATH $(where[1]) ] ;
- }
- }
+ if $(t) in $(targets-to-clean) ||
+ [ should-clean-project [ $(p).project-module ] ] = true
+ {
+ to-clean += $(t) ;
+ }
+ }
+ }
 
- modules.load $(basename) : : $(path) ;
- project.load-used-projects $(basename) ;
+ local to-clean-actual ;
+ for local t in $(to-clean)
+ {
+ to-clean-actual += [ $(t).actualize ] ;
     }
+ return $(to-clean-actual) ;
 }
 
+
+# Given a target id, try to find and return the corresponding target. This is
+# only invoked when there's no Jamfile in ".". This code somewhat duplicates
+# code in project-target.find but we can't reuse that code without a
+# project-targets instance.
 #
-# Load site-config.
+local rule find-target ( target-id )
+{
+ local split = [ MATCH (.*)//(.*) : $(target-id) ] ;
+
+ local pm ;
+ if $(split)
+ {
+ pm = [ project.find $(split[1]) : "." ] ;
+ }
+ else
+ {
+ pm = [ project.find $(target-id) : "." ] ;
+ }
+
+ local result ;
+ if $(pm)
+ {
+ result = [ project.target $(pm) ] ;
+ }
+
+ if $(split)
+ {
+ result = [ $(result).find $(split[2]) ] ;
+ }
+
+ return $(result) ;
+}
+
+
+# Initializes a new configuration module.
 #
-module site-config
+local rule initialize-config-module ( module-name )
 {
- import project : initialize ;
- initialize site-config ;
+ project.initialize $(module-name) ;
+ if USER_MODULE in [ RULENAMES ]
+ {
+ USER_MODULE $(module-name) ;
+ }
 }
 
-local site-path = /etc $(user-path) ;
 
-if [ os.name ] in NT CYGWIN
-{
- site-path = [ modules.peek : SystemRoot ] $(user-path) ;
+# Helper rule used to load configuration files. Loads the first configuration
+# file with the given 'filename' at 'path' into module with name 'module-name'.
+# Not finding the requested file may or may not be treated as an error depending
+# on the must-find parameter. Returns a normalized path to the loaded
+# configuration file or nothing if no file was loaded.
+#
+local rule load-config ( module-name : filename : path + : must-find ? )
+{
+ if $(.debug-config)
+ {
+ ECHO "notice: Searching" "$(path)" "for" "$(module-name)"
+ "configuration file" "$(filename)" "." ;
+ }
+ local where = [ GLOB $(path) : $(filename) ] ;
+ if $(where)
+ {
+ where = [ NORMALIZE_PATH $(where[1]) ] ;
+ if $(.debug-config)
+ {
+ ECHO "notice: Loading" "$(module-name)" "configuration file"
+ "$(filename)" "from" $(where) "." ;
+ }
+
+ modules.load $(module-name) : $(filename) : $(path) ;
+ project.load-used-projects $(module-name) ;
+ }
+ else
+ {
+ if ( must-find )
+ {
+ errors.user-error "Configuration file" "$(filename)" "not found in"
+ "$(path)" "." ;
+ }
+ if $(.debug-config)
+ {
+ ECHO "notice:" "Configuration file" "$(filename)" "not found in"
+ "$(path)" "." ;
+ }
+ }
+ return where ;
 }
 
-load-config site-config : $(site-path) ;
 
+# Loads all the configuration files used by Boost Build in the following order:
+#
+# -- test-config --
+# Loaded only if specified on the command-line using the --test-config
+# command-line parameter. It is ok for this file not to exist even if specified.
+# If this configuration file is loaded, regular site and user configuration
+# files will not be. If a relative path is specified, file is searched for in
+# the current folder.
 #
-# Load user-config.
+# -- site-config --
+# Always named site-config.jam. Will only be found if located on the system
+# root path (Windows), /etc (non-Windows), user's home folder or the Boost Build
+# path, in that order. Not loaded in case the test-config configuration file is
+# loaded or either the --ignore-site-config or the --ignore-config command-line
+# option is specified.
 #
-module user-config
+# -- user-config --
+# Named user-config.jam by default or may be named explicitly using the
+# --user-config command-line option or the BOOST_BUILD_USER_CONFIG environment
+# variable. If named explicitly the file is looked for from the current working
+# directory and if the default one is used then it is searched for in the
+# user's home directory and the Boost Build path, in that order. Not loaded in
+# case either the test-config configuration file is loaded, --ignore-config
+# command-line option is specified or an empty file name is explicitly
+# specified. If the file name has been given explicitly then the file must
+# exist.
+#
+# Test configurations have been added primarily for use by Boost Build's
+# internal unit testing system but may be used freely in other places as well.
+#
+local rule load-configuration-files
 {
- import project : initialize ;
- initialize user-config ;
-}
+ # Flag indicating that site configuration should not be loaded.
+ local ignore-site-config =
+ [ MATCH ^(--ignore-site-config)$ : $(.argv) ] ;
+
+ if $(.legacy-ignore-config) && $(.debug-config)
+ {
+ ECHO "notice: Regular site and user configuration files will be ignored" ;
+ ECHO "notice: due to the --ignore-config command-line option." ;
+ }
+
+ initialize-config-module test-config ;
+ local test-config = [ MATCH ^--test-config=(.*)$ : $(.argv) ] ;
+ if $(test-config)
+ {
+ local where =
+ [ load-config test-config : $(test-config:BS) : $(test-config:D) ] ;
+ if $(where)
+ {
+ if $(.debug-config) && ! $(.legacy-ignore-config)
+ {
+ ECHO "notice: Regular site and user configuration files will" ;
+ ECHO "notice: be ignored due to the test configuration being"
+ "loaded." ;
+ }
+ }
+ else
+ {
+ test-config = ;
+ }
+ }
 
-local user-config-path = [ MATCH ^--user-config=(.*) : $(argv) ] ;
+ local user-path = [ os.home-directories ] [ os.environ BOOST_BUILD_PATH ] ;
+ local site-path = /etc $(user-path) ;
+ if [ os.name ] in NT CYGWIN
+ {
+ site-path = [ modules.peek : SystemRoot ] $(user-path) ;
+ }
 
-user-config-path ?= [ os.environ BOOST_BUILD_USER_CONFIG ] ;
+ if $(ignore-site-config) && !$(.legacy-ignore-config)
+ {
+ ECHO "notice: Site configuration files will be ignored due to the" ;
+ ECHO "notice: --ignore-site-config command-line option." ;
+ }
 
-if $(user-config-path)
-{
- if $(debug-config)
+ initialize-config-module site-config ;
+ if ! $(test-config) && ! $(ignore-site-config) && ! $(.legacy-ignore-config)
     {
- ECHO "Loading explicitly specifier user configuration file:" ;
- ECHO " $(user-config-path)" ;
+ load-config site-config : site-config.jam : $(site-path) ;
+ }
+
+ initialize-config-module user-config ;
+ if ! $(test-config) && ! $(.legacy-ignore-config)
+ {
+ local user-config = [ MATCH ^--user-config=(.*)$ : $(.argv) ] ;
+ user-config = $(user-config[-1]) ;
+ user-config ?= [ os.environ BOOST_BUILD_USER_CONFIG ] ;
+ local explicitly-requested = $(user-config) ;
+ user-config ?= user-config.jam ;
+
+ if $(user-config)
+ {
+ if $(explicitly-requested)
+ {
+ # Treat explicitly entered user paths as native OS path
+ # references and, if non-absolute, root them at the current
+ # working directory.
+ user-config = [ path.make $(user-config) ] ;
+ user-config = [ path.root $(user-config) [ path.pwd ] ] ;
+ user-config = [ path.native $(user-config) ] ;
+
+ if $(.debug-config)
+ {
+ ECHO "notice: Loading explicitly specified user configuration file:" ;
+ ECHO " $(user-config)" ;
+ }
+
+ load-config user-config : $(user-config:BS) : $(user-config:D)
+ : must-exist ;
+ }
+ else
+ {
+ load-config user-config : $(user-config) : $(user-path) ;
+ }
+ }
+ else if $(.debug-config)
+ {
+ ECHO "notice: User configuration file loading explicitly disabled." ;
+ }
     }
-
-
- modules.load user-config : $(user-config-path:BS) : $(user-config-path:D) ;
- project.load-used-projects user-config ;
-}
-else
-{
- load-config user-config : $(user-path) ;
 }
 
 
-#
 # Autoconfigure toolsets based on any instances of --toolset=xx,yy,...zz or
-# toolset=xx,yy,...zz in the command line
+# toolset=xx,yy,...zz in the command line. May return additional properties to
+# be processed as if they had been specified by the user.
 #
-local option-toolsets = [ regex.split-list [ MATCH ^--toolset=(.*) : $(argv) ] : "," ] ;
-local feature-toolsets = [ regex.split-list [ MATCH ^toolset=(.*) : $(argv) ] : "," ] ;
+local rule process-explicit-toolset-requests
+{
+ local extra-properties ;
 
-# if the user specified --toolset=..., we need to add toolset=... to
-# the build request
-local extra-build-request ;
+ local option-toolsets = [ regex.split-list [ MATCH ^--toolset=(.*)$ : $(.argv) ] : "," ] ;
+ local feature-toolsets = [ regex.split-list [ MATCH ^toolset=(.*)$ : $(.argv) ] : "," ] ;
 
-if ! $(ignore-config)
-{
     for local t in $(option-toolsets) $(feature-toolsets)
     {
- # Parse toolset-version/properties
+ # Parse toolset-version/properties.
         local (t-v,t,v) = [ MATCH (([^-/]+)-?([^/]+)?)/?.* : $(t) ] ;
         local toolset-version = $((t-v,t,v)[1]) ;
         local toolset = $((t-v,t,v)[2]) ;
         local version = $((t-v,t,v)[3]) ;
 
- if $(debug-config)
+ if $(.debug-config)
         {
- ECHO notice: [cmdline-cfg] Detected command-line request for
- $(toolset-version): toolset= \"$(toolset)\" "version= \""$(version)\" ;
+ ECHO "notice: [cmdline-cfg] Detected command-line request for"
+ $(toolset-version): "toolset=" $(toolset) "version="
+ $(version) ;
         }
 
+ # If the toolset isn't known, configure it now.
         local known ;
-
- # if the toolset isn't known, configure it now.
         if $(toolset) in [ feature.values <toolset> ]
         {
             known = true ;
         }
-
- if $(known) && $(version)
- && ! [ feature.is-subvalue toolset : $(toolset) : version : $(version) ]
+ if $(known) && $(version) && ! [ feature.is-subvalue toolset
+ : $(toolset) : version : $(version) ]
         {
             known = ;
         }
 
         if ! $(known)
         {
- if $(debug-config)
+ if $(.debug-config)
             {
- ECHO notice: [cmdline-cfg] toolset $(toolset-version)
- not previously configured; configuring now ;
+ ECHO notice: [cmdline-cfg] toolset $(toolset-version) not
+ previously configured; attempting to auto-configure now ;
             }
             toolset.using $(toolset) : $(version) ;
         }
         else
         {
- if $(debug-config)
+ if $(.debug-config)
             {
- ECHO notice: [cmdline-cfg] toolset $(toolset-version) already configured ;
+ ECHO notice: [cmdline-cfg] toolset $(toolset-version) already
+ configured ;
             }
         }
 
- # make sure we get an appropriate property into the build request in
- # case the user used the "--toolset=..." form
- if ! $(t) in $(argv)
- && ! $(t) in $(feature-toolsets)
+ # Make sure we get an appropriate property into the build request in
+ # case toolset was specified using the "--toolset=..." command-line
+ # option form.
+ if ! $(t) in $(.argv) && ! $(t) in $(feature-toolsets)
         {
- if $(debug-config)
+ if $(.debug-config)
             {
                 ECHO notice: [cmdline-cfg] adding toolset=$(t) "to build request." ;
             }
- extra-build-request += toolset=$(t) ;
+ extra-properties += toolset=$(t) ;
         }
     }
-}
-
-if USER_MODULE in [ RULENAMES ]
-{
- USER_MODULE site-config user-config ;
-}
 
+ return $(extra-properties) ;
+}
 
 
-if --version in [ modules.peek : ARGV ]
+# Returns 'true' if the given 'project' is equal to or is a (possibly indirect)
+# child to any of the projects requested to be cleaned in this build system run.
+# Returns 'false' otherwise. Expects the .project-targets list to have already
+# been constructed.
+#
+local rule should-clean-project ( project )
 {
- version.print ;
- EXIT ;
-}
+ if ! $(.should-clean-project.$(project))
+ {
+ local r = false ;
+ if $(project) in $(.project-targets)
+ {
+ r = true ;
+ }
+ else
+ {
+ local parent = [ project.attribute $(project) parent-module ] ;
+ if $(parent) && $(parent) != user-config
+ {
+ r = [ should-clean-project $(parent) ] ;
+ }
+ }
+ .should-clean-project.$(project) = $(r) ;
+ }
 
+ return $(.should-clean-project.$(project)) ;
+}
 
 
-# We always load project in "." so that 'use-project' directives has
-# any chance of been seen. Otherwise, we won't be able to refer to
-# subprojects using target ids.
-if [ project.find "." : "." ]
-{
- current-project = [ project.target [ project.load "." ] ] ;
-}
+################################################################################
+#
+# main()
+# ------
+#
+################################################################################
 
-if ! [ feature.values <toolset> ]
 {
- local default-toolset = gcc ;
- if [ os.name ] = NT
+ if --version in $(.argv)
     {
- default-toolset = msvc ;
+ version.print ;
+ EXIT ;
     }
-
- ECHO "warning: No toolsets are configured." ;
- ECHO "warning: Configuring default toolset" \"$(default-toolset)\". ;
- ECHO "warning: If the default is wrong, you may not be able to build C++ programs." ;
- ECHO "warning: Use the \"--toolset=xxxxx\" option to override our guess." ;
- ECHO "warning: For more configuration options, please consult" ;
- ECHO "warning: http://boost.org/boost-build2/doc/html/bbv2/advanced/configuration.html" ;
 
-
- if ! $(ignore-config)
+
+ load-configuration-files ;
+
+ local extra-properties ;
+ # Note that this causes --toolset options to be ignored if --ignore-config
+ # is specified.
+ if ! $(.legacy-ignore-config)
     {
- toolset.using $(default-toolset) ;
+ extra-properties = [ process-explicit-toolset-requests ] ;
     }
-}
-
-build-request = [
- build-request.from-command-line [
- modules.peek : ARGV
- ] $(extra-build-request)
-] ;
 
-properties = [ $(build-request).get-at 2 ] ;
 
-if $(properties)
-{
- expanded = [ build-request.expand-no-defaults $(properties) ] ;
- local xexpanded ;
- for local e in $(expanded)
+ # We always load project in "." so that 'use-project' directives have any
+ # chance of being seen. Otherwise, we would not be able to refer to
+ # subprojects using target ids.
+ local current-project ;
+ if [ project.find "." : "." ]
     {
- xexpanded += [ property-set.create [ feature.split $(e) ] ] ;
+ current-project = [ project.target [ project.load "." ] ] ;
     }
- expanded = $(xexpanded) ;
-}
-else
-{
- expanded = [ property-set.empty ] ;
-}
 
 
+ # In case there are no toolsets currently defined makes the build run using
+ # the default toolset.
+ if ! $(.legacy-ignore-config) && ! [ feature.values <toolset> ]
+ {
+ local default-toolset = $(.default-toolset) ;
+ local default-toolset-version = ;
+ if $(default-toolset)
+ {
+ default-toolset-version = $(.default-toolset-version) ;
+ }
+ else
+ {
+ default-toolset = gcc ;
+ if [ os.name ] = NT
+ {
+ default-toolset = msvc ;
+ }
+ }
 
-local target-ids = [ $(build-request).get-at 1 ] ;
-local targets
-local clean ;
-
+ ECHO "warning: No toolsets are configured." ;
+ ECHO "warning: Configuring default toolset" \"$(default-toolset)\". ;
+ ECHO "warning: If the default is wrong, your build may not work correctly." ;
+ ECHO "warning: Use the \"--toolset=xxxxx\" option to override our guess." ;
+ ECHO "warning: For more configuration options, please consult" ;
+ ECHO "warning: http://boost.org/boost-build2/doc/html/bbv2/advanced/configuration.html" ;
 
-if "--clean-all" in [ modules.peek : ARGV ]
-{
- cleanall = true ;
-}
+ toolset.using $(default-toolset) : $(default-toolset-version) ;
+ }
 
-if "--clean" in [ modules.peek : ARGV ]
-{
- clean = true ;
-}
 
+ # Parse command line for targets and properties. Note that this requires
+ # that all project files already be loaded.
+ local build-request = [ build-request.from-command-line $(.argv)
+ $(extra-properties) ] ;
+ local target-ids = [ $(build-request).get-at 1 ] ;
+ local properties = [ $(build-request).get-at 2 ] ;
 
-local bjam-targets ;
 
-# Given a target it, try to find and return corresponding target.
-# This is only invoked when there's no Jamfile in "."
-# This code somewhat duplicates code in project-target.find but we can't reuse
-# that code without project-targets instance.
-rule find-target ( target-id )
-{
- local split = [ MATCH (.*)//(.*) : $(target-id) ] ;
-
- local pm ;
- if $(split)
+ # Expand properties specified on the command line into multiple property
+ # sets consisting of all legal property combinations. Each expanded property
+ # set will be used for a single build run. E.g. if multiple toolsets are
+ # specified then requested targets will be built with each of them.
+ if $(properties)
     {
- pm = [ project.find $(split[1]) : "." ] ;
+ expanded = [ build-request.expand-no-defaults $(properties) ] ;
+ local xexpanded ;
+ for local e in $(expanded)
+ {
+ xexpanded += [ property-set.create [ feature.split $(e) ] ] ;
+ }
+ expanded = $(xexpanded) ;
     }
     else
     {
- pm = [ project.find $(target-id) : "." ] ;
+ expanded = [ property-set.empty ] ;
     }
-
- local result ;
- if $(pm)
- {
- result = [ project.target $(pm) ] ;
- }
-
- if $(split)
- {
- result = [ $(result).find $(split[2]) ] ;
- }
-
- return $(result) ;
-}
-
 
 
-if ! $(current-project)
-{
- if ! $(target-ids)
- {
- ECHO "error: no Jamfile in current directory found, and no target references specified." ;
+ # Check that we actually found something to build.
+ if ! $(current-project) && ! $(target-ids)
+ {
+ errors.user-error "error: no Jamfile in current directory found, and no"
+ "target references specified." ;
         EXIT ;
     }
-}
 
 
-for local id in $(target-ids)
-{
- if $(id) = clean
+ # Flags indicating that this build system run has been started in order to
+ # clean existing instead of create new targets. Note that these are not the
+ # final flag values as they may get changed later on due to some special
+ # targets being specified on the command line.
+ local clean ; if "--clean" in $(.argv) { clean = true ; }
+ local cleanall ; if "--clean-all" in $(.argv) { cleanall = true ; }
+
+
+ # List of Boost Build meta-targets and actual raw Jam targets directly
+ # requested by the user. Raw Jam targets are used when user's request
+ # contains a reference to a specific file not modeled using a main Boost
+ # Build target.
+ local targets ;
+ local bjam-targets ;
+
+
+ # Process each target specified on the command-line and convert it into
+ # internal Boost Build target objects. Detect special clean target. If no
+ # main Boost Build targets were explictly requested use the current project
+ # as the target.
+ for local id in $(target-ids)
     {
- clean = true ;
- }
- else
- {
- local t ;
- if $(current-project)
+ if $(id) = clean
         {
- t = [ $(current-project).find $(id) : no-error ] ;
+ clean = true ;
         }
         else
         {
- t = [ find-target $(id) ] ;
- }
-
- if ! $(t)
- {
- ECHO "notice: could not find main target " $(id) ;
- ECHO "notice: assuming it's a name of file to create " ;
- bjam-targets += $(id) ;
- }
- else
- {
- targets += $(t) ;
- }
- }
-}
-
-if ! $(targets)
-{
- targets += [ project.target [ project.module-name "." ] ] ;
-}
-
-virtual-targets = ;
-
-# Virtual targets obtained when building main targets references on
-# the command line. When running
-#
-# bjam --clean main_target
-#
-# we want to clean the files that belong only to that main target,
-# so we need to record which targets are produced.
-local results-of-main-targets ;
-
-for local p in $(expanded)
-{
- .command-line-free-features = [ property-set.create [ $(p).free ] ] ;
- for local t in $(targets)
- {
- local g = [ $(t).generate $(p) ] ;
- if ! [ class.is-a $(t) : project-target ]
- {
- results-of-main-targets += $(g[2-]) ;
- }
- virtual-targets += $(g[2-]) ;
- }
-}
-
-# The cleaning is tricky. Say, if
-# user says:
-#
-# bjam --clean foo
-#
-# where 'foo' is a directory, then we want to clean targets
-# which are in 'foo' or in any children Jamfiles, but not in any
-# unrelated Jamfiles. So, we collect the list of project under which
-# cleaning is allowed.
-#
+ local t ;
+ if $(current-project)
+ {
+ t = [ $(current-project).find $(id) : no-error ] ;
+ }
+ else
+ {
+ t = [ find-target $(id) ] ;
+ }
 
-local projects-to-clean ;
-local targets-to-clean ;
-if $(clean) || $(clean-all)
-{
- for local t in $(targets)
- {
- if [ class.is-a $(t) : project-target ]
- {
- projects-to-clean += [ $(t).project-module ] ;
- }
+ if ! $(t)
+ {
+ ECHO "notice: could not find main target" $(id) ;
+ ECHO "notice: assuming it's a name of file to create." ;
+ bjam-targets += $(id) ;
+ }
+ else
+ {
+ targets += $(t) ;
+ }
+ }
     }
-
- local subvariants ;
- for local t in $(results-of-main-targets)
+ if ! $(targets)
     {
- # Don't include roots or sources.
- targets-to-clean += [ virtual-target.traverse $(t) ] ;
+ targets += [ project.target [ project.module-name "." ] ] ;
     }
- targets-to-clean = [ sequence.unique $(targets-to-clean) ] ;
-}
 
-# Returns 'true' if 'project' is a child of 'current-project',
-# possibly indirect, or is equal to 'project'.
-# Returns 'false' otherwise.
-rule is-child ( project )
-{
- if ! $(.is-child.$(project))
+
+ # List of all virtual-targets created in this build system run.
+ local virtual-targets ;
+
+
+ # Now that we have a set of targets to build and a set of property sets to
+ # build the targets with, we can start the main build process by using each
+ # property set to generate virtual targets from all of our listed targets
+ # and any of their dependants.
+ for local p in $(expanded)
     {
- local r = false ;
- if $(project) in $(projects-to-clean)
- {
- r = true ;
- }
- else
+ .command-line-free-features = [ property-set.create [ $(p).free ] ] ;
+ for local t in $(targets)
         {
- local parent = [ project.attribute $(project) parent-module ] ;
- if $(parent) && $(parent) != user-config
+ local g = [ $(t).generate $(p) ] ;
+ if ! [ class.is-a $(t) : project-target ]
             {
- r = [ is-child $(parent) ] ;
- }
- }
-
- .is-child.$(project) = $(r) ;
+ .results-of-main-targets += $(g[2-]) ;
+ }
+ virtual-targets += $(g[2-]) ;
+ }
     }
-
- return $(.is-child.$(project)) ;
-}
 
 
+ # List of all Jam targets constructed in this build system run.
+ local actual-targets ;
 
 
-actual-targets = ;
-for t in $(virtual-targets)
-{
- actual-targets += [ $(t).actualize ] ;
-}
-
-# Was an XML dump requested?
-.out-xml = [ MATCH --out-xml=(.*) : [ modules.peek : ARGV ] ] ;
-if $(.out-xml)
-{
- # Get the qualified name of a virtual target.
- rule full-target-name ( t )
+ # Convert all collected virtual targets into actual raw Jam targets.
+ for t in $(virtual-targets)
     {
- local name = [ $(t).name ] ;
- local project = [ $(t).project ] ;
- local project-path = [ $(project).get location ] ;
- return $(project-path)//$(name) ;
+ actual-targets += [ $(t).actualize ] ;
     }
-
- # Generate an XML file containing build statistics for each
- # constituent
- rule out-xml ( xml-file : constituents * )
+
+
+ # If XML data output has been requested prepare additional rules and targets
+ # so we can hook into Jam to collect build data while its building and have
+ # it trigger the final XML report generation after all the planned targets
+ # have been built.
+ if $(.out-xml)
     {
- # Prepare valid XML header and footer with some basic info
- local nl = "
+ # Get a qualified virtual target name.
+ rule full-target-name ( target )
+ {
+ local name = [ $(target).name ] ;
+ local project = [ $(target).project ] ;
+ local project-path = [ $(project).get location ] ;
+ return $(project-path)//$(name) ;
+ }
+
+ # Generate an XML file containing build statistics for each constituent.
+ #
+ rule out-xml ( xml-file : constituents * )
+ {
+ # Prepare valid XML header and footer with some basic info.
+ local nl = "
 " ;
- local jam = [ version.jam ] ;
- local os = [ modules.peek : OS OSPLAT JAMUNAME ] "" ;
- local timestamp = [ modules.peek : JAMDATE ] ;
- local cwd = [ PWD ] ;
- local command = [ modules.peek : ARGV ] ;
- local bb-version = [ version.boost-build ] ;
- .header on $(xml-file) =
- "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- "$(nl)<build format=\"1.0\" version=\"$(bb-version)\">"
- "$(nl) <jam version=\"$(jam:J=.)\" />"
- "$(nl) <os name=\"$(os[1])\" platform=\"$(os[2])\"><![CDATA[$(os[3-]:J= )]]></os>"
- "$(nl) <timestamp><![CDATA[$(timestamp)]]></timestamp>"
- "$(nl) <directory><![CDATA[$(cwd)]]></directory>"
- "$(nl) <command><![CDATA[\"$(command:J=\" \")\"]]></command>"
- ;
- .footer on $(xml-file) =
- "$(nl)</build>" ;
- # Generate target dependency graph
- .contents on $(xml-file) +=
- "$(nl) <targets>"
- ;
+ local jam = [ version.jam ] ;
+ local os = [ modules.peek : OS OSPLAT JAMUNAME ] "" ;
+ local timestamp = [ modules.peek : JAMDATE ] ;
+ local cwd = [ PWD ] ;
+ local command = $(.argv) ;
+ local bb-version = [ version.boost-build ] ;
+ .header on $(xml-file) =
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "$(nl)<build format=\"1.0\" version=\"$(bb-version)\">"
+ "$(nl) <jam version=\"$(jam:J=.)\" />"
+ "$(nl) <os name=\"$(os[1])\" platform=\"$(os[2])\"><![CDATA[$(os[3-]:J= )]]></os>"
+ "$(nl) <timestamp><![CDATA[$(timestamp)]]></timestamp>"
+ "$(nl) <directory><![CDATA[$(cwd)]]></directory>"
+ "$(nl) <command><![CDATA[\"$(command:J=\" \")\"]]></command>"
+ ;
+ .footer on $(xml-file) =
+ "$(nl)</build>" ;
 
- for local t in [ virtual-target.all-targets ]
+ # Generate the target dependency graph.
+ .contents on $(xml-file) +=
+ "$(nl) <targets>" ;
+ for local t in [ virtual-target.all-targets ]
+ {
+ local action = [ $(t).action ] ;
+ if $(action)
+ # If a target has no action, it has no dependencies.
+ {
+ local name = [ full-target-name $(t) ] ;
+ local sources = [ $(action).sources ] ;
+ local dependencies ;
+ for local s in $(sources)
+ {
+ dependencies += [ full-target-name $(s) ] ;
+ }
+
+ local path = [ $(t).path ] ;
+ local jam-target = [ $(t).actual-name ] ;
+
+ .contents on $(xml-file) +=
+ "$(nl) <target>"
+ "$(nl) <name><![CDATA[$(name)]]></name>"
+ "$(nl) <dependencies>"
+ "$(nl) <dependency><![CDATA[$(dependencies)]]></dependency>"
+ "$(nl) </dependencies>"
+ "$(nl) <path><![CDATA[$(path)]]></path>"
+ "$(nl) <jam-target><![CDATA[$(jam-target)]]></jam-target>"
+ "$(nl) </target>"
+ ;
+ }
+ }
+ .contents on $(xml-file) +=
+ "$(nl) </targets>" ;
+
+ # Build $(xml-file) after $(constituents). Do so even if a
+ # constituent action fails and regenerate the xml on every bjam run.
+ INCLUDES $(xml-file) : $(constituents) ;
+ ALWAYS $(xml-file) ;
+ __ACTION_RULE__ on $(xml-file) = build-system.out-xml.generate-action ;
+ out-xml.generate $(xml-file) ;
+ }
+
+ # The actual build actions are here; if we did this work in the actions
+ # clause we would have to form a valid command line containing the
+ # result of @(...) below (the name of the XML file).
+ #
+ rule out-xml.generate-action ( args * : xml-file
+ : command status start end user system : output ? )
+ {
+ local contents =
+ [ on $(xml-file) return $(.header) $(.contents) $(.footer) ] ;
+ local f = @($(xml-file):E=$(contents)) ;
+ }
+
+ # Nothing to do here; the *real* actions happen in
+ # out-xml.generate-action.
+ actions quietly out-xml.generate { }
+
+ # Define the out-xml file target, which depends on all the targets so
+ # that it runs the collection after the targets have run.
+ out-xml $(.out-xml) : $(actual-targets) ;
+
+ # Set up a global __ACTION_RULE__ that records all the available
+ # statistics about each actual target in a variable "on" the --out-xml
+ # target.
+ #
+ rule out-xml.collect ( xml-file : target : command status start end user
+ system : output ? )
         {
- local action = [ $(t).action ] ;
+ local nl = "
+" ;
+ # Open the action with some basic info.
+ .contents on $(xml-file) +=
+ "$(nl) <action status=\"$(status)\" start=\"$(start)\" end=\"$(end)\" user=\"$(user)\" system=\"$(system)\">" ;
+
+ # If we have an action object we can print out more detailed info.
+ local action = [ on $(target) return $(.action) ] ;
             if $(action)
             {
- # If a target has no action, it has
- # no dependencies.
+ local action-name = [ $(action).action-name ] ;
+ local action-sources = [ $(action).sources ] ;
+ local action-props = [ $(action).properties ] ;
 
- local name = [ full-target-name $(t) ] ;
- local sources = [ $(action).sources ] ;
- local dependencies ;
- for local s in $(sources)
+ # The qualified name of the action which we created the target.
+ .contents on $(xml-file) +=
+ "$(nl) <name><![CDATA[$(action-name)]]></name>" ;
+
+ # The sources that made up the target.
+ .contents on $(xml-file) +=
+ "$(nl) <sources>" ;
+ for local source in $(action-sources)
                 {
- dependencies += [ full-target-name $(s) ] ;
+ local source-actual = [ $(source).actual-name ] ;
+ .contents on $(xml-file) +=
+ "$(nl) <source><![CDATA[$(source-actual)]]></source>" ;
                 }
+ .contents on $(xml-file) +=
+ "$(nl) </sources>" ;
 
- local path = [ $(t).path ] ;
- local jam-target = [ $(t).actual-name ] ;
-
+ # The properties that define the conditions under which the
+ # target was built.
                 .contents on $(xml-file) +=
- "$(nl) <target>"
- "$(nl) <name><![CDATA[$(name)]]></name>"
- "$(nl) <dependencies>"
- "$(nl) <dependency><![CDATA[$(dependencies)]]></dependency>"
- "$(nl) </dependencies>"
- "$(nl) <path><![CDATA[$(path)]]></path>"
- "$(nl) <jam-target><![CDATA[$(jam-target)]]></jam-target>"
- "$(nl) </target>"
- ;
- }
- }
- .contents on $(xml-file) +=
- "$(nl) </targets>"
- ;
-
- # Build $(xml-file) after $(constituents) and do so even if a
- # constituent action fails, and regenerate the xml on every bjam run.
- INCLUDES $(xml-file) : $(constituents) ;
- ALWAYS $(xml-file) ;
- __ACTION_RULE__ on $(xml-file) =
- build-system.out-xml.generate-action ;
- out-xml.generate $(xml-file) ;
- }
-
- # The actual build actions are here; if we did this work in the
- # actions clause we would have to form a valid command line
- # containing the result of @(...) below (the name of the XML file).
- rule out-xml.generate-action (
- args * : xml-file :
- command status start end user system : output ? )
- {
- local contents =
- [ on $(xml-file) return $(.header) $(.contents) $(.footer) ] ;
- local f = @($(xml-file):E=$(contents)) ;
- }
-
- # Nothing to do here; the *real* actions happen in
- # out-xml.generate-action
- actions quietly out-xml.generate { }
-
- # Define the out-xml file target, which depends on all the targets
- # so that it runs the collection after the targets have run.
- out-xml $(.out-xml) : $(actual-targets) ;
-
- # Set up a global __ACTION_RULE__ that records all the available
- # statistics about each actual target in a variable "on" the
- # --out-xml target.
- rule out-xml.collect (
- xml-file : target :
- command status start end user system : output ? )
- {
- local nl = "
-" ;
- # Open the action with some basic info.
- .contents on $(xml-file) +=
- "$(nl) <action status=\"$(status)\" start=\"$(start)\" end=\"$(end)\" user=\"$(user)\" system=\"$(system)\">"
- ;
-
- # If we have an action object we can print out more detailed info.
- local action = [ on $(target) return $(.action) ] ;
- if $(action)
- {
- local action-name = [ $(action).action-name ] ;
- local action-sources = [ $(action).sources ] ;
- local action-props = [ $(action).properties ] ;
-
- # The qualified name of the action which we created the target.
- .contents on $(xml-file) +=
- "$(nl) <name><![CDATA[$(action-name)]]></name>"
- ;
-
- # The sources that made up the target.
- .contents on $(xml-file) +=
- "$(nl) <sources>"
- ;
- for local source in $(action-sources)
- {
- local source-actual = [ $(source).actual-name ] ;
+ "$(nl) <properties>" ;
+ for local prop in [ $(action-props).raw ]
+ {
+ local prop-name = [ MATCH ^<(.*)>$ : $(prop:G) ] ;
+ .contents on $(xml-file) +=
+ "$(nl) <property name=\"$(prop-name)\"><![CDATA[$(prop:G=)]]></property>" ;
+ }
                 .contents on $(xml-file) +=
- "$(nl) <source><![CDATA[$(source-actual)]]></source>"
- ;
+ "$(nl) </properties>" ;
             }
+
+ local locate = [ on $(target) return $(LOCATE) ] ;
+ locate ?= "" ;
             .contents on $(xml-file) +=
- "$(nl) </sources>"
- ;
-
- # The properties that define the conditions under which the
- # target was built.
+ "$(nl) <jam-target><![CDATA[$(target)]]></jam-target>"
+ "$(nl) <path><![CDATA[$(target:G=:R=$(locate))]]></path>"
+ "$(nl) <command><![CDATA[$(command)]]></command>"
+ "$(nl) <output><![CDATA[$(output)]]></output>" ;
             .contents on $(xml-file) +=
- "$(nl) <properties>"
- ;
- for local prop in [ $(action-props).raw ]
- {
- local prop-name = [ MATCH ^<(.*)>$ : $(prop:G) ] ;
- .contents on $(xml-file) +=
- "$(nl) <property name=\"$(prop-name)\"><![CDATA[$(prop:G=)]]></property>"
- ;
- }
- .contents on $(xml-file) +=
- "$(nl) </properties>"
- ;
+ "$(nl) </action>" ;
         }
-
- local locate = [ on $(target) return $(LOCATE) ] ;
- locate ?= "" ;
- .contents on $(xml-file) +=
- "$(nl) <jam-target><![CDATA[$(target)]]></jam-target>"
- "$(nl) <path><![CDATA[$(target:G=:R=$(locate))]]></path>"
- "$(nl) <command><![CDATA[$(command)]]></command>"
- "$(nl) <output><![CDATA[$(output)]]></output>"
- ;
- .contents on $(xml-file) +=
- "$(nl) </action>"
- ;
- }
 
- # When no __ACTION_RULE__ is set "on" a target, the search falls
- # back to the global module
- module
- {
- __ACTION_RULE__ = build-system.out-xml.collect
- [ modules.peek build-system : .out-xml ] ;
+ # When no __ACTION_RULE__ is set "on" a target, the search falls back to
+ # the global module.
+ module
+ {
+ __ACTION_RULE__ = build-system.out-xml.collect
+ [ modules.peek build-system : .out-xml ] ;
+ }
     }
-}
 
-NOTFILE all ;
-DEPENDS all : $(actual-targets) ;
 
-if $(bjam-targets)
-{
- UPDATE $(bjam-targets:G=e) $(.out-xml) ;
-}
-else if $(cleanall)
-{
- UPDATE clean-all ;
-}
-else if $(clean)
-{
- local to-clean ;
- for local t in [ virtual-target.all-targets ]
- {
- local p = [ $(t).project ] ;
+ # TODO: See if this 'NOTFILE all' statement can be moved below to the
+ # default case where the 'all' target is actually requested to be built.
+ # Check for other Jam scripts manually setting a dependency for this target.
+ NOTFILE all ;
 
- # Remove only derived targets.
- if [ $(t).action ]
- {
- if $(t) in $(targets-to-clean)
- || [ is-child [ $(p).project-module ] ] = true
- {
- to-clean += $(t) ;
- }
- }
+
+ # And now that all the actual raw Jam targets and all the dependencies
+ # between them have been prepared (or we have everything set so we can
+ # easily prepare them) all that is left is to tell Jam to update those
+ # targets.
+ if $(bjam-targets)
+ {
+ UPDATE $(bjam-targets:G=e) $(.out-xml) ;
     }
- local to-clean-actual ;
- for local t in $(to-clean)
+ else if $(cleanall)
     {
- to-clean-actual += [ $(t).actualize ] ;
+ UPDATE clean-all ;
+ }
+ else if $(clean)
+ {
+ common.Clean clean : [ actual-clean-targets ] ;
+ UPDATE clean ;
+ }
+ else
+ {
+ DEPENDS all : $(actual-targets) ;
+ UPDATE all $(.out-xml) ;
     }
- common.Clean clean : $(to-clean-actual) ;
- UPDATE clean ;
-}
-else
-{
- UPDATE all $(.out-xml) ;
 }

Modified: branches/fix-links/tools/build/v2/build/alias.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/alias.jam (original)
+++ branches/fix-links/tools/build/v2/build/alias.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,69 +1,69 @@
-# Copyright 2003, 2004, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003, 2004, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
-# This module defines the 'alias' rule and associated class.
+# This module defines the 'alias' rule and the associated target class.
 #
-# Alias is just a main target which returns its source targets without any
-# processing. For example::
+# Alias is just a main target which returns its source targets without any
+# processing. For example:
 #
 # alias bin : hello test_hello ;
 # alias lib : helpers xml_parser ;
 #
-# Another important use of 'alias' is to conveniently group source files::
+# Another important use of 'alias' is to conveniently group source files:
 #
 # alias platform-src : win.cpp : <os>NT ;
 # alias platform-src : linux.cpp : <os>LINUX ;
 # exe main : main.cpp platform-src ;
-#
+#
 # Lastly, it's possible to create local alias for some target, with different
 # properties::
 #
 # alias big_lib : : @/external_project/big_lib/<link>static ;
 #
 
-import targets ;
+
 import "class" : new ;
-import errors : error ;
 import project ;
 import property-set ;
+import targets ;
+
 
-class alias-target-class : basic-target
+class alias-target-class : basic-target
 {
- rule __init__ ( name : project : sources * : requirements *
+ rule __init__ ( name : project : sources * : requirements *
         : default-build * : usage-requirements * )
     {
- basic-target.__init__ $(name) : $(project) : $(sources) : $(requirements)
- : $(default-build) : $(usage-requirements) ;
+ basic-target.__init__ $(name) : $(project) : $(sources) : $(requirements)
+ : $(default-build) : $(usage-requirements) ;
     }
-
+
     rule construct ( name : source-targets * : property-set )
     {
         return [ property-set.empty ] $(source-targets) ;
- }
-
- rule compute-usage-requirements ( subvariant )
+ }
+
+ rule compute-usage-requirements ( subvariant )
     {
         local base = [ basic-target.compute-usage-requirements $(subvariant) ] ;
         # Add source's usage requirement. If we don't do this, "alias" does not
         # look like 100% alias.
         return [ $(base).add [ $(subvariant).sources-usage-requirements ] ] ;
     }
-
 }
 
 # Declares the 'alias' target. It will build sources, and return them unaltered.
 rule alias ( name : sources * : requirements * : default-build * : usage-requirements * )
 {
     local project = [ project.current ] ;
-
+
     targets.main-target-alternative
- [ new alias-target-class $(name) : $(project)
- : [ targets.main-target-sources $(sources) : $(name) : no-renaming ]
- : [ targets.main-target-requirements $(requirements) : $(project) ]
- : [ targets.main-target-default-build $(default-build) : $(project) ]
- : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
- ] ;
+ [ new alias-target-class $(name) : $(project)
+ : [ targets.main-target-sources $(sources) : $(name) : no-renaming ]
+ : [ targets.main-target-requirements $(requirements) : $(project) ]
+ : [ targets.main-target-default-build $(default-build) : $(project) ]
+ : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
+ ] ;
 }
 
 IMPORT $(__name__) : alias : : alias ;

Modified: branches/fix-links/tools/build/v2/build/build-request.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/build-request.jam (original)
+++ branches/fix-links/tools/build/v2/build/build-request.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,16 +2,16 @@
 # Distributed under the Boost Software License, Version 1.0.
 # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
+import "class" : new ;
 import sequence ;
 import set ;
 import regex ;
 import feature ;
 import property ;
-import numbers ;
 import container ;
-import "class" : new ;
 import string ;
 
+
 # Transform property-set by applying f to each component property.
 local rule apply-to-property-set ( f property-set )
 {
@@ -19,22 +19,25 @@
     return [ string.join [ $(f) $(properties) ] : / ] ;
 }
 
-# expand the given build request by combining all property-sets which don't
-# specify conflicting non-free features.
+
+# Expand the given build request by combining all property-sets which don't
+# specify conflicting non-free features. Expects all the project files to
+# already be loaded.
 rule expand-no-defaults ( property-sets * )
 {
- # First make all features and subfeatures explicit
- local expanded-property-sets = [
- sequence.transform apply-to-property-set feature.expand-subfeatures
- : $(property-sets) ] ;
-
+ # First make all features and subfeatures explicit.
+ local expanded-property-sets = [ sequence.transform apply-to-property-set
+ feature.expand-subfeatures : $(property-sets) ] ;
+
     # Now combine all of the expanded property-sets
     local product = [ x-product $(expanded-property-sets) : $(feature-space) ] ;
-
+
     return $(product) ;
 }
 
-# implementaiton of x-product, below
+
+# Implementation of x-product, below. Expects all the project files to already
+# be loaded.
 local rule x-product-aux ( property-sets + )
 {
     local result ;
@@ -46,58 +49,60 @@
     {
         local x-product-seen ;
         {
- # don't mix in any conflicting features
+ # Don't mix in any conflicting features.
             local x-product-used = $(x-product-used) $(f) ;
-
+
             if $(property-sets[2])
             {
                 local rest = [ x-product-aux $(property-sets[2-]) : $(feature-space) ] ;
                 result = $(property-sets[1])/$(rest) ;
             }
-
+
             result ?= $(property-sets[1]) ;
         }
-
- # If we didn't encounter a conflicting feature lower down,
- # don't recurse again.
+
+ # If we didn't encounter a conflicting feature lower down, don't recurse
+ # again.
         if ! [ set.intersection $(f) : $(x-product-seen) ]
         {
             property-sets = ;
         }
-
+
         seen = $(x-product-seen) ;
     }
-
+
     if $(property-sets[2])
     {
         result += [ x-product-aux $(property-sets[2-]) : $(feature-space) ] ;
     }
-
- # Note that we've seen these features so that higher levels will
- # recurse again without them set.
+
+ # Note that we've seen these features so that higher levels will recurse
+ # again without them set.
     x-product-seen += $(f) $(seen) ;
     return $(result) ;
 }
 
-# Return the cross-product of all elements of property-sets, less any
-# that would contain conflicting values for single-valued features.
+
+# Return the cross-product of all elements of property-sets, less any that would
+# contain conflicting values for single-valued features. Expects all the project
+# files to already be loaded.
 local rule x-product ( property-sets * )
 {
     if $(property-sets).non-empty
     {
- # prepare some "scoped globals" that can be used by the
- # implementation function, x-product-aux.
+ # Prepare some "scoped globals" that can be used by the implementation
+ # function, x-product-aux.
         local x-product-seen x-product-used ;
         return [ x-product-aux $(property-sets) : $(feature-space) ] ;
     }
- # otherwise return empty
+ # Otherwise return empty.
 }
 
-# Returns true if 'v' is either implicit value, or
-# the part before the first '-' symbol is implicit value
+
+# Returns true if either 'v' or the part of 'v' before the first '-' symbol is
+# an implicit value. Expects all the project files to already be loaded.
 local rule looks-like-implicit-value ( v )
 {
-
     if [ feature.is-implicit-value $(v) ]
     {
         return true ;
@@ -108,16 +113,16 @@
         if [ feature.is-implicit-value $(split[1]) ]
         {
             return true ;
- }
+ }
     }
 }
 
 
-# Takes the command line tokens (such as taken from ARGV rule) and constructs
-# build request from it.
-# Returns a vector of two vectors (where "vector" means container.jam's "vector").
-# First is the set of targets specified in the command line, and second is
-# the set of requested build properties.
+# Takes the command line tokens (such as taken from the ARGV rule) and
+# constructs a build request from them. Returns a vector of two vectors (where
+# "vector" means container.jam's "vector"). First is the set of targets
+# specified in the command line, and second is the set of requested build
+# properties. Expects all the project files to already be loaded.
 rule from-command-line ( command-line * )
 {
     local targets ;
@@ -131,15 +136,16 @@
         {
             skip-next = ;
         }
- else if ! [ MATCH "^(-).*" : $(e) ]
+ else if ! [ MATCH "^(-).*" : $(e) ]
         {
- # Build request spec either has "=" in it, or completely
- # consists of implicit feature values.
+ # Build request spec either has "=" in it or completely consists of
+ # implicit feature values.
             local fs = feature-space ;
- if [ MATCH "(.*=.*)" : $(e) ]
- || [ looks-like-implicit-value $(e:D=) : $(feature-space) ]
+ if [ MATCH "(.*=.*)" : $(e) ]
+ || [ looks-like-implicit-value $(e:D=) : $(feature-space) ]
             {
- properties += [ convert-command-line-element $(e) : $(feature-space) ] ;
+ properties += [ convert-command-line-element $(e)
+ : $(feature-space) ] ;
             }
             else
             {
@@ -151,24 +157,27 @@
             skip-next = true ;
         }
     }
- return [ new vector [ new vector $(targets) ] [ new vector $(properties) ] ] ;
+ return [ new vector
+ [ new vector $(targets) ]
+ [ new vector $(properties) ] ] ;
 }
 
-# Converts one element of command line build request specification into
-# internal form.
+
+# Converts one element of command line build request specification into internal
+# form. Expects all the project files to already be loaded.
 local rule convert-command-line-element ( e )
 {
     local result ;
     local parts = [ regex.split $(e) "/" ] ;
- for local p in $(parts)
+ for local p in $(parts)
     {
         local m = [ MATCH "([^=]*)=(.*)" : $(p) ] ;
         local lresult ;
- if $(m)
+ if $(m)
         {
             local feature = $(m[1]) ;
- local values = [ regex.split $(m[2]) "," ] ;
- lresult = <$(feature)>$(values) ;
+ local values = [ regex.split $(m[2]) "," ] ;
+ lresult = <$(feature)>$(values) ;
         }
         else
         {
@@ -176,17 +185,16 @@
         }
 
         if ! [ MATCH (.*-.*) : $(p) ]
- {
- # property.validate cannot handle subfeatures,
- # so we avoid the check here.
+ {
+ # property.validate cannot handle subfeatures, so we avoid the check
+ # here.
             for local p in $(lresult)
             {
                 property.validate $(p) : $(feature-space) ;
             }
         }
-
 
- if ! $(result)
+ if ! $(result)
         {
             result = $(lresult) ;
         }
@@ -194,17 +202,19 @@
         {
             result = $(result)/$(lresult) ;
         }
- }
-
+ }
+
     return $(result) ;
 }
 
+
 rule __test__ ( )
 {
- import assert feature ;
-
+ import assert ;
+ import feature ;
+
     feature.prepare-test build-request-test-temp ;
-
+
     import build-request ;
     import build-request : expand-no-defaults : build-request.expand-no-defaults ;
     import errors : try catch ;
@@ -222,56 +232,45 @@
 
     feature runtime-link : dynamic static : symmetric ;
 
- # empty build requests should expand to empty.
+ # Empty build requests should expand to empty.
     assert.result
- : build-request.expand-no-defaults
- ;
+ : build-request.expand-no-defaults ;
 
     assert.result
- <toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>debug
- <toolset>msvc/<stdlib>stlport/<variant>debug
- <toolset>msvc/<variant>debug
-
- : build-request.expand-no-defaults gcc-3.0.1/stlport msvc/stlport msvc debug
- ;
+ <toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>debug
+ <toolset>msvc/<stdlib>stlport/<variant>debug
+ <toolset>msvc/<variant>debug
+ : build-request.expand-no-defaults gcc-3.0.1/stlport msvc/stlport msvc debug ;
 
     assert.result
- <toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>debug
- <toolset>msvc/<variant>debug
- <variant>debug/<toolset>msvc/<stdlib>stlport
-
- : build-request.expand-no-defaults gcc-3.0.1/stlport msvc debug msvc/stlport
- ;
+ <toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>debug
+ <toolset>msvc/<variant>debug
+ <variant>debug/<toolset>msvc/<stdlib>stlport
+ : build-request.expand-no-defaults gcc-3.0.1/stlport msvc debug msvc/stlport ;
 
     assert.result
- <toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>debug/<inlining>off
- <toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>release/<inlining>off
-
- : build-request.expand-no-defaults gcc-3.0.1/stlport debug release <inlining>off
- ;
+ <toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>debug/<inlining>off
+ <toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>release/<inlining>off
+ : build-request.expand-no-defaults gcc-3.0.1/stlport debug release <inlining>off ;
 
     assert.result
- <include>a/b/c/<toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>debug/<include>x/y/z
- <include>a/b/c/<toolset>msvc/<stdlib>stlport/<variant>debug/<include>x/y/z
- <include>a/b/c/<toolset>msvc/<variant>debug/<include>x/y/z
-
- : build-request.expand-no-defaults <include>a/b/c gcc-3.0.1/stlport msvc/stlport msvc debug <include>x/y/z
- ;
+ <include>a/b/c/<toolset>gcc/<toolset-gcc:version>3.0.1/<stdlib>stlport/<variant>debug/<include>x/y/z
+ <include>a/b/c/<toolset>msvc/<stdlib>stlport/<variant>debug/<include>x/y/z
+ <include>a/b/c/<toolset>msvc/<variant>debug/<include>x/y/z
+ : build-request.expand-no-defaults <include>a/b/c gcc-3.0.1/stlport msvc/stlport msvc debug <include>x/y/z ;
 
     local r ;
 
- r = [ build-request.from-command-line bjam debug runtime-link=dynamic ] ;
+ r = [ build-request.from-command-line bjam debug runtime-link=dynamic ] ;
     assert.equal [ $(r).get-at 1 ] : ;
     assert.equal [ $(r).get-at 2 ] : debug <runtime-link>dynamic ;
 
     try ;
     {
-
         build-request.from-command-line bjam gcc/debug runtime-link=dynamic/static ;
     }
     catch \"static\" is not a value of an implicit feature ;
 
-
     r = [ build-request.from-command-line bjam -d2 --debug debug target runtime-link=dynamic ] ;
     assert.equal [ $(r).get-at 1 ] : target ;
     assert.equal [ $(r).get-at 2 ] : debug <runtime-link>dynamic ;
@@ -282,13 +281,13 @@
 
     r = [ build-request.from-command-line bjam debug gcc/runtime-link=dynamic,static ] ;
     assert.equal [ $(r).get-at 1 ] : ;
- assert.equal [ $(r).get-at 2 ] : debug gcc/<runtime-link>dynamic
- gcc/<runtime-link>static ;
+ assert.equal [ $(r).get-at 2 ] : debug gcc/<runtime-link>dynamic
+ gcc/<runtime-link>static ;
 
     r = [ build-request.from-command-line bjam msvc gcc,borland/runtime-link=static ] ;
     assert.equal [ $(r).get-at 1 ] : ;
- assert.equal [ $(r).get-at 2 ] : msvc gcc/<runtime-link>static
- borland/<runtime-link>static ;
+ assert.equal [ $(r).get-at 2 ] : msvc gcc/<runtime-link>static
+ borland/<runtime-link>static ;
 
     r = [ build-request.from-command-line bjam gcc-3.0 ] ;
     assert.equal [ $(r).get-at 1 ] : ;
@@ -296,5 +295,3 @@
 
     feature.finish-test build-request-test-temp ;
 }
-
-

Modified: branches/fix-links/tools/build/v2/build/feature.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/feature.jam (original)
+++ branches/fix-links/tools/build/v2/build/feature.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,52 +1,53 @@
-# Copyright 2001, 2002, 2003 Dave Abrahams
-# Copyright 2002, 2006 Rene Rivera
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2001, 2002, 2003 Dave Abrahams
+# Copyright 2002, 2006 Rene Rivera
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
+import assert : * ;
 import "class" : * ;
-
-import errors : error lol->list ;
-import sequence ;
+import errors : lol->list ;
+import indirect ;
+import modules ;
 import regex ;
+import sequence ;
 import set ;
 import utility ;
-import modules indirect ;
-import assert : * ;
+
 
 local rule setup ( )
 {
     .all-attributes =
-
- implicit
- executed
- composite
- optional
- symmetric
- free
- incidental
- path
- dependency
- propagated
- link-incompatible
- subfeature
- order-sensitive
- ;
+ implicit
+ executed
+ composite
+ optional
+ symmetric
+ free
+ incidental
+ path
+ dependency
+ propagated
+ link-incompatible
+ subfeature
+ order-sensitive
+ ;
 
     .all-features = ;
- .all-subfeatures = ; # non-subfeatures
- .all-top-features = ; # non-subfeatures
+ .all-subfeatures = ;
+ .all-top-features = ; # non-subfeatures
     .all-implicit-values = ;
 }
 setup ;
 
-# prepare a fresh space to test in by moving all global variable
-# settings into the given temporary module and erasing them here.
+
+# Prepare a fresh space to test in by moving all global variable settings into
+# the given temporary module and erasing them here.
 rule prepare-test ( temp-module )
 {
     DELETE_MODULE $(temp-module) ;
-
- # transfer globals to temp-module
+
+ # Transfer globals to temp-module.
     for local v in [ VARNAMES feature ]
     {
         if [ MATCH (\\.) : $(v) ]
@@ -58,11 +59,12 @@
     setup ;
 }
 
-# clear out all global variables and recover all variables from the
-# given temporary module
+
+# Clear out all global variables and recover all variables from the given
+# temporary module.
 rule finish-test ( temp-module )
 {
- # clear globals
+ # Clear globals.
     for local v in [ VARNAMES feature ]
     {
         if [ MATCH (\\.) : $(v) ]
@@ -70,7 +72,7 @@
             $(v) = ;
         }
     }
-
+
     for local v in [ VARNAMES $(temp-module) ]
     {
         $(v) = [ modules.peek $(temp-module) : $(v) ] ;
@@ -79,33 +81,31 @@
 }
 
 
-# Transform features by bracketing any elements which aren't already
-# bracketed by "<>"
+# Transform features by bracketing any elements which aren't already bracketed
+# by "<>".
 local rule grist ( features * )
 {
     local empty = "" ;
- local r = $(empty:G=$(features)) ;
- return $(r) ;
+ return $(empty:G=$(features)) ;
 }
 
-empty = "" ;
 
-# declare a new feature with the given name, values, and attributes.
-rule feature (
- name # feature name
- : values * # the allowable values - may be extended later with feature.extend
- : attributes * # The feature's attributes (e.g. implicit, free, propagated...)
+# Declare a new feature with the given name, values, and attributes.
+rule feature (
+ name # Feature name.
+ : values * # Allowable values - may be extended later using feature.extend.
+ : attributes * # Feature attributes (e.g. implicit, free, propagated...).
 )
 {
     name = [ grist $(name) ] ;
 
     local error ;
 
- # if there are any unknown attributes...
+ # Check for any unknown attributes.
     if ! ( $(attributes) in $(.all-attributes) )
     {
         error = unknown attributes:
- [ set.difference $(attributes) : $(.all-attributes) ] ;
+ [ set.difference $(attributes) : $(.all-attributes) ] ;
     }
     else if $(name) in $(.all-features)
     {
@@ -116,16 +116,15 @@
         error = free features cannot also be implicit ;
     }
     else if free in $(attributes) && propagated in $(attributes)
- {
+ {
         error = free features cannot be propagated ;
- }
-
+ }
 
     if $(error)
     {
- error $(error)
- : "in" feature declaration:
- : feature [ lol->list $(1) : $(2) : $(3) ] ;
+ errors.error $(error)
+ : "in" feature declaration:
+ : feature [ lol->list $(1) : $(2) : $(3) ] ;
     }
 
     $(name).values ?= ;
@@ -142,24 +141,24 @@
     {
         .all-top-features += $(name) ;
     }
- extend $(name) : $(values) ;
+ extend $(name) : $(values) ;
 }
 
-# set default value of the given feature, overriding any previous
-# default.
+
+# Sets the default value of the given feature, overriding any previous default.
 rule set-default ( feature : value )
 {
     local f = [ grist $(feature) ] ;
- if ! $(value) in $($(f).values)
+ if ! $(value) in $($(f).values)
     {
- errors.error "The specified default value, '$(value)' is invalid"
+ errors.error "The specified default value, '$(value)' is invalid"
           : "allowed values are: " $($(f).values) ;
- }
+ }
     $(f).default = $(value) ;
 }
 
 
-# return the default property values for the given features.
+# Returns the default property values for the given features.
 rule defaults ( features * )
 {
     local result ;
@@ -178,7 +177,8 @@
     return $(result) ;
 }
 
-# returns true iff all elements of names are valid features.
+
+# Returns true iff all 'names' elements are valid features.
 rule valid ( names + )
 {
     if $(names) in $(.all-features)
@@ -187,31 +187,33 @@
     }
 }
 
-# return the attibutes of the given feature
+
+# Returns the attibutes of the given feature.
 rule attributes ( feature )
 {
     return $($(:E=:G=$(feature)).attributes) ;
 }
 
-# return the values of the given feature
+
+# Returns the values of the given feature.
 rule values ( feature )
 {
     return $($(:E=:G=$(feature)).values) ;
 }
 
-# returns true iff 'value-string' is a value-string of an implicit feature
+
+# Returns true iff 'value-string' is a value-string of an implicit feature.
 rule is-implicit-value ( value-string )
 {
     local v = [ regex.split $(value-string) - ] ;
     local failed ;
- if ! $(v[1]) in $(.all-implicit-values)
+ if ! $(v[1]) in $(.all-implicit-values)
     {
         failed = true ;
     }
- else
+ else
     {
         local feature = $($(v[1]).implicit-feature) ;
-
         for local subvalue in $(v[2-])
         {
             if ! [ find-implied-subfeature $(feature) $(subvalue) : $(v[1]) ]
@@ -220,82 +222,87 @@
             }
         }
     }
-
- if ! $(failed)
+
+ if ! $(failed)
     {
         return true ;
     }
 }
 
-# return the implicit feature associated with the given implicit value.
+
+# Returns the implicit feature associated with the given implicit value.
 rule implied-feature ( implicit-value )
 {
     local components = [ regex.split $(implicit-value) "-" ] ;
-
+
     local feature = $($(components[1]).implicit-feature) ;
     if ! $(feature)
     {
- error \"$(implicit-value)\" is not a value of an implicit feature ;
- feature = "" ; # keep testing happy; it expects a result.
+ errors.error \"$(implicit-value)\" is not a value of an implicit feature ;
+ feature = "" ; # Keep testing happy; it expects a result.
     }
     return $(feature) ;
 }
 
+
 local rule find-implied-subfeature ( feature subvalue : value-string ? )
 {
- # feature should be of the form <feature-name>
+ # Feature should be of the form <feature-name>.
     if $(feature) != $(feature:G)
     {
- error invalid feature $(feature) ;
+ errors.error invalid feature $(feature) ;
     }
 
     return $($(feature)$(value-string:E="")<>$(subvalue).subfeature) ;
 }
 
-# Given a feature and a value of one of its subfeatures, find the name
-# of the subfeature. If value-string is supplied, looks for implied
-# subfeatures that are specific to that value of feature
-rule implied-subfeature (
- feature # The main feature name
- subvalue # The value of one of its subfeatures
- : value-string ? # The value of the main feature
+
+# Given a feature and a value of one of its subfeatures, find the name of the
+# subfeature. If value-string is supplied, looks for implied subfeatures that
+# are specific to that value of feature
+rule implied-subfeature (
+ feature # The main feature name.
+ subvalue # The value of one of its subfeatures.
+ : value-string ? # The value of the main feature.
 )
 {
     local subfeature = [ find-implied-subfeature $(feature) $(subvalue)
- : $(value-string) ] ;
-
+ : $(value-string) ] ;
     if ! $(subfeature)
     {
         value-string ?= "" ;
- error \"$(subvalue)\" is not a known subfeature value of
- $(feature)$(value-string) ;
+ errors.error \"$(subvalue)\" is not a known subfeature value of
+ $(feature)$(value-string) ;
     }
-
     return $(subfeature) ;
 }
 
-# generate an error if the feature is unknown
+
+# Generate an error if the feature is unknown.
 local rule validate-feature ( feature )
 {
     if ! $(feature) in $(.all-features)
     {
- error unknown feature \"$(feature)\" ;
+ errors.error unknown feature \"$(feature)\" ;
     }
 }
 
-# Given a feature and value, or just a value corresponding to an
-# implicit feature, returns a property set consisting of all component
-# subfeatures and their values. For example:
+
+# Given a feature and its value or just a value corresponding to an implicit
+# feature, returns a property set consisting of all component subfeatures and
+# their values. For example all the following calls:
+#
+# expand-subfeatures-aux <toolset>gcc-2.95.2-linux-x86
+# expand-subfeatures-aux gcc-2.95.2-linux-x86
 #
-# expand-subfeatures <toolset>gcc-2.95.2-linux-x86
-# -> <toolset>gcc <toolset-version>2.95.2 <toolset-os>linux <toolset-cpu>x86
+# return:
 #
-# equivalent to:
-# expand-subfeatures gcc-2.95.2-linux-x86
-local rule expand-subfeatures-aux (
- feature ? # The name of the feature, or empty if value corresponds to an implicit property
- : value # The value of the feature.
- : dont-validate ? # If set, no validation of value string will be done
+# <toolset>gcc <toolset-version>2.95.2 <toolset-os>linux <toolset-cpu>x86
+local rule expand-subfeatures-aux (
+ feature ? # Feature name or empty if value corresponds to an
+ # implicit property.
+ : value # Feature value.
+ : dont-validate ? # If set, no value string validation will be done.
 )
 {
     if $(feature)
@@ -312,31 +319,31 @@
         validate-feature $(feature) ;
     }
     if ! $(dont-validate)
- {
+ {
         validate-value-string $(feature) $(value) ;
     }
-
+
     local components = [ regex.split $(value) "-" ] ;
-
- # get the top-level feature's value
+
+ # Get the top-level feature's value.
     local value = $(components[1]:G=) ;
 
     local result = $(components[1]:G=$(feature)) ;
-
+
     local subvalues = $(components[2-]) ;
     while $(subvalues)
     {
- local subvalue = $(subvalues[1]) ; # pop the head off of subvalues
+ local subvalue = $(subvalues[1]) ; # Pop the head off of subvalues.
         subvalues = $(subvalues[2-]) ;
-
+
         local subfeature = [ find-implied-subfeature $(feature) $(subvalue) : $(value) ] ;
-
- # If no subfeature was found, reconstitute the value string and use that
+
+ # If no subfeature was found reconstitute the value string and use that.
         if ! $(subfeature)
         {
             result = $(components:J=-) ;
             result = $(result:G=$(feature)) ;
- subvalues = ; # stop looping
+ subvalues = ; # Stop looping.
         }
         else
         {
@@ -344,25 +351,27 @@
             result += $(subvalue:G=$(f)-$(subfeature)) ;
         }
     }
-
+
     return $(result) ;
 }
 
-# Make all elements of properties corresponding to implicit features
-# explicit, and express all subfeature values as separate properties
-# in their own right. For example, the property
+
+# Make all elements of properties corresponding to implicit features explicit,
+# and express all subfeature values as separate properties in their own right.
+# For example, all of the following properties
 #
 # gcc-2.95.2-linux-x86
+# <toolset>gcc-2.95.2-linux-x86
 #
 # might expand to
 #
 # <toolset>gcc <toolset-version>2.95.2 <toolset-os>linux <toolset-cpu>x86
 #
-rule expand-subfeatures (
- properties * # property set with elements of the form
- # <feature>value-string or just value-string in the
- # case of implicit features.
- : dont-validate ?
+rule expand-subfeatures (
+ properties * # Property set with elements of the form
+ # <feature>value-string or just value-string in the case
+ # of implicit features.
+ : dont-validate ?
 )
 {
     local result ;
@@ -370,17 +379,18 @@
     {
         # Don't expand subfeatures in subfeatures
         if ! [ MATCH "(:)" : $(p:G) ]
- {
+ {
             result += [ expand-subfeatures-aux $(p:G) : $(p:G=) : $(dont-validate) ] ;
         }
         else
         {
             result += $(p) ;
- }
+ }
     }
     return $(result) ;
 }
 
+
 # Helper for extend, below. Handles the feature case.
 local rule extend-feature ( feature : values * )
 {
@@ -392,7 +402,7 @@
         {
             if $($(v).implicit-feature)
             {
- error $(v) is already associated with the \"$($(v).implicit-feature)\" feature ;
+ errors.error $(v) is already associated with the \"$($(v).implicit-feature)\" feature ;
             }
             $(v).implicit-feature = $(feature) ;
         }
@@ -404,20 +414,21 @@
         # This is the first value specified for this feature,
         # take it as default value
         $(feature).default = $(values[1]) ;
- }
+ }
     $(feature).values += $(values) ;
 }
 
+
 # Checks that value-string is a valid value-string for the given feature.
 rule validate-value-string ( feature value-string )
-{
- if ! (
- free in $($(feature).attributes)
- || ( $(value-string) in $(feature).values )
+{
+ if ! (
+ free in $($(feature).attributes)
+ || ( $(value-string) in $(feature).values )
     )
     {
         local values = $(value-string) ;
-
+
         if $($(feature).subfeatures)
         {
             values = [ regex.split $(value-string) - ] ;
@@ -425,38 +436,33 @@
 
         if ! ( $(values[1]) in $($(feature).values) ) &&
 
- # An empty value is allowed for optional features
- ( $(values[1]) || ! ( optional in $($(feature).attributes) ) )
+ # An empty value is allowed for optional features.
+ ( $(values[1]) || ! ( optional in $($(feature).attributes) ) )
         {
- error \"$(values[1])\" is not a known value of feature $(feature)
- : legal values: \"$($(feature).values)\" ;
+ errors.error \"$(values[1])\" is not a known value of feature $(feature)
+ : legal values: \"$($(feature).values)\" ;
         }
 
         for local v in $(values[2-])
         {
- # this will validate any subfeature values in value-string
+ # This will validate any subfeature values in value-string.
             implied-subfeature $(feature) $(v) : $(values[1]) ;
         }
     }
 }
 
+
 # A helper that computes:
-# * the name(s) of the module-local variable(s) used to record the
-# correspondence between subvalue(s) and a subfeature
-#
-# * the value of that variable when such a subfeature/subvalue has
-# been defined
-#
-# Returns a list consisting of the latter followed by the former
-local rule subvalue-var (
- feature # Main feature name
-
- value-string ? # If supplied, specifies a specific value of the
- # main feature for which the subfeature values
- # are valid
-
- : subfeature # The name of the subfeature
- : subvalues * # The subfeature values
+# * name(s) of module-local variable(s) used to record the correspondence
+# between subvalue(s) and a subfeature
+# * value of that variable when such a subfeature/subvalue has been defined and
+# returns a list consisting of the latter followed by the former.
+local rule subvalue-var (
+ feature # Main feature name.
+ value-string ? # If supplied, specifies a specific value of the main
+ # feature for which the subfeature values are valid.
+ : subfeature # Subfeature name.
+ : subvalues * # Subfeature values.
 )
 {
     feature = [ grist $(feature) ] ;
@@ -472,68 +478,68 @@
     $(feature)$(value-string:E="")<>$(subvalues).subfeature ;
 }
 
-# Extends the given subfeature with the subvalues. If the optional
-# value-string is provided, the subvalues are only valid for the given
-# value of the feature. Thus, you could say that
-# <target-platform>mingw is specifc to <toolset>gcc-2.95.2 as follows:
+
+# Extends the given subfeature with the subvalues. If the optional value-string
+# is provided, the subvalues are only valid for the given value of the feature.
+# Thus, you could say that <target-platform>mingw is specific to
+# <toolset>gcc-2.95.2 as follows:
 #
 # extend-subfeature toolset gcc-2.95.2 : target-platform : mingw ;
 #
-rule extend-subfeature (
- feature # The feature whose subfeature is being extended
-
- value-string ? # If supplied, specifies a specific value of the
- # main feature for which the new subfeature values
- # are valid
-
- : subfeature # The name of the subfeature
- : subvalues * # The additional values of the subfeature being defined.
+rule extend-subfeature (
+ feature # The feature whose subfeature is being extended.
+
+ value-string ? # If supplied, specifies a specific value of the main
+ # feature for which the new subfeature values are valid.
+
+ : subfeature # Subfeature name.
+ : subvalues * # Additional subfeature values.
 )
 {
- local subfeature-vars = [
- subvalue-var $(feature) $(value-string) : $(subfeature) : $(subvalues) ] ;
-
+ local subfeature-vars = [ subvalue-var $(feature) $(value-string)
+ : $(subfeature) : $(subvalues) ] ;
+
     local f = [ utility.ungrist [ grist $(feature) ] ] ;
     extend $(f)-$(subfeature-vars[1]) : $(subvalues) ;
-
- # provide a way to get from the given feature or property and
- # subfeature value to the subfeature name.
+
+ # Provide a way to get from the given feature or property and subfeature
+ # value to the subfeature name.
     $(subfeature-vars[2-]) = $(subfeature-vars[1]) ;
 }
 
-# Returns true iff the subvalues are valid for the feature. When the
-# optional value-string is provided, returns true iff the subvalues
-# are valid for the given value of the feature.
+
+# Returns true iff the subvalues are valid for the feature. When the optional
+# value-string is provided, returns true iff the subvalues are valid for the
+# given value of the feature.
 rule is-subvalue ( feature : value-string ? : subfeature : subvalue )
 {
- local subfeature-vars = [
- subvalue-var $(feature) $(value-string) : $(subfeature) : $(subvalue) ] ;
-
- if $($(subfeature-vars[2])) = $(subfeature-vars[1])
+ local subfeature-vars = [ subvalue-var $(feature) $(value-string)
+ : $(subfeature) : $(subvalue) ] ;
+
+ if $($(subfeature-vars[2])) = $(subfeature-vars[1])
     {
         return true ;
     }
 }
 
+
 # Can be called three ways:
 #
 # 1. extend feature : values *
 # 2. extend <feature> subfeature : values *
 # 3. extend <feature>value-string subfeature : values *
 #
-# * Form 1 adds the given values to the given feature
-# * Forms 2 and 3 add subfeature values to the given feature
-# * Form 3 adds the subfeature values as specific to the given
-# property value-string.
+# * Form 1 adds the given values to the given feature.
+# * Forms 2 and 3 add subfeature values to the given feature.
+# * Form 3 adds the subfeature values as specific to the given property
+# value-string.
 #
 rule extend ( feature-or-property subfeature ? : values * )
 {
- local
- feature # If a property was specified this is its feature
- value-string # E.G., the gcc-2.95-2 part of <toolset>gcc-2.95.2
- ;
+ local feature ; # If a property was specified this is its feature.
+ local value-string ; # E.g., the gcc-2.95-2 part of <toolset>gcc-2.95.2.
 
- # if a property was specified
+ # If a property was specified.
     if $(feature-or-property:G) && $(feature-or-property:G=)
     {
         # Extract the feature and value-string, if any.
@@ -545,140 +551,145 @@
         feature = [ grist $(feature-or-property) ] ;
     }
 
- # Dispatch to the appropriate handler
+ # Dispatch to the appropriate handler.
     if $(subfeature)
     {
- extend-subfeature $(feature) $(value-string)
- : $(subfeature) : $(values) ;
+ extend-subfeature $(feature) $(value-string) : $(subfeature)
+ : $(values) ;
     }
     else
     {
         # If no subfeature was specified, we didn't expect to see a
- # value-string
+ # value-string.
         if $(value-string)
         {
- error can only be specify a property as the first argument
- when extending a subfeature
- : usage:
- : " extend" feature ":" values...
- : " | extend" <feature>value-string subfeature ":" values...
- ;
+ errors.error can only specify a property as the first argument when
+ extending a subfeature
+ : usage:
+ : " extend" feature ":" values...
+ : " | extend" <feature>value-string subfeature ":" values...
+ ;
         }
 
         extend-feature $(feature) : $(values) ;
     }
 }
 
+
 local rule get-subfeature-name ( subfeature value-string ? )
 {
     local prefix = $(value-string): ;
     return $(prefix:E="")$(subfeature) ;
 }
 
-# Declares a subfeature
-rule subfeature (
- feature # Root feature that is not a subfeature
- value-string ? # A value-string specifying which feature or
- # subfeature values this subfeature is specific to,
- # if any
-
- : subfeature # The name of the subfeature being declared
- : subvalues * # The allowed values of this subfeature
- : attributes * # The attributes of the subfeature
+
+# Declares a subfeature.
+rule subfeature (
+ feature # Root feature that is not a subfeature.
+ value-string ? # A value-string specifying which feature or subfeature
+ # values this subfeature is specific to, if any.
+ : subfeature # The name of the subfeature being declared.
+ : subvalues * # The allowed values of this subfeature.
+ : attributes * # The attributes of the subfeature.
 )
 {
     feature = [ grist $(feature) ] ;
     validate-feature $(feature) ;
-
- # Add grist to the subfeature name if a value-string was supplied
+
+ # Add grist to the subfeature name if a value-string was supplied.
     local subfeature-name = [ get-subfeature-name $(subfeature) $(value-string) ] ;
-
+
     if $(subfeature-name) in $($(feature).subfeatures)
     {
- error \"$(subfeature)\" already declared as a subfeature of \"$(feature)\"
- "specific to "$(value-string) ;
+ errors.error \"$(subfeature)\" already declared as a subfeature of \"$(feature)\"
+ "specific to "$(value-string) ;
     }
     $(feature).subfeatures += $(subfeature-name) ;
-
- # First declare the subfeature as a feature in its own right
+
+ # First declare the subfeature as a feature in its own right.
     local f = [ utility.ungrist $(feature) ] ;
     feature $(f)-$(subfeature-name) : $(subvalues) : $(attributes) subfeature ;
-
+
     # Now make sure the subfeature values are known.
     extend-subfeature $(feature) $(value-string) : $(subfeature) : $(subvalues) ;
 }
 
-# Set the components of the given composite property
+
+# Set components of the given composite property.
 rule compose ( composite-property : component-properties * )
 {
     local feature = $(composite-property:G) ;
     if ! ( composite in [ attributes $(feature) ] )
     {
- error "$(feature)" is not a composite feature ;
+ errors.error "$(feature)" is not a composite feature ;
     }
 
     $(composite-property).components ?= ;
     if $($(composite-property).components)
     {
- error components of "$(composite-property)" already set:
- $($(composite-property).components) ;
+ errors.error components of "$(composite-property)" already set:
+ $($(composite-property).components) ;
     }
 
     if $(composite-property) in $(component-properties)
     {
- error composite property "$(composite-property)" cannot have itself as a component ;
+ errors.error composite property "$(composite-property)" cannot have itself as a component ;
     }
     $(composite-property).components = $(component-properties) ;
 }
 
+
 local rule expand-composite ( property )
 {
     return $(property)
- [ sequence.transform expand-composite : $($(property).components) ] ;
+ [ sequence.transform expand-composite : $($(property).components) ] ;
 }
 
-# return all values of the given feature specified by the given property set.
+
+# Return all values of the given feature specified by the given property set.
 rule get-values ( feature : properties * )
 {
     local result ;
-
- feature = $(:E=:G=$(feature)) ; # add <> if necessary.
+
+ feature = $(:E=:G=$(feature)) ; # Add <> if necessary.
     for local p in $(properties)
     {
         if $(p:G) = $(feature)
         {
- #~ Use MATCH instead if :G= to get the value, in order to preserve
- #~ the value intact instead of having bjam treat it as a decompossible
- #~ path.
+ # Use MATCH instead of :G= to get the value, in order to preserve
+ # the value intact instead of having bjam treat it as a decomposable
+ # path.
             result += [ MATCH ">(.*)" : $(p) ] ;
         }
     }
     return $(result) ;
 }
 
+
 rule free-features ( )
 {
     return $(free.features) ;
 }
 
-# Expand all composite properties in the set so that all components
-# are explicitly expressed.
+
+# Expand all composite properties in the set so that all components are
+# explicitly expressed.
 rule expand-composites ( properties * )
 {
     local explicit-features = $(properties:G) ;
-
     local result ;
- # now expand composite features
+
+ # Now expand composite features.
     for local p in $(properties)
     {
         local expanded = [ expand-composite $(p) ] ;
-
+
         for local x in $(expanded)
         {
             if ! $(x) in $(result)
             {
                 local f = $(x:G) ;
-
+
                 if $(f) in $(free.features)
                 {
                     result += $(x) ;
@@ -689,21 +700,21 @@
                     {
                         if $(f) in $(result:G)
                         {
- error expansions of composite features result in conflicting
- values for $(f)
- : values: [ get-values $(f) : $(result) ] $(x:G=)
- : one contributing composite property was $(p) ;
+ errors.error expansions of composite features result
+ in conflicting values for $(f)
+ : values: [ get-values $(f) : $(result) ] $(x:G=)
+ : one contributing composite property was $(p) ;
                         }
                         else
                         {
                             result += $(x) ;
                         }
                     }
- }
+ }
                 else if $(f) in $(result:G)
                 {
- error explicitly-specified values of non-free feature
- $(f) conflict :
+ errors.error explicitly-specified values of non-free feature
+ $(f) conflict :
                         "existing values:" [ get-values $(f) : $(properties) ] :
                         "value from expanding " $(p) ":" $(x:G=) ;
                 }
@@ -711,15 +722,16 @@
                 {
                     result += $(x) ;
                 }
- }
+ }
         }
     }
     return $(result) ;
 }
 
-# Return true iff f is an ordinary subfeature of the parent-property's
-# feature, or if f is a subfeature fo the parent-property's feature
-# specific to the parent-property's value
+
+# Return true iff f is an ordinary subfeature of the parent-property's feature,
+# or if f is a subfeature of the parent-property's feature specific to the
+# parent-property's value.
 local rule is-subfeature-of ( parent-property f )
 {
     if subfeature in $($(f).attributes)
@@ -727,9 +739,8 @@
         local specific-subfeature = [ MATCH <(.*):(.*)> : $(f) ] ;
         if $(specific-subfeature)
         {
- # The feature has the form
- # <topfeature-topvalue:subfeature>,
- # e.g. <toolset-msvc:version>
+ # The feature has the form <topfeature-topvalue:subfeature>, e.g.
+ # <toolset-msvc:version>.
             local feature-value = [ split-top-feature $(specific-subfeature[1]) ] ;
             if <$(feature-value[1])>$(feature-value[2]) = $(parent-property)
             {
@@ -738,10 +749,9 @@
         }
         else
         {
- # The feature has the form <topfeature-subfeature>,
- # e.g. <toolset-version>
+ # The feature has the form <topfeature-subfeature>, e.g.
+ # <toolset-version>
             local top-sub = [ split-top-feature [ utility.ungrist $(f) ] ] ;
-
             if $(top-sub[2]) && <$(top-sub[1])> = $(parent-property:G)
             {
                 return true ;
@@ -750,46 +760,47 @@
     }
 }
 
-# as above, for subproperties
+
+# As for is-subfeature-of but for subproperties.
 local rule is-subproperty-of ( parent-property p )
 {
     return [ is-subfeature-of $(parent-property) $(p:G) ] ;
 }
 
-# Given a property, return the subset of features consisting of all
-# ordinary subfeatures of the property's feature, and all specific
-# subfeatures of the property's feature which are conditional on the
-# property's value.
+
+# Given a property, return the subset of features consisting of all ordinary
+# subfeatures of the property's feature, and all specific subfeatures of the
+# property's feature which are conditional on the property's value.
 local rule select-subfeatures ( parent-property : features * )
 {
     return [ sequence.filter is-subfeature-of $(parent-property) : $(features) ] ;
 }
-
-# as above, for subproperties
+
+
+# As for select-subfeatures but for subproperties.
 local rule select-subproperties ( parent-property : properties * )
 {
     return [ sequence.filter is-subproperty-of $(parent-property) : $(properties) ] ;
 }
 
-# Given a property set which may consist of composite and implicit
-# properties and combined subfeature values, returns an expanded,
-# normalized property set with all implicit features expressed
-# explicitly, all subfeature values individually expressed, and all
-# components of composite properties expanded. Non-free features
-# directly expressed in the input properties cause any values of
-# those features due to composite feature expansion to be dropped. If
-# two values of a given non-free feature are directly expressed in the
-# input, an error is issued.
+
+# Given a property set which may consist of composite and implicit properties
+# and combined subfeature values, returns an expanded, normalized property set
+# with all implicit features expressed explicitly, all subfeature values
+# individually expressed, and all components of composite properties expanded.
+# Non-free features directly expressed in the input properties cause any values
+# of those features due to composite feature expansion to be dropped. If two
+# values of a given non-free feature are directly expressed in the input, an
+# error is issued.
 rule expand ( properties * )
 {
     local expanded = [ expand-subfeatures $(properties) ] ;
-
     return [ expand-composites $(expanded) ] ;
 }
 
 
-# Helper rule for minimize, below - return true iff property's feature
-# is present in the contents of the variable named by feature-set-var.
+# Helper rule for minimize. Returns true iff property's feature is present in
+# the contents of the variable named by feature-set-var.
 local rule in-features ( feature-set-var property )
 {
     if $(property:G) in $($(feature-set-var))
@@ -798,9 +809,9 @@
     }
 }
 
-# Helper for minimize, below - returns the list with
-# the same properties, but where all subfeatures
-# are in the end of the list
+
+# Helper rule for minimize. Returns the list with the same properties, but with
+# all subfeatures moved to the end of the list.
 local rule move-subfeatures-to-the-end ( properties * )
 {
     local x1 ;
@@ -814,53 +825,53 @@
         else
         {
             x1 += $(p) ;
- }
+ }
     }
- return $(x1) $(x2) ;
+ return $(x1) $(x2) ;
 }
 
 
-# Given an expanded property set, eliminate all redundancy: properties
-# which are elements of other (composite) properties in the set will
-# be eliminated. Non-symmetric properties equal to default values will be
-# eliminated, unless the override a value from some composite property.
-# Implicit properties will be expressed without feature
-# grist, and sub-property values will be expressed as elements joined
-# to the corresponding main property.
+# Given an expanded property set, eliminate all redundancy: properties that are
+# elements of other (composite) properties in the set will be eliminated.
+# Non-symmetric properties equal to default values will be eliminated unless
+# they override a value from some composite property. Implicit properties will
+# be expressed without feature grist, and sub-property values will be expressed
+# as elements joined to the corresponding main property.
 rule minimize ( properties * )
 {
     # Precondition checking
     local implicits = [ set.intersection $(p:G=) : $(p:G) ] ;
     if $(implicits)
     {
- error minimize requires an expanded property set, but \"$(implicits[1])\"
- appears to be the value of an un-expanded implicit feature ;
+ errors.error minimize requires an expanded property set, but
+ \"$(implicits[1])\" appears to be the value of an un-expanded
+ implicit feature ;
     }
-
- # remove properties implied by composite features
+
+ # Remove properties implied by composite features.
     local components = $($(properties).components) ;
     local x = [ set.difference $(properties) : $(components) ] ;
-
- # handle subfeatures and implicit features
- x = [ move-subfeatures-to-the-end $(x) ] ;
+
+ # Handle subfeatures and implicit features.
+ x = [ move-subfeatures-to-the-end $(x) ] ;
     local result ;
     while $(x)
     {
         local p fullp = $(x[1]) ;
         local f = $(p:G) ;
         local v = $(p:G=) ;
-
- # eliminate features in implicit properties.
+
+ # Eliminate features in implicit properties.
         if implicit in [ attributes $(f) ]
         {
             p = $(v) ;
         }
 
- # locate all subproperties of $(x[1]) in the property set
+ # Locate all subproperties of $(x[1]) in the property set.
         local subproperties = [ select-subproperties $(fullp) : $(x) ] ;
         if $(subproperties)
         {
- # reconstitute the joined property name
+ # Reconstitute the joined property name.
             local sorted = [ sequence.insertion-sort $(subproperties) ] ;
             result += $(p)-$(sorted:G="":J=-) ;
 
@@ -868,16 +879,16 @@
         }
         else
         {
- # eliminate properties whose value is equal to feature's
- # default and which are not symmetric and which do not
- # contradict values implied by composite properties.
-
- # since all component properties of composites in the set
- # have been eliminated, any remaining property whose
- # feature is the same as a component of a composite in the
- # set must have a non-redundant value.
+ # Eliminate properties whose value is equal to feature's default,
+ # which are not symmetric and which do not contradict values implied
+ # by composite properties.
+
+ # Since all component properties of composites in the set have been
+ # eliminated, any remaining property whose feature is the same as a
+ # component of a composite in the set must have a non-redundant
+ # value.
             if $(fullp) != [ defaults $(f) ]
- || symmetric in [ attributes $(f) ]
+ || symmetric in [ attributes $(f) ]
                 || $(fullp:G) in $(components:G)
             {
                 result += $(p) ;
@@ -889,33 +900,33 @@
     return $(result) ;
 }
 
+
 # Combine all subproperties into their parent properties
 #
-# Requires: for every subproperty, there is a parent property. All
-# features are explicitly expressed.
+# Requires: for every subproperty, there is a parent property. All features are
+# explicitly expressed.
 #
-# This rule probably shouldn't be needed, but
-# build-request.expand-no-defaults is being abused for unintended
-# purposes and it needs help
+# This rule probably shouldn't be needed, but build-request.expand-no-defaults
+# is being abused for unintended purposes and it needs help.
 rule compress-subproperties ( properties * )
 {
- local all-subs matched-subs result ;
-
+ local all-subs ;
+ local matched-subs ;
+ local result ;
+
     for local p in $(properties)
     {
         if ! $(p:G)
         {
- assert.nonempty-variable p:G ; # expecting fully-gristed properties
+ # Expecting fully-gristed properties.
+ assert.nonempty-variable p:G ;
         }
-
-
+
         if ! subfeature in $($(p:G).attributes)
         {
- local subs = [
- sequence.insertion-sort
- [ sequence.filter is-subproperty-of $(p) : $(properties) ]
- ] ;
-
+ local subs = [ sequence.insertion-sort
+ [ sequence.filter is-subproperty-of $(p) : $(properties) ] ] ;
+
             matched-subs += $(subs) ;
 
             local subvalues = -$(subs:G=:J=-) ;
@@ -930,17 +941,16 @@
     assert.result true : set.equal $(all-subs) : $(matched-subs) ;
     return $(result) ;
 }
-
-# given an ungristed string, finds the longest prefix which is a
-# top-level feature name followed by a dash, and return a pair
-# consisting of the parts before and after that dash. More
-# interesting than a simple split because feature names can contain
-# dashes.
+
+
+# Given an ungristed string, finds the longest prefix which is a top-level
+# feature name followed by a dash, and return a pair consisting of the parts
+# before and after that dash. More interesting than a simple split because
+# feature names may contain dashes.
 local rule split-top-feature ( feature-plus )
 {
     local e = [ regex.split $(feature-plus) - ] ;
     local f = $(e[1]) ;
-
     local v ;
     while $(e)
     {
@@ -953,22 +963,24 @@
     }
     return $(v) ;
 }
-
-# Given a set of properties, add default values for features not
-# represented in the set.
-# Note: if there's there's ordinary feature F1 and composite feature
-# F2, which includes some value for F1, and both feature have default values,
-# then the default value of F1 will be added, not the value in F2. This might
-# not be right idea: consider
+
+
+# Given a set of properties, add default values for features not represented in
+# the set.
+#
+# Note: if there's an ordinary feature F1 and a composite feature F2 which
+# includes some value for F1 and both feature have default values then the
+# default value of F1 will be added (as opposed to the value in F2). This might
+# not be the right idea, e.g. consider:
 #
 # feature variant : debug ... ;
 # <variant>debug : .... <runtime-debugging>on
 # feature <runtime-debugging> : off on ;
-#
+#
 # Here, when adding default for an empty property set, we'll get
 #
 # <variant>debug <runtime_debugging>off
-#
+#
 # and that's kind of strange.
 rule add-defaults ( properties * )
 {
@@ -976,22 +988,23 @@
     {
         if $(v) in $(properties)
         {
- error add-defaults requires explicitly specified features,
- but \"$(v)\" appears to be the value of an un-expanded implicit feature ;
+ errors.error add-defaults requires explicitly specified features,
+ but \"$(v)\" appears to be the value of an un-expanded implicit
+ feature ;
         }
     }
     # We don't add default for elements with ":" inside. This catches:
     # 1. Conditional properties --- we don't want <variant>debug:<define>DEBUG
     # to be takes as specified value for <variant>
- # 2. Free properties with ":" in values. We don't care, since free properties
- # don't have defaults.
+ # 2. Free properties with ":" in values. We don't care, since free
+ # properties don't have defaults.
     local xproperties = [ MATCH "^([^:]+)$" : $(properties) ] ;
     local missing-top = [ set.difference $(.all-top-features) : $(xproperties:G) ] ;
     local more = [ defaults $(missing-top) ] ;
     properties += $(more) ;
     xproperties += $(more) ;
-
- # Add defaults for subfeatures of features which are present
+
+ # Add defaults for subfeatures of features which are present.
     for local p in $(xproperties)
     {
         local s = $($(p:G).subfeatures) ;
@@ -999,19 +1012,20 @@
         local missing-subs = [ set.difference <$(f)-$(s)> : $(properties:G) ] ;
         properties += [ defaults [ select-subfeatures $(p) : $(missing-subs) ] ] ;
     }
-
+
     return $(properties) ;
 }
 
+
 # Given a property-set of the form
 # v1/v2/...vN-1/<fN>vN/<fN+1>vN+1/...<fM>vM
 #
 # Returns
 # v1 v2 ... vN-1 <fN>vN <fN+1>vN+1 ... <fM>vM
 #
-# Note that vN...vM may contain slashes. This is resilient to the
-# substitution of backslashes for slashes, since Jam, unbidden,
-# sometimes swaps slash direction on NT.
+# Note that vN...vM may contain slashes. This needs to be resilient to the
+# substitution of backslashes for slashes, since Jam, unbidden, sometimes swaps
+# slash direction on NT.
 rule split ( property-set )
 {
     local pieces = [ regex.split $(property-set) [\\/] ] ;
@@ -1032,18 +1046,19 @@
     return $(result) ;
 }
 
-# tests of module feature
+
+# Tests of module feature.
 local rule __test__ ( )
 {
- # use a fresh copy of the feature module
+ # Use a fresh copy of the feature module.
     prepare-test feature-test-temp ;
 
- # These are local rules and so must be explicitly reimported into
- # the testing module
- import feature : extend-feature validate-feature select-subfeatures ;
-
- import errors : try catch ;
     import assert ;
+ import errors : try catch ;
+
+ # These are local rules and so must be explicitly reimported into the
+ # testing module.
+ import feature : extend-feature validate-feature select-subfeatures ;
 
     feature toolset : gcc : implicit ;
     feature define : : free ;
@@ -1063,84 +1078,74 @@
     {
         compose <variant>profile : <variant>profile ;
     }
- catch composite property <variant>profile cannot have itself as a component ;
+ catch composite property <variant>profile cannot have itself as a component ;
 
     extend-feature toolset : msvc metrowerks ;
- subfeature toolset gcc : version : 2.95.2 2.95.3 2.95.4
- 3.0 3.0.1 3.0.2 ;
-
+ subfeature toolset gcc : version : 2.95.2 2.95.3 2.95.4 3.0 3.0.1 3.0.2 ;
+
     assert.true is-subvalue toolset : gcc : version : 2.95.3 ;
     assert.false is-subvalue toolset : gcc : version : 1.1 ;
 
     assert.false is-subvalue toolset : msvc : version : 2.95.3 ;
     assert.false is-subvalue toolset : : version : yabba ;
-
+
     feature yabba ;
     subfeature yabba : version : dabba ;
     assert.true is-subvalue yabba : : version : dabba ;
-
-
+
     subfeature toolset gcc : platform : linux cygwin : optional ;
-
+
     assert.result <toolset-gcc:version>
- : select-subfeatures <toolset>gcc
- : <toolset-gcc:version>
- <toolset-msvc:version>
- <toolset-version>
- <stdlib>
- ;
-
+ : select-subfeatures <toolset>gcc
+ : <toolset-gcc:version>
+ <toolset-msvc:version>
+ <toolset-version>
+ <stdlib> ;
+
     subfeature stdlib : version : 3 4 : optional ;
 
     assert.result <stdlib-version>
- : select-subfeatures <stdlib>native
- : <toolset-gcc:version>
- <toolset-msvc:version>
- <toolset-version>
- <stdlib-version>
- ;
-
+ : select-subfeatures <stdlib>native
+ : <toolset-gcc:version>
+ <toolset-msvc:version>
+ <toolset-version>
+ <stdlib-version> ;
+
     assert.result <toolset>gcc <toolset-gcc:version>3.0.1
- : expand-subfeatures <toolset>gcc-3.0.1 ;
-
+ : expand-subfeatures <toolset>gcc-3.0.1 ;
+
     assert.result <toolset>gcc <toolset-gcc:version>3.0.1 <toolset-gcc:platform>linux
- : expand-subfeatures <toolset>gcc-3.0.1-linux ;
+ : expand-subfeatures <toolset>gcc-3.0.1-linux ;
 
-
     assert.result <toolset>gcc <toolset-gcc:version>3.0.1
- : expand <toolset>gcc <toolset-gcc:version>3.0.1 ;
-
+ : expand <toolset>gcc <toolset-gcc:version>3.0.1 ;
+
     assert.result <define>foo=x-y
- : expand-subfeatures <define>foo=x-y ;
+ : expand-subfeatures <define>foo=x-y ;
 
     assert.result <toolset>gcc <toolset-gcc:version>3.0.1
- : expand-subfeatures gcc-3.0.1 ;
-
+ : expand-subfeatures gcc-3.0.1 ;
+
     assert.result a c e
- : get-values <x> : <x>a <y>b <x>c <y>d <x>e ;
+ : get-values <x> : <x>a <y>b <x>c <y>d <x>e ;
 
     assert.result <toolset>gcc <toolset-gcc:version>3.0.1
- <variant>debug <define>_DEBUG <optimization>on
- : expand gcc-3.0.1 debug <optimization>on
- ;
-
+ <variant>debug <define>_DEBUG <optimization>on
+ : expand gcc-3.0.1 debug <optimization>on ;
+
     assert.result <variant>debug <define>_DEBUG <optimization>on
- : expand debug <optimization>on
- ;
+ : expand debug <optimization>on ;
 
- assert.result <optimization>on <variant>debug <define>_DEBUG
- : expand <optimization>on debug
- ;
+ assert.result <optimization>on <variant>debug <define>_DEBUG
+ : expand <optimization>on debug ;
 
     assert.result <runtime-link>dynamic <optimization>on
- : defaults <runtime-link> <define> <optimization>
- ;
-
- # make sure defaults is resilient to missing grist.
+ : defaults <runtime-link> <define> <optimization> ;
+
+ # Make sure defaults is resilient to missing grist.
     assert.result <runtime-link>dynamic <optimization>on
- : defaults runtime-link define optimization
- ;
-
+ : defaults runtime-link define optimization ;
+
     feature dummy : dummy1 dummy2 ;
     subfeature dummy : subdummy : x y z : optional ;
 
@@ -1150,68 +1155,54 @@
 
     assert.result optional : attributes <fu> ;
     assert.result optional : attributes fu ;
-
- assert.result <runtime-link>static <define>foobar <optimization>on <toolset>gcc:<define>FOO
- <toolset>gcc <variant>debug <stdlib>native <dummy>dummy1 <toolset-gcc:version>2.95.2
-
- : add-defaults <runtime-link>static <define>foobar
- <optimization>on <toolset>gcc:<define>FOO
- ;
-
- assert.result <runtime-link>static <define>foobar <optimization>on <toolset>gcc:<define>FOO
- <fu>fu1 <toolset>gcc <variant>debug <stdlib>native <dummy>dummy1 <fu-subfu2>q
- <toolset-gcc:version>2.95.2
-
- : add-defaults <runtime-link>static <define>foobar
- <optimization>on <toolset>gcc:<define>FOO <fu>fu1
- ;
-
+
+ assert.result <runtime-link>static <define>foobar <optimization>on
+ <toolset>gcc:<define>FOO <toolset>gcc <variant>debug <stdlib>native
+ <dummy>dummy1 <toolset-gcc:version>2.95.2
+ : add-defaults <runtime-link>static <define>foobar <optimization>on
+ <toolset>gcc:<define>FOO ;
+
+ assert.result <runtime-link>static <define>foobar <optimization>on
+ <toolset>gcc:<define>FOO <fu>fu1 <toolset>gcc <variant>debug
+ <stdlib>native <dummy>dummy1 <fu-subfu2>q <toolset-gcc:version>2.95.2
+ : add-defaults <runtime-link>static <define>foobar <optimization>on
+ <toolset>gcc:<define>FOO <fu>fu1 ;
+
     set-default <runtime-link> : static ;
- assert.result <runtime-link>static
- : defaults <runtime-link>
- ;
-
+ assert.result <runtime-link>static : defaults <runtime-link> ;
+
     assert.result gcc-3.0.1 debug <optimization>on
- : minimize [ expand gcc-3.0.1 debug <optimization>on <stdlib>native ]
- ;
+ : minimize [ expand gcc-3.0.1 debug <optimization>on <stdlib>native ] ;
 
     assert.result gcc-3.0.1 debug <runtime-link>dynamic
- : minimize [ expand gcc-3.0.1 debug <optimization>off <runtime-link>dynamic ]
- ;
+ : minimize
+ [ expand gcc-3.0.1 debug <optimization>off <runtime-link>dynamic ] ;
 
     assert.result gcc-3.0.1 debug
- : minimize [ expand gcc-3.0.1 debug <optimization>off ]
- ;
+ : minimize [ expand gcc-3.0.1 debug <optimization>off ] ;
 
     assert.result debug <optimization>on
- : minimize [ expand debug <optimization>on ]
- ;
+ : minimize [ expand debug <optimization>on ] ;
 
     assert.result gcc-3.0
- : minimize <toolset>gcc <toolset-gcc:version>3.0
- ;
+ : minimize <toolset>gcc <toolset-gcc:version>3.0 ;
 
     assert.result gcc-3.0
- : minimize <toolset-gcc:version>3.0 <toolset>gcc
- ;
+ : minimize <toolset-gcc:version>3.0 <toolset>gcc ;
 
     assert.result <x>y/z <a>b/c <d>e/f
- : split <x>y/z/<a>b/c/<d>e/f
- ;
+ : split <x>y/z/<a>b/c/<d>e/f ;
 
     assert.result <x>y/z <a>b/c <d>e/f
- : split <x>y\\z\\<a>b\\c\\<d>e\\f
- ;
+ : split <x>y\\z\\<a>b\\c\\<d>e\\f ;
 
     assert.result a b c <d>e/f/g <h>i/j/k
- : split a/b/c/<d>e/f/g/<h>i/j/k
- ;
+ : split a/b/c/<d>e/f/g/<h>i/j/k ;
 
     assert.result a b c <d>e/f/g <h>i/j/k
- : split a\\b\\c\\<d>e\\f\\g\\<h>i\\j\\k
- ;
+ : split a\\b\\c\\<d>e\\f\\g\\<h>i\\j\\k ;
 
- # test error checking
+ # Test error checking.
 
     try ;
     {
@@ -1269,16 +1260,14 @@
     {
         implied-subfeature <toolset> 3.0.1 ;
     }
- catch \"3.0.1\" is not a known subfeature value of
- <toolset> ;
+ catch \"3.0.1\" is not a known subfeature value of <toolset> ;
 
     try ;
     {
         implied-subfeature <toolset> not-a-version : gcc ;
     }
- catch \"not-a-version\" is not a known subfeature value of
- <toolset>gcc ;
+ catch \"not-a-version\" is not a known subfeature value of <toolset>gcc ;
 
- # leave a clean copy of the features module behind
+ # Leave a clean copy of the features module behind.
     finish-test feature-test-temp ;
 }

Modified: branches/fix-links/tools/build/v2/build/generators.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/generators.jam (original)
+++ branches/fix-links/tools/build/v2/build/generators.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,65 +5,72 @@
 # (See accompanying file LICENSE_1_0.txt or copy at
 # http://www.boost.org/LICENSE_1_0.txt)
 
-# Manages 'generators' --- objects which can do transformation between different
-# target types and contain algorithm for finding transformation from sources
-# to targets.
+# Manages 'generators' --- objects which can do transformation between
+# different target types and contain algorithm for finding transformation from
+# sources to targets.
 #
 # The main entry point to this module is generators.construct rule. It is given
-# a list of source targets, desired target type and a set of properties.
-# It starts by selecting 'viable generators', which have any chances of producing
-# the desired target type with the required properties. Generators are ranked and
-# a set of most specific ones is selected.
-#
-# The most specific generators have their 'run' methods called, with the properties
-# and list of sources. Each one selects target which can be directly consumed, and
-# tries to convert the remaining ones to the types it can consume. This is done
-# by recursively calling 'construct' with all consumable types.
+# a list of source targets, desired target type and a set of properties. It
+# starts by selecting 'viable generators', which have any chances of producing
+# the desired target type with the required properties. Generators are ranked
+# and a set of the most specific ones is selected.
 #
-# If the generator has collected all the targets it needs, it creates targets
+# The most specific generators have their 'run' methods called, with the
+# properties and list of sources. Each one selects a target which can be
+# directly consumed, and tries to convert the remaining ones to the types it
+# can consume. This is done by recursively calling 'construct' with all
+# consumable types.
+#
+# If the generator has collected all the targets it needs, it creates targets
 # corresponding to result, and returns it. When all generators have been run,
-# results of one of them are selected and returned as result.
+# results of one of them are selected and returned as a result.
 #
-# It's quite possible that 'construct' returns more targets that it was asked for.
-# For example, it was asked to target type EXE, but the only found generators produces
-# both EXE and TDS (file with debug) information. The extra target will be returned.
-#
-# Likewise, when generator tries to convert sources to consumable types, it can get
-# more targets that it was asked for. The question is what to do with extra targets.
-# Boost.Build attempts to convert them to requested types, and attempts as early as
-# possible. Specifically, this is done after invoking each generator. (Later I'll
-# document the rationale for trying extra target conversion at that point).
-#
-# That early conversion is not always desirable. Suppose a generator got a source of
-# type Y and must consume one target of type X_1 and one target of type X_2.
-# When converting Y to X_1 extra target of type Y_2 is created. We should not try to
-# convert it to type X_1, because if we do so, the generator will get two targets
-# of type X_1, and will be at loss as to which one to use. Because of that, the
-# 'construct' rule has a parameter, telling if multiple targets can be returned. If
-# the parameter is false, conversion of extra targets is not performed.
-
-import "class" : is-a new ;
-import container ;
-import utility : str equal ;
-import set sequence ;
-import assert ;
-import virtual-target ;
+# It's quite possible that 'construct' returns more targets that it was asked
+# for. For example, it was asked to target type EXE, but the only found
+# generators produces both EXE and TDS (file with debug) information. The extra
+# target will be returned.
+#
+# Likewise, when generator tries to convert sources to consumable types, it can
+# get more targets that it was asked for. The question is what to do with extra
+# targets. Boost.Build attempts to convert them to requested types, and
+# attempts that as early as possible. Specifically, this is done after invoking
+# each generator. (Later I'll document the rationale for trying extra target
+# conversion at that point).
+#
+# That early conversion is not always desirable. Suppose a generator got a
+# source of type Y and must consume one target of type X_1 and one target of
+# type X_2. When converting Y to X_1 extra target of type Y_2 is created. We
+# should not try to convert it to type X_1, because if we do so, the generator
+# will get two targets of type X_1, and will be at loss as to which one to use.
+# Because of that, the 'construct' rule has a parameter, telling if multiple
+# targets can be returned. If the parameter is false, conversion of extra
+# targets is not performed.
+
+import "class" : new ;
+import errors ;
 import property-set ;
+import sequence ;
+import set ;
+import utility ;
+import virtual-target ;
+
 
-if "--debug-generators" in [ modules.peek : ARGV ]
-{
+if "--debug-generators" in [ modules.peek : ARGV ]
+{
     .debug = true ;
 }
 
-# Outputs a debug message if generators debugging is on.
-# Each element of 'message' is checked to see if it's class instance.
-# If so, instead of the value, the result of 'str' call is output.
+
+# Outputs a debug message if generators debugging is on. Each element of
+# 'message' is checked to see if it's class instance. If so, instead of the
+# value, the result of 'str' call is output.
+#
 local rule generators.dout ( message * )
 {
     if $(.debug)
- {
+ {
         ECHO [ sequence.transform utility.str : $(message) ] ;
- }
+ }
 }
 
 
@@ -72,76 +79,82 @@
     return $(.indent:J="") ;
 }
 
+
 local rule increase-indent ( )
 {
     .indent += " " ;
 }
 
+
 local rule decrease-indent ( )
 {
     .indent = $(.indent[2-]) ;
 }
 
+
 # Takes a vector of 'virtual-target' instances and makes a normalized
 # representation, which is the same for given set of targets,
 # regardless of their order.
+#
 rule normalize-target-list ( targets )
 {
     local v = [ $(targets).get ] ;
     $(targets).set $(v[1]) [ sequence.insertion-sort $(v[2-]) : utility.less ] ;
 }
 
+
 # Creates a generator
-class generator
+class generator
 {
- import generators ;
- import assert ;
     import generators : indent increase-indent decrease-indent generators.dout ;
- import generators ;
     import set ;
- import utility : equal ;
+ import utility ;
     import feature ;
- import errors : error ;
+ import errors ;
     import sequence ;
     import type ;
     import virtual-target ;
     import "class" : new ;
     import property ;
-
+
     EXPORT class_at_generator : indent increase-indent decrease-indent generators.dout ;
-
- rule __init__ (
- id # identifies the generator - should be name of the rule which
- # sets up build actions
- composing ? # whether generator processes each source target in
- # turn, converting it to required types.
- # Ordinary generators pass all sources together to
- # recusrive generators.construct-types call.
-
- : source-types * # types that this generator can handle. If
- # empty, the generator can consume anything.
-
- : target-types-and-names +
- # types the generator will create and, optionally, names for
- # created targets. Each element should have the form
- # type["(" name-pattern ")"]
- # for example, obj(%_x). Name of generated target will be found
- # by replacing % with the name of source, provided explicit name
- # was not specified.
-
- : requirements *
- )
- {
+
+ rule __init__ (
+ id # Identifies the generator - should be name
+ # of the rule which sets up the build
+ # actions.
+
+ composing ? # Whether generator processes each source
+ # target in turn, converting it to required
+ # types. Ordinary generators pass all
+ # sources together to the recursive
+ # generators.construct-types call.
+
+ : source-types * # Types that this generator can handle. If
+ # empty, the generator can consume anything.
+
+ : target-types-and-names + # Types the generator will create and,
+ # optionally, names for created targets.
+ # Each element should have the form
+ # type["(" name-pattern ")"], for example,
+ # obj(%_x). Generated target name will be
+ # found by replacing % with the name of
+ # source, provided an explicit name was not
+ # specified.
+
+ : requirements *
+ )
+ {
         self.id = $(id) ;
         self.composing = $(composing) ;
         self.source-types = $(source-types) ;
         self.target-types-and-names = $(target-types-and-names) ;
         self.requirements = $(requirements) ;
-
+
         for local e in $(target-types-and-names)
- {
+ {
             # Create three parallel lists: one with the list of target types,
- # and two other with prefixes and postfixes to be added to target
+ # and two other with prefixes and postfixes to be added to target
             # name. We use parallel lists for prefix and postfix (as opposed
             # to mapping), because given target type might occur several times,
             # for example "H H(%_symbols)".
@@ -150,20 +163,21 @@
             self.name-prefix += $(m[3]:E="") ;
             self.name-postfix += $(m[4]:E="") ;
         }
-
+
         # Note that 'transform' here, is the same as 'for_each'.
         sequence.transform type.validate : $(self.source-types) ;
         sequence.transform type.validate : $(self.target-types) ;
     }
-
+
     ############## End of constructor #################
-
+
     rule id ( )
     {
         return $(self.id) ;
     }
 
     # Returns the list of target type the generator accepts.
+ #
     rule source-types ( )
     {
         return $(self.source-types) ;
@@ -171,24 +185,27 @@
 
     # Returns the list of target types that this generator produces.
     # It is assumed to be always the same -- i.e. it cannot change depending
- # list of sources.
+ # list of sources.
+ #
     rule target-types ( )
     {
         return $(self.target-types) ;
     }
-
+
     # Returns the required properties for this generator. Properties
- # in returned set must be present in build properties if this
+ # in returned set must be present in build properties if this
     # generator is to be used. If result has grist-only element,
     # that build properties must include some value of that feature.
     # XXX: remove this method?
+ #
     rule requirements ( )
     {
         return $(self.requirements) ;
     }
-
- # Returns a true value if the generator can be run with the specified
+
+ # Returns a true value if the generator can be run with the specified
     # properties.
+ #
     rule match-rank ( property-set-to-match )
     {
         # See if generator's requirements are satisfied by
@@ -196,7 +213,7 @@
         # (i.e. grist-only element), as matching any value of the
         # feature.
         local all-requirements = [ requirements ] ;
-
+
         local property-requirements feature-requirements ;
         for local r in $(all-requirements)
         {
@@ -207,11 +224,11 @@
             else
             {
                 feature-requirements += $(r) ;
- }
+ }
         }
 
         local properties-to-match = [ $(property-set-to-match).raw ] ;
- if $(property-requirements) in $(properties-to-match)
+ if $(property-requirements) in $(properties-to-match)
            && $(feature-requirements) in $(properties-to-match:G)
         {
             return true ;
@@ -221,25 +238,27 @@
             return ;
         }
     }
-
+
     # Returns another generator which differers from $(self) in
     # - id
     # - value to <toolset> feature in properties
+ #
     rule clone ( new-id : new-toolset-properties + )
     {
         return [ new $(__class__) $(new-id) $(self.composing)
                  : $(self.source-types)
- : $(self.target-types-and-names)
+ : $(self.target-types-and-names)
                  # Note: this does not remove any subfeatures of <toolset>
                  # which might cause problems
                  : [ property.change $(self.requirements) : <toolset> ]
                    $(new-toolset-properties)
                ] ;
     }
-
- # Creates another generator that is the same as $(self), except that
- # if 'base' is in target types of $(self), 'type' will in target types
- # of the new generator.
+
+ # Creates another generator that is the same as $(self), except that if
+ # 'base' is in target types of $(self), 'type' will in target types of the
+ # new generator.
+ #
     rule clone-and-change-target-type ( base : type )
     {
         local target-types ;
@@ -253,104 +272,99 @@
             else
             {
                 target-types += $(t) ;
- }
+ }
         }
-
+
         return [ new $(__class__) $(self.id) $(self.composing)
                  : $(self.source-types)
- : $(target-types)
+ : $(target-types)
                  : $(self.requirements)
                ] ;
     }
 
-
- # Tries to invoke this generator on the given sources. Returns a
- # list of generated targets (instances of 'virtual-target').
- # Returning nothing from run indicates that the generator was
- # unable to create the target.
+ # Tries to invoke this generator on the given sources. Returns a list of
+ # generated targets (instances of 'virtual-target'). Returning nothing from
+ # run indicates that the generator was unable to create the target.
+ #
     rule run ( project # Project for which the targets are generated
- name ? # Determines the name of 'name' attribute for
+ name ? # Determines the name of 'name' attribute for
                         # all generated targets. See 'generated-targets' method.
                : property-set # Desired properties for generated targets.
                : sources + # Source targets.
             )
- {
+ {
         generators.dout [ indent ] " ** generator" $(self.id) ;
         generators.dout [ indent ] " multiple:" $(mutliple) ;
- generators.dout [ indent ] " composing:" $(self.composing) ;
-
+ generators.dout [ indent ] " composing:" $(self.composing) ;
+
         if ! $(self.composing) && $(sources[2]) && $(self.source-types[2])
         {
             errors.error "Unsupported source/source-type combination" ;
         }
-
+
         # We don't run composing generators if no name is specified. The reason
         # is that composing generator combines several targets, which can have
         # different names, and it cannot decide which name to give for produced
         # target. Therefore, the name must be passed.
         #
- # This in effect, means that composing generators are runnable only
- # at top-level of transofrmation graph, or if name is passed explicitly.
- # Thus, we dissallow composing generators in the middle. For example, the
- # transofrmation CPP -> OBJ -> STATIC_LIB -> RSP -> EXE won't be allowed
- # (the OBJ -> STATIC_LIB generator is composing)
+ # This in effect, means that composing generators are runnable only at
+ # the top-level of a transformation graph, or if their name is passed
+ # explicitly. Thus, we dissallow composing generators in the middle. For
+ # example, the transformation CPP -> OBJ -> STATIC_LIB -> RSP -> EXE
+ # won't be allowed (the OBJ -> STATIC_LIB generator is composing)
         if ! $(self.composing) || $(name)
- {
+ {
             run-really $(project) $(name) : $(property-set) : $(sources) ;
- }
+ }
     }
-
-
+
     rule run-really ( project name ? : property-set : sources + )
     {
         # Targets that this generator will consume directly.
         local consumed = ;
         # Targets that can't be consumed and will be returned as-is.
         local bypassed = ;
-
+
         if $(self.composing)
         {
             convert-multiple-sources-to-consumable-types $(project)
- : $(property-set) : $(sources) : consumed bypassed ;
+ : $(property-set) : $(sources) : consumed bypassed ;
         }
         else
- {
- convert-to-consumable-types $(project) $(name) :
- $(property-set) : $(sources)
- :
- : consumed bypassed ;
+ {
+ convert-to-consumable-types $(project) $(name) : $(property-set)
+ : $(sources) : : consumed bypassed ;
         }
-
+
         local result ;
- if $(consumed)
- {
- result = [ construct-result $(consumed) : $(project) $(name)
+ if $(consumed)
+ {
+ result = [ construct-result $(consumed) : $(project) $(name)
                      : $(property-set) ] ;
         }
-
-
+
         if $(result)
         {
- generators.dout [ indent ] " SUCCESS: " $(result) ;
+ generators.dout [ indent ] " SUCCESS: " $(result) ;
         }
         else
         {
             generators.dout [ indent ] " FAILURE" ;
         }
         generators.dout ;
- return $(result) ;
+ return $(result) ;
     }
 
- # Constructs the dependency graph that will be returned by this
- # generator
- rule construct-result (
+ # Constructs the dependency graph to be returned by this generator.
+ #
+ rule construct-result (
         consumed + # Already prepared list of consumable targets
- # If generator requires several source files will contain
+ # If generator requires several source files will contain
                    # exactly len $(self.source-types) targets with matching types
- # Otherwise, might contain several targets with the type of
- # $(self.source-types[1])
- : project name ?
- : property-set # Properties to be used for all actions create here
+ # Otherwise, might contain several targets with the type of
+ # $(self.source-types[1])
+ : project name ?
+ : property-set # Properties to be used for all actions create here.
     )
     {
         local result ;
@@ -358,23 +372,23 @@
         if ! $(self.source-types[2]) && ! $(self.composing)
         {
             for local r in $(consumed)
- {
+ {
                 result += [ generated-targets $(r) : $(property-set) : $(project) $(name) ] ; #(targets) ;
             }
         }
         else
         {
- if $(consumed)
+ if $(consumed)
             {
- result += [ generated-targets $(consumed) : $(property-set)
+ result += [ generated-targets $(consumed) : $(property-set)
                             : $(project) $(name) ] ;
- }
+ }
         }
         return $(result) ;
     }
-
- # Determine the name of the produced target from the
- # names of the sources.
+
+ # Determine the name of the produced target from the names of the sources.
+ #
     rule determine-output-name ( sources + )
     {
         # The simple case if when a name
@@ -387,126 +401,127 @@
         # dot. In the second case -- no sure, but for now take
         # the part till the last dot too.
         name = [ utility.basename [ $(sources[1]).name ] ] ;
-
+
         for local s in $(sources[2])
         {
             local n2 = [ utility.basename [ $(s).name ] ] ;
             if $(n2) != $(name)
             {
- error "$(self.id): source targets have different names: cannot determine target name" ;
+ errors.error "$(self.id): source targets have different names: cannot determine target name" ;
             }
         }
-
+
         # Names of sources might include directory. We should strip it.
         name = $(name:D=) ;
-
+
         return $(name) ;
     }
-
- # Constructs targets that are created after consuming 'sources'.
- # The result will be the list of virtual-target, which the same length
- # as 'target-types' attribute and with corresponding types.
- #
- # When 'name' is empty, all source targets must have the same value of
- # the 'name' attribute, which will be used instead of the 'name' argument.
+
+ # Constructs targets that are created after consuming 'sources'. The result
+ # will be the list of virtual-target, which has the same length as the
+ # 'target-types' attribute and with corresponding types.
+ #
+ # When 'name' is empty, all source targets must have the same value of the
+ # 'name' attribute, which will be used instead of the 'name' argument.
     #
     # The value of 'name' attribute for each generated target will be equal to
     # the 'name' parameter if there's no name pattern for this type. Otherwise,
- # the '%' symbol in the name pattern will be replaced with the 'name' parameter
- # to obtain the 'name' attribute.
+ # the '%' symbol in the name pattern will be replaced with the 'name'
+ # parameter to obtain the 'name' attribute.
     #
- # For example, if targets types are T1 and T2(with name pattern "%_x"), suffixes
- # for T1 and T2 are .t1 and t2, and source if foo.z, then created files would
- # be "foo.t1" and "foo_x.t2". The 'name' attribute actually determined the
- # basename of a file.
+ # For example, if targets types are T1 and T2(with name pattern "%_x"),
+ # suffixes for T1 and T2 are .t1 and t2, and source if foo.z, then created
+ # files would be "foo.t1" and "foo_x.t2". The 'name' attribute actually
+ # determines the basename of a file.
     #
     # Note that this pattern mechanism has nothing to do with implicit patterns
- # in make. It's a way to produce target which name is different for name of
+ # in make. It's a way to produce target which name is different for name of
     # source.
+ #
     rule generated-targets ( sources + : property-set : project name ? )
     {
         if ! $(name)
         {
             name = [ determine-output-name $(sources) ] ;
         }
-
+
         # Assign an action for each target
         local action = [ action-class ] ;
- local a = [ class.new $(action) $(sources) : $(self.id) :
+ local a = [ class.new $(action) $(sources) : $(self.id) :
                     $(property-set) ] ;
-
+
         # Create generated target for each target type.
         local targets ;
         local pre = $(self.name-prefix) ;
         local post = $(self.name-postfix) ;
- for local t in $(self.target-types)
- {
+ for local t in $(self.target-types)
+ {
             local generated-name = $(pre[1])$(name)$(post[1]) ;
             pre = $(pre[2-]) ;
             post = $(post[2-]) ;
-
- targets += [ class.new file-target $(generated-name)
+
+ targets += [ class.new file-target $(generated-name)
               : $(t) : $(project) : $(a) ] ;
- }
-
+ }
+
         return [ sequence.transform virtual-target.register : $(targets) ] ;
- }
-
+ }
+
     # Attempts to convert 'source' to the types that this generator can
     # handle. The intention is to produce the set of targets can should be
     # used when generator is run.
- rule convert-to-consumable-types ( project name ? :
- property-set : sources +
- : only-one ? # convert 'source' to only one of source types
- # if there's more that one possibility, report an
- # error
- : consumed-var # name of variable which recieves all targets which
- # can be consumed.
- bypassed-var # name variable which recieves all targets which
- # cannot be consumed
+ #
+ rule convert-to-consumable-types ( project name ? :
+ property-set : sources +
+ : only-one ? # Convert 'source' to only one of the source types. If
+ # there's more that one possibility, report an error.
+ : consumed-var # Name of the variable which recieves all targets which
+ # can be consumed.
+ bypassed-var # Name of the variable which recieves all targets which
+ # cannot be consumed
     )
- {
+ {
         # We're likely to be passed 'consumed' and 'bypassed'
         # var names. Use "_" to avoid name conflicts.
         local _consumed ;
         local _bypassed ;
- local missing-types ;
+ local missing-types ;
 
         if $(sources[2])
         {
- # Don't know how to handle several sources yet. Just try
+ # Don't know how to handle several sources yet. Just try
             # to pass the request to other generator
             missing-types = $(self.source-types) ;
         }
         else
- {
+ {
             consume-directly $(sources) : _consumed : missing-types ;
         }
-
+
         # No need to search for transformation if
         # some source type has consumed source and
         # no more source types are needed.
- if $(only-one) && $(_consumed)
+ if $(only-one) && $(_consumed)
         {
             missing-types = ;
         }
-
+
         #TODO: we should check that only one source type
         #if create of 'only-one' is true.
         # TODO: consider if consuned/bypassed separation should
         # be done by 'construct-types'.
-
+
         if $(missing-types)
- {
+ {
             local transformed = [ generators.construct-types $(project) $(name)
               : $(missing-types) : $(property-set) : $(sources) ] ;
-
- # Add targets of right type to 'consumed'. Add others to
- # 'bypassed'. The 'generators.construct' rule has done
- # its best to convert everything to the required type.
- # There's no need to rerun it on targets of different types.
-
- # NOTE: ignoring usage requirements
+
+ # Add targets of right type to 'consumed'. Add others to 'bypassed'.
+ # The 'generators.construct' rule has done its best to convert
+ # everything to the required type. There's no need to rerun it on
+ # targets of different types.
+
+ # NOTE: ignoring usage requirements.
             for local t in $(transformed[2-])
             {
                 if [ $(t).type ] in $(missing-types)
@@ -517,35 +532,36 @@
                 {
                     _bypassed += $(t) ;
                 }
- }
- }
-
- _consumed = [ sequence.unique $(_consumed) ] ;
+ }
+ }
+
+ _consumed = [ sequence.unique $(_consumed) ] ;
         _bypassed = [ sequence.unique $(_bypassed) ] ;
-
+
         # remove elements of '_bypassed' that are in '_consumed'
-
- # Suppose the target type of current generator, X is produced from
+
+ # Suppose the target type of current generator, X is produced from
         # X_1 and X_2, which are produced from Y by one generator.
         # When creating X_1 from Y, X_2 will be added to 'bypassed'
         # Likewise, when creating X_2 from Y, X_1 will be added to 'bypassed'
         # But they are also in 'consumed'. We have to remove them from
         # bypassed, so that generators up the call stack don't try to convert
- # them.
-
+ # them.
+
         # In this particular case, X_1 instance in 'consumed' and X_1 instance
         # in 'bypassed' will be the same: because they have the same source and
         # action name, and 'virtual-target.register' won't allow two different
         # instances. Therefore, it's OK to use 'set.difference'.
-
+
         _bypassed = [ set.difference $(_bypassed) : $(_consumed) ] ;
-
-
+
+
         $(consumed-var) += $(_consumed) ;
         $(bypassed-var) += $(_bypassed) ;
     }
-
+
     # Converts several files to consumable types.
+ #
     rule convert-multiple-sources-to-consumable-types
       ( project : property-set : sources * : consumed-var bypassed-var )
     {
@@ -562,23 +578,23 @@
             {
                 generators.dout [ indent ] " failed to convert " $(source) ;
             }
- $(consumed-var) += $(_c) ;
+ $(consumed-var) += $(_c) ;
             $(bypassed-var) += $(_b) ;
- }
+ }
     }
-
+
     rule consume-directly ( source : consumed-var : missing-types-var )
     {
         local real-source-type = [ $(source).type ] ;
-
+
         # If there are no source types, we can consume anything
         local source-types = $(self.source-types) ;
         source-types ?= $(real-source-type) ;
-
+
         for local st in $(source-types)
         {
             # The 'source' if of right type already)
- if $(real-source-type) = $(st) ||
+ if $(real-source-type) = $(st) ||
               [ type.is-derived $(real-source-type) $(st) ]
             {
                 $(consumed-var) += $(source) ;
@@ -587,44 +603,45 @@
             {
                $(missing-types-var) += $(st) ;
             }
- }
+ }
     }
-
-
- # Returns the class to be used to actions. Default implementation
+
+ # Returns the class to be used to actions. Default implementation
     # returns "action".
+ #
     rule action-class ( )
     {
         return "action" ;
- }
+ }
 }
 
-import errors : error ;
 
 .generators = ;
 
-# Registers new generator instance 'g'.
+
+# Registers a new generator instance 'g'.
+#
 rule register ( g )
 {
     .generators += $(g) ;
-
+
     # A generator can produce several targets of the
     # same type. We want unique occurence of that generator
     # in .generators.$(t) in that case, otherwise, it will
     # be tried twice and we'll get false ambiguity.
     for local t in [ sequence.unique [ $(g).target-types ] ]
- {
+ {
         .generators.$(t) += $(g) ;
- }
-
+ }
+
     # Update the set of generators for toolset
-
+
     # TODO: should we check that generator with this id
     # is not already registered. For example, the fop.jam
     # module intentionally declared two generators with the
     # same id, so such check will break it.
     local id = [ $(g).id ] ;
-
+
     # Some generators have multiple periods in their name, so the
     # normal $(id:S=) won't generate the right toolset name.
     # e.g. if id = gcc.compile.c++, then
@@ -640,87 +657,88 @@
     }
     .generators-for-toolset.$(base) += $(g) ;
 }
-
-# Creates new instance of the 'generator' class and registers it.
-# Retursn the creates instance.
-# Rationale: the instance is returned so that it's possible to first register
-# a generator and then call 'run' method on that generator, bypassing all
-# generator selection.
+
+
+# Creates new instance of the 'generator' class and registers it. Returns the
+# created instance. Rationale: the instance is returned so that it's possible to
+# first register a generator and then call the 'run' method on that generator,
+# bypassing all generator selection.
+#
 rule register-standard ( id : source-types * : target-types + : requirements * )
 {
     local g = [ new generator $(id) : $(source-types) : $(target-types)
- : $(requirements) ] ;
- register $(g) ;
+ : $(requirements) ] ;
+ register $(g) ;
     return $(g) ;
 }
 
-# Creates new instance of the 'composing-generator' class and
-# registers it.
+
+# Creates new instance of the 'composing-generator' class and registers it.
+#
 rule register-composing ( id : source-types * : target-types + : requirements * )
 {
- local g = [ new generator $(id) true : $(source-types)
- : $(target-types) : $(requirements) ] ;
+ local g = [ new generator $(id) true : $(source-types) : $(target-types)
+ : $(requirements) ] ;
     register $(g) ;
     return $(g) ;
 }
 
-# Returns all generators which belong to 'toolset', i.e. which
-# ids are $(toolset).<something>
+
+# Returns all generators which belong to 'toolset', i.e. whose ids are
+# '$(toolset).<something>'.
+#
 rule generators-for-toolset ( toolset )
 {
     return $(.generators-for-toolset.$(toolset)) ;
 }
 
-# Make generator 'overrider-id' be preferred to
-# 'overridee-id'. If, when searching for generators
-# that could produce a target of certain type,
-# both those generators are amoung viable generators,
-# the overridden generator is immediately discarded.
-#
-# The overridden generators are discarded immediately
-# after computing the list of viable generators, before
-# running any of them.
+
+# Make generator 'overrider-id' be preferred to 'overridee-id'. If, when
+# searching for generators that could produce a target of a certain type, both
+# those generators are amoung viable generators, the overridden generator is
+# immediately discarded.
+#
+# The overridden generators are discarded immediately after computing the list
+# of viable generators, before running any of them.
+#
 rule override ( overrider-id : overridee-id )
 {
- .override.$(overrider-id) += $(overridee-id) ;
+ .override.$(overrider-id) += $(overridee-id) ;
 }
 
 
-
-
-# Set if results of the current generators search are going to be cached
-# This means no futher attempts to cache generators search should be
-# made.
+# Set if results of the current generators search are going to be cached. This
+# means no futher attempts to cache generators search should be made.
 .caching = ;
 
-# Returns a list of source type which can possibly be converted
-# to 'target-type' by some chain of generator invocation.
+
+# Returns a list of source type which can possibly be converted to 'target-type'
+# by some chain of generator invocation.
+#
+# More formally, takes all generators for 'target-type' and returns union of
+# source types for those generators and result of calling itself recirsively on
+# source types.
 #
-# More formally, takes all generators for 'target-type' and
-# returns union of source types for those generators and result
-# of calling itself recusrively on source types.
 local rule viable-source-types-real ( target-type )
 {
     local generators ;
 
     local t = [ type.all-bases $(target-type) ] ;
-
+
     local result ;
- # 't' is the list of types which are not yet processed
+ # 't' is the list of types which have not yet been processed.
     while $(t)
     {
- # Find all generators for current type.
+ # Find all generators for current type.
         # Unlike 'find-viable-generators' we don't care about property-set.
         local generators = $(.generators.$(t[1])) ;
         t = $(t[2-]) ;
-
 
-
         while $(generators)
         {
             local g = $(generators[1]) ;
             generators = $(generators[2-]) ;
-
+
             if ! [ $(g).source-types ]
             {
                 # Empty source types -- everything can be accepted
@@ -730,10 +748,10 @@
                 # This will terminate outer loop.
                 t = ;
             }
-
- for local source-type in [ $(g).source-types ]
+
+ for local source-type in [ $(g).source-types ]
             {
- if ! $(source-type) in $(result)
+ if ! $(source-type) in $(result)
                 {
                     # If generator accepts 'source-type' it
                     # will happily accept any type derived from it
@@ -741,22 +759,22 @@
                     for local n in $(all)
                     {
                         if ! $(n) in $(result)
- {
+ {
                             t += $(n) ;
                             result += $(n) ;
- }
- }
- }
- }
- }
- }
-
- result = [ sequence.unique $(result) ] ;
-
- return $(result) ;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return [ sequence.unique $(result) ] ;
 }
 
+
 # Helper rule, caches the result of 'viable-source-types-real'.
+#
 rule viable-source-types ( target-type )
 {
     local key = .vst.$(target-type) ;
@@ -769,46 +787,49 @@
         }
         $(key) = $(v) ;
     }
-
+
     if $($(key)) != none
     {
         return $($(key)) ;
- }
+ }
 }
 
-# Returns the list of source types, which, when passed to 'run'
-# method of 'generator', has some change of being eventually used
-# (probably after conversion by other generators)
-rule viable-source-types-for-generator-real ( generator )
-{
+
+# Returns the list of source types, which, when passed to 'run' method of
+# 'generator', has some change of being eventually used (probably after
+# conversion by other generators).
+#
+rule viable-source-types-for-generator-real ( generator )
+{
     local source-types = [ $(generator).source-types ] ;
     if ! $(source-types)
     {
- # If generator does not specify any source types,
- # it might be special generator like builtin.lib-generator
- # which just relays to other generators. Return '*' to
- # indicate that any source type is possibly OK, since we don't
- # know for sure.
+ # If generator does not specify any source types, it might be special
+ # generator like builtin.lib-generator which just relays to other
+ # generators. Return '*' to indicate that any source type is possibly
+ # OK, since we don't know for sure.
         return * ;
     }
     else
- {
+ {
         local result ;
         for local s in $(source-types)
         {
- result += [ type.all-derived $(s) ]
+ result += [ type.all-derived $(s) ]
               [ generators.viable-source-types $(s) ] ;
         }
- result = [ sequence.unique $(result) ] ;
+ result = [ sequence.unique $(result) ] ;
         if * in $(result)
         {
             result = * ;
- }
+ }
         return $(result) ;
- }
-}
+ }
+}
+
 
-# Helper rule, caches the result of 'viable-source-types-for-genrator'.
+# Helper rule, caches the result of 'viable-source-types-for-generator'.
+#
 local rule viable-source-types-for-generator ( generator )
 {
     local key = .vstg.$(generator) ;
@@ -819,36 +840,33 @@
         {
             v = none ;
         }
- $(key) = $(v) ;
+ $(key) = $(v) ;
     }
-
+
     if $($(key)) != none
     {
         return $($(key)) ;
- }
+ }
 }
 
 
-
-# Returns usage requirements + list of created targets
-local rule try-one-generator-really ( project name ? : generator :
- target-type : property-set : sources * )
+# Returns usage requirements + list of created targets.
+#
+local rule try-one-generator-really ( project name ? : generator : target-type
+ : property-set : sources * )
 {
     local targets =
- [ $(generator).run $(project) $(name)
- : $(property-set)
- : $(sources)
- ] ;
-
+ [ $(generator).run $(project) $(name) : $(property-set) : $(sources) ] ;
+
     local usage-requirements ;
     local success ;
-
+
     generators.dout [ indent ] returned $(targets) ;
-
+
     if $(targets)
     {
         success = true ;
-
+
         if [ class.is-a $(targets[1]) : property-set ]
         {
             usage-requirements = $(targets[1]) ;
@@ -859,55 +877,56 @@
             usage-requirements = [ property-set.empty ] ;
         }
     }
-
+
     generators.dout [ indent ] " generator" [ $(generator).id ] " spawned " ;
- generators.dout [ indent ] " " $(targets) ;
+ generators.dout [ indent ] " " $(targets) ;
     if $(usage-requirements)
     {
         generators.dout [ indent ] " with usage requirements:" $(x) ;
     }
-
-
+
     if $(success)
     {
         return $(usage-requirements) $(targets) ;
     }
 }
 
-# Checks if generator invocation can be pruned, because it's guaranteed
-# to fail. If so, quickly returns empty list. Otherwise, calls
-# try-one-generator-really.
-local rule try-one-generator ( project name ? : generator :
- target-type : property-set : sources * )
-{
+
+# Checks if generator invocation can be pruned, because it's guaranteed to fail.
+# If so, quickly returns empty list. Otherwise, calls try-one-generator-really.
+#
+local rule try-one-generator ( project name ? : generator : target-type
+ : property-set : sources * )
+{
     local source-types ;
     for local s in $(sources)
     {
         source-types += [ $(s).type ] ;
     }
- local viable-source-types =
+ local viable-source-types =
       [ viable-source-types-for-generator $(generator) ] ;
-
- if $(source-types) && $(viable-source-types) != * &&
- ! [ set.intersection $(source-types) : $(viable-source-types) ]
+
+ if $(source-types) && $(viable-source-types) != * &&
+ ! [ set.intersection $(source-types) : $(viable-source-types) ]
     {
         local id = [ $(generator).id ] ;
         generators.dout [ indent ] " ** generator '$(id)' pruned" ;
         #generators.dout [ indent ] "source-types" '$(source-types)' ;
         #generators.dout [ indent ] "viable-source-types" '$(viable-source-types)' ;
- }
+ }
     else {
         return [ try-one-generator-really $(project) $(name)
           : $(generator)
             : $(target-type) : $(property-set) : $(sources) ] ;
- }
+ }
 }
 
-rule construct-types ( project name ? : target-types + :
- property-set : sources + )
+
+rule construct-types ( project name ? : target-types + : property-set
+ : sources + )
 {
     local result ;
- local matched-types ;
+ local matched-types ;
     local usage-requirements = [ property-set.empty ] ;
     for local t in $(target-types)
     {
@@ -920,14 +939,12 @@
             matched-types += $(t) ;
         }
     }
- # TODO: have to introduce parameter controlling if
- # several types can be matches and add appropriate
- # checks
-
- # TODO: need to review the documentation for
- # 'construct' to see if it should return $(source) even
- # if nothing can be done with it. Currents docs seem to
- # imply that, contrary to the behaviour.
+ # TODO: have to introduce parameter controlling if several types can be
+ # matched and add appropriate checks.
+
+ # TODO: need to review the documentation for 'construct' to see if it should
+ # return $(source) even if nothing can be done with it. Currents docs seem
+ # to imply that, contrary to the behaviour.
     if $(result)
     {
         return $(usage-requirements) $(result) ;
@@ -938,8 +955,9 @@
     }
 }
 
-# Ensures all 'targets' have types. If this is not so, exists with
-# error.
+
+# Ensures all 'targets' have their type. If this is not so, exists with error.
+#
 local rule ensure-type ( targets * )
 {
     for local t in $(targets)
@@ -947,20 +965,22 @@
         if ! [ $(t).type ]
         {
             errors.error "target" [ $(t).str ] "has no type" ;
- }
- }
+ }
+ }
 }
-
+
+
 # Returns generators which can be used to construct target of specified type
 # with specified properties. Uses the following algorithm:
-# - iterates over requested target-type and all it's bases (in the order returned bt
-# type.all-bases.
-# - for each type find all generators that generate that type and which requirements
-# are satisfied by properties.
+# - iterates over requested target-type and all its bases (in the order returned
+# by type.all-bases.
+# - for each type find all generators that generate that type and whose
+# requirements are satisfied by properties.
 # - if the set of generators is not empty, returns that set.
 #
 # Note: this algorithm explicitly ignores generators for base classes if there's
-# at least one generator for requested target-type.
+# at least one generator for the requested target-type.
+#
 local rule find-viable-generators-aux ( target-type : property-set )
 {
     # Select generators that can create the required target type.
@@ -969,52 +989,51 @@
 
     import type ;
     local t = [ type.all-bases $(target-type) ] ;
-
- generators.dout [ indent ] find-viable-generators target-type= $(target-type)
- property-set= [ $(property-set).as-path ]
- ;
-
- # Get the lit of generators for the requested type.
- # If no generator is registered, try base type, and so on.
+
+ generators.dout [ indent ] find-viable-generators target-type= $(target-type)
+ property-set= [ $(property-set).as-path ] ;
+
+ # Get the list of generators for the requested type. If no generator is
+ # registered, try base type, and so on.
     local generators ;
     while $(t[1])
     {
- generators.dout [ indent ] "trying type" $(t[1]) ;
+ generators.dout [ indent ] "trying type" $(t[1]) ;
         if $(.generators.$(t[1]))
         {
             generators.dout [ indent ] "there are generators for this type" ;
             generators = $(.generators.$(t[1])) ;
-
+
             if $(t[1]) != $(target-type)
             {
- # We're here, when no generators for target-type are found,
- # but there are some generators for a base type.
- # We'll try to use them, but they will produce targets of
- # base type, not of 'target-type'. So, we clone the generators
- # and modify the list of target types.
+ # We're here, when no generators for target-type are found, but
+ # there are some generators for a base type. We'll try to use
+ # them, but they will produce targets of base type, not of
+ # 'target-type'. So, we clone the generators and modify the list
+ # of target types.
                 local generators2 ;
                 for local g in $(generators)
                 {
- # generators.register adds generator to the list of generators
- # for toolsets, which is a bit strange, but should work.
- # That list is only used when inheriting toolset, which
- # should have being done before generators are run.
- generators2 += [
+ # generators.register adds a generator to the list of
+ # generators for toolsets, which is a bit strange, but
+ # should work. That list is only used when inheriting a
+ # toolset, which should have been done before running
+ # generators.
+ generators2 += [
                       $(g).clone-and-change-target-type $(t[1]) : $(target-type) ] ;
                     generators.register $(generators2[-1]) ;
- }
+ }
                 generators = $(generators2) ;
- }
+ }
             t = ;
- }
- t = $(t[2-]) ;
+ }
+ t = $(t[2-]) ;
     }
-
-
+
     for local g in $(generators)
     {
         generators.dout [ indent ] "trying generator" [ $(g).id ] "(" [ $(g).source-types ] -> [ $(g).target-types ] ")" ;
-
+
         local m = [ $(g).match-rank $(property-set) ] ;
         if $(m)
         {
@@ -1022,10 +1041,11 @@
             viable-generators += $(g) ;
         }
     }
-
+
     return $(viable-generators) ;
 }
 
+
 rule find-viable-generators ( target-type : property-set )
 {
     local key = $(target-type).$(property-set) ;
@@ -1036,29 +1056,29 @@
         if ! $(l)
         {
             l = none ;
- }
+ }
         .fv.$(key) = $(l) ;
     }
-
+
     if $(l) = none
     {
         l = ;
     }
-
+
     local viable-generators ;
     for local g in $(l)
     {
- # Avoid trying the same generator twice on different levels.
- if ! $(g) in $(.active-generators)
+ # Avoid trying the same generator twice on different levels.
+ if ! $(g) in $(.active-generators)
         {
             viable-generators += $(g) ;
- }
+ }
     }
-
+
     # Generators which override 'all'.
     local all-overrides ;
     # Generators which are overriden
- local overriden-ids ;
+ local overriden-ids ;
     for local g in $(viable-generators)
     {
         local id = [ $(g).id ] ;
@@ -1067,8 +1087,8 @@
         if all in $(this-overrides)
         {
             all-overrides += $(g) ;
- }
- }
+ }
+ }
     if $(all-overrides)
     {
         viable-generators = $(all-overrides) ;
@@ -1079,34 +1099,37 @@
         if ! [ $(g).id ] in $(overriden-ids)
         {
             result += $(g) ;
- }
+ }
     }
-
+
     return $(result) ;
-}
-
+}
+
+
 .construct-stack = ;
 
-# Attempts to construct target by finding viable generators, running them
-# and selecting the dependency graph
+
+# Attempts to construct a target by finding viable generators, running them and
+# selecting the dependency graph.
+#
 local rule construct-really (
    project name ? : target-type : property-set : sources * )
 {
     viable-generators = [ find-viable-generators $(target-type) : $(property-set) ] ;
-
- generators.dout [ indent ] "*** " [ sequence.length $(viable-generators) ]
- " viable generators" ;
-
+
+ generators.dout [ indent ] "*** " [ sequence.length $(viable-generators) ]
+ " viable generators" ;
+
     local result ;
     local generators-that-succeeded ;
     for local g in $(viable-generators)
     {
         # This variable will be restored on exit from this scope.
         local .active-generators = $(g) $(.active-generators) ;
-
+
         local r = [ try-one-generator $(project) $(name) : $(g) : $(target-type) :
           $(property-set) : $(sources) ] ;
-
+
         if $(r)
         {
             generators-that-succeeded += $(g) ;
@@ -1138,74 +1161,73 @@
             else
             {
                 result = $(r) ;
- }
+ }
         }
     }
-
+
     return $(result) ;
-}
-
-
-# Attempts to create target of 'target-type' with 'properties'
-# from 'sources'. The 'sources' are treated as a collection of
-# *possible* ingridients -- i.e. it is not required to consume
-# them all. If 'multiple' is true, the rule is allowed to return
-# several targets of 'target-type'.
-#
+}
+
+
+# Attempts to create a target of 'target-type' with 'properties' from 'sources'.
+# The 'sources' are treated as a collection of *possible* ingridients -- i.e. it
+# is not required to consume them all. If 'multiple' is true, the rule is
+# allowed to return several targets of 'target-type'.
 #
-# Returns a list of target. When this invocation is first instance of
+# Returns a list of targets. When this invocation is first instance of
 # 'construct' in stack, returns only targets of requested 'target-type',
-# otherwise, returns also unused sources and additionally generated
-# targets.
+# otherwise, returns also unused sources and additionally generated targets.
+#
 rule construct ( project name ? : target-type : property-set * : sources * )
 {
     if (.construct-stack)
     {
         ensure-type $(sources) ;
     }
-
+
     .construct-stack += 1 ;
 
     increase-indent ;
 
     if $(.debug)
- {
+ {
         generators.dout [ indent ] "*** construct" $(target-type) ;
-
+
         for local s in $(sources)
         {
             generators.dout [ indent ] " from" $(s) ;
         }
- generators.dout [ indent ] " properties:" [ $(property-set).raw ] ;
+ generators.dout [ indent ] " properties:" [ $(property-set).raw ] ;
     }
-
-
- local result = [ construct-really $(project) $(name)
+
+ local result = [ construct-really $(project) $(name)
       : $(target-type) : $(property-set) : $(sources) ] ;
-
+
     decrease-indent ;
-
+
     .construct-stack = $(.construct-stack[2-]) ;
-
- return $(result) ;
+
+ return $(result) ;
 }
 
-# Given 'result', obtained from some generator or
-# generators.construct, adds 'raw-properties' as usage requirements
-# to it. If result already contains usage requirements -- that is
-# the first element of result of an instance of the property-set class,
-# the existing usage requirements and 'raw-properties' are combined.
+
+# Given 'result', obtained from some generator or generators.construct, adds
+# 'raw-properties' as usage requirements to it. If result already contains usage
+# requirements -- that is the first element of result of an instance of the
+# property-set class, the existing usage requirements and 'raw-properties' are
+# combined.
+#
 rule add-usage-requirements ( result * : raw-properties * )
 {
     if $(result)
     {
- if [ class.is-a $(result[1]) : property-set ]
+ if [ class.is-a $(result[1]) : property-set ]
         {
             return [ $(result[1]).add-raw $(raw-properties) ] $(result[2-]) ;
         }
         else
         {
             return [ property-set.create $(raw-properties) ] $(result) ;
- }
- }
+ }
+ }
 }

Modified: branches/fix-links/tools/build/v2/build/modifiers.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/modifiers.jam (original)
+++ branches/fix-links/tools/build/v2/build/modifiers.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -125,9 +125,10 @@
         return $(target) ;
     }
     
- # Utility, clones a file-target with optional changes to the name, type, and project
- # of the target.
- # NOTE: This functionality should be moved, and generalized, to virtual-targets.
+ # Utility, clones a file-target with optional changes to the name, type and
+ # project of the target.
+ # NOTE: This functionality should be moved, and generalized, to
+ # virtual-targets.
     #
     rule clone-file-target ( target : new-name ? : new-type ? : new-project ? )
     {
@@ -153,10 +154,11 @@
     }
 }
 
-# A modifier that changes the name of a target, after it's generated, given
-# a regular expression to slpit the name, and a set of token to insert
-# between the split tokens of the name. This also exposes the target for other
-# uses with a symlink to the original name (optionally).
+
+# A modifier that changes the name of a target, after it's generated, given a
+# regular expression to split the name, and a set of token to insert between the
+# split tokens of the name. This also exposes the target for other uses with a
+# symlink to the original name (optionally).
 #
 class name-modifier : modifier
 {

Modified: branches/fix-links/tools/build/v2/build/project.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/project.jam (original)
+++ branches/fix-links/tools/build/v2/build/project.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,86 +1,82 @@
-# Copyright 2002, 2003 Dave Abrahams
-# Copyright 2002, 2005, 2006 Rene Rivera
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-# Implements project representation and loading.
-# Each project is represented by
-# - a module where all the Jamfile content live.
+# Copyright 2002, 2003 Dave Abrahams
+# Copyright 2002, 2005, 2006 Rene Rivera
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+# Implements project representation and loading. Each project is represented
+# by:
+# - a module where all the Jamfile content live.
 # - an instance of 'project-attributes' class.
-# (given module name, can be obtained by 'attributes' rule)
+# (given a module name, can be obtained using the 'attributes' rule)
 # - an instance of 'project-target' class (from targets.jam)
-# (given a module name, can be obtained by 'target' rule)
+# (given a module name, can be obtained using the 'target' rule)
 #
-# Typically, projects are created as result of loading Jamfile, which is
-# do by rules 'load' and 'initialize', below. First, module for Jamfile
-# is loaded and new project-attributes instance is created. Some rules
-# necessary for project are added to the module (see 'project-rules' module)
-# at the bottom of this file.
-# Default project attributes are set (inheriting attributes of parent project, if
-# it exists). After that, Jamfile is read. It can declare its own attributes,
-# via 'project' rule, which will be combined with already set attributes.
-#
-#
-# The 'project' rule can also declare project id, which will be associated with
-# the project module.
-#
-# There can also be 'standalone' projects. They are created by calling 'initialize'
-# on arbitrary module, and not specifying location. After the call, the module can
-# call 'project' rule, declare main target and behave as regular projects. However,
-# since it's not associated with any location, it's better declare only prebuilt
-# targets.
-#
-# The list of all loaded Jamfile is stored in variable .project-locations. It's possible
-# to obtain module name for a location using 'module-name' rule. The standalone projects
-# are not recorded, the only way to use them is by project id.
-
+# Typically, projects are created as result of loading a Jamfile, which is done
+# by rules 'load' and 'initialize', below. First, module for Jamfile is loaded
+# and new project-attributes instance is created. Some rules necessary for
+# project are added to the module (see 'project-rules' module) at the bottom of
+# this file. Default project attributes are set (inheriting attributes of
+# parent project, if it exists). After that the Jamfile is read. It can declare
+# its own attributes using the 'project' rule which will be combined with any
+# alread set attributes.
+#
+# The 'project' rule can also declare a project id which will be associated
+# with the project module.
+#
+# There can also be 'standalone' projects. They are created by calling
+# 'initialize' on an arbitrary module and not specifying their location. After
+# the call, the module can call the 'project' rule, declare main targets and
+# behave as a regular project except that, since it's not associated with any
+# location, it should not declare targets that are not prebuilt.
+#
+# The list of all loaded Jamfile is stored in the .project-locations variable.
+# It's possible to obtain a module name for a location using the 'module-name'
+# rule. Standalone projects are not recorded and can only be referenced using
+# their project id.
 
-import modules : peek poke ;
-import numbers ;
-import path ;
-import sequence ;
-import errors : error ;
-
-import print ;
 import "class" : new ;
 import errors ;
-import assert ;
+import modules ;
+import path ;
+import print ;
 import property-set ;
+import sequence ;
 
-#
-# Loads jamfile at the given location. After loading, project global
-# file and jamfile needed by the loaded one will be loaded recursively.
-# If the jamfile at that location is loaded already, does nothing.
-# Returns the project module for the Jamfile.
+
+# Loads the Jamfile at the given location. After loading, project global file
+# and Jamfiles needed by the requested one will be loaded recursively. If the
+# Jamfile at that location is loaded already, does nothing. Returns the project
+# module for the Jamfile.
 #
 rule load ( jamfile-location )
-{
+{
     if --debug-loading in [ modules.peek : ARGV ]
     {
         ECHO "Loading Jamfile at" '$(jamfile-location)' ;
- }
-
- local module-name = [ module-name $(jamfile-location) ] ;
+ }
+
+ local module-name = [ module-name $(jamfile-location) ] ;
     # If Jamfile is already loaded, don't try again.
     if ! $(module-name) in $(.jamfile-modules)
- {
+ {
         load-jamfile $(jamfile-location) ;
-
- # We want to make sure that child project are loaded only
- # after parent projects. In particular, because parent projects
- # define attributes whch are inherited by children, and we don't
- # want children to be loaded before parents has defined everything.
+
+ # We want to make sure that child project are loaded only after parent
+ # projects. In particular, because parent projects define attributes
+ # which are inherited by children, and we don't want children to be
+ # loaded before parent has defined everything.
         #
- # While "build-project" and "use-project" can potentially refer
- # to child projects from parent projects, we don't immediately
- # loading child projects when seing those attributes. Instead,
- # we record the minimal information that will be used only later.
+ # While "build-project" and "use-project" can potentially refer to child
+ # projects from parent projects, we don't immediately load child
+ # projects when seeing those attributes. Instead, we record the minimal
+ # information to be used only later.
         load-used-projects $(module-name) ;
- }
- return $(module-name) ;
+ }
+ return $(module-name) ;
 }
 
+
 rule load-used-projects ( module-name )
 {
     local used = [ modules.peek $(module-name) : .used-projects ] ;
@@ -90,39 +86,40 @@
     {
         local id = $(used[1]) ;
         local where = $(used[2]) ;
-
- project.use $(id) : [ path.root
- [ path.make $(where) ] $(location) ] ;
+
+ project.use $(id) : [ path.root [ path.make $(where) ] $(location) ] ;
         used = $(used[3-]) ;
- }
+ }
 }
 
 
-# Note the use of character groups, as opposed to listing
-# 'Jamroot' and 'jamroot'. With the latter, we'd get duplicate
-# matches on windows and would have to eliminate duplicates.
-JAMROOT ?= [ peek : JAMROOT ] ;
+# Note the use of character groups, as opposed to listing 'Jamroot' and
+# 'jamroot'. With the latter, we'd get duplicate matches on Windows and would
+# have to eliminate duplicates.
+JAMROOT ?= [ modules.peek : JAMROOT ] ;
 JAMROOT ?= project-root.jam [Jj]amroot [Jj]amroot.jam ;
 
+
 # Loads parent of Jamfile at 'location'. Issues an error if nothing is found.
 rule load-parent ( location )
 {
- local found = [ path.glob-in-parents $(location) :
+ local found = [ path.glob-in-parents $(location) :
       $(JAMROOT) $(JAMFILE) ] ;
-
+
     if ! $(found)
     {
         ECHO "error: Could not find parent for project at '$(location)'" ;
- ECHO "error: Did not find Jamfile or project-root.jam in any parent directory." ;
+ ECHO "error: Did not find Jamfile.jam or Jamroot.jam in any parent directory." ;
         EXIT ;
     }
-
- return [ load $(found[1]:D) ] ;
+
+ return [ load $(found[1]:D) ] ;
 }
 
-# Makes the specified 'module' act as if it were a regularly loaded Jamfile
-# at 'location'. If Jamfile is already located for that location, it's an
-# error.
+
+# Makes the specified 'module' act as if it were a regularly loaded Jamfile at
+# 'location'. Reports an error if a Jamfile has already been loaded for that
+# location.
 rule act-as-jamfile ( module : location )
 {
     if [ module-name $(location) ] in $(.jamfile-modules)
@@ -130,83 +127,83 @@
         errors.error "Jamfile was already loaded for '$(location)'" ;
     }
     # Set up non-default mapping from location to module.
- .module.$(location) = $(module) ;
-
- # Add the location to the list of project locations
- # so that we don't try to load Jamfile in future
+ .module.$(location) = $(module) ;
+
+ # Add the location to the list of project locations so that we don't try to
+ # reload the same Jamfile in the future.
     .jamfile-modules += [ module-name $(location) ] ;
-
+
     initialize $(module) : $(location) ;
 }
 
 
-# Given 'name' which can be project-id or plain directory name,
-# return project module corresponding to that id or directory.
-# Returns nothing of project is not found.
+# Returns the project module corresponding to the given project-id or plain
+# directory name. Returns nothing if such a project can not be found.
 rule find ( name : current-location )
 {
     local project-module ;
-
+
     # Try interpreting name as project id.
     if [ path.is-rooted $(name) ]
- {
- project-module = $($(name).jamfile-module) ;
- }
-
+ {
+ project-module = $($(name).jamfile-module) ;
+ }
+
     if ! $(project-module)
- {
- local location = [ path.root
+ {
+ local location = [ path.root
             [ path.make $(name) ] $(current-location) ] ;
- # If no project is registered for the given location, try to
- # load it. First see if we have Jamfile. If not we might have project
- # root, willing to act as Jamfile. In that case, project-root
+
+ # If no project is registered for the given location, try to load it.
+ # First see if we have a Jamfile. If not, then see if we might have a
+ # project root willing to act as a Jamfile. In that case, project root
         # must be placed in the directory referred by id.
-
+
         project-module = [ module-name $(location) ] ;
- if ! $(project-module) in $(.jamfile-modules)
+ if ! $(project-module) in $(.jamfile-modules)
         {
             if [ path.glob $(location) : $(JAMROOT) $(JAMFILE) ]
             {
- project-module = [ load $(location) ] ;
- }
+ project-module = [ load $(location) ] ;
+ }
             else
             {
                 project-module = ;
             }
- }
+ }
     }
-
+
     return $(project-module) ;
 }
 
-#
-# Returns the name of module corresponding to 'jamfile-location'.
-# If no module corresponds to location yet, associates default
-# module name with that location.
+
+# Returns the name of the module corresponding to 'jamfile-location'. If no
+# module corresponds to that location yet, associates the default module name
+# with that location.
 #
 rule module-name ( jamfile-location )
 {
     if ! $(.module.$(jamfile-location))
     {
- # Root the path, so that locations are always umbiguious.
- # Without this, we can't decide if '../../exe/program1' and '.'
- # are the same paths, or not.
+ # Root the path, so that locations are always unambiguous. Without this,
+ # we can't decide if '../../exe/program1' and '.' are the same paths.
         jamfile-location = [ path.root $(jamfile-location) [ path.pwd ] ] ;
- .module.$(jamfile-location) = Jamfile<$(jamfile-location)> ;
+ .module.$(jamfile-location) = Jamfile<$(jamfile-location)> ;
     }
     return $(.module.$(jamfile-location)) ;
 }
 
-# Default patterns to search for the Jamfiles to use for build
-# declarations.
+
+# Default patterns to search for the Jamfiles to use for build declarations.
 #
 JAMFILE = [ modules.peek : JAMFILE ] ;
 JAMFILE ?= [Bb]uild.jam [Jj]amfile.v2 [Jj]amfile [Jj]amfile.jam ;
 
-# Find the Jamfile at the given location. This returns the exact names of
-# all the Jamfiles in the given directory. The optional parent-root argument
-# causes this to search not the given directory but the ones above it up
-# to the directory given in it.
+
+# Find the Jamfile at the given location. This returns the exact names of all
+# the Jamfiles in the given directory. The optional parent-root argument causes
+# this to search not the given directory but the ones above it up to the
+# directory given in it.
 #
 rule find-jamfile (
     dir # The directory(s) to look for a Jamfile.
@@ -220,27 +217,26 @@
     if $(parent-root)
     {
         if ! $(.parent-jamfile.$(dir))
- {
- .parent-jamfile.$(dir) =
- [ path.glob-in-parents $(dir) : $(JAMFILE) ] ;
- }
- jamfile-glob = $(.parent-jamfile.$(dir)) ;
+ {
+ .parent-jamfile.$(dir) =
+ [ path.glob-in-parents $(dir) : $(JAMFILE) ] ;
+ }
+ jamfile-glob = $(.parent-jamfile.$(dir)) ;
     }
     else
     {
         if ! $(.jamfile.$(dir))
- {
- .jamfile.$(dir) = [ path.glob $(dir) : $(JAMFILE) ] ;
- }
+ {
+ .jamfile.$(dir) = [ path.glob $(dir) : $(JAMFILE) ] ;
+ }
         jamfile-glob = $(.jamfile.$(dir)) ;
-
+
     }
-
+
     local jamfile-to-load = $(jamfile-glob) ;
- # Multiple Jamfiles found in the same place. Warn about this.
- # And ensure we use only one of them.
- # As a temporary convenience measure, if there's Jamfile.v2 amount
- # found files, suppress the warning and use it.
+ # Multiple Jamfiles found in the same place. Warn about this and ensure we
+ # use only one of them. As a temporary convenience measure, if there's
+ # Jamfile.v2 among found files, suppress the warning and use it.
     #
     if $(jamfile-to-load[2-])
     {
@@ -249,24 +245,24 @@
         if $(v2-jamfiles) && ! $(v2-jamfiles[2])
         {
             jamfile-to-load = $(v2-jamfiles) ;
- }
+ }
         else
- {
- ECHO
- "warning: Found multiple Jamfiles at '"$(dir)"'!"
- "Loading the first one: '" [ path.basename $(jamfile-to-load[1]) ] "'." ;
+ {
+ local jamfile = [ path.basename $(jamfile-to-load[1]) ] ;
+ ECHO "warning: Found multiple Jamfiles at '"$(dir)"'!"
+ "Loading the first one: '$(jamfile)'." ;
         }
-
+
         jamfile-to-load = $(jamfile-to-load[1]) ;
- }
-
+ }
+
     # Could not find it, error.
     #
     if ! $(no-errors) && ! $(jamfile-to-load)
     {
         errors.error
             "Unable to load Jamfile." :
- "Could not find a Jamfile in directory '$(dir)'". :
+ "Could not find a Jamfile in directory '$(dir)'". :
             "Attempted to find it with pattern '"$(JAMFILE:J=" ")"'." :
             "Please consult the documentation at 'http://www.boost.org'." ;
     }
@@ -274,12 +270,13 @@
     return $(jamfile-to-load) ;
 }
 
-# Load a Jamfile at the given directory. Returns nothing.
-# Will attempt to load the file as indicated by the JAMFILE patterns.
-# Effect of calling this rule twice with the same 'dir' is underfined.
 
+# Load a Jamfile at the given directory. Returns nothing. Will attempt to load
+# the file as indicated by the JAMFILE patterns. Effect of calling this rule
+# twice with the same 'dir' is undefined.
+#
 local rule load-jamfile (
- dir # The directory of the project Jamfile.
+ dir # The directory of the project Jamfile.
     )
 {
     # See if the Jamfile is where it should be.
@@ -289,76 +286,71 @@
     {
         jamfile-to-load = [ find-jamfile $(dir) ] ;
     }
-
-
- # The module of the jamfile.
+
+ # The module of the Jamfile.
     #
- local jamfile-module = [ module-name [ path.parent $(jamfile-to-load) ] ] ;
+ local jamfile-module = [ module-name [ path.parent $(jamfile-to-load) ] ] ;
 
- # Initialize the jamfile module before loading.
- #
- initialize $(jamfile-module) : [ path.parent $(jamfile-to-load) ]
- : $(jamfile-to-load:BS) ;
+ # Initialize the Jamfile module before loading.
+ #
+ initialize $(jamfile-module) : [ path.parent $(jamfile-to-load) ]
+ : $(jamfile-to-load:BS) ;
 
     local saved-project = $(.current-project) ;
- # Now load the Jamfile in it's own context.
- # Initialization might have load parent Jamfiles, which might have
- # loaded the current Jamfile with use-project. Do a final check to make
- # sure it's not loaded already.
+ # Now load the Jamfile in it's own context. Initialization might have loaded
+ # parent Jamfiles, which might have loaded the current Jamfile with
+ # use-project. Do a final check to make sure it's not loaded already.
     if ! $(jamfile-module) in $(.jamfile-modules)
- {
- .jamfile-modules += $(jamfile-module) ;
+ {
+ .jamfile-modules += $(jamfile-module) ;
         mark-as-user $(jamfile-module) ;
- modules.load $(jamfile-module) : [ path.native $(jamfile-to-load) ] : . ;
+ modules.load $(jamfile-module) : [ path.native $(jamfile-to-load) ] : . ;
         if [ MATCH ($(JAMROOT)) : $(jamfile-to-load:BS) ]
         {
             jamfile = [ find-jamfile $(dir) : no-errors ] ;
             if $(jamfile)
- {
+ {
                 load-aux $(jamfile-module) : [ path.native $(jamfile) ] ;
- }
- }
+ }
+ }
     }
- # Now do some checks
+ # Now do some checks.
     if $(.current-project) != $(saved-project)
     {
         errors.error "The value of the .current-project variable"
           : "has magically changed after loading a Jamfile."
- : "This means some of the targets might be defined a the wrong project."
- : "after loading " $(jamfile-module)
- : "expected value " $(saved-project)
- : "actual value " $(.current-project)
+ : "This means some of the targets might be defined in the wrong project."
+ : "after loading" $(jamfile-module)
+ : "expected value" $(saved-project)
+ : "actual value" $(.current-project)
           ;
     }
 
     if $(.global-build-dir)
- {
- local id = [ attribute $(jamfile-module) id ] ;
- local project-root = [ attribute $(jamfile-module) project-root ] ;
- local location = [ attribute $(jamfile-module) location ] ;
-
+ {
+ local id = [ attribute $(jamfile-module) id ] ;
+ local project-root = [ attribute $(jamfile-module) project-root ] ;
+ local location = [ attribute $(jamfile-module) location ] ;
+
         if $(location) && $(project-root) = $(dir)
         {
- # This is Jamroot
+ # This is Jamroot.
             if ! $(id)
             {
                 ECHO "warning: the --build-dir option was specified" ;
                 ECHO "warning: but Jamroot at '$(dir)'" ;
                 ECHO "warning: specified no project id" ;
                 ECHO "warning: the --build-dir option will be ignored" ;
- }
- }
- }
-
-
-
-
+ }
+ }
+ }
 }
 
+
 rule mark-as-user ( module-name )
 {
     if USER_MODULE in [ RULENAMES ]
- {
+ {
         USER_MODULE $(module-name) ;
     }
 }
@@ -367,30 +359,31 @@
 rule load-aux ( module-name : file )
 {
     mark-as-user $(module-name) ;
-
+
     module $(module-name)
     {
         include $(2) ;
         local rules = [ RULENAMES $(1) ] ;
         IMPORT $(1) : $(rules) : $(1) : $(1).$(rules) ;
- }
+ }
 }
 
+
 .global-build-dir = [ MATCH --build-dir=(.*) : [ modules.peek : ARGV ] ] ;
 if $(.global-build-dir)
-{
- # If the option is specified several times, take the last value.
+{
+ # If the option is specified several times, take the last value.
     .global-build-dir = [ path.make $(.global-build-dir[-1]) ] ;
 }
 
 
-# Initialize the module for a project.
+# Initialize the module for a project.
 #
 rule initialize (
- module-name # The name of the project module.
- : location ? # The location (directory) of the project to initialize.
- # If not specified, stanalone project will be initialized.
- : basename ?
+ module-name # The name of the project module.
+ : location ? # The location (directory) of the project to initialize. If
+ # not specified, a standalone project will be initialized.
+ : basename ?
     )
 {
     if --debug-loading in [ modules.peek : ARGV ]
@@ -398,77 +391,80 @@
         ECHO "Initializing project '$(module-name)'" ;
     }
 
- # TODO: need to consider if standalone projects can do anything but defining
- # prebuilt targets. If so, we need to give more sensible "location", so that
- # source paths are correct.
+ # TODO: need to consider if standalone projects can do anything but define
+ # prebuilt targets. If so, we need to give it a more sensible "location", so
+ # that source paths are correct.
     location ?= "" ;
- # Create the module for the Jamfile first.
+ # Create the module for the Jamfile first.
     module $(module-name)
- {
- }
- $(module-name).attributes = [ new project-attributes $(location)
- $(module-name) ] ;
+ {
+ }
+ $(module-name).attributes = [ new project-attributes $(location)
+ $(module-name) ] ;
     local attributes = $($(module-name).attributes) ;
-
+
     if $(location)
- {
- $(attributes).set source-location : [ path.make $(location) ] : exact ;
+ {
+ $(attributes).set source-location : [ path.make $(location) ] : exact ;
     }
     else
     {
- $(attributes).set source-location : "" : exact ;
+ $(attributes).set source-location : "" : exact ;
     }
-
- $(attributes).set requirements : [ property-set.empty ] : exact ;
- $(attributes).set usage-requirements : [ property-set.empty ] : exact ;
+
+ $(attributes).set requirements : [ property-set.empty ] : exact ;
+ $(attributes).set usage-requirements : [ property-set.empty ] : exact ;
 
     # Import rules common to all project modules from project-rules module,
     # defined at the end of this file.
     modules.clone-rules project-rules $(module-name) ;
-
+
     local jamroot ;
 
     local parent-module ;
- if $(module-name) = site-config
+ if $(module-name) = test-config
     {
         # No parent.
- }
+ }
+ else if $(module-name) = site-config
+ {
+ parent-module = test-config ;
+ }
     else if $(module-name) = user-config
     {
         parent-module = site-config ;
     }
- else
+ else
     {
- # We search for parent/project-root only if jamfile was specified
- # --- i.e
+ # We search for parent/project-root only if Jamfile was specified, i.e.
         # if the project is not standalone.
- if $(location) && ! [ MATCH ($(JAMROOT)) : $(basename) ]
+ if $(location) && ! [ MATCH ($(JAMROOT)) : $(basename) ]
         {
             parent-module = [ load-parent $(location) ] ;
- }
+ }
         else
         {
- # It's either jamroot, or standalone project.
- # If it's jamroot, inherit from user-config.
+ # It's either jamroot or standalone project. If it's jamroot,
+ # inherit from user-config.
             if $(location)
             {
- parent-module = user-config ;
+ parent-module = user-config ;
                 jamroot = true ;
- }
- }
+ }
+ }
     }
-
+
     if $(parent-module)
- {
+ {
         inherit-attributes $(module-name) : $(parent-module) ;
         $(attributes).set parent-module : $(parent-module) : exact ;
     }
-
+
     if $(jamroot)
- {
+ {
         $(attributes).set project-root : $(location) : exact ;
     }
-
+
     local parent ;
     if $(parent-module)
     {
@@ -477,70 +473,72 @@
 
     if ! $(.target.$(module-name))
     {
- .target.$(module-name) = [ new project-target $(module-name)
- : $(module-name) $(parent)
+ .target.$(module-name) = [ new project-target $(module-name)
+ : $(module-name) $(parent)
             : [ attribute $(module-name) requirements ] ] ;
-
+
         if --debug-loading in [ modules.peek : ARGV ]
         {
- ECHO "Assigned project target" $(.target.$(module-name))
- "to '$(module-name)'" ;
+ ECHO "Assigned project target" $(.target.$(module-name))
+ "to '$(module-name)'" ;
         }
- }
-
+ }
+
     .current-project = [ target $(module-name) ] ;
 }
 
+
 # Make 'project-module' inherit attributes of project root and parent module.
 rule inherit-attributes ( project-module : parent-module )
 {
- local attributes = $($(project-module).attributes) ;
+ local attributes = $($(project-module).attributes) ;
     local pattributes = [ attributes $(parent-module) ] ;
- # Parent module might be locationless user-config.
+ # Parent module might be locationless configuration module.
     if [ modules.binding $(parent-module) ]
- {
- $(attributes).set parent : [ path.parent
+ {
+ $(attributes).set parent : [ path.parent
             [ path.make [ modules.binding $(parent-module) ] ] ] ;
- }
+ }
     local v = [ $(pattributes).get project-root ] ;
     $(attributes).set project-root : $(v) : exact ;
- $(attributes).set default-build
- : [ $(pattributes).get default-build ] ;
+ $(attributes).set default-build
+ : [ $(pattributes).get default-build ] ;
     $(attributes).set requirements
- : [ $(pattributes).get requirements ] : exact ;
+ : [ $(pattributes).get requirements ] : exact ;
     $(attributes).set usage-requirements
- : [ $(pattributes).get usage-requirements ] : exact ;
-
+ : [ $(pattributes).get usage-requirements ] : exact ;
+
     local parent-build-dir = [ $(pattributes).get build-dir ] ;
     if $(parent-build-dir)
- {
- # Have to compute relative path from parent dir to our dir
- # Convert both paths to absolute, since we cannot
- # find relative path from ".." to "."
-
+ {
+ # Have to compute relative path from parent dir to our dir. Convert both
+ # paths to absolute, since we cannot find relative path from ".." to
+ # ".".
+
         local location = [ attribute $(project-module) location ] ;
         local parent-location = [ attribute $(parent-module) location ] ;
-
+
         local pwd = [ path.pwd ] ;
         local parent-dir = [ path.root $(parent-location) $(pwd) ] ;
         local our-dir = [ path.root $(location) $(pwd) ] ;
- $(attributes).set build-dir : [ path.join $(parent-build-dir)
- [ path.relative $(our-dir) $(parent-dir) ] ] : exact ;
- }
+ $(attributes).set build-dir : [ path.join $(parent-build-dir)
+ [ path.relative $(our-dir) $(parent-dir) ] ] : exact ;
+ }
 }
 
 
-# Associate the given id with the given project module
+# Associate the given id with the given project module.
 rule register-id ( id : module )
 {
     $(id).jamfile-module = $(module) ;
 }
 
+
 # Class keeping all the attributes of a project.
 #
 # The standard attributes are "id", "location", "project-root", "parent"
 # "requirements", "default-build", "source-location" and "projects-to-build".
-class project-attributes
+class project-attributes
 {
     import property ;
     import property-set ;
@@ -549,28 +547,28 @@
     import print ;
     import sequence ;
     import project ;
-
+
     rule __init__ ( location project-module )
- {
+ {
         self.location = $(location) ;
         self.project-module = $(project-module) ;
     }
-
- # Set the named attribute from the specification given by the user.
- # The value actually set may be different.
- rule set ( attribute : specification *
- : exact ? # Sets value from 'specification' without any processing
- )
+
+ # Set the named attribute from the specification given by the user. The
+ # value actually set may be different.
+ rule set ( attribute : specification *
+ : exact ? # Sets value from 'specification' without any processing.
+ )
     {
         if $(exact)
         {
             self.$(attribute) = $(specification) ;
         }
- else if $(attribute) = "requirements"
+ else if $(attribute) = "requirements"
         {
             local result = [ property-set.refine-from-user-input
                 $(self.requirements) : $(specification)
- : $(self.project-module) : $(self.location) ] ;
+ : $(self.project-module) : $(self.location) ] ;
 
             if $(result[1]) = "@error"
             {
@@ -593,28 +591,28 @@
                 split ?= nothing $(p) ;
                 unconditional += $(split[2]) ;
             }
-
+
             local non-free = [ property.remove free : $(unconditional) ] ;
             if $(non-free)
             {
                 errors.error "usage-requirements" $(specification) "have non-free properties" $(non-free) ;
- }
+ }
             local t = [ property.translate-paths $(specification)
                                       : $(self.location) ] ;
             if $(self.usage-requirements)
             {
- self.usage-requirements = [ property-set.create
+ self.usage-requirements = [ property-set.create
                     [ $(self.usage-requirements).raw ] $(t) ] ;
             }
- else
+ else
             {
                 self.usage-requirements = [ property-set.create $(t) ] ;
- }
- }
+ }
+ }
         else if $(attribute) = "default-build"
         {
             self.default-build = [ property.make $(specification) ] ;
- }
+ }
         else if $(attribute) = "source-location"
         {
             self.source-location = ;
@@ -623,17 +621,17 @@
                 self.source-location += [ path.root
                     [ path.make $(src-path) ] $(self.location) ] ;
             }
- }
+ }
         else if $(attribute) = "build-dir"
         {
- self.build-dir = [ path.root
+ self.build-dir = [ path.root
                 [ path.make $(specification) ] $(self.location) ] ;
- }
- else if ! $(attribute) in "id" "default-build" "location" "source-location"
- "parent" "projects-to-build" "project-root"
+ }
+ else if ! $(attribute) in "id" "default-build" "location"
+ "source-location" "parent" "projects-to-build" "project-root"
         {
- errors.error "Invalid project attribute '$(attribute)' specified "
- "for project at '$(self.location)'" ;
+ errors.error "Invalid project attribute '$(attribute)' specified"
+ "for project at '$(self.location)'" ;
         }
         else
         {
@@ -658,27 +656,29 @@
         print.list-item "Requirements:" [ $(self.requirements).raw ] ;
         print.list-item "Default build:" $(self.default-build) ;
         print.list-item "Source location:" $(self.source-location) ;
- print.list-item "Projects to build:"
- [ sequence.insertion-sort $(self.projects-to-build) ] ;
+ print.list-item "Projects to build:"
+ [ sequence.insertion-sort $(self.projects-to-build) ] ;
         print.list-end ;
     }
-
 }
 
-# Returns the project which is currently being loaded
+
+# Returns the project which is currently being loaded.
 rule current ( )
 {
     return $(.current-project) ;
 }
 
-# Temporary changes the current project to 'project'. Should
-# be followed by 'pop-current'.
+
+# Temporarily changes the current project to 'project'. Should be followed by
+# 'pop-current'.
 rule push-current ( project )
 {
     .saved-current-project += $(.current-project) ;
     .current-project = $(project) ;
 }
 
+
 rule pop-current ( )
 {
     .current-project = $(.saved-current-project[-1]) ;
@@ -686,68 +686,71 @@
 }
 
 
-
-# Returns the project-attribute instance for the specified jamfile module.
+# Returns the project-attribute instance for the specified Jamfile module.
 rule attributes ( project )
 {
     return $($(project).attributes) ;
 }
 
-# Returns the value of the specified attribute in the specified jamfile module.
+
+# Returns the value of the specified attribute in the specified Jamfile module.
 rule attribute ( project attribute )
 {
- return [ $($(project).attributes).get $(attribute) ] ;
+ return [ $($(project).attributes).get $(attribute) ] ;
 }
 
+
 # Returns the project target corresponding to the 'project-module'.
 rule target ( project-module )
 {
     if ! $(.target.$(project-module))
     {
- .target.$(project-module) = [ new project-target $(project-module)
- : $(project-module)
- : [ attribute $(project-module) requirements ] ] ;
+ .target.$(project-module) = [ new project-target $(project-module)
+ : $(project-module)
+ : [ attribute $(project-module) requirements ] ] ;
     }
- return $(.target.$(project-module)) ;
+ return $(.target.$(project-module)) ;
 }
 
+
 # Use/load a project.
 rule use ( id : location )
 {
     local saved-project = $(.current-project) ;
     local project-module = [ project.load $(location) ] ;
     local declared-id = [ project.attribute $(project-module) id ] ;
-
+
     if ! $(declared-id) || $(declared-id) != $(id)
     {
- # The project at 'location' either have no id or
- # that id is not equal to the 'id' parameter.
- if $($(id).jamfile-module)
- && $($(id).jamfile-module) != $(project-module)
- {
- errors.user-error
- "Attempt to redeclare already existing project id '$(id)'" ;
- }
+ # The project at 'location' either has no id or that id is not equal to
+ # the 'id' parameter.
+ if $($(id).jamfile-module)
+ && $($(id).jamfile-module) != $(project-module)
+ {
+ errors.user-error
+ "Attempt to redeclare already existing project id '$(id)'" ;
+ }
         $(id).jamfile-module = $(project-module) ;
     }
     .current-project = $(saved-project) ;
 }
 
-# Defines a Boost.Build extension project. Such extensions usually
-# contain library targets and features that can be used by many people.
-# Even though extensions are really projects, they can be initialize as
-# a module would be with the "using" (project.project-rules.using)
-# mechanism.
+
+# Defines a Boost.Build extension project. Such extensions usually contain
+# library targets and features that can be used by many people. Even though
+# extensions are really projects, they can be initialized as a module would be
+# with the "using" (project.project-rules.using) mechanism.
+#
 rule extension ( id : options * : * )
 {
     # The caller is a standalone module for the extension.
     local mod = [ CALLER_MODULE ] ;
-
+
     # We need to do the rest within the extension module.
     module $(mod)
     {
         import path ;
-
+
         # Find the root project.
         local root-project = [ project.current ] ;
         root-project = [ $(root-project).project-module ] ;
@@ -757,170 +760,167 @@
         {
             root-project = [ project.attribute $(root-project) parent-module ] ;
         }
-
- # Create the project data, and bring in the project rules
- # into the module.
+
+ # Create the project data, and bring in the project rules into the
+ # module.
         project.initialize $(__name__) :
             [ path.join [ project.attribute $(root-project) location ] ext $(1:L) ] ;
-
- # Create the project itself, i.e. the attributes.
- # All extensions are created in the "/ext" project space.
+
+ # Create the project itself, i.e. the attributes. All extensions are
+ # created in the "/ext" project space.
         project /ext/$(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
         local attributes = [ project.attributes $(__name__) ] ;
-
+
         # Inherit from the root project of whomever is defining us.
         project.inherit-attributes $(__name__) : $(root-project) ;
         $(attributes).set parent-module : $(root-project) : exact ;
     }
 }
 
+
 rule glob-internal ( project : wildcards + : excludes * : rule-name )
 {
     local location = [ $(project).get source-location ] ;
-
+
     local result ;
- local paths = [ path.$(rule-name) $(location)
- : [ sequence.transform path.make : $(wildcards) ]
+ local paths = [ path.$(rule-name) $(location)
+ : [ sequence.transform path.make : $(wildcards) ]
         : [ sequence.transform path.make : $(excludes) ] ] ;
     if $(wildcards:D) || $(rule-name) != glob
     {
- # The paths we've found are relative to current directory,
- # but the names specified in sources list are assumed to
- # be relative to source directory of the corresponding
- # prject. So, just make the name absolute.
+ # The paths we've found are relative to the current directory, but the
+ # names specified in the sources list are assumed to be relative to the
+ # source directory of the corresponding project. So, just make the names
+ # absolute.
         for local p in $(paths)
         {
             result += [ path.root $(p) [ path.pwd ] ] ;
- }
+ }
     }
- else
+ else
     {
- # There were not directory in wildcard, so the files are all
- # in the source directory of the project. Just drop the
- # directory, instead of making paths absolute.
+ # There were no wildcards in the directory path, so the files are all in
+ # the source directory of the project. Just drop the directory, instead
+ # of making paths absolute.
         result = $(paths:D="") ;
     }
-
- return $(result) ;
+
+ return $(result) ;
 }
 
 
-# This module defines rules common to all projects
+# This module defines rules common to all projects.
 module project-rules
-{
+{
     rule using ( toolset-module : * )
     {
         import toolset ;
         import modules ;
         import project ;
-
- # The module referred by 'using' can be placed in
- # the same directory as Jamfile, and the user
- # will expect the module to be found even though
- # the directory is not in BOOST_BUILD_PATH.
- # So temporary change the search path.
+
+ # Temporarily change the search path so the module referred to by
+ # 'using' can be placed in the same directory as Jamfile. User will
+ # expect the module to be found even though the directory is not in
+ # BOOST_BUILD_PATH.
         local x = [ modules.peek : BOOST_BUILD_PATH ] ;
         local caller = [ modules.binding $(__name__) ] ;
         modules.poke : BOOST_BUILD_PATH : $(caller:D) $(x) ;
         toolset.using $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
         modules.poke : BOOST_BUILD_PATH : $(x) ;
-
- # The above might have clobbered .current-project
- # Restore the the right value.
- modules.poke project : .current-project
- : [ project.target $(__name__) ] ;
+
+ # The above might have clobbered .current-project. Restore the correct
+ # value.
+ modules.poke project : .current-project
+ : [ project.target $(__name__) ] ;
     }
-
+
     import modules ;
-
+
     rule import ( * : * : * )
     {
         modules.import project ;
-
+
         local caller = [ CALLER_MODULE ] ;
         local saved = [ modules.peek project : .current-project ] ;
         module $(caller)
         {
             modules.import $(1) : $(2) : $(3) ;
         }
- modules.poke project : .current-project : $(saved) ;
+ modules.poke project : .current-project : $(saved) ;
     }
 
-
     rule project ( id ? : options * : * )
     {
- import project ;
- import path ;
         import errors ;
-
+ import path ;
+ import project ;
+
         local attributes = [ project.attributes $(__name__) ] ;
- if $(id)
+ if $(id)
         {
            id = [ path.root $(id) / ] ;
            project.register-id $(id) : $(__name__) ;
            $(attributes).set id : $(id) ;
         }
-
+
         local explicit-build-dir ;
-
+
         for n in 2 3 4 5 6 7 8 9
         {
             local option = $($(n)) ;
- if $(option)
+ if $(option)
             {
                 $(attributes).set $(option[1]) : $(option[2-]) ;
             }
             if $(option[1]) = "build-dir"
             {
                 explicit-build-dir = [ path.make $(option[2-]) ] ;
- }
+ }
         }
-
+
         # If '--build-dir' is specified, change the build dir for the project.
- local global-build-dir =
- [ modules.peek project : .global-build-dir ] ;
-
+ local global-build-dir =
+ [ modules.peek project : .global-build-dir ] ;
+
         if $(global-build-dir)
- {
+ {
             local location = [ $(attributes).get location ] ;
- # Project with empty location is 'standalone' project, like
- # user-config, or qt. It has no build dir.
- # If we try to set build dir for user-config, we'll then
- # try to inherit it, with either weird, or wrong consequences.
+ # Project with an empty location is a 'standalone' project such as
+ # user-config or qt. It has no build dir. If we try to set build dir
+ # for user-config, we'll then try to inherit it, with either weird
+ # or wrong consequences.
             if $(location) && $(location) = [ $(attributes).get project-root ]
             {
                 # This is Jamroot.
                 if $(id)
- {
- if $(explicit-build-dir)
+ {
+ if $(explicit-build-dir)
                       && [ path.is-rooted $(explicit-build-dir) ]
                     {
- errors.user-error "Absolute directory specified via 'build-dir' project attribute"
- : "Don't know how to combine that with the --build-dir option."
- ;
+ errors.user-error "Absolute directory specified via 'build-dir' project attribute"
+ : "Don't know how to combine that with the --build-dir option."
+ ;
                     }
                     # Strip the leading slash from id.
- local rid = [ MATCH /(.*) : $(id) ] ;
- local p = [ path.join
+ local rid = [ MATCH /(.*) : $(id) ] ;
+ local p = [ path.join
                         $(global-build-dir) $(rid) $(explicit-build-dir) ] ;
 
                     $(attributes).set build-dir : $(p) : exact ;
- }
- }
- else
+ }
+ }
+ else
             {
                 # Not Jamroot
                 if $(explicit-build-dir)
- {
- errors.user-error "When --build-dir is specified, the 'build-project'"
- : "attribute is allowed only for top-level 'project' invocations" ;
- }
- }
+ {
+ errors.user-error "When --build-dir is specified, the 'build-dir' project"
+ : "attribute is allowed only for top-level 'project' invocations" ;
+ }
+ }
         }
-
-
     }
-
+
     # Declare and set a project global constant. Project global constants are
     # normal variables but should not be changed. They are applied to every
     # child Jamfile.
@@ -932,13 +932,12 @@
     {
         import project ;
         local p = [ project.target $(__name__) ] ;
- $(p).add-constant $(name) : $(value) ;
+ $(p).add-constant $(name) : $(value) ;
     }
-
- # Declare and set a project global constant, whose value is a path. The
- # path is adjusted to be relative to the invocation directory. The given
- # value path is taken to be either absolute, or relative to this project
- # root.
+
+ # Declare and set a project global constant, whose value is a path. The path
+ # is adjusted to be relative to the invocation directory. The given value
+ # path is taken to be either absolute, or relative to this project root.
     rule path-constant (
         name # Variable name of the constant.
         : value + # Value of the constant.
@@ -949,7 +948,6 @@
         $(p).add-constant $(name) : $(value) : path ;
     }
 
-
     rule use-project ( id : where )
     {
         # See comment in 'load' for explanation.
@@ -964,43 +962,42 @@
         local now = [ $(attributes).get projects-to-build ] ;
         $(attributes).set projects-to-build : $(now) $(dir) ;
     }
-
+
     rule explicit ( target-names * )
     {
         import project ;
- # If 'explicit' is used in a helper rule defined in Jamroot,
- # and inherited by children, then most of the time
- # we want 'explicit' to operate on the Jamfile where
- # the helper rule is invoked.
+ # If 'explicit' is used in a helper rule defined in Jamroot and
+ # inherited by children, then most of the time we want 'explicit' to
+ # operate on the Jamfile where the helper rule is invoked.
         local t = [ project.current ] ;
         for local n in $(target-names)
- {
+ {
             $(t).mark-target-as-explicit $(n) ;
- }
- }
-
+ }
+ }
+
     rule glob ( wildcards + : excludes * )
     {
         import project ;
- return [ project.glob-internal [ project.current ]
+ return [ project.glob-internal [ project.current ]
           : $(wildcards) : $(excludes) : glob ] ;
     }
 
     rule glob-tree ( wildcards + : excludes * )
     {
         import project ;
-
+
         if $(wildcards:D) || $(excludes:D)
         {
             errors.user-error "The patterns to 'glob-tree' may not include directory" ;
         }
- return [ project.glob-internal [ project.current ]
+ return [ project.glob-internal [ project.current ]
           : $(wildcards) : $(excludes) : glob-tree ] ;
     }
 
- # Calculates conditional requirements for multiple requirements
- # at once. This is a shorthand to be reduce duplication and to
- # keep an inline declarative syntax. For example:
+ # Calculates conditional requirements for multiple requirements at once.
+ # This is a shorthand to reduce duplication and to keep an inline
+ # declarative syntax. For example:
     #
     # lib x : x.cpp : [ conditional <toolset>gcc <variant>debug :
     # <define>DEBUG_EXCEPTION <define>DEBUG_TRACE ] ;

Modified: branches/fix-links/tools/build/v2/build/property-set.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/property-set.jam (original)
+++ branches/fix-links/tools/build/v2/build/property-set.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,7 +1,7 @@
-# Copyright 2003 Dave Abrahams
-# Copyright 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003 Dave Abrahams
+# Copyright 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 import "class" : new ;
 import feature ;
@@ -10,46 +10,45 @@
 import set ;
 
 # Class for storing a set of properties.
-# - there's 1<->1 correspondence between identity and value. No
-# two instances of the class are equal. To maintain this property,
-# the 'property-set.create' rule should be used to create new instances.
-# Instances are immutable.
-#
-# - each property is classified with regard to it's effect on build
-# results. Incidental properties have no effect on build results, from
-# Boost.Build point of view. Others are either free, or non-free, which we
-# call 'base'. Each property belong to exactly one of those categories and
-# it's possible to get list of properties in each category.
+# - there's 1<->1 correspondence between identity and value. No two instances of
+# the class are equal. To maintain this property, the 'property-set.create'
+# rule should be used to create new instances. Instances are immutable.
 #
-# In addition, it's possible to get list of properties with specific
+# - each property is classified with regard to it's effect on build results.
+# Incidental properties have no effect on build results, from Boost.Build's
+# point of view. Others are either free, or non-free, which we call 'base'.
+# Each property belongs to exactly one of those categories and it's possible
+# to get list of properties in each category.
+#
+# In addition, it's possible to get a list of properties with a specific
 # attribute.
 #
 # - several operations, like and refine and as-path are provided. They all use
 # caching whenever possible.
 #
-class property-set
+class property-set
 {
+ import errors ;
     import feature ;
- import property-set ;
+ import path ;
     import property ;
+ import property-set ;
     import set ;
- import path ;
- import errors ;
-
+
     rule __init__ ( raw-properties * )
- {
+ {
         self.raw = $(raw-properties) ;
-
+
         for local p in $(raw-properties)
         {
             if ! $(p:G)
             {
- errors.error "Invalid property: '$(p)'" ;
+ errors.error "Invalid property: '$(p)'" ;
             }
-
- local att = [ feature.attributes $(p:G) ] ;
- # A feature can be both incidental and free,
- # in which case we add it to incidental.
+
+ local att = [ feature.attributes $(p:G) ] ;
+ # A feature can be both incidental and free, in which case we add it
+ # to incidental.
             if incidental in $(att)
             {
                 self.incidental += $(p) ;
@@ -58,11 +57,11 @@
             {
                 self.free += $(p) ;
             }
- else
+ else
             {
                 self.base += $(p) ;
             }
-
+
             if dependency in $(att)
             {
                 self.dependency += $(p) ;
@@ -71,8 +70,8 @@
             {
                 self.non-dependency += $(p) ;
             }
-
- if [ MATCH (:) : $(p:G=) ]
+
+ if [ MATCH (:) : $(p:G=) ]
             {
                 self.conditional += $(p) ;
             }
@@ -80,80 +79,76 @@
             {
                 self.non-conditional += $(p) ;
             }
-
-
+
             if propagated in $(att)
             {
                 self.propagated += $(p) ;
- }
+ }
             if link-incompatible in $(att)
             {
                 self.link-incompatible += $(p) ;
- }
+ }
         }
-
     }
-
-
- # Returns Jam list of stored properties
+
+ # Returns Jam list of stored properties.
     rule raw ( )
     {
         return $(self.raw) ;
     }
-
+
     rule str ( )
     {
         return "[" $(self.raw) "]" ;
     }
-
- # Returns properties that are neither incidental nor free
+
+ # Returns properties that are neither incidental nor free.
     rule base ( )
     {
         return $(self.base) ;
     }
-
-
- # Returns free properties which are not dependency properties
+
+ # Returns free properties which are not dependency properties.
     rule free ( )
     {
         return $(self.free) ;
     }
-
- # Returns dependency properties
+
+ # Returns dependency properties.
     rule dependency ( )
     {
         return $(self.dependency) ;
     }
-
+
     rule non-dependency ( )
     {
         return $(self.non-dependency) ;
     }
-
+
     rule conditional ( )
     {
         return $(self.conditional) ;
     }
-
+
     rule non-conditional ( )
     {
         return $(self.non-conditional) ;
     }
-
- # Returns incidental properties
+
+ # Returns incidental properties.
     rule incidental ( )
     {
         return $(self.incidental) ;
     }
-
+
     rule refine ( ps )
     {
         if ! $(self.refined.$(ps))
         {
- local r = [ property.refine $(self.raw) : [ $(ps).raw ] ] ;
+ local r = [ property.refine $(self.raw) : [ $(ps).raw ] ] ;
             if $(r[1]) != "@error"
             {
- self.refined.$(ps) = [ property-set.create $(r) ] ;
+ self.refined.$(ps) = [ property-set.create $(r) ] ;
             }
             else
             {
@@ -162,7 +157,7 @@
         }
         return $(self.refined.$(ps)) ;
     }
-
+
     rule expand ( )
     {
         if ! $(self.expanded)
@@ -171,8 +166,7 @@
         }
         return $(self.expanded) ;
     }
-
-
+
     rule expand-composites ( )
     {
         if ! $(self.composites)
@@ -182,18 +176,18 @@
         }
         return $(self.composites) ;
     }
-
+
     rule evaluate-conditionals ( context ? )
     {
         context ?= $(__name__) ;
         if ! $(self.evaluated.$(context))
         {
- self.evaluated.$(context) = [ property-set.create
+ self.evaluated.$(context) = [ property-set.create
                 [ property.evaluate-conditionals-in-context $(self.raw) : [ $(context).raw ] ] ] ;
         }
- return $(self.evaluated.$(context)) ;
+ return $(self.evaluated.$(context)) ;
     }
-
+
     rule propagated ( )
     {
         if ! $(self.propagated-ps)
@@ -201,19 +195,18 @@
             self.propagated-ps = [ property-set.create $(self.propagated) ] ;
         }
         return $(self.propagated-ps) ;
- }
-
+ }
+
     rule link-incompatible ( )
     {
         if ! $(self.link-incompatible-ps)
         {
- self.link-incompatible-ps =
+ self.link-incompatible-ps =
               [ property-set.create $(self.link-incompatible) ] ;
         }
         return $(self.link-incompatible-ps) ;
     }
-
-
+
     rule run-actions ( )
     {
         if ! $(self.run)
@@ -222,37 +215,34 @@
         }
         return $(self.run) ;
     }
-
+
     rule add-defaults ( )
     {
         if ! $(self.defaults)
         {
- self.defaults = [ property-set.create
+ self.defaults = [ property-set.create
                 [ feature.add-defaults $(self.raw) ] ] ;
         }
         return $(self.defaults) ;
     }
-
-
+
     rule as-path ( )
     {
         if ! $(self.as-path)
         {
             self.as-path = [ property.as-path $(self.base) ] ;
- }
+ }
         return $(self.as-path) ;
- }
-
- # Computes the target path that should be used for
- # target with these properties.
+ }
+
+ # Computes the path to be used for a target with the given properties.
     # Returns a list of
     # - the computed path
- # - if the path is relative to build directory, a value of
- # 'true'.
+ # - if the path is relative to the build directory, a value of 'true'.
     rule target-path ( )
     {
         if ! $(self.target-path)
- {
+ {
             # The <location> feature can be used to explicitly
             # change the location of generated targetsv
             local l = [ get <location> ] ;
@@ -262,62 +252,61 @@
             }
             else
             {
- local p = [ as-path ] ;
+ local p = [ as-path ] ;
                 # Really, an ugly hack. Boost regression test system requires
                 # specific target paths, and it seems that changing it to handle
- # other directory layout is really hard. For that reason,
- # we teach V2 to do the things regression system requires.
- # The value o '<location-prefix>' is predended to the path.
- local prefix = [ get <location-prefix> ] ;
+ # other directory layout is really hard. For that reason, we
+ # teach V2 to do the things regression system requires. The
+ # value of '<location-prefix>' is prepended to the path.
+ local prefix = [ get <location-prefix> ] ;
                 if $(prefix)
                 {
                     self.target-path = [ path.join $(prefix) $(p) ] ;
- }
+ }
                 else
                 {
                     self.target-path = $(p) ;
- }
+ }
                 if ! $(self.target-path)
                 {
                     self.target-path = . ;
- }
+ }
                 # The path is relative to build dir.
                 self.target-path += true ;
- }
- }
+ }
+ }
         return $(self.target-path) ;
     }
-
-
+
     rule add ( ps )
     {
- if ! $(self.added.$(ps))
+ if ! $(self.added.$(ps))
         {
             self.added.$(ps) = [ property-set.create $(self.raw) [ $(ps).raw ] ] ;
         }
         return $(self.added.$(ps)) ;
- }
-
+ }
+
     rule add-raw ( properties * )
     {
         return [ add [ property-set.create $(properties) ] ] ;
- }
-
+ }
+
     rule link-incompatible-with ( ps )
     {
         if ! $(.li.$(ps))
         {
             local li1 = [ $(__name__).link-incompatible ] ;
- local li2 = [ $(ps).link-incompatible ] ;
- if [ set.equal $(li1) : $(li2) ]
+ local li2 = [ $(ps).link-incompatible ] ;
+ if [ set.equal $(li1) : $(li2) ]
             {
                 .li.$(ps) = false ;
             }
             else
             {
                 .li.$(ps) = true ;
- }
- }
+ }
+ }
         if $(.li.$(ps)) = true
         {
             return true ;
@@ -325,85 +314,79 @@
         else
         {
             return ;
- }
+ }
     }
-
 
-
     # Returns all values of 'feature'.
     rule get ( feature )
     {
         if ! $(self.map-built)
         {
- # For each feature, create member var and assign all
- # values to it. Since all regular member vars start with
- # 'self', there will be no conflicts between names.
+ # For each feature, create a member var and assign all values to it.
+ # Since all regular member vars start with 'self', there will be no
+ # conflicts between names.
             self.map-built = true ;
             for local v in $(self.raw)
             {
                 $(v:G) += $(v:G=) ;
- }
+ }
         }
-
         return $($(feature)) ;
     }
-
 }
 
-# Creates new 'property-set' instance for the given raw properties,
-# or returns an already existing ones.
+
+# Creates a new 'property-set' instance for the given raw properties or returns
+# an already existing ones.
 rule create ( raw-properties * )
 {
- raw-properties = [ sequence.unique
+ raw-properties = [ sequence.unique
         [ sequence.insertion-sort $(raw-properties) ] ] ;
-
+
     local key = $(raw-properties:J=-:E=) ;
-
- if ! $(.ps.$(key))
+
+ if ! $(.ps.$(key))
     {
         .ps.$(key) = [ new property-set $(raw-properties) ] ;
     }
- return $(.ps.$(key)) ;
+ return $(.ps.$(key)) ;
 }
 NATIVE_RULE property-set : create ;
 
-# Creates new 'property-set' instances after checking
-# that all properties are valid and converting incidental
-# properties into gristed form.
+
+# Creates a new 'property-set' instance after checking that all properties are
+# valid and converting incidental properties into gristed form.
 rule create-with-validation ( raw-properties * )
 {
     property.validate $(raw-properties) ;
-
     return [ create [ property.make $(raw-properties) ] ] ;
 }
 
-# Creates a property-set from the input given by the user, in the
-# context of 'jamfile-module' at 'location'
+
+# Creates a property-set from the input given by the user, in the context of
+# 'jamfile-module' at 'location'.
 rule create-from-user-input ( raw-properties * : jamfile-module location )
 {
     local specification = [ property.translate-paths $(raw-properties)
- : $(location) ] ;
+ : $(location) ] ;
     specification = [ property.translate-indirect $(specification)
- : $(jamfile-module) ] ;
- specification =
- [ property.expand-subfeatures-in-conditions $(specification) ] ;
- specification = [ property.make $(specification) ] ;
- result = [ property-set.create $(specification) ] ;
- return $(result) ;
+ : $(jamfile-module) ] ;
+ specification =
+ [ property.expand-subfeatures-in-conditions $(specification) ] ;
+ specification = [ property.make $(specification) ] ;
+ return [ property-set.create $(specification) ] ;
 }
 
-# Refines requirements with requirements provided by the user.
-# Specially handles "-<property>value" syntax in specification
-# to remove given requirements.
-# - parent-requirements -- property-set object with requirements
-# to refine
-# - specification -- string list of requirements provided by the use
-# - project-module -- the module to which context indirect features
-# will be bound.
-# - location -- the path to which path features are relative.
-#
+
+# Refines requirements with requirements provided by the user. Specially handles
+# "-<property>value" syntax in specification to remove given requirements.
+# - parent-requirements -- property-set object with requirements to refine.
+# - specification -- string list of requirements provided by the user.
+# - project-module -- module to which context indirect features will be
+# bound.
+# - location -- path to which path features are relative.
 #
-rule refine-from-user-input ( parent-requirements : specification *
+rule refine-from-user-input ( parent-requirements : specification *
     : project-module : location )
 {
     if ! $(specification)
@@ -414,7 +397,7 @@
     {
         local add-requirements ;
         local remove-requirements ;
-
+
         for local r in $(specification)
         {
             local m = [ MATCH "^-(.*)" : $(r) ] ;
@@ -427,38 +410,35 @@
                 add-requirements += $(r) ;
             }
         }
-
+
         if $(remove-requirements)
         {
- # Need to create property set, so that path features
- # and indirect features are translated just like they
- # are in project requirements.
- local ps = [ property-set.create-from-user-input
+ # Need to create a property set, so that path features and indirect
+ # features are translated just like they are in project
+ # requirements.
+ local ps = [ property-set.create-from-user-input
                 $(remove-requirements) : $(project-module) $(location) ] ;
-
- parent-requirements = [ property-set.create
- [ set.difference [ $(parent-requirements).raw ]
- : [ $(ps).raw ] ] ] ;
+
+ parent-requirements = [ property-set.create
+ [ set.difference [ $(parent-requirements).raw ]
+ : [ $(ps).raw ] ] ] ;
             specification = $(add-requirements) ;
         }
 
- local requirements = [ property-set.create-from-user-input
+ local requirements = [ property-set.create-from-user-input
             $(specification) : $(project-module) $(location) ] ;
-
- requirements = [ $(parent-requirements).refine $(requirements) ] ;
- return $(requirements) ;
+
+ return [ $(parent-requirements).refine $(requirements) ] ;
     }
 }
 
 
-
-# Returns property-set with empty set of properties.
+# Returns a property-set with an empty set of properties.
 rule empty ( )
 {
     if ! $(.empty)
     {
- .empty = [ create ] ;
+ .empty = [ create ] ;
     }
-
     return $(.empty) ;
 }

Modified: branches/fix-links/tools/build/v2/build/property.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/property.jam (original)
+++ branches/fix-links/tools/build/v2/build/property.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,52 +1,50 @@
-# Copyright 2001, 2002, 2003 Dave Abrahams
-# Copyright 2006 Rene Rivera
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-import utility : ungrist ;
-import sequence : unique ;
-import errors : error ;
+# Copyright 2001, 2002, 2003 Dave Abrahams
+# Copyright 2006 Rene Rivera
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+import errors ;
 import feature ;
+import indirect ;
+import path ;
 import regex ;
 import string ;
 import sequence ;
 import set ;
-import path ;
-import assert ;
-import indirect ;
+import utility ;
 
-# Refines 'properties' by overriding any non-free properties
-# for which a different value is specified in 'requirements'.
-# Conditional requirements are just added without modification.
-# Returns the resulting list of properties.
+
+# Refines 'properties' by overriding any non-free and non-conditional properties
+# for which a different value is specified in 'requirements'. Returns the
+# resulting list of properties.
 rule refine ( properties * : requirements * )
 {
     local result ;
     local error ;
-
- # All the elements of requirements should be present in the result
- # Record them so that we can handle 'properties'.
+
+ # All the 'requirements' elements should be present in the result. Record
+ # them so that we can handle 'properties'.
     for local r in $(requirements)
     {
         # Don't consider conditional requirements.
         if ! [ MATCH (:) : $(r:G=) ]
- {
- # Note: cannot use local here, so take an ugly name
+ {
+ # Note: cannot use a local variable here, so use an ugly name.
             __require__$(r:G) = $(r:G=) ;
- }
+ }
     }
 
     for local p in $(properties)
- {
- # No processing for free properties
+ {
         if [ MATCH (:) : $(p:G=) ]
         {
- # Skip conditional properties
+ # Do not modify conditional properties.
             result += $(p) ;
- }
+ }
         else if free in [ feature.attributes $(p:G) ]
         {
+ # Do not modify free properties.
             result += $(p) ;
         }
         else
@@ -54,8 +52,7 @@
             local required-value = $(__require__$(p:G)) ;
             if $(required-value)
             {
- local value = $(p:G=) ;
- if $(value) != $(required-value)
+ if $(p:G=) != $(required-value)
                 {
                     result += $(p:G)$(required-value) ;
                 }
@@ -71,25 +68,26 @@
         }
     }
 
- # Unset our ugly map.
+ # Unset our ugly map.
     for local r in $(requirements)
     {
- __require__$(r:G) = ;
+ __require__$(r:G) = ;
     }
-
+
     if $(error)
     {
         return $(error) ;
     }
     else
     {
- return [ unique $(result) $(requirements) ] ;
+ return [ sequence.unique $(result) $(requirements) ] ;
     }
 }
 
-# Removes all conditional properties which conditions are not met
-# For those with met conditions, removes the condition. Properies
-# in conditions are looked up in 'context'
+
+# Removes all conditional properties whose conditions are not met. For those
+# with met conditions, removes the condition. Properties in conditions are
+# looked up in 'context'.
 rule evaluate-conditionals-in-context ( properties * : context * )
 {
     local base ;
@@ -103,31 +101,32 @@
         else
         {
             base += $(p) ;
- }
+ }
     }
 
     local result = $(base) ;
     for local p in $(conditionals)
     {
- # Separate condition and property
+ # Separate condition and property.
         local s = [ MATCH (.*):(<.*) : $(p) ] ;
- # Split condition into individual properties
+ # Split condition into individual properties.
         local c = [ regex.split $(s[1]) "," ] ;
- # Evaluate condition
+ # Evaluate condition.
         if $(c) in $(context)
         {
             result += $(s[2]) ;
- }
+ }
     }
- return $(result) ;
+ return $(result) ;
 }
 
+
 rule expand-subfeatures-in-conditions ( properties * )
 {
     local result ;
     for local p in $(properties)
     {
- local s = [ MATCH (.*):(<.*) : $(p) ] ;
+ local s = [ MATCH (.*):(<.*) : $(p) ] ;
         if ! $(s)
         {
             result += $(p) ;
@@ -135,20 +134,20 @@
         else
         {
             local condition = $(s[1]) ;
- # Condition might include several elements
+ local value = $(s[2]) ;
+ # Condition might include several elements.
             condition = [ regex.split $(condition) "," ] ;
- local value = $(s[2]) ;
             local e ;
             for local c in $(condition)
- {
- # It common that condition includes a toolset which
- # was never defined, or mentiones subfeatures which
- # were never defined. In that case, validation will
- # only produce an spirious error, so prevent
- # validation by passing 'true' as second parameter.
+ {
+ # It is common for a condition to include a toolset or
+ # subfeatures that have not been defined. In that case we want
+ # the condition to simply 'never be satisfied' and validation
+ # would only produce a spurious error so we prevent it by
+ # passing 'true' as the second parameter.
                 e += [ feature.expand-subfeatures $(c) : true ] ;
             }
-
+
             if $(e) = $(condition)
             {
                 result += $(p) ;
@@ -157,17 +156,15 @@
             {
                 local individual-subfeatures = [ set.difference $(e) : $(condition) ] ;
                 result += $(individual-subfeatures:J=,):$(value) ;
- }
- }
- }
+ }
+ }
+ }
     return $(result) ;
 }
 
 
-
-# Helper for as-path, below. Orders properties with the implicit ones
-# first, and within the two sections in alphabetical order of feature
-# name.
+# Helper for as-path, below. Orders properties with the implicit ones first, and
+# within the two sections in alphabetical order of feature name.
 local rule path-order ( x y )
 {
     if $(y:G) && ! $(x:G)
@@ -185,7 +182,7 @@
             x = [ feature.expand-subfeatures $(x) ] ;
             y = [ feature.expand-subfeatures $(y) ] ;
         }
-
+
         if $(x[1]) < $(y[1])
         {
             return true ;
@@ -193,6 +190,7 @@
     }
 }
 
+
 local rule abbreviate-dashed ( string )
 {
     local r ;
@@ -203,11 +201,13 @@
     return $(r:J=-) ;
 }
 
+
 local rule identity ( string )
 {
     return $(string) ;
 }
 
+
 if --abbreviate-paths in [ modules.peek : ARGV ]
 {
     .abbrev = abbreviate-dashed ;
@@ -217,37 +217,38 @@
     .abbrev = identity ;
 }
 
-# Returns a path which represents the given expanded property set.
+
+# Returns a path representing the given expanded property set.
 rule as-path ( properties * )
 {
     local entry = .result.$(properties:J=-) ;
-
+
     if ! $($(entry))
     {
         # trim redundancy
         properties = [ feature.minimize $(properties) ] ;
-
+
         # sort according to path-order
         properties = [ sequence.insertion-sort $(properties) : path-order ] ;
-
+
         local components ;
         for local p in $(properties)
         {
             if $(p:G)
             {
- local f = [ ungrist $(p:G) ] ;
+ local f = [ utility.ungrist $(p:G) ] ;
                 p = $(f)-$(p:G=) ;
             }
-
             components += [ $(.abbrev) $(p) ] ;
         }
-
+
         $(entry) = $(components:J=/) ;
- }
-
+ }
+
     return $($(entry)) ;
 }
 
+
 # Exit with error if property is not valid.
 local rule validate1 ( property )
 {
@@ -259,17 +260,19 @@
 
         if ! [ feature.valid $(feature) ]
         {
- feature = [ ungrist $(property:G) ] ; # Ungrist for better error messages
+ # Ungrist for better error messages.
+ feature = [ utility.ungrist $(property:G) ] ;
             msg = "unknown feature '$(feature)'" ;
         }
- else if $(value) && ! free in [ feature.attributes $(feature) ]
+ else if $(value) && ! free in [ feature.attributes $(feature) ]
         {
             feature.validate-value-string $(feature) $(value) ;
- }
+ }
         else if ! ( $(value) || ( optional in [ feature.attributes $(feature) ] ) )
         {
- feature = [ ungrist $(property:G) ] ; # Ungrist for better error messages
- msg = "No value specified for feature '$(feature)'" ;
+ # Ungrist for better error messages.
+ feature = [ utility.ungrist $(property:G) ] ;
+ msg = "No value specified for feature '$(feature)'" ;
         }
     }
     else
@@ -277,12 +280,13 @@
         local feature = [ feature.implied-feature $(property) ] ;
         feature.validate-value-string $(feature) $(property) ;
     }
- if $(msg)
+ if $(msg)
     {
- error "Invalid property "'$(property:J=" ")'": "$(msg:J=" "). ;
+ errors.error "Invalid property "'$(property:J=" ")'": "$(msg:J=" "). ;
     }
 }
 
+
 rule validate ( properties * )
 {
     for local p in $(properties)
@@ -291,6 +295,7 @@
     }
 }
 
+
 rule validate-property-sets ( property-sets * )
 {
     for local s in $(property-sets)
@@ -299,12 +304,13 @@
     }
 }
 
-# Makes a property set from 'specification', converting implicit values into
-# full properties.
+
+# Expands any implicit property values in the given property 'specification' so
+# they explicitly state their feature.
 rule make ( specification * )
 {
     local result ;
- for local e in $(specification)
+ for local e in $(specification)
     {
         if $(e:G)
         {
@@ -313,18 +319,19 @@
         else if [ feature.is-implicit-value $(e) ]
         {
             local feature = [ feature.implied-feature $(e) ] ;
- result += $(feature)$(e) ;
+ result += $(feature)$(e) ;
         }
         else
         {
- error "'$(e)' is not a valid for property specification" ;
+ errors.error "'$(e)' is not a valid property specification" ;
         }
     }
     return $(result) ;
 }
 
-# Returns a property sets which include all the elements in 'properties' that
-# do not have attributes listed in 'attributes'.
+
+# Returns a property set containing all the elements in 'properties' that do not
+# have their attributes listed in 'attributes'.
 rule remove ( attributes + : properties * )
 {
     local result ;
@@ -338,8 +345,9 @@
     return $(result) ;
 }
 
-# Returns a property set which include all properties in 'properties' that have
-# any of 'attributes'.
+
+# Returns a property set containig all the elements in 'properties' that have
+# their attributes listed in 'attributes'.
 rule take ( attributes + : properties * )
 {
     local result ;
@@ -353,15 +361,16 @@
     return $(result) ;
 }
 
-# Selects properties which correspond to any of the given features.
+
+# Selects properties corresponding to any of the given features.
 rule select ( features * : properties * )
 {
     local result ;
-
- # add any missing angle brackets
+
+ # Add any missing angle brackets.
     local empty = "" ;
     features = $(empty:G=$(features)) ;
-
+
     for local p in $(properties)
     {
         if $(p:G) in $(features)
@@ -372,17 +381,17 @@
     return $(result) ;
 }
 
-# Returns a modified version of properties with all values of the
-# given feature replaced by the given value.
-# If 'value' is empty the feature will be removed
+
+# Returns a modified version of properties with all values of the given feature
+# replaced by the given value. If 'value' is empty the feature will be removed.
 rule change ( properties * : feature value ? )
 {
- local result ;
+ local result ;
     for local p in $(properties)
     {
         if $(p:G) = $(feature)
         {
- result += $(value:G=$(feature)) ;
+ result += $(value:G=$(feature)) ;
         }
         else
         {
@@ -392,61 +401,61 @@
     return $(result) ;
 }
 
-# If 'property' is conditional property, returns
-# condition and the property, e.g
-# <variant>debug,<toolset>gcc:<inlining>full will become
-# <variant>debug,<toolset>gcc <inlining>full.
-# Otherwise, returns empty string.
+
+# If 'property' is a conditional property, returns the condition and the
+# property. E.g. <variant>debug,<toolset>gcc:<inlining>full will become
+# <variant>debug,<toolset>gcc <inlining>full. Otherwise, returns an empty
+# string.
 rule split-conditional ( property )
 {
     local m = [ MATCH "(.+):<(.+)" : $(property) ] ;
     if $(m)
     {
         return $(m[1]) <$(m[2]) ;
- }
+ }
 }
 
 
-# Interpret all path properties in 'properties' as relative to 'path'
-# The property values are assumed to be in system-specific form, and
-# will be translated into normalized form.
+# Interpret all path properties in 'properties' as relative to 'path'. The
+# property values are assumed to be in system-specific form, and will be
+# translated into normalized form.
 rule translate-paths ( properties * : path )
 {
     local result ;
     for local p in $(properties)
     {
         local split = [ split-conditional $(p) ] ;
- local condition = "" ;
+ local condition = "" ;
         if $(split)
         {
             condition = $(split[1]): ;
             p = $(split[2]) ;
         }
-
- if path in [ feature.attributes $(p:G) ]
+
+ if path in [ feature.attributes $(p:G) ]
         {
             local values = [ regex.split $(p:TG=) "&&" ] ;
             local t ;
             for local v in $(values)
             {
- t += [ path.root [ path.make $(v) ] $(path) ] ;
+ t += [ path.root [ path.make $(v) ] $(path) ] ;
             }
- t = $(t:J="&&") ;
+ t = $(t:J="&&") ;
             result += $(condition)$(t:TG=$(p:G)) ;
         }
         else
         {
             result += $(condition)$(p) ;
- }
+ }
     }
     return $(result) ;
 }
 
-# Assumes that all feature values that start with '@' are
-# names of rules, used in 'context-module'. Such rules
-# can be either local to the module or global. Converts such
-# values into 'indirect-rule' format (see indirect.jam), so
-# that they can be called from other modules.
+
+# Assumes that all feature values that start with '@' are names of rules, used
+# in 'context-module'. Such rules can be either local to the module or global.
+# Converts such values into 'indirect-rule' format (see indirect.jam), so they
+# can be called from other modules.
 rule translate-indirect ( specification * : context-module )
 {
     local result ;
@@ -458,23 +467,21 @@
             local v ;
             if [ MATCH "^([^%]*)%([^%]+)$" : $(m) ]
             {
- # Rule is already in indirect format
+ # Rule is already in indirect format.
                 v = $(m) ;
             }
             else
             {
                 if ! [ MATCH ".*([.]).*" : $(m) ]
                 {
- # This is unqualified rule name. The user might want
- # to set flags on this rule name, and toolset.flag
- # auto-qualifies the rule name. Need to do the same
- # here so set flag setting work.
- # We can arrange for toolset.flag to *not* auto-qualify
- # the argument, but then two rules defined in two Jamfiles
- # will conflict.
+ # This is an unqualified rule name. The user might want to
+ # set flags on this rule name and toolset.flag
+ # auto-qualifies it. Need to do the same here so flag
+ # setting works. We can arrange for toolset.flag to *not*
+ # auto-qualify the argument but then two rules defined in
+ # two Jamfiles would conflict.
                     m = $(context-module).$(m) ;
                 }
-
                 v = [ indirect.make $(m) : $(context-module) ] ;
             }
 
@@ -484,25 +491,24 @@
         else
         {
             result += $(p) ;
- }
+ }
     }
- return $(result) ;
+ return $(result) ;
 }
 
 
-# Class which maintains a property set -> string
-# mapping
+# Class which maintains a property set -> string mapping.
 class property-map
 {
+ import errors ;
     import numbers ;
     import sequence ;
- import errors : error ;
-
+
     rule __init__ ( )
- {
+ {
         self.next-flag = 1 ;
     }
-
+
     # Associate 'value' with 'properties'
     rule insert ( properties + : value )
     {
@@ -513,18 +519,16 @@
         self.next-flag = [ numbers.increment $(self.next-flag) ] ;
     }
 
- # Return the value associated with 'properties'
- # or any subset of it. If more than one
- # subset has value assigned to it, return the
- # value for the longest subset, if it's unique.
+ # Returns the value associated with 'properties' or any subset of it. If
+ # more than one subset has a value assigned to it, returns the value for the
+ # longest subset, if it's unique.
     rule find ( properties + )
     {
         return [ find-replace $(properties) ] ;
     }
-
- # Find the value associated with 'properties'.
- # If 'value' parameter is given, replaces the found value
- # Returns the value that were stored originally.
+
+ # Returns the value associated with 'properties'. If 'value' parameter is
+ # given, replaces the found value.
     rule find-replace ( properties + : value ? )
     {
         # First find all matches
@@ -535,106 +539,95 @@
             if $(self.properties.$(i)) in $(properties)
             {
                 matches += $(i) ;
- match-ranks += [ sequence.length
- $(self.properties.$(i)) ] ;
+ match-ranks += [ sequence.length $(self.properties.$(i)) ] ;
             }
         }
- local best = [ sequence.select-highest-ranked
- $(matches) : $(match-ranks) ] ;
+ local best = [ sequence.select-highest-ranked $(matches)
+ : $(match-ranks) ] ;
         if $(best[2])
         {
- error "Ambiguous key" ;
- }
+ errors.error "Ambiguous key" ;
+ }
         local original = $(self.value.$(best)) ;
         if $(value)
         {
             self.value.$(best) = $(value) ;
- }
+ }
         return $(original) ;
- }
+ }
 }
 
+
 local rule __test__ ( )
 {
+ import assert ;
+ import "class" : new ;
     import errors : try catch ;
     import feature ;
- import feature : feature subfeature compose ;
-
- # local rules must be explicitly re-imported
+
+ # Local rules must be explicitly re-imported.
     import property : path-order abbreviate-dashed ;
-
+
     feature.prepare-test property-test-temp ;
 
- feature toolset : gcc : implicit symmetric ;
- subfeature toolset gcc : version : 2.95.2 2.95.3 2.95.4
- 3.0 3.0.1 3.0.2 : optional ;
- feature define : : free ;
- feature runtime-link : dynamic static : symmetric link-incompatible ;
- feature optimization : on off ;
- feature variant : debug release : implicit composite symmetric ;
- feature rtti : on off : link-incompatible ;
+ feature.feature toolset : gcc : implicit symmetric ;
+ feature.subfeature toolset gcc : version : 2.95.2 2.95.3 2.95.4 3.0 3.0.1
+ 3.0.2 : optional ;
+ feature.feature define : : free ;
+ feature.feature runtime-link : dynamic static : symmetric link-incompatible ;
+ feature.feature optimization : on off ;
+ feature.feature variant : debug release : implicit composite symmetric ;
+ feature.feature rtti : on off : link-incompatible ;
 
- compose <variant>debug : <define>_DEBUG <optimization>off ;
- compose <variant>release : <define>NDEBUG <optimization>on ;
+ feature.compose <variant>debug : <define>_DEBUG <optimization>off ;
+ feature.compose <variant>release : <define>NDEBUG <optimization>on ;
 
- import assert ;
- import "class" : new ;
-
- validate <toolset>gcc <toolset>gcc-3.0.1 : $(test-space) ;
-
- assert.true path-order $(test-space) debug <define>foo ;
+ validate <toolset>gcc <toolset>gcc-3.0.1 : $(test-space) ;
+
+ assert.true path-order $(test-space) debug <define>foo ;
     assert.false path-order $(test-space) <define>foo debug ;
- assert.true path-order $(test-space) gcc debug ;
+ assert.true path-order $(test-space) gcc debug ;
     assert.false path-order $(test-space) debug gcc ;
- assert.true path-order $(test-space) <optimization>on <rtti>on ;
+ assert.true path-order $(test-space) <optimization>on <rtti>on ;
     assert.false path-order $(test-space) <rtti>on <optimization>on ;
-
+
     assert.result-equal <toolset>gcc <rtti>off <define>FOO
         : refine <toolset>gcc <rtti>off
         : <define>FOO
- : $(test-space)
- ;
+ : $(test-space) ;
 
     assert.result-equal <toolset>gcc <optimization>on
         : refine <toolset>gcc <optimization>off
         : <optimization>on
- : $(test-space)
- ;
+ : $(test-space) ;
 
     assert.result-equal <toolset>gcc <rtti>off
- : refine <toolset>gcc : <rtti>off : $(test-space)
- ;
+ : refine <toolset>gcc : <rtti>off : $(test-space) ;
 
     assert.result-equal <toolset>gcc <rtti>off <rtti>off:<define>FOO
- : refine <toolset>gcc : <rtti>off <rtti>off:<define>FOO
- : $(test-space)
- ;
-
- assert.result-equal <toolset>gcc:<define>foo <toolset>gcc:<define>bar
- : refine <toolset>gcc:<define>foo : <toolset>gcc:<define>bar
- : $(test-space)
- ;
+ : refine <toolset>gcc : <rtti>off <rtti>off:<define>FOO
+ : $(test-space) ;
+
+ assert.result-equal <toolset>gcc:<define>foo <toolset>gcc:<define>bar
+ : refine <toolset>gcc:<define>foo : <toolset>gcc:<define>bar
+ : $(test-space) ;
 
     assert.result <define>MY_RELEASE
- : evaluate-conditionals-in-context
+ : evaluate-conditionals-in-context
           <variant>release,<rtti>off:<define>MY_RELEASE
- : <toolset>gcc <variant>release <rtti>off
-
- ;
+ : <toolset>gcc <variant>release <rtti>off ;
 
     assert.result debug
- : as-path <optimization>off <variant>debug
- : $(test-space)
- ;
+ : as-path <optimization>off <variant>debug
+ : $(test-space) ;
 
     assert.result gcc/debug/rtti-off
- : as-path <toolset>gcc <optimization>off <rtti>off <variant>debug
- : $(test-space)
- ;
+ : as-path <toolset>gcc <optimization>off <rtti>off <variant>debug
+ : $(test-space) ;
 
     assert.result optmz-off : abbreviate-dashed optimization-off ;
     assert.result rntm-lnk-sttc : abbreviate-dashed runtime-link-static ;
-
+
     try ;
         validate <feature>value : $(test-space) ;
     catch "Invalid property '<feature>value': unknown feature 'feature'." ;
@@ -642,7 +635,7 @@
     try ;
         validate <rtti>default : $(test-space) ;
     catch \"default\" is not a known value of feature <rtti> ;
-
+
     validate <define>WHATEVER : $(test-space) ;
 
     try ;
@@ -652,21 +645,20 @@
     try ;
         validate value : $(test-space) ;
     catch "value" is not a value of an implicit feature ;
-
 
- assert.result-equal <rtti>on
+ assert.result-equal <rtti>on
         : remove free implicit : <toolset>gcc <define>foo <rtti>on : $(test-space) ;
 
- assert.result-equal <include>a
+ assert.result-equal <include>a
         : select include : <include>a <toolset>gcc ;
 
- assert.result-equal <include>a
+ assert.result-equal <include>a
         : select include bar : <include>a <toolset>gcc ;
 
     assert.result-equal <include>a <toolset>gcc
         : select include <bar> <toolset> : <include>a <toolset>gcc ;
-
- assert.result-equal <toolset>kylix <include>a
+
+ assert.result-equal <toolset>kylix <include>a
         : change <toolset>gcc <include>a : <toolset> kylix ;
 
     pm = [ new property-map ] ;
@@ -674,31 +666,23 @@
     $(pm).insert <toolset>gcc <os>NT : obj ;
     $(pm).insert <toolset>gcc <os>CYGWIN : obj ;
 
- assert.equal o
- : [ $(pm).find <toolset>gcc ] ;
+ assert.equal o : [ $(pm).find <toolset>gcc ] ;
 
- assert.equal obj
- : [ $(pm).find <toolset>gcc <os>NT ] ;
+ assert.equal obj : [ $(pm).find <toolset>gcc <os>NT ] ;
 
     try ;
         $(pm).find <toolset>gcc <os>NT <os>CYGWIN ;
     catch "Ambiguous key" ;
 
- # Test ordinary properties
- assert.result
- : split-conditional <toolset>gcc
- ;
-
- # Test properties with ":"
- assert.result
- : split-conditional <define>FOO=A::B
- ;
-
- # Test conditional feature
+ # Test ordinary properties.
+ assert.result : split-conditional <toolset>gcc ;
+
+ # Test properties with ":".
+ assert.result : split-conditional <define>FOO=A::B ;
+
+ # Test conditional feature.
     assert.result-equal <toolset>gcc,<toolset-gcc:version>3.0 <define>FOO
- : split-conditional <toolset>gcc,<toolset-gcc:version>3.0:<define>FOO
- ;
-
+ : split-conditional <toolset>gcc,<toolset-gcc:version>3.0:<define>FOO ;
+
     feature.finish-test property-test-temp ;
 }
-

Modified: branches/fix-links/tools/build/v2/build/targets.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/targets.jam (original)
+++ branches/fix-links/tools/build/v2/build/targets.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,152 +5,149 @@
 # (See accompanying file LICENSE_1_0.txt or copy at
 # http://www.boost.org/LICENSE_1_0.txt)
 
-
-# Supports 'abstract' targets, which are targets explicitly defined in Jamfile.
+# Supports 'abstract' targets, which are targets explicitly defined in a
+# Jamfile.
 #
-# Abstract targets are represented by classes derived from 'abstract-target' class.
-# The first abstract target is 'project-target', which is created for each
-# Jamfile, and can be obtained by the 'target' rule in the Jamfile's module.
-# (see project.jam).
+# Abstract targets are represented by classes derived from 'abstract-target'
+# class. The first abstract target is 'project-target', which is created for
+# each Jamfile, and can be obtained by the 'target' rule in the Jamfile's
+# module (see project.jam).
 #
-# Project targets keep a list of 'main-target' instances.
-# A main target is what the user explicitly defines in a Jamfile. It is
-# possible to have several definitions for a main target, for example to have
-# different lists of sources for different platforms. So, main targets
-# keep a list of alternatives.
+# Project targets keep a list of 'main-target' instances. A main target is
+# what the user explicitly defines in a Jamfile. It is possible to have
+# several definitions for a main target, for example to have different lists
+# of sources for different platforms. So, main targets keep a list of
+# alternatives.
 #
 # Each alternative is an instance of 'abstract-target'. When a main target
-# subvariant is defined by some rule, that rule will decide what class to
-# use, create an instance of that class and add it to the list of alternatives
-# for the main target.
+# subvariant is defined by some rule, that rule will decide what class to use,
+# create an instance of that class and add it to the list of alternatives for
+# the main target.
 #
-# Rules supplied by the build system will use only targets derived
-# from 'basic-target' class, which will provide some default behaviour.
-# There will be two classes derived from it, 'make-target', created by the
-# 'make' rule, and 'typed-target', created by rules such as 'exe' and 'dll'.
+# Rules supplied by the build system will use only targets derived from
+# 'basic-target' class, which will provide some default behaviour. There will
+# be different classes derived from it such as 'make-target', created by the
+# 'make' rule, and 'typed-target', created by rules such as 'exe' and 'lib'.
 
 #
 # +------------------------+
 # |abstract-target |
 # +========================+
 # |name |
-# |project |
-# | |
-# |generate(properties) = 0|
-# +-----------+------------+
-# |
-# ^
-# / \
-# +-+-+
-# |
-# |
-# +------------------------+------+------------------------------+
-# | | |
-# | | |
-# +----------+-----------+ +------+------+ +------+-------+
-# | project-target | | main-target | | basic-target |
-# +======================+ 1 * +=============+ alternatives +==============+
-# | generate(properties) |o-----------+ generate |<>------------->| generate |
+# |project |
+# | |
+# |generate(properties) = 0|
+# +-----------+------------+
+# |
+# ^
+# / \
+# +-+-+
+# |
+# |
+# +------------------------+------+------------------------------+
+# | | |
+# | | |
+# +----------+-----------+ +------+------+ +------+-------+
+# | project-target | | main-target | | basic-target |
+# +======================+ 1 * +=============+ alternatives +==============+
+# | generate(properties) |o-----------+ generate |<>------------->| generate |
 # | main-target | +-------------+ | construct = 0|
-# +----------------------+ +--------------+
-# |
-# ^
-# / \
-# +-+-+
-# |
-# |
-# ...--+----------------+------------------+----------------+---+
-# | | | |
-# | | | |
+# +----------------------+ +--------------+
+# |
+# ^
+# / \
+# +-+-+
+# |
+# |
+# ...--+----------------+------------------+----------------+---+
+# | | | |
+# | | | |
 # ... ---+-----+ +------+-------+ +------+------+ +--------+-----+
 # | | typed-target | | make-target | | stage-target |
 # . +==============+ +=============+ +==============+
 # . | construct | | construct | | construct |
 # +--------------+ +-------------+ +--------------+
 
+import assert ;
 import "class" : new ;
-import sequence ;
-import regex ;
-import property ;
 import errors ;
-import common ;
-import property-set ;
-import project ;
 import feature ;
-import virtual-target ;
+import indirect ;
 import path ;
+import property ;
+import property-set ;
+import sequence ;
 import set ;
-import assert ;
-import indirect ;
 import toolset ;
 
 # Base class for all abstract targets.
-class abstract-target
+class abstract-target
 {
- import project assert "class" errors ;
-
+ import project ;
+ import assert ;
+ import "class" ;
+ import errors ;
+
     rule __init__ ( name # name of the target in Jamfile
         : project-target # the project target to which this one belongs
     )
- {
+ {
         # Note: it might seem that we don't need either name or project at all.
- # However, there are places where we really need it. One example is error
- # messages which should name problematic targets. Another is setting correct
- # paths for sources and generated files.
-
+ # However, there are places where we really need it. One example is
+ # error messages which should name problematic targets. Another is
+ # setting correct paths for sources and generated files.
+
         self.name = $(name) ;
         self.project = $(project-target) ;
         self.location = [ errors.nearest-user-location ] ;
- }
-
+ }
+
     # Returns the name of this target.
     rule name ( )
     {
         return $(self.name) ;
     }
-
+
     # Returns the project for this target.
     rule project ( )
     {
         return $(self.project) ;
     }
-
+
     # Return the location where the target was declared
     rule location ( )
     {
         return $(self.location) ;
     }
-
+
     # Returns a user-readable name for this target.
     rule full-name ( )
     {
         local location = [ $(self.project).get location ] ;
         return $(location)/$(self.name) ;
     }
-
- # Takes a property set. Generates virtual targets for this abstract
- # target, using the specified properties, unless a different value of some
- # feature is required by the target.
- # On
- # success, returns:
- # - a property-set with the usage requirements to be
- # applied to dependents
- # - a list of produced virtual targets, which may be
- # empty.
- # If 'property-set' are empty, performs default build of this
- # target, in a way specific to derived class.
+
+ # Generates virtual targets for this abstract target using the specified
+ # properties, unless a different value of some feature is required by the
+ # target.
+ # On success, returns:
+ # - a property-set with the usage requirements to be applied to dependants
+ # - a list of produced virtual targets, which may be empty.
+ # If 'property-set' is empty, performs the default build of this target, in
+ # a way specific to the derived class.
     rule generate ( property-set )
     {
         errors.error "method should be defined in derived classes" ;
     }
-
+
     rule rename ( new-name )
     {
         self.name = $(new-name) ;
- }
+ }
 }
 
-if --debug-building in [ modules.peek : ARGV ]
+
+if --debug-building in [ modules.peek : ARGV ]
 {
     modules.poke : .debug-building : true ;
 }
@@ -161,63 +158,65 @@
     return $(.indent:J="") ;
 }
 
+
 rule increase-indent ( )
 {
     .indent += " " ;
 }
 
+
 rule decrease-indent ( )
 {
     .indent = $(.indent[2-]) ;
 }
 
-# Project target class (derived from 'abstract-target')
+
+# Project target class (derived from 'abstract-target').
 #
-# This class these responsibilities:
-# - maintaining a list of main target in this project and
-# building it
+# This class has the following responsibilities:
+# - Maintaining a list of main targets in this project and building them.
 #
 # Main targets are constructed in two stages:
-# - When Jamfile is read, a number of calls to 'add-alternative' is made.
-# At that time, alternatives can also be renamed to account for inline
-# targets.
-# - The first time 'main-target' or 'has-main-target' rule is called,
-# all alternatives are enumerated an main targets are created.
-class project-target : abstract-target
+# - When Jamfile is read, a number of calls to 'add-alternative' is made. At
+# that time, alternatives can also be renamed to account for inline targets.
+# - The first time 'main-target' or 'has-main-target' rule is called, all
+# alternatives are enumerated and main targets are created.
+class project-target : abstract-target
 {
- import project targets ;
+ import project ;
+ import targets ;
     import path ;
     import print ;
     import property-set ;
- import set : difference : set.difference ;
+ import set ;
     import sequence ;
     import "class" : new ;
     import errors ;
-
+
     rule __init__ ( name : project-module parent-project ?
         : requirements * : default-build * )
- {
+ {
         abstract-target.__init__ $(name) : $(__name__) ;
-
+
         self.project-module = $(project-module) ;
         self.location = [ project.attribute $(project-module) location ] ;
         self.requirements = $(requirements) ;
         self.default-build = $(default-build) ;
-
+
         if $(parent-project)
- {
+ {
             inherit $(parent-project) ;
- }
+ }
     }
 
- # This is needed only by the 'make' rule. Need to find the
- # way to make 'make' work without this method.
+ # This is needed only by the 'make' rule. Need to find the way to make
+ # 'make' work without this method.
     rule project-module ( )
     {
         return $(self.project-module) ;
     }
-
- rule get ( attribute )
+
+ rule get ( attribute )
     {
         return [ project.attribute $(self.project-module) $(attribute) ] ;
     }
@@ -225,57 +224,57 @@
     rule build-dir ( )
     {
         if ! $(self.build-dir)
- {
+ {
             self.build-dir = [ get build-dir ] ;
             if ! $(self.build-dir)
             {
- self.build-dir = [ path.join
+ self.build-dir = [ path.join
                     [ $(self.project).get location ]
                       bin
                 ] ;
             }
         }
         return $(self.build-dir) ;
- }
-
+ }
+
     # Generates all possible targets contained in this project.
     rule generate ( property-set * )
     {
- if [ modules.peek : .debug-building ]
+ if [ modules.peek : .debug-building ]
         {
             ECHO [ targets.indent ] "building project" [ name ] " ('$(__name__)') with" [ $(property-set).raw ] ;
             targets.increase-indent ;
         }
-
+
         local usage-requirements = [ property-set.empty ] ;
         local targets ;
-
- for local t in [ targets-to-build ]
+
+ for local t in [ targets-to-build ]
         {
             local g = [ $(t).generate $(property-set) ] ;
             usage-requirements = [ $(usage-requirements).add $(g[1]) ] ;
             targets += $(g[2-]) ;
         }
         targets.decrease-indent ;
- return $(usage-requirements) [ sequence.unique $(targets) ] ;
+ return $(usage-requirements) [ sequence.unique $(targets) ] ;
     }
-
- # Computes and returns a list of abstract-target instances which
- # must be built when this project is built.
+
+ # Computes and returns a list of abstract-target instances which must be
+ # built when this project is built.
     rule targets-to-build ( )
     {
         local result ;
-
+
         if ! $(self.built-main-targets)
         {
             build-main-targets ;
         }
-
+
         # Collect all main targets here, except for "explicit" ones.
         for local t in $(self.main-targets)
         {
             if ! [ $(t).name ] in $(self.explicit-targets)
- {
+ {
                 result += $(t) ;
             }
         }
@@ -286,10 +285,10 @@
         {
             result += [ find $(pn) ] ;
         }
-
+
         return $(result) ;
     }
-
+
     # Add 'target' to the list of targets in this project that should be build
     # only by explicit request
     rule mark-target-as-explicit ( target-name )
@@ -298,19 +297,18 @@
         # rule is called before main target instaces are created.
         self.explicit-targets += $(target-name) ;
     }
-
+
     # Add new target alternative
     rule add-alternative ( target-instance )
     {
         if $(self.built-main-targets)
         {
- errors.error "add-alternative called when main targets are already created."
- : "in project" [ full-name ] ;
- }
+ errors.error "add-alternative called when main targets are already created."
+ : "in project" [ full-name ] ;
+ }
         self.alternatives += $(target-instance) ;
     }
-
-
+
     # Returns a 'main-target' class instance corresponding to the 'name'.
     rule main-target ( name )
     {
@@ -318,7 +316,7 @@
         {
             build-main-targets ;
         }
-
+
         return $(self.main-target.$(name)) ;
     }
 
@@ -329,79 +327,79 @@
         {
             build-main-targets ;
         }
-
- if $(self.main-target.$(name))
+
+ if $(self.main-target.$(name))
         {
             return true ;
- }
+ }
     }
 
     # Find and return the target with the specified id, treated
     # relative to self.
     rule find-really ( id )
     {
- local result ;
+ local result ;
         local project = $(self.project) ;
         local current-location = [ get location ] ;
-
- local split = [ MATCH (.*)//(.*) : $(id) ] ;
+
+ local split = [ MATCH (.*)//(.*) : $(id) ] ;
         local project-part = $(split[1]) ;
         local target-part = $(split[2]) ;
 
         local extra-error-message ;
         if $(project-part)
         {
- # There's explicit project part in id. Looks up the
- # project and pass the request to it.
+ # There's explicit project part in id. Looks up the project and
+ # passes the request to it.
             local pm = [ project.find $(project-part) : $(current-location) ] ;
             if $(pm)
             {
- project-target = [ project.target $(pm) ] ;
+ project-target = [ project.target $(pm) ] ;
                 result = [ $(project-target).find $(target-part) : no-error ] ;
- }
+ }
             else
             {
                 extra-error-message = "error: could not find project '$(project-part)'" ;
- }
+ }
         }
         else
- {
- # Interpret target-name as name of main target
- # Need to do this before checking for file. Consider this:
+ {
+ # Interpret target-name as name of main target. Need to do this
+ # before checking for file. Consider this:
             #
             # exe test : test.cpp ;
             # install s : test : <location>. ;
             #
             # After first build we'll have target 'test' in Jamfile and file
- # 'test' on the disk. We need target to override the file.
- result = [ main-target $(id) ] ;
-
+ # 'test' on the disk. We need target to override the file.
+ result = [ main-target $(id) ] ;
+
             if ! $(result)
             {
                 result = [ new file-reference [ path.make $(id) ] : $(project) ] ;
-
+
                 if ! [ $(result).exists ]
                 {
- # File actually does not exist.
- # Reset 'target' so that an error is issued.
+ # File actually does not exist. Reset 'target' so that an
+ # error is issued.
                     result = ;
- }
+ }
             }
-
+
             # Interpret id as project-id
             if ! $(result)
- {
+ {
                 local project-module = [ project.find $(id) : $(current-location) ] ;
                 if $(project-module)
                 {
                     result = [ project.target $(project-module) ] ;
- }
- }
+ }
+ }
         }
-
+
         return $(result) ;
     }
-
+
     rule find ( id : no-error ? )
     {
         local v = $(.id.$(id)) ;
@@ -414,11 +412,11 @@
             }
             .id.$(id) = $(v) ;
         }
-
+
         if $(v) != none
         {
             return $(v) ;
- }
+ }
         else
         {
             if ! $(no-error)
@@ -430,12 +428,10 @@
                 ECHO "error: '$(current-location)'" ;
                 ECHO $(extra-error-message) ;
                 EXIT ;
- }
- }
+ }
+ }
     }
-
 
-
     rule build-main-targets ( )
     {
         self.built-main-targets = true ;
@@ -450,16 +446,16 @@
                 self.main-targets += $(t) ;
                 target = $(self.main-target.$(name)) ;
             }
-
- $(target).add-alternative $(a) ;
- }
- }
-
+
+ $(target).add-alternative $(a) ;
+ }
+ }
+
     # Accessor, add a constant.
     rule add-constant (
- name # Variable name of the constant.
- : value + # Value of the constant.
- : type ? # Optional type of value.
+ name # Variable name of the constant.
+ : value + # Value of the constant.
+ : type ? # Optional type of value.
         )
     {
         switch $(type)
@@ -467,14 +463,14 @@
             case path :
               local r ;
               for local v in $(value)
- {
+ {
                 v = [ path.root [ path.make $(v) ] $(self.location) ] ;
- # Now make the value absolute path
+ # Now make the value absolute path.
                 v = [ path.root $(v) [ path.pwd ] ] ;
- # Constants should be in platform-native form
+ # Constants should be in platform-native form.
                 v = [ path.native $(v) ] ;
                 r += $(v) ;
- }
+ }
               value = $(r) ;
         }
         if ! $(name) in $(self.constants)
@@ -482,31 +478,31 @@
             self.constants += $(name) ;
         }
         self.constant.$(name) = $(value) ;
- # Inject the constant in the scope of project-root module
+ # Inject the constant in the scope of project-root module.
         modules.poke $(self.project-module) : $(name) : $(value) ;
     }
-
+
     rule inherit ( parent )
     {
- for local c in [ modules.peek $(parent) : self.constants ]
+ for local c in [ modules.peek $(parent) : self.constants ]
         {
             # No need to pass the type. Path constants were converted to
             # absolute paths already by parent.
- add-constant $(c)
+ add-constant $(c)
               : [ modules.peek $(parent) : self.constant.$(c) ] ;
- }
+ }
 
- # Import rules from parent
+ # Import rules from parent.
         local this-module = [ project-module ] ;
         local parent-module = [ $(parent).project-module ] ;
- # Don't import rules which comes from 'project-rules', they
- # must be imported localized.
- local user-rules = [ set.difference
+ # Don't import rules coming from 'project-rules' as they must be
+ # imported localized.
+ local user-rules = [ set.difference
             [ RULENAMES $(parent-module) ] :
             [ RULENAMES project-rules ] ] ;
         IMPORT $(parent-module) : $(user-rules) : $(this-module) : $(user-rules) ;
         EXPORT $(this-module) : $(user-rules) ;
- }
+ }
 }
 
 
@@ -520,37 +516,38 @@
         {
             names += [ $(t).full-name ] ;
         }
-
- errors.error "Recursion in main target references"
+
+ errors.error "Recursion in main target references"
           : "the following target are being built currently:"
           : $(names) ;
     }
- .targets-being-built += $(main-target-instance) ;
+ .targets-being-built += $(main-target-instance) ;
 }
 
+
 local rule end-building ( main-target-instance )
 {
     .targets-being-built = $(.targets-being-built[1--2]) ;
 }
 
 
-# A named top-level target in Jamfile
+# A named top-level target in Jamfile.
 class main-target : abstract-target
 {
- import errors : error ;
     import assert ;
- import sequence ;
+ import build-request ;
+ import errors ;
+ import feature ;
     import print ;
- import build-request feature property-set ;
+ import property-set ;
+ import sequence ;
     import targets : start-building end-building ;
- import "class" : is-a ;
-
+
     rule __init__ ( name : project )
     {
         abstract-target.__init__ $(name) : $(project) ;
     }
-
-
+
     # Add a new alternative for this target
     rule add-alternative ( target )
     {
@@ -565,51 +562,49 @@
         else
         {
             self.default-build = $(d) ;
- }
+ }
         self.alternatives += $(target) ;
     }
 
- # Returns the best viable alternative for this property-set
- # See the documentation for selection rules.
+ # Returns the best viable alternative for this property-set. See the
+ # documentation for selection rules.
     local rule select-alternatives ( property-set debug ? )
     {
- # When selecting alternatives we have to consider defaults,
- # for example:
+ # When selecting alternatives we have to consider defaults, for example:
         # lib l : l.cpp : <variant>debug ;
         # lib l : l_opt.cpp : <variant>release ;
- # won't work unless we add default value <variant>debug.
- property-set = [ $(p).add-defaults ] ;
-
- # The algorithm: we keep the current best viable alternative.
- # When we've got new best viable alternative, we compare it
- # with the current one.
-
+ # won't work unless we add default value <variant>debug.
+ property-set = [ $(p).add-defaults ] ;
+
+ # The algorithm: we keep the current best viable alternative. When we've
+ # got a new best viable alternative, we compare it with the current one.
+
         local best ;
         local best-properties ;
-
+
         if $(self.alternatives[2-])
         {
             local bad ;
- local worklist = $(self.alternatives) ;
+ local worklist = $(self.alternatives) ;
             while $(worklist) && ! $(bad)
             {
- local v = $(worklist[1]) ;
- local properties = [ $(v).match $(property-set) $(debug) ] ;
-
+ local v = $(worklist[1]) ;
+ local properties = [ $(v).match $(property-set) $(debug) ] ;
+
                 if $(properties) != no-match
- {
+ {
                     if ! $(best)
                     {
                         best = $(v) ;
                         best-properties = $(properties) ;
                     }
                     else
- {
+ {
                         if $(properties) = $(best-properties)
                         {
                             bad = true ;
                         }
- else if $(properties) in $(best-properties)
+ else if $(properties) in $(best-properties)
                         {
                             # Do nothing, this alternative is worse
                         }
@@ -618,55 +613,53 @@
                             best = $(v) ;
                             best-properties = $(properties) ;
                         }
- else
+ else
                         {
                             bad = true ;
- }
+ }
                     }
                 }
- worklist = $(worklist[2-]) ;
+ worklist = $(worklist[2-]) ;
             }
             if ! $(bad)
             {
                 return $(best) ;
- }
+ }
         }
         else
         {
             return $(self.alternatives) ;
- }
+ }
     }
-
-
+
     rule apply-default-build ( property-set )
- {
- # 1. First, see what properties from default-build
- # are already present in property-set.
-
+ {
+ # 1. First, see what properties from default-build are already present
+ # in property-set.
+
         local raw = [ $(property-set).raw ] ;
         local specified-features = $(raw:G) ;
-
+
         local defaults-to-apply ;
- for local d in [ $(self.default-build).raw ]
+ for local d in [ $(self.default-build).raw ]
         {
             if ! $(d:G) in $(specified-features)
             {
- defaults-to-apply += $(d) ;
- }
+ defaults-to-apply += $(d) ;
+ }
         }
-
- # 2. If there's any defaults to be applied, form the new
- # build request. Pass it throw 'expand-no-defaults', since
- # default-build might contain "release debug", which will
- # result in two property-sets.
+
+ # 2. If there are any defaults to be applied, form a new build request.
+ # Pass it through to 'expand-no-defaults' since default-build might
+ # contain "release debug" resulting in two property-sets.
         local result ;
         if $(defaults-to-apply)
         {
- properties = [
- build-request.expand-no-defaults
-
- # We have to compress subproperties here to prevent
- # property lists like:
+ properties = [
+ build-request.expand-no-defaults
+
+ # We have to compress subproperties here to prevent property
+ # lists like:
                 #
                 # <toolset>msvc <toolset-msvc:version>7.1 <threading>multi
                 #
@@ -675,27 +668,25 @@
                 # <toolset-msvc:version>7.1/<threading>multi
                 # <toolset>msvc/<toolset-msvc:version>7.1/<threading>multi
                 #
- # due to cross-product property combination. That may
- # be an indication that
- # build-request.expand-no-defaults is the wrong rule
- # to use here.
- [ feature.compress-subproperties $(raw) ]
+ # due to a cross-product property combination. That may be an
+ # indication that build-request.expand-no-defaults is the wrong
+ # rule to use here.
+ [ feature.compress-subproperties $(raw) ]
                   $(defaults-to-apply)
             ] ;
-
+
             if $(properties)
- {
+ {
                 for local p in $(properties)
                 {
- result += [ property-set.create
+ result += [ property-set.create
                         [ feature.expand [ feature.split $(p) ] ] ] ;
                 }
             }
             else
             {
                 result = [ property-set.empty ] ;
- }
-
+ }
         }
         else
         {
@@ -703,19 +694,19 @@
         }
         return $(result) ;
     }
-
+
     # Select an alternative for this main target, by finding all alternatives
     # which requirements are satisfied by 'properties' and picking the one with
- # longest requirements set.
- # Returns the result of calling 'generate' on that alternative.
+ # longest requirements set. Returns the result of calling 'generate' on that
+ # alternative.
     rule generate ( property-set )
     {
         start-building $(__name__) ;
 
- # We want composite properties in build request act as if
- # all the properties it expands too are explicitly specified.
+ # We want composite properties in build request act as if all the
+ # properties it expands too are explicitly specified.
         property-set = [ $(property-set).expand ] ;
-
+
         local all-property-sets = [ apply-default-build $(property-set) ] ;
         local usage-requirements = [ property-set.empty ] ;
         local result ;
@@ -729,16 +720,15 @@
             }
         }
         end-building $(__name__) ;
- return $(usage-requirements) [ sequence.unique $(result) ] ;
+ return $(usage-requirements) [ sequence.unique $(result) ] ;
     }
-
- # Generates the main target with the given property set
- # and returns a list which first element is property-set object
- # containing usage-requirements of generated target and with
- # generated virtual target in other elements. It's possible
- # that no targets are generated.
+
+ # Generates the main target with the given property set and returns a list
+ # which first element is property-set object containing usage-requirements
+ # of generated target and with generated virtual target in other elements.
+ # It's possible that no targets are generated.
     local rule generate-really ( property-set )
- {
+ {
         local best-alternatives = [ select-alternatives $(property-set) ] ;
         if ! $(best-alternatives)
         {
@@ -748,13 +738,11 @@
         }
         else
         {
- local result = [ $(best-alternatives).generate $(property-set) ] ;
-
- # Now return virtual targets for the only alternative
- return $(result) ;
- }
+ # Now return virtual targets for the only alternative.
+ return [ $(best-alternatives).generate $(property-set) ] ;
+ }
     }
-
+
     rule rename ( new-name )
     {
         abstract-target.rename $(new-name) ;
@@ -762,48 +750,46 @@
         {
             $(a).rename $(new-name) ;
         }
-
     }
-
 }
 
-# Abstract target which refers to a source file.
-# This is artificial creature; it's usefull so that sources to
-# a target can be represented as list of abstract target instances.
-class file-reference : abstract-target
+
+# Abstract target which refers to a source file. This is an artificial entity
+# allowing sources to a target to be represented using a list of abstract target
+# instances.
+class file-reference : abstract-target
 {
     import virtual-target ;
     import property-set ;
     import path ;
-
+
     rule __init__ ( file : project )
     {
         abstract-target.__init__ $(file) : $(project) ;
     }
-
+
     rule generate ( properties )
     {
         location ;
- return [ property-set.empty ]
+ return [ property-set.empty ]
                [ virtual-target.from-file $(self.name)
                                          : $(self.file-location)
- : $(self.project) ] ;
- }
+ : $(self.project) ] ;
+ }
 
- # Returns true if the referred file really exists;
+ # Returns true if the referred file really exists.
     rule exists ( )
     {
         location ;
         return $(self.file-path) ;
     }
-
- # Returns the location of target. Needed by 'testing.jam'
+
+ # Returns the location of target. Needed by 'testing.jam'.
     rule location ( )
     {
         if ! $(self.file-location)
         {
             local source-location = [ $(self.project).get source-location ] ;
-
             for local src-dir in $(source-location)
             {
                 if ! $(self.file-location)
@@ -821,9 +807,10 @@
     }
 }
 
-# Given a target-reference, made in context of 'project',
-# returns the abstract-target instance that is referred to, as well
-# as properties explicitly specified for this reference.
+
+# Given a target-reference, made in context of 'project', returns the
+# abstract-target instance that is referred to, as well as properties explicitly
+# specified for this reference.
 rule resolve-reference ( target-reference : project )
 {
     # Separate target name from properties override
@@ -838,596 +825,574 @@
 
     # Find the target
     local target = [ $(project).find $(id) ] ;
-
+
     return $(target) [ property-set.create $(sproperties) ] ;
 }
 
 
-
-# Attempts to generate the target given by target reference, which
-# can refer both to a main target or to a file.
-# Returns a list consisting of
+# Attempts to generate the target given by target reference, which can refer
+# both to a main target or to a file. Returns a list consisting of
 # - usage requirements
 # - generated virtual targets, if any
-rule generate-from-reference
- ( target-reference # Target reference
- : project # Project where the reference is made
- : property-set # Properties of the main target that
- # makes the reference
- )
+rule generate-from-reference (
+ target-reference # Target reference.
+ : project # Project where the reference is made.
+ : property-set # Properties of the main target that makes the reference.
+)
 {
     local r = [ resolve-reference $(target-reference) : $(project) ] ;
     local target = $(r[1]) ;
     local sproperties = $(r[2]) ;
-
- # Take properties which should be propagated and refine them
- # with source-specific requirements.
+
+ # Take properties which should be propagated and refine them with
+ # source-specific requirements.
     local propagated = [ $(property-set).propagated ] ;
     local rproperties = [ $(propagated).refine $(sproperties) ] ;
     if $(rproperties[1]) = "@error"
     {
         errors.error
- "When building" [ full-name ] " with properties " $(properties) :
+ "When building" [ full-name ] " with properties " $(properties) :
             "Invalid properties specified for " $(source) ":"
- $(rproperties[2-]) ;
+ $(rproperties[2-]) ;
     }
     return [ $(target).generate $(rproperties) ] ;
 }
 
-# Given build request and requirements, return properties
-# common to dependency build request and target build
-# properties
+
+# Given a build request and requirements, return properties common to dependency
+# build request and target build properties.
 rule common-properties ( build-request requirements )
 {
- # For optimization, we add free requirements directly,
- # without using complex algorithsm.
- # This gives the complex algorithm better chance of caching results.
- local free = [ $(requirements).free ] ;
- local non-free = [ property-set.create
+ # For optimization, we add free requirements directly, without using a
+ # complex algorithm. This gives the complex algorithm better chance of
+ # caching results.
+ local free = [ $(requirements).free ] ;
+ local non-free = [ property-set.create
         [ $(requirements).base ] [ $(requirements).incidental ] ] ;
-
+
     local key = .rp.$(build-request)-$(non-free) ;
     if ! $($(key))
- {
- $(key) = [ common-properties2 $(build-request) $(non-free) ] ;
- }
+ {
+ $(key) = [ common-properties2 $(build-request) $(non-free) ] ;
+ }
     result = [ $($(key)).add-raw $(free) ] ;
 }
 
+
 # Given 'context' -- a set of already present properties, and 'requirements',
-# decide which extra properties should be applied to 'context'.
-# For conditional requirements, this means evaluating condition. For
-# indirect conditional requirements, this means calling a rule. Ordinary
-# requirements are always applied.
-#
-# Handles situation where evaluating one conditional requirements affects
-# condition of another conditional requirements, for example:
+# decide which extra properties should be applied to 'context'. For conditional
+# requirements, this means evaluating condition. For indirect conditional
+# requirements, this means calling a rule. Ordinary requirements are always
+# applied.
 #
+# Handles the situation where evaluating one conditional requirement affects
+# conditions of another conditional requirements, such as:
 # <toolset>gcc:<variant>release <variant>release:<define>RELEASE
 #
-# If 'what' is 'refined' returns context refined with new requirements.
-# If 'what' is 'added' returns just the requirements that must be applied.
+# If 'what' is 'refined' returns context refined with new requirements. If
+# 'what' is 'added' returns just the requirements to be applied.
 rule evaluate-requirements ( requirements : context : what )
 {
- # Apply non-conditional requirements.
- # It's possible that that further conditional requirement change
- # a value set by non-conditional requirements. For example:
+ # Apply non-conditional requirements. It's possible that further conditional
+ # requirement change a value set by non-conditional requirements. For
+ # example:
     #
     # exe a : a.cpp : <threading>single <toolset>foo:<threading>multi ;
- #
+ #
     # I'm not sure if this should be an error, or not, especially given that
     #
- # <threading>single
+ # <threading>single
     #
     # might come from project's requirements.
-
+
     local unconditional = [ feature.expand [ $(requirements).non-conditional ] ] ;
-
+
     local raw = [ $(context).raw ] ;
     raw = [ property.refine $(raw) : $(unconditional) ] ;
-
+
     # We've collected properties that surely must be present in common
- # properties. We now try to figure out what other properties
- # should be added in order to satisfy rules (4)-(6) from the docs.
-
+ # properties. We now try to figure out what other properties should be added
+ # in order to satisfy rules (4)-(6) from the docs.
+
     local conditionals = [ $(requirements).conditional ] ;
- # The 'count' variable has one element for each conditional feature
- # and for each occurence of '<indirect-conditional>' feature.
- # It's used as a loop counter: for each iteration of the loop
- # before we remove one element and the property set should
- # stabilize before we've done. It's supposed to #conditionals iterations
- # should be enough for properties to propagate along conditions in any
- # direction.
- local count = $(conditionals)
- [ $(requirements).get <conditional> ]
+ # The 'count' variable has one element for each conditional feature and for
+ # each occurence of '<indirect-conditional>' feature. It's used as a loop
+ # counter: for each iteration of the loop before we remove one element and
+ # the property set should stabilize before we're done. It's assumed that
+ # #conditionals iterations should be enough for properties to propagate
+ # along conditions in any direction.
+ local count = $(conditionals)
+ [ $(requirements).get <conditional> ]
                   and-once-more ;
-
+
     local added-requirements ;
-
+
     local current = $(raw) ;
-
+
     # It's assumed that ordinary conditional requirements can't add
- # <indirect-conditional> properties, and that rules referred
- # by <indirect-conditional> properties can't add new
- # <indirect-conditional> properties. So the list of indirect conditionals
- # does not change.
+ # <indirect-conditional> properties, and that rules referred by
+ # <indirect-conditional> properties can't add new <indirect-conditional>
+ # properties. So the list of indirect conditionals does not change.
     local indirect = [ $(requirements).get <conditional> ] ;
- indirect = [ MATCH @(.*) : $(indirect) ] ;
-
+ indirect = [ MATCH @(.*) : $(indirect) ] ;
+
     local ok ;
- while $(count)
+ while $(count)
     {
- # Evaluate conditionals in context of current properties
- local e = [ property.evaluate-conditionals-in-context $(conditionals)
- : $(current) ] ;
-
+ # Evaluate conditionals in context of current properties.
+ local e = [ property.evaluate-conditionals-in-context $(conditionals)
+ : $(current) ] ;
+
         # Evaluate indirect conditionals.
         for local i in $(indirect)
         {
             e += [ indirect.call $(i) $(current) ] ;
         }
-
+
         if $(e) = $(added-requirements)
- {
+ {
             # If we got the same result, we've found final properties.
- count = ;
+ count = ;
             ok = true ;
- }
+ }
         else
         {
- # Oops, results of evaluation of conditionals has changed.
- # Also 'current' contains leftover from previous evaluation.
- # Recompute 'current' using initial properties and conditional
- # requirements.
+ # Oops, results of evaluation of conditionals has changed. Also
+ # 'current' contains leftover from previous evaluation. Recompute
+ # 'current' using initial properties and conditional requirements.
             added-requirements = $(e) ;
             current = [ property.refine $(raw) : [ feature.expand $(e) ] ] ;
- }
+ }
         count = $(count[2-]) ;
     }
     if ! $(ok)
     {
         errors.error "Can't evaluate conditional properties " $(conditionals) ;
     }
-
 
     if $(what) = added
     {
         return [ property-set.create $(unconditional) $(added-requirements) ] ;
     }
     else if $(what) = refined
- {
- return [ property-set.create $(current) ] ;
+ {
+ return [ property-set.create $(current) ] ;
     }
     else
     {
         errors.error "Invalid value of the 'what' parameter" ;
- }
+ }
 }
 
-
+
 rule common-properties2 ( build-request requirements )
-{
- # This guarantees that default properties are present
- # in result, unless they are overrided by some requirement.
- # FIXME: There is possibility that we've added <foo>bar, which is composite
- # and expands to <foo2>bar2, but default value of <foo2> is not bar2,
- # in which case it's not clear what to do.
- #
+{
+ # This guarantees that default properties are present in the result, unless
+ # they are overriden by some requirement. FIXME: There is possibility that
+ # we've added <foo>bar, which is composite and expands to <foo2>bar2, but
+ # default value of <foo2> is not bar2, in which case it's not clear what to
+ # do.
+ #
     build-request = [ $(build-request).add-defaults ] ;
- # Featured added by 'add-default' can be composite and expand
- # to features without default values -- so they are not added yet.
- # It could be clearer/faster to expand only newly added properties
- # but that's not critical.
+ # Features added by 'add-default' can be composite and expand to features
+ # without default values -- so they are not added yet. It could be clearer/
+ # /faster to expand only newly added properties but that's not critical.
     build-request = [ $(build-request).expand ] ;
-
- return [ evaluate-requirements $(requirements)
+
+ return [ evaluate-requirements $(requirements)
       : $(build-request) : refined ] ;
 }
 
-# Implements the most standard way of constructing main target
-# alternative from sources. Allows sources to be either file or
-# other main target and handles generation of those dependency
-# targets.
+
+# Implements the most standard way of constructing main target alternative from
+# sources. Allows sources to be either file or other main target and handles
+# generation of those dependency targets.
 class basic-target : abstract-target
 {
     import build-request ;
- import virtual-target targets ;
- import property-set ;
- import set sequence errors ;
- import "class" : new ;
- import property feature ;
     import build-system ;
-
- rule __init__ ( name : project
- : sources * : requirements * :
- default-build * : usage-requirements * )
- {
+ import "class" : new ;
+ import errors ;
+ import feature ;
+ import property ;
+ import property-set ;
+ import sequence ;
+ import set ;
+ import targets ;
+ import virtual-target ;
+
+ rule __init__ ( name : project : sources * : requirements *
+ : default-build * : usage-requirements * )
+ {
         abstract-target.__init__ $(name) : $(project) ;
-
+
         self.sources = $(sources) ;
         if ! $(requirements) {
             requirements = [ property-set.empty ] ;
- }
+ }
         self.requirements = $(requirements) ;
- if ! $(default-build)
+ if ! $(default-build)
         {
             default-build = [ property-set.empty ] ;
- }
+ }
         self.default-build = $(default-build) ;
         if ! $(usage-requirements)
         {
             usage-requirements = [ property-set.empty ] ;
- }
+ }
         self.usage-requirements = $(usage-requirements) ;
-
+
         if $(sources:G)
         {
             errors.user-error "properties found in the 'sources' parameter for" [ full-name ] ;
         }
     }
-
- # Returns the list of abstract-targets which are used as sources.
- # The extra properties specified for sources are not represented.
- # The only used of this rule at the moment is the "--dump-test"
- # feature of the test system.
+
+ # Returns the list of abstract-targets which are used as sources. The extra
+ # properties specified for sources are not represented. The only user for
+ # this rule at the moment is the "--dump-tests" feature of the test system.
     rule sources ( )
     {
         if ! $(self.source-targets) {
             for local s in $(self.sources)
             {
- self.source-targets +=
+ self.source-targets +=
                   [ targets.resolve-reference $(s) : $(self.project) ] ;
- }
- }
+ }
+ }
         return $(self.source-targets) ;
     }
-
+
     rule requirements ( )
     {
         return $(self.requirements) ;
     }
-
+
     rule default-build ( )
     {
         return $(self.default-build) ;
     }
-
- # Returns the alternative condition for this alternative, if
- # the condition is satisfied by 'property-set'.
+
+ # Returns the alternative condition for this alternative, if the condition
+ # is satisfied by 'property-set'.
     rule match ( property-set debug ? )
- {
- # The condition is composed of all base non-conditional properties.
- # It's not clear if we should expand 'self.requirements' or not.
- # For one thing, it would be nice to be able to put
- # <toolset>msvc-6.0
+ {
+ # The condition is composed of all base non-conditional properties. It's
+ # not clear if we should expand 'self.requirements' or not. For one
+ # thing, it would be nice to be able to put
+ # <toolset>msvc-6.0
         # in requirements.
- # On the other hand, if we have <variant>release in condition it
- # does not make sense to require <optimization>full to be in
- # build request just to select this variant.
+ # On the other hand, if we have <variant>release in condition it does
+ # not make sense to require <optimization>full to be in build request
+ # just to select this variant.
         local bcondition = [ $(self.requirements).base ] ;
         local ccondition = [ $(self.requirements).conditional ] ;
         local condition = [ set.difference $(bcondition) : $(ccondition) ] ;
         if $(debug)
         {
             ECHO " next alternative: required properties:" $(condition:E=(empty)) ;
- }
-
- if $(condition) in [ $(property-set).raw ]
+ }
+
+ if $(condition) in [ $(property-set).raw ]
         {
             if $(debug)
             {
                 ECHO " matched" ;
- }
- return $(condition) ;
+ }
+ return $(condition) ;
         }
         else
         {
             if $(debug)
             {
                 ECHO " not matched" ;
- }
+ }
             return no-match ;
- }
+ }
     }
-
- # Takes a target reference, which might be either target id
- # or a dependency property, and generates that target using
- # 'property-set' as build request.
+
+ # Takes a target reference, which might be either target id or a dependency
+ # property, and generates that target using 'property-set' as build request.
     #
- # The results are added to to variable called 'result-var'.
- # Usage requirements are added variable called 'usage-requirements-var'.
- rule generate-dependencies ( dependencies * : property-set
+ # The results are added to the variable called 'result-var'. Usage
+ # requirements are added to the variable called 'usage-requirements-var'.
+ rule generate-dependencies ( dependencies * : property-set
         : result-var usage-requirements-var )
     {
         for local dependency in $(dependencies)
- {
+ {
             local grist = $(dependency:G) ;
             local id = $(dependency:G=) ;
-
- local result =
- [ targets.generate-from-reference $(id) : $(self.project)
+
+ local result =
+ [ targets.generate-from-reference $(id) : $(self.project)
                 : $(property-set) ] ;
-
+
             $(result-var) += $(result[2-]:G=$(grist)) ;
             $(usage-requirements-var) += [ $(result[1]).raw ] ;
- }
+ }
     }
-
-
- # Determines final build properties, generates sources,
- # and calls 'construct'. This method should not be
- # overridden.
+
+ # Determines final build properties, generates sources, and calls
+ # 'construct'. This method should not be overridden.
     rule generate ( property-set )
     {
- if [ modules.peek : .debug-building ]
+ if [ modules.peek : .debug-building ]
         {
             ECHO ;
             local fn = [ full-name ] ;
             ECHO [ targets.indent ] "Building target '$(fn)'" ;
             targets.increase-indent ;
- ECHO [ targets.indent ] "Build request: " [ $(property-set).raw ] ;
+ ECHO [ targets.indent ] "Build request: " [ $(property-set).raw ] ;
             local cf = [ build-system.command-line-free-features ] ;
- ECHO [ targets.indent ] "Command line free features: "
- [ $(cf).raw ] ;
- ECHO [ targets.indent ] "Target requirements: " [ $(self.requirements).raw ] ;
+ ECHO [ targets.indent ] "Command line free features: " [ $(cf).raw ] ;
+ ECHO [ targets.indent ] "Target requirements: " [ $(self.requirements).raw ] ;
         }
-
- if ! $(self.generated.$(property-set))
+
+ if ! $(self.generated.$(property-set))
         {
- # Apply free features form the command line. If user
- # said
+ # Apply free features form the command line. If user said
             # define=FOO
- # he most likely want this define to be set for all compiles.
- property-set = [ $(property-set).refine
- [ build-system.command-line-free-features ] ] ;
- local rproperties = [ targets.common-properties $(property-set)
- $(self.requirements) ] ;
-
- if [ modules.peek : .debug-building ]
+ # he most likely wants this define to be set for all compiles.
+ property-set = [ $(property-set).refine
+ [ build-system.command-line-free-features ] ] ;
+ local rproperties = [ targets.common-properties $(property-set)
+ $(self.requirements) ] ;
+
+ if [ modules.peek : .debug-building ]
             {
                 ECHO ;
                 ECHO [ targets.indent ] "Common properties:" [ $(rproperties).raw ] ;
             }
-
+
             if $(rproperties[1]) != "@error" && [ $(rproperties).get <build> ] != no
             {
                 local source-targets ;
                 local properties = [ $(rproperties).non-dependency ] ;
                 local usage-requirements ;
-
+
                 generate-dependencies [ $(rproperties).dependency ]
- : $(rproperties)
- : properties usage-requirements ;
-
+ : $(rproperties)
+ : properties usage-requirements ;
+
                 generate-dependencies $(self.sources) : $(rproperties)
- : source-targets usage-requirements ;
-
- if [ modules.peek : .debug-building ]
+ : source-targets usage-requirements ;
+
+ if [ modules.peek : .debug-building ]
                 {
                     ECHO ;
- ECHO [ targets.indent ]
- "Usage requirements for $(self.name) are " $(usage-requirements) ;
+ ECHO [ targets.indent ]
+ "Usage requirements for $(self.name) are " $(usage-requirements) ;
                 }
 
- rproperties = [ property-set.create $(properties)
- $(usage-requirements) ] ;
+ rproperties = [ property-set.create $(properties)
+ $(usage-requirements) ] ;
                 usage-requirements = [ property-set.create $(usage-requirements) ] ;
-
- if [ modules.peek : .debug-building ]
+
+ if [ modules.peek : .debug-building ]
                 {
- ECHO [ targets.indent ]
- "Build properties: " [ $(rproperties).raw ] ;
+ ECHO [ targets.indent ]
+ "Build properties: " [ $(rproperties).raw ] ;
                 }
-
- local extra = [ $(rproperties).get <source> ] ;
+
+ local extra = [ $(rproperties).get <source> ] ;
                 source-targets += $(extra:G=) ;
- # We might get duplicate sources, for example if
- # we link to two library which have the same <library> in
- # usage requirements.
+ # We might get duplicate sources, for example if we link to two
+ # libraries having the same <library> usage requirement.
                 source-targets = [ sequence.unique $(source-targets) ] ;
-
- local result =
- [ construct $(self.name) :
+
+ local result =
+ [ construct $(self.name) :
                     $(source-targets) : $(rproperties) ] ;
-
+
                 if $(result)
                 {
                     local gur = $(result[1]) ;
                     result = $(result[2-]) ;
 
- local s = [ create-subvariant
- $(result) :
- [ virtual-target.recent-targets ]
- : $(property-set) : $(source-targets)
- : $(rproperties) : $(usage-requirements) ] ;
+ local s = [ create-subvariant $(result)
+ : [ virtual-target.recent-targets ]
+ : $(property-set) : $(source-targets)
+ : $(rproperties) : $(usage-requirements) ] ;
                     virtual-target.clear-recent-targets ;
 
                     local ur = [ compute-usage-requirements $(s) ] ;
                     ur = [ $(ur).add $(gur) ] ;
                     $(s).set-usage-requirements $(ur) ;
- if [ modules.peek : .debug-building ]
+ if [ modules.peek : .debug-building ]
                     {
                         ECHO [ targets.indent ]
                           "Usage requirements from $(self.name) are "
                             [ $(ur).raw ] ;
                     }
-
+
                     self.generated.$(property-set) = $(ur) $(result) ;
                 }
- }
+ }
             else
             {
- if $(rproperties[1]) = "@error"
+ if $(rproperties[1]) = "@error"
                 {
- ECHO [ targets.indent ]
- "Skipping build of: " [ full-name ] " cannot compute common properties" ;
+ ECHO [ targets.indent ]
+ "Skipping build of: " [ full-name ] " cannot compute common properties" ;
                 }
                 else if [ $(rproperties).get <build> ] = no
                 {
- ECHO [ targets.indent ]
- "Skipping build of: " [ full-name ] " <build>no in common properties" ;
+ ECHO [ targets.indent ]
+ "Skipping build of: " [ full-name ] " <build>no in common properties" ;
                 }
                 else
                 {
                     ECHO [ targets.indent ] "Skipping build of: " [ full-name ] " unknown reason" ;
                 }
-
- # We're here either because there's error computing
- # properties, or there's <build>no in properties.
- # In the latter case we don't want any diagnostic.
- # In the former case, we need diagnostics. FIXME.
+
+ # We're here either because there's been an error computing
+ # properties, or there's <build>no in properties. In the latter
+ # case we don't want any diagnostic. In the former case, we need
+ # diagnostics. FIXME
                 self.generated.$(property-set) = $(rproperties) ;
- }
- }
+ }
+ }
         else
         {
- if [ modules.peek : .debug-building ]
+ if [ modules.peek : .debug-building ]
             {
                 ECHO [ targets.indent ] "Already built" ;
- }
+ }
         }
 
         targets.decrease-indent ;
         return $(self.generated.$(property-set)) ;
     }
 
- # Given the set of generated targets, and refined build
- # properties, determines and sets appripriate usage requirements
- # on those targets.
+ # Given the set of generated targets, and refined build properties,
+ # determines and sets appripriate usage requirements on those targets.
     rule compute-usage-requirements ( subvariant )
     {
         local rproperties = [ $(subvariant).build-properties ] ;
- xusage-requirements = [ targets.evaluate-requirements
- $(self.usage-requirements)
- : $(rproperties)
- : added ] ;
-
- # We generate all dependency properties and add them,
- # as well as their usage requirements, to result.
+ xusage-requirements = [ targets.evaluate-requirements
+ $(self.usage-requirements) : $(rproperties) : added ] ;
+
+ # We generate all dependency properties and add them, as well as their
+ # usage requirements, to the result.
         local extra ;
         generate-dependencies [ $(xusage-requirements).dependency ] :
             $(rproperties) : extra extra ;
-
+
         local result = [ property-set.create
             [ $(xusage-requirements).non-dependency ] $(extra) ] ;
-
- # Propagate usage requirements we've got from sources, except
- # for the <pch-header> and <pch-file> features.
+
+ # Propagate usage requirements we've got from sources, except for the
+ # <pch-header> and <pch-file> features.
         #
- # That feature specifies which pch file to use, and should apply
- # only to direct dependents. Consider:
+ # That feature specifies which pch file to use, and should apply only to
+ # direct dependents. Consider:
         #
         # pch pch1 : ...
         # lib lib1 : ..... pch1 ;
- # pch pch2 :
+ # pch pch2 :
         # lib lib2 : pch2 lib1 ;
         #
         # Here, lib2 should not get <pch-header> property from pch1.
         #
- # Essentially, when those two features are in usage requirements,
- # they are propagated only to direct dependents. We might need
- # a more general mechanism, but for now, only those two
- # features are special.
+ # Essentially, when those two features are in usage requirements, they
+ # are propagated only to direct dependents. We might need a more general
+ # mechanism, but for now, only those two features are special.
         local raw = [ $(subvariant).sources-usage-requirements ] ;
         raw = [ $(raw).raw ] ;
- raw = [ property.change $(raw) : <pch-header> ] ;
- raw = [ property.change $(raw) : <pch-file> ] ;
- result = [ $(result).add [ property-set.create $(raw) ] ] ;
-
- return $(result) ;
+ raw = [ property.change $(raw) : <pch-header> ] ;
+ raw = [ property.change $(raw) : <pch-file> ] ;
+ return [ $(result).add [ property-set.create $(raw) ] ] ;
     }
-
- # Creates a new subvariant-dg instances for 'targets'
- # - 'root-targets' the virtual targets will be returned to dependents
- # - 'all-targets' all virtual
- # targets created while building this main target
- # - 'build-request' is property-set instance with requested build properties
- local rule create-subvariant ( root-targets *
- : all-targets * : build-request : sources * :
- rproperties
+
+ # Creates new subvariant instances for 'targets'.
+ # 'root-targets' - virtual targets to be returned to dependants
+ # 'all-targets' - virtual targets created while building this main target
+ # 'build-request' - property-set instance with requested build properties
+ local rule create-subvariant ( root-targets *
+ : all-targets * : build-request : sources * : rproperties
         : usage-requirements )
     {
- for local e in $(root-targets)
+ for local e in $(root-targets)
         {
             $(e).root true ;
- }
-
- # Process all vtargets that will be created if this main target
+ }
+
+ # Process all virtual targets that will be created if this main target
         # is created.
         local s = [ new subvariant $(__name__) : $(build-request) : $(sources)
- : $(rproperties) : $(usage-requirements) : $(all-targets) ] ;
- for local v in $(all-targets)
+ : $(rproperties) : $(usage-requirements) : $(all-targets) ] ;
+ for local v in $(all-targets)
         {
             if ! [ $(v).creating-subvariant ]
- {
- $(v).creating-subvariant $(s) ;
- }
- }
+ {
+ $(v).creating-subvariant $(s) ;
+ }
+ }
         return $(s) ;
     }
-
- # Constructs the virtual targets for this abstract targets and
- # the dependecy graph. Returns the list of virtual targets.
- # Should be overrided in derived classes.
+
+ # Constructs virtual targets for this abstract target and the dependency
+ # graph. Returns the list of virtual targets. Should be overriden in derived
+ # classes.
     rule construct ( name : source-targets * : properties * )
     {
         errors.error "method should be defined in derived classes" ;
     }
 }
 
+
 class typed-target : basic-target
 {
- import generators ;
-
- rule __init__ ( name : project : type
- : sources * : requirements * : default-build * : usage-requirements * )
- {
- basic-target.__init__ $(name) : $(project)
- : $(sources) : $(requirements) : $(default-build) : $(usage-requirements) ;
-
+ import generators ;
+
+ rule __init__ ( name : project : type : sources * : requirements *
+ : default-build * : usage-requirements * )
+ {
+ basic-target.__init__ $(name) : $(project) : $(sources)
+ : $(requirements) : $(default-build) : $(usage-requirements) ;
+
         self.type = $(type) ;
     }
-
+
     rule type ( )
     {
         return $(self.type) ;
     }
-
+
     rule construct ( name : source-targets * : property-set )
     {
- local r = [ generators.construct $(self.project) $(name:S=) : $(self.type)
- : [ property-set.create [ $(property-set).raw ] # [ feature.expand
- <main-target-type>$(self.type) ]
- # ]
+ local r = [ generators.construct $(self.project) $(name:S=) : $(self.type)
+ : [ property-set.create [ $(property-set).raw ]
+ <main-target-type>$(self.type) ]
             : $(source-targets) ] ;
         if ! $(r)
- {
+ {
             ECHO "warn: Unable to construct" [ full-name ] ;
-
+
             # Are there any top-level generators for this type/property set.
- if ! [ generators.find-viable-generators
- $(self.type) : $(property-set) ]
+ if ! [ generators.find-viable-generators $(self.type)
+ : $(property-set) ]
             {
                 ECHO "error: no generators were found for type '$(self.type)'" ;
                 ECHO "error: and the requested properties" ;
                 ECHO "error: make sure you've configured the needed tools" ;
                 ECHO "See http://boost.org/boost-build2/doc/html/bbv2/advanced/configuration.html" ;
-
                 ECHO "To debug this problem, try the --debug-generators option." ;
                 EXIT ;
             }
         }
-
         return $(r) ;
- }
+ }
 }
 
-# Return the list of sources to use, if main target rule is invoked
-# with 'sources'. If there are any objects in 'sources', they are treated
-# as main target instances, and the name of such targets are adjusted to
-# be '<name_of_this_target>__<name_of_source_target>'. Such renaming
-# is disabled is non-empty value is passed for 'no-renaming' parameter.
-#
+
+# Return the list of sources to use, if main target rule is invoked with
+# 'sources'. If there are any objects in 'sources', they are treated as main
+# target instances, and the name of such targets are adjusted to be
+# '<name_of_this_target>__<name_of_source_target>'. Such renaming is disabled if
+# a non-empty value is passed as the 'no-renaming' parameter.
+#
 rule main-target-sources ( sources * : main-target-name : no-renaming ? )
 {
     local result ;
@@ -1435,78 +1400,76 @@
     {
         if [ class.is-instance $(t) ]
         {
- local name = [ $(t).name ] ;
+ local name = [ $(t).name ] ;
             if ! $(no-renaming)
- {
+ {
                 name = $(main-target-name)__$(name) ;
                 $(t).rename $(name) ;
- }
+ }
             # Inline targets are not built by default.
             local p = [ $(t).project ] ;
- $(p).mark-target-as-explicit $(name) ;
+ $(p).mark-target-as-explicit $(name) ;
             result += $(name) ;
         }
         else
         {
             result += $(t) ;
- }
- }
+ }
+ }
     return $(result) ;
 }
 
 
-# Returns the requirement to use when declaring a main target,
-# which are obtained by
-# - translating all specified property paths, and
-# - refining project requirements with the one specified for the target
-rule main-target-requirements (
- specification * # Properties explicitly specified for a main target
- : project # Project where the main target is to be declared
- )
+# Returns the requirements to use when declaring a main target, obtained by
+# translating all specified property paths and refining project requirements
+# with the ones specified for the target.
+rule main-target-requirements (
+ specification * # Properties explicitly specified for the main target.
+ : project # Project where the main target is to be declared.
+)
 {
     specification += [ toolset.requirements ] ;
-
- local requirements = [ property-set.refine-from-user-input
+
+ local requirements = [ property-set.refine-from-user-input
         [ $(project).get requirements ] : $(specification) :
         [ $(project).project-module ] : [ $(project).get location ] ] ;
-
- if $(requirements[1]) = "@error"
+ if $(requirements[1]) = "@error"
     {
         errors.error "Conflicting requirements for target:" $(requirements) ;
     }
     return $(requirements) ;
 }
 
-# Returns the use requirement to use when declaraing a main target,
-# which are obtained by
-# - translating all specified property paths, and
-# - adding project's usage requirements
+
+# Returns the usage requirements to use when declaring a main target, which are
+# obtained by translating all specified property paths and adding project's
+# usage requirements.
 rule main-target-usage-requirements (
- specification * # Use-properties explicitly specified for a main target
- : project # Project where the main target is to be declared
- )
+ specification * # Use-properties explicitly specified for a main target.
+ : project # Project where the main target is to be declared.
+)
 {
- local loc = [ $(project).get location ] ;
     local project-usage-requirements = [ $(project).get usage-requirements ] ;
-
- # We don't use 'refine-from-user-input' because I'm not sure if:
- # - removing of parent's usage requirements makes sense
+
+ # We don't use 'refine-from-user-input' because:
+ # - I'm not sure if removing of parent's usage requirements makes sense
     # - refining of usage requirements is not needed, since usage requirements
     # are always free.
- local usage-requirements = [ property-set.create-from-user-input
- $(specification)
- : [ $(project).project-module ] [ $(project).get location ] ] ;
-
+ local usage-requirements = [ property-set.create-from-user-input
+ $(specification)
+ : [ $(project).project-module ] [ $(project).get location ] ] ;
+
     return [ $(project-usage-requirements).add $(usage-requirements) ] ;
 }
 
-# Return the default build value to use when declaring a main target,
-# which is obtained by using specified value if not empty and parent's
-# default build attribute otherwise.
+
+# Return the default build value to use when declaring a main target, which is
+# obtained by using the specified value if not empty and parent's default build
+# attribute otherwise.
 rule main-target-default-build (
- specification * # Default build explicitly specified for a main target
- : project # Project where the main target is to be declared
- )
+ specification * # Default build explicitly specified for a main target.
+ : project # Project where the main target is to be declared.
+)
 {
     local result ;
     if $(specification)
@@ -1516,35 +1479,32 @@
     else
     {
         result = [ $(project).get default-build ] ;
- }
+ }
     return [ property-set.create-with-validation $(result) ] ;
-}
+}
+
 
-# Registers the specified target as a main target alternatives.
-# Returns 'target'.
-rule main-target-alternative ( target )
-{
+# Registers the specified target as a main target alternative and returns it.
+rule main-target-alternative ( target )
+{
     local ptarget = [ $(target).project ] ;
-
     $(ptarget).add-alternative $(target) ;
     return $(target) ;
 }
 
-# Creates a typed-target with the specified properties.
-# The 'name', 'sources', 'requirements', 'default-build' and
-# 'usage-requirements' are assumed to be in the form specified
-# by the user in Jamfile corresponding to 'project'.
-rule create-typed-target ( type : project :
- name : sources * : requirements * : default-build *
- : usage-requirements * )
+
+# Creates a typed-target with the specified properties. The 'name', 'sources',
+# 'requirements', 'default-build' and 'usage-requirements' are assumed to be in
+# the form specified by the user in Jamfile corresponding to 'project'.
+rule create-typed-target ( type : project : name : sources * : requirements *
+ : default-build * : usage-requirements * )
 {
     return [
- targets.main-target-alternative
- [ new typed-target $(name) : $(project) : $(type)
- : [ targets.main-target-sources $(sources) : $(name) ]
- : [ targets.main-target-requirements $(requirements) : $(project) ]
- : [ targets.main-target-default-build $(default-build) : $(project) ]
- : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
- ] ] ;
-
+ targets.main-target-alternative
+ [ new typed-target $(name) : $(project) : $(type)
+ : [ targets.main-target-sources $(sources) : $(name) ]
+ : [ targets.main-target-requirements $(requirements) : $(project) ]
+ : [ targets.main-target-default-build $(default-build) : $(project) ]
+ : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
+ ] ] ;
 }

Modified: branches/fix-links/tools/build/v2/build/toolset.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/toolset.jam (original)
+++ branches/fix-links/tools/build/v2/build/toolset.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,46 +1,47 @@
-# Copyright 2003 Dave Abrahams
-# Copyright 2005 Rene Rivera
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003 Dave Abrahams
+# Copyright 2005 Rene Rivera
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 # Support for toolset definition.
 
+import errors ;
 import feature ;
+import generators ;
 import numbers ;
-import errors : error ;
-import property ;
 import path ;
-import generators ;
-import set : difference ;
+import property ;
 import regex ;
 import sequence ;
+import set ;
+
 
 .flag-no = 1 ;
 
 .ignore-requirements = ;
 
-# This is used only for testing, to make sure
-# we don't get random extra elements in paths.
+# This is used only for testing, to make sure we don't get random extra elements
+# in paths.
 if --ignore-toolset-requirements in [ modules.peek : ARGV ]
 {
     .ignore-requirements = 1 ;
 }
 
-# Initializes an additional toolset-like module.
-# First load 'toolset-module' and then calls its 'init'
-# rule with trailing arguments
+
+# Initializes an additional toolset-like module. First load the 'toolset-module'
+# and then calls its 'init' rule with trailing arguments.
+#
 rule using ( toolset-module : * )
 {
     import $(toolset-module) ;
     $(toolset-module).init $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
 }
 
-# Expands subfeatures in each property sets.
-# e.g
-# <toolset>gcc-3.2
-# will be converted to
-# <toolset>gcc/<toolset-version>3.2
+
+# Expands subfeatures in each property sets, e.g. '<toolset>gcc-3.2' will be
+# converted to '<toolset>gcc/<toolset-version>3.2'.
+#
 local rule normalize-condition ( property-sets * )
 {
     local result ;
@@ -54,13 +55,11 @@
 }
 
 
-# Specifies if the 'flags' rule should do checking that
-# the invoking module is the same as module we're setting
-# flag for.
-# 'v' can be either 'checked' or 'unchecked'.
-# Subsequent call to 'pop-checking-for-flags-module'
-# will restore the behaviour that was in effect before
-# calling this rule.
+# Specifies if the 'flags' rule should check that the invoking module is the
+# same as the module we're setting the flag for. 'v' can be either 'checked' or
+# 'unchecked'. Subsequent call to 'pop-checking-for-flags-module' will restore
+# the setting that was in effect before calling this rule.
+#
 rule push-checking-for-flags-module ( v )
 {
     .flags-module-checking = $(v) $(.flags-module-checking) ;
@@ -71,123 +70,120 @@
     .flags-module-checking = $(.flags-module-checking[2-]) ;
 }
 
+
 # Specifies the flags (variables) that must be set on targets under certain
 # conditions, described by arguments.
-rule flags ( rule-or-module # If contains dot, should be a rule name.
- # The flags will be applied when that rule is
- # used to set up build actions.
- #
- # If does not contain dot, should be a module name.
- # The flags will be applied for all rules in that
- # module.
- # If module for rule is different from the calling
- # module, an error is issued.
-
- variable-name # Variable that should be set on target
- condition * : # A condition when this flag should be applied.
- # Should be set of property sets. If one of
- # those property sets is contained in build
- # properties, the flag will be used.
- # Implied values are not allowed:
- # "<toolset>gcc" should be used, not just
- # "gcc". Subfeatures, like in "<toolset>gcc-3.2"
- # are allowed. If left empty, the flag will
- # always used.
- #
- # Propery sets may use value-less properties
- # ('<a>' vs. '<a>value') to match absent
- # properties. This allows to separately match
- #
- # <architecture>/<address-model>64
- # <architecture>ia64/<address-model>
- #
- # Where both features are optional. Without this
- # syntax we'd be forced to define "default" value.
-
-
- values * : # The value to add to variable. If <feature>
- # is specified, then the value of 'feature'
- # will be added.
- unchecked ? # If value 'unchecked' is passed, will not test
- # that flags are set for the calling module.
- : hack-hack ? # For
- # flags rule OPTIONS <cxx-abi> : -model ansi
- # Treak <cxx-abi> as condition
- # FIXME: ugly hack.
- )
+#
+rule flags (
+ rule-or-module # If contains a dot, should be a rule name. The flags will
+ # be applied when that rule is used to set up build
+ # actions.
+ #
+ # If does not contain dot, should be a module name. The
+ # flag will be applied for all rules in that module. If
+ # module for rule is different from the calling module, an
+ # error is issued.
+
+ variable-name # Variable that should be set on target.
+ condition * : # A condition when this flag should be applied. Should be a
+ # set of property sets. If one of those property sets is
+ # contained in the build properties, the flag will be used.
+ # Implied values are not allowed: "<toolset>gcc" should be
+ # used, not just "gcc". Subfeatures, like in
+ # "<toolset>gcc-3.2" are allowed. If left empty, the flag
+ # will be used unconditionally.
+ #
+ # Propery sets may use value-less properties ('<a>' vs.
+ # '<a>value') to match absent properties. This allows to
+ # separately match:
+ #
+ # <architecture>/<address-model>64
+ # <architecture>ia64/<address-model>
+ #
+ # Where both features are optional. Without this syntax
+ # we'd be forced to define "default" values.
+
+ values * : # The value to add to variable. If <feature> is specified,
+ # then the value of 'feature' will be added.
+ unchecked ? # If value 'unchecked' is passed, will not test that flags
+ # are set for the calling module.
+ : hack-hack ? # For
+ # flags rule OPTIONS <cxx-abi> : -model ansi
+ # Treat <cxx-abi> as condition
+ # FIXME: ugly hack.
+)
 {
     local caller = [ CALLER_MODULE ] ;
     if ! [ MATCH ".*([.]).*" : $(rule-or-module) ]
        && [ MATCH "(Jamfile<.*)" : $(caller) ]
     {
- # Unqualified rule name, used inside Jamfile.
- # (most likely used with 'make' or 'notfile' rules.
- # This prevents setting flags on entire Jamfile module
- # (this will be considered as rule), but who cares?
+ # Unqualified rule name, used inside Jamfile. Most likely used with
+ # 'make' or 'notfile' rules. This prevents setting flags on the entire
+ # Jamfile module (this will be considered as rule), but who cares?
         # Probably, 'flags' rule should be split into 'flags' and
         # 'flags-on-module'.
         rule-or-module = $(caller).$(rule-or-module) ;
     }
     else
- {
+ {
         local module_ = [ MATCH "([^.]*).*" : $(rule-or-module) ] ;
- if $(unchecked) != unchecked
+ if $(unchecked) != unchecked
             && $(.flags-module-checking[1]) != unchecked
             && $(module_) != $(caller)
         {
             errors.error "Module $(caller) attempted to set flags for module $(module_)" ;
         }
     }
-
-
+
+
     if $(condition) && ! $(condition:G=) && ! $(hack-hack)
     {
- # We have condition in the form '<feature>', that is, without
- # value. That's a previous syntax:
- #
+ # We have condition in the form '<feature>', that is, without value.
+ # That's a previous syntax:
         # flags gcc.link RPATH <dll-path> ;
         # for compatibility, convert it to
- # flags gcc.link RPATH : <dll-path> ;
+ # flags gcc.link RPATH : <dll-path> ;
         values = $(condition) ;
         condition = ;
     }
-
+
     if $(condition)
     {
         property.validate-property-sets $(condition) ;
         condition = [ normalize-condition $(condition) ] ;
     }
-
+
     add-flag $(rule-or-module) : $(variable-name)
       : $(condition) : $(values) ;
 }
 
-# Adds new flag setting with the specified values
-# Does no checking
-local rule add-flag ( rule-or-module :
- variable-name : condition * : values * )
+
+# Adds a new flag setting with the specified values. Does no checking.
+#
+local rule add-flag ( rule-or-module : variable-name : condition * : values * )
 {
     .$(rule-or-module).flags += $(.flag-no) ;
 
     # Store all flags for a module
- local module_ = [ MATCH "([^.]*).*" : $(rule-or-module) ] ;
+ local module_ = [ MATCH "([^.]*).*" : $(rule-or-module) ] ;
     .module-flags.$(module_) += $(.flag-no) ;
     # Store flag-no -> rule-or-module mapping
     .rule-or-module.$(.flag-no) = $(rule-or-module) ;
 
     .$(rule-or-module).variable.$(.flag-no) += $(variable-name) ;
     .$(rule-or-module).values.$(.flag-no) += $(values) ;
- .$(rule-or-module).condition.$(.flag-no) += $(condition) ;
-
+ .$(rule-or-module).condition.$(.flag-no) += $(condition) ;
+
     .flag-no = [ numbers.increment $(.flag-no) ] ;
 }
-
+
 
 # Returns the first element of 'property-sets' which is a subset of
 # 'properties', or an empty list if no such element exists.
+#
 rule find-property-subset ( property-sets * : properties * )
 {
- # cut property values off
+ # Cut property values off.
     local prop-keys = $(properties:G) ;
 
     local result ;
@@ -195,20 +191,20 @@
     {
         if ! $(result)
         {
- # Handle value-less properties like '<architecture>' (compare with
+ # Handle value-less properties like '<architecture>' (compare with
             # '<architecture>x86').
 
             local set = [ feature.split $(s) ] ;
 
             # Find the set of features that
- # - have no property specified in required property set
- # - are omitted in build property set
+ # - have no property specified in required property set
+ # - are omitted in the build property set.
             local default-props ;
             for local i in $(set)
             {
- # If $(i) is a value-less property it should match default
- # value of an optional property. See the first line in the
- # example below:
+ # If $(i) is a value-less property it should match default value
+ # of an optional property. See the first line in the example
+ # below:
                 #
                 # property set properties result
                 # <a> <b>foo <b>foo match
@@ -230,6 +226,7 @@
     return $(result) ;
 }
 
+
 rule handle-flag-value ( value * : properties * )
 {
     local result ;
@@ -241,98 +238,96 @@
             local att = [ feature.attributes $(p:G) ] ;
             if dependency in $(att)
             {
- # the value of a dependency feature is a target
- # and must be actualized
+ # The value of a dependency feature is a target and needs to be
+ # actualized.
                 result += [ $(p:G=).actualize ] ;
- }
+ }
             else if path in $(att) || free in $(att)
             {
                 local values ;
- # Treat features with && in the value
- # specially -- each &&-separated element is considered
- # separate value. This is needed to handle searched
- # libraries, which must be in specific order.
+ # Treat features with && in the value specially -- each
+ # &&-separated element is considered a separate value. This is
+ # needed to handle searched libraries, which must be in a
+ # specific order.
                 if ! [ MATCH (&&) : $(p:G=) ]
                 {
                     values = $(p:G=) ;
                 }
- else
+ else
                 {
                     values = [ regex.split $(p:G=) "&&" ] ;
                 }
                 if path in $(att)
- {
- result += [ sequence.transform path.native : $(values) ] ;
+ {
+ result += [ sequence.transform path.native : $(values) ] ;
                 }
                 else
                 {
                     result += $(values) ;
- }
- }
- else
+ }
+ }
+ else
             {
                 result += $(p:G=) ;
             }
- }
+ }
     }
     else
     {
         result += $(value) ;
- }
+ }
     return $(result) ;
 }
 
-# Given a rule name and a property set, returns a list of interleaved
-# variables names and values which must be set on targets for that
-# rule/property-set combination.
+
+# Given a rule name and a property set, returns a list of interleaved variables
+# names and values which must be set on targets for that rule/property-set
+# combination.
+#
 rule set-target-variables-aux ( rule-or-module : property-set )
 {
     local result ;
     properties = [ $(property-set).raw ] ;
- for local f in $(.$(rule-or-module).flags)
+ for local f in $(.$(rule-or-module).flags)
     {
         local variable = $(.$(rule-or-module).variable.$(f)) ;
         local condition = $(.$(rule-or-module).condition.$(f)) ;
         local values = $(.$(rule-or-module).values.$(f)) ;
-
-
+
         if ! $(condition) ||
- [ find-property-subset $(condition) : $(properties) ]
+ [ find-property-subset $(condition) : $(properties) ]
         {
             local processed ;
             for local v in $(values)
- {
- # The value might be <feature-name> so needs special
- # treatment.
- processed += [
- handle-flag-value $(v) : $(properties) ] ;
+ {
+ # The value might be <feature-name> so needs special treatment.
+ processed += [ handle-flag-value $(v) : $(properties) ] ;
             }
             for local r in $(processed)
- {
+ {
                 result += $(variable) $(r) ;
- }
+ }
         }
     }
-
- # strip away last dot separated part and recurse.
+
+ # Strip away last dot separated part and recurse.
     local next = [ MATCH ^(.+)\\.([^\\.])* : $(rule-or-module) ] ;
     if $(next)
     {
- result += [
- set-target-variables-aux $(next[1]) : $(property-set) ] ;
- }
- return $(result) ;
+ result += [ set-target-variables-aux $(next[1]) : $(property-set) ] ;
+ }
+ return $(result) ;
 }
 
 
 rule set-target-variables ( rule-or-module targets + : property-set )
-{
+{
     properties = [ $(property-set).raw ] ;
     local key = $(rule-or-module).$(property-set) ;
     local settings = $(.stv.$(key)) ;
     if ! $(settings)
     {
- settings = [
+ settings = [
           set-target-variables-aux $(rule-or-module) : $(property-set) ] ;
 
         if ! $(settings)
@@ -341,7 +336,7 @@
         }
         .stv.$(key) = $(settings) ;
     }
-
+
     if $(settings) != none
     {
         local var-name = ;
@@ -360,23 +355,25 @@
     }
 }
 
-# Make toolset 'toolset', defined in a module of the same name,
-# inherit from 'base'
-# 1. The 'init' rule from 'base' is imported into 'toolset' with full
-# name. Another 'init' is called, which forwards to the base one.
-# 2. All generators from 'base' are cloned. The ids are adjusted and
-# <toolset> property in requires is adjusted too
-# 3. All flags are inherited
+
+# Make toolset 'toolset', defined in a module of the same name, inherit from
+# 'base'.
+# 1. The 'init' rule from 'base' is imported into 'toolset' with full name.
+# Another 'init' is called, which forwards to the base one.
+# 2. All generators from 'base' are cloned. The ids are adjusted and <toolset>
+# property in requires is adjusted too.
+# 3. All flags are inherited.
 # 4. All rules are imported.
+#
 rule inherit ( toolset : base )
 {
     import $(base) ;
-
     inherit-generators $(toolset) : $(base) ;
- inherit-flags $(toolset) : $(base) ;
- inherit-rules $(toolset) : $(base) ;
+ inherit-flags $(toolset) : $(base) ;
+ inherit-rules $(toolset) : $(base) ;
 }
 
+
 rule inherit-generators ( toolset properties * : base : generators-to-ignore * )
 {
     properties ?= <toolset>$(toolset) ;
@@ -384,15 +381,15 @@
     for local g in $(base-generators)
     {
         local id = [ $(g).id ] ;
-
+
         if ! $(id) in $(generators-to-ignore)
- {
+ {
             # Some generator names have multiple periods in their name, so
- # $(id:B=$(toolset)) doesn't generate the right new-id name.
- # e.g. if id = gcc.compile.c++, $(id:B=darwin) = darwin.c++,
- # which is not what we want. Manually parse the base and suffix
- # (if there's a better way to do this, I'd love to see it.)
- # See also register in module generators.
+ # $(id:B=$(toolset)) doesn't generate the right new-id name. E.g. if
+ # id = gcc.compile.c++, $(id:B=darwin) = darwin.c++, which is not
+ # what we want. Manually parse the base and suffix (if there's a
+ # better way to do this, I'd love to see it). See also register in
+ # module generators.
             local base = $(id) ;
             local suffix = "" ;
             while $(base:S)
@@ -403,27 +400,27 @@
             local new-id = $(toolset)$(suffix) ;
 
             generators.register [ $(g).clone $(new-id) : $(properties) ] ;
- }
- }
+ }
+ }
 }
 
-# Brings all flag definitions from 'base' toolset into
-# other toolset 'toolset'. Flag definitions which
-# condition make use of properties in 'prohibited-properties'
-# are ignored. Don't confuse property and feature, for
-# example <debug-symbols>on and <debug-symbols>off, so blocking
-# one of them does not block the other one.
-#
-# The flag conditions are not altered at all, so if condition
-# includes name, or version of base toolset, it won't ever match
-# the inheriting toolset. When such flag settings must be
-# inherited, define a rule in base toolset module and call it
-# as needed.
+
+# Brings all flag definitions from the 'base' toolset into the 'toolset'
+# toolset. Flag definitions whose conditions make use of properties in
+# 'prohibited-properties' are ignored. Don't confuse property and feature, for
+# example <debug-symbols>on and <debug-symbols>off, so blocking one of them does
+# not block the other one.
+#
+# The flag conditions are not altered at all, so if a condition includes a name,
+# or version of a base toolset, it won't ever match the inheriting toolset. When
+# such flag settings must be inherited, define a rule in base toolset module and
+# call it as needed.
+#
 rule inherit-flags ( toolset : base : prohibited-properties * )
 {
     for local f in $(.module-flags.$(base))
- {
- local rule-or-module = $(.rule-or-module.$(f)) ;
+ {
+ local rule-or-module = $(.rule-or-module.$(f)) ;
         if [ set.difference
                 $(.$(rule-or-module).condition.$(f)) :
                 $(prohibited-properties)
@@ -439,45 +436,47 @@
             {
                 new-rule-or-module = $(toolset) ;
             }
-
+
             add-flag
- $(new-rule-or-module)
- : $(.$(rule-or-module).variable.$(f))
- : $(.$(rule-or-module).condition.$(f))
- : $(.$(rule-or-module).values.$(f))
- ;
+ $(new-rule-or-module)
+ : $(.$(rule-or-module).variable.$(f))
+ : $(.$(rule-or-module).condition.$(f))
+ : $(.$(rule-or-module).values.$(f)) ;
         }
- }
+ }
 }
 
+
 rule inherit-rules ( toolset : base )
 {
- # It appears that "action" creates local rule...
+ # It appears that "action" creates a local rule...
     local base-generators = [ generators.generators-for-toolset $(base) ] ;
     local rules ;
     for local g in $(base-generators)
     {
         local id = [ MATCH "[^.]*\.(.*)" : [ $(g).id ] ] ;
         rules += $(id) ;
- }
+ }
     IMPORT $(base) : $(rules) : $(toolset) : $(rules) ;
     # Import the rules to the global scope
     IMPORT $(toolset) : $(rules) : : $(toolset).$(rules) ;
 }
 
-# Return the list of global 'toolset requirements'.
-# Those requirements will be automatically added to
-# the requirements of any main target.
+
+# Return the list of global 'toolset requirements'. Those requirements will be
+# automatically added to the requirements of any main target.
+#
 rule requirements ( )
 {
     return $(.requirements) ;
 }
 
-# Adds elements to the list of global 'toolset requirements'.
-# The requirements will be automatically added to the requirements
-# for all main targets, as if they were specified literally.
-# For best results, all requirements added should be conditional or
-# indirect conditional.
+
+# Adds elements to the list of global 'toolset requirements'. The requirements
+# will be automatically added to the requirements for all main targets, as if
+# they were specified literally. For best results, all requirements added should
+# be conditional or indirect conditional.
+#
 rule add-requirements ( requirements * )
 {
     if ! $(.ignore-requirements)
@@ -486,6 +485,7 @@
     }
 }
 
+
 local rule __test__ ( )
 {
     import assert ;
@@ -494,8 +494,8 @@
     assert.result : find-property-subset <a>0/<b>0/<c>9/<d>9/<e>5 <a>9 : $(p) ;
 
     local p-set = <a>/<b> <a>0/<b> <a>/<b>1 <a>0/<b>1 ;
- assert.result <a>/<b> : find-property-subset $(p-set) : ;
+ assert.result <a>/<b> : find-property-subset $(p-set) : ;
     assert.result <a>0/<b> : find-property-subset $(p-set) : <a>0 <c>2 ;
     assert.result <a>/<b>1 : find-property-subset $(p-set) : <b>1 <c>2 ;
- assert.result <a>0/<b>1 : find-property-subset $(p-set) : <a>0 <b>1 ;
+ assert.result <a>0/<b>1 : find-property-subset $(p-set) : <a>0 <b>1 ;
 }

Modified: branches/fix-links/tools/build/v2/build/type.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/type.jam (original)
+++ branches/fix-links/tools/build/v2/build/type.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,47 +1,45 @@
-# Copyright 2002, 2003 Dave Abrahams
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2002, 2003 Dave Abrahams
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 # Deals with target type declaration and defines target class which supports
 # typed targets.
 
-import feature ;
-import generators : * ;
 import "class" : new ;
 import errors ;
+import feature ;
+import generators : * ;
+import project ;
 import property ;
 import scanner ;
-import project ;
 
-# This creates a circular dependency
-# project-test1 -> project -> project-root -> builtin -> type -> targets -> project
-# import targets ;
-
-# The feature is optional so that it never implicitly added.
-# It's used only for internal purposes, and in all cases we
-# want to explicitly use it.
+# The follwing import would create a circular dependency:
+# project -> project-root -> builtin -> type -> targets -> project
+# import targets ;
+
+# The feature is optional so it would never get added implicitly. It's used only
+# for internal purposes and in all cases we want to use it explicitly.
 feature.feature target-type : : composite optional ;
 
-# feature.feature base-target-type : : composite optional ;
 feature.feature main-target-type : : optional incidental ;
 feature.feature base-target-type : : composite optional free ;
-# feature.feature main-target-type : : composite optional incidental ;
 
-# Registers a target type, possible derived from a 'base-type'.
-# If 'suffixes' are provided, they given all the suffixes that mean a file is of 'type'.
-# Also, the first element gives the suffix to be used when constructing and object of
-# 'type'.
+
+# Registers a target type, possible derived from a 'base-type'. Providing a list
+# of 'suffixes' here is a shortcut for separately calling the register-suffixes
+# rule with the given suffixes and the set-generated-target-suffix rule with the
+# first given suffix.
 rule register ( type : suffixes * : base-type ? )
 {
- # Type names cannot contain hyphens, because when used as
- # feature-values they will be interpreted as composite features
- # which need to be decomposed.
+ # Type names cannot contain hyphens, because when used as feature-values
+ # they would be interpreted as composite features which need to be
+ # decomposed.
     switch $(type)
     {
         case *-* : errors.error "type name \"$(type)\" contains a hyphen" ;
     }
-
+
     if $(type) in $(.types)
     {
         errors.error "Type $(type) is already registered." ;
@@ -50,73 +48,72 @@
     {
         .types += $(type) ;
         .bases.$(type) = $(base-type) ;
- .derived.$(base-type) += $(type) ;
+ .derived.$(base-type) += $(type) ;
 
- if $(suffixes)-not-empty
- {
- # Generated targets of 'type' will use the first of 'suffixes'
- # (this may be overriden)
- $(.suffixes).insert <target-type>$(type) : $(suffixes[1]) ;
- # Specify mapping from suffixes to type
+ if $(suffixes)-is-not-empty
+ {
+ # Specify mapping from suffixes to type.
             register-suffixes $(suffixes) : $(type) ;
+ # Generated targets of 'type' will use the first of 'suffixes'. This
+ # may be overriden.
+ set-generated-target-suffix $(type) : : $(suffixes[1]) ;
         }
-
- feature.extend target-type : $(type) ;
+
+ feature.extend target-type : $(type) ;
         feature.extend main-target-type : $(type) ;
-
- feature.compose <target-type>$(type) : $(base-type:G=<base-target-type>) ;
         feature.extend base-target-type : $(type) ;
-# feature.compose <target-type>$(type) : <base-target-type>$(type) ;
+
+ feature.compose <target-type>$(type) : $(base-type:G=<base-target-type>) ;
         feature.compose <base-target-type>$(type) : <base-target-type>$(base-type) ;
 
- # We used to declare main target rule only when 'main' parameter
- # is specified. However, it's hard to decide that a type *never*
- # will need a main target rule and so from time to time we needed
- # to make yet another type 'main'. So, now main target rule is defined
- # for each type.
- main-rule-name = [ type-to-rule-name $(type) ] ;
- .main-target-type.$(main-rule-name) = $(type) ;
-
+ # We used to declare the main target rule only when a 'main' parameter
+ # was specified. However, it's hard to decide that a type will *never*
+ # need a main target rule and so from time to time we needed to make yet
+ # another type 'main'. So now a main target rule is defined for each
+ # type.
+ main-rule-name = [ type-to-rule-name $(type) ] ;
+ .main-target-type.$(main-rule-name) = $(type) ;
+
         IMPORT $(__name__) : main-target-rule : : $(main-rule-name) ;
     }
 }
 
-# Given type, returns name of main target rule which creates
-# targets of that type.
+
+# Given a type, returns the name of the main target rule which creates targets
+# of that type.
 rule type-to-rule-name ( type )
 {
- # Lowercase everything. Convert underscores to dashes.ame.
+ # Lowercase everything. Convert underscores to dashes.
     import regex ;
     local n = [ regex.split $(type:L) "_" ] ;
- n = $(n:J=-) ;
- return $(n) ;
+ return $(n:J=-) ;
 }
 
-# Returns a type, given the name of a main rule.
-rule type-from-rule-name ( main-target-name )
+
+# Given a main target rule name, returns the type for which it creates targets.
+rule type-from-rule-name ( rule-name )
 {
- return $(.main-target-type.$(main-target-name)) ;
+ return $(.main-target-type.$(rule-name)) ;
 }
 
 
-
-# Specifies that targets with suffix from 'suffixes' has the type 'type'.
-# If different type is already specified for any of syffixes,
-# issues an error.
+# Specifies that files with suffix from 'suffixes' be recognized as targets of
+# type 'type'. Issues an error if a different type is already specified for any
+# of the suffixes.
 rule register-suffixes ( suffixes + : type )
 {
     for local s in $(suffixes)
- {
- if ! $(.type.$(s))
+ {
+ if ! $(.type.$(s))
         {
- .type.$(s) = $(type) ;
+ .type.$(s) = $(type) ;
         }
- else if $(.type.$(s)) != type
+ else if $(.type.$(s)) != type
         {
- errors.error Attempting to specify type for suffix \"$(s)\"
- : "Old type $(.type.$(s)), New type $(type)" ;
+ errors.error Attempting to specify multiple types for suffix \"$(s)\"
+ : "Old type $(.type.$(s)), New type $(type)" ;
         }
- }
+ }
 }
 
 
@@ -129,13 +126,14 @@
     }
 }
 
+
 # Issues an error if 'type' is unknown.
 rule validate ( type )
 {
     if ! $(type) in $(.types)
     {
         errors.error "Unknown target type $(type)" ;
- }
+ }
 }
 
 
@@ -145,19 +143,23 @@
     if ! $(type) in $(.types)
     {
         error "Type" $(type) "is not declared" ;
- }
+ }
     .scanner.$(type) = $(scanner) ;
 }
 
+
 # Returns a scanner instance appropriate to 'type' and 'properties'.
 rule get-scanner ( type : property-set )
 {
- if $(.scanner.$(type)) {
+ if $(.scanner.$(type))
+ {
         return [ scanner.get $(.scanner.$(type)) : $(property-set) ] ;
- }
+ }
 }
 
-# returns type and all of its bases in order of their distance from type.
+
+# Returns the given type and all of its base types in order of their distance
+# from type.
 rule all-bases ( type )
 {
     local result = $(type) ;
@@ -169,6 +171,7 @@
     return $(result) ;
 }
 
+
 rule all-derived ( type )
 {
     local result = $(type) ;
@@ -176,12 +179,11 @@
     {
         result += [ all-derived $(d) ] ;
     }
- return $(result) ;
+ return $(result) ;
 }
 
 
-# Returns true if 'type' has 'base' as its direct or
-# indirect base.
+# Returns true if 'type' has 'base' as its direct or indirect base.
 rule is-derived ( type base )
 {
     if $(base) in [ all-bases $(type) ]
@@ -190,8 +192,8 @@
     }
 }
 
-# Returns true if 'type' is either derived from 'base',
-# or 'type' is equal to 'base'.
+
+# Returns true if 'type' is either derived from or is equal to 'base'.
 rule is-subtype ( type base )
 {
     if $(type) = $(base)
@@ -201,110 +203,119 @@
     else
     {
         return [ is-derived $(type) $(base) ] ;
- }
+ }
 }
 
 
-# Store suffixes for generated targets
+# Store suffixes for generated targets.
 .suffixes = [ new property-map ] ;
 
-# Store prefixes for generated targets (e.g. "lib" for library)
+# Store prefixes for generated targets (e.g. "lib" for library).
 .prefixes = [ new property-map ] ;
 
 
-# Sets a target suffix that should be used when generating target
-# of 'type' with the specified properties. Can be called with
-# empty properties if no suffix for 'type' was specified yet.
-# This does not automatically specify that files 'suffix' have
-# 'type' --- two different types can use the same suffix for
-# generating, but only one type should be auto-detected for
-# a file with that suffix. User should explicitly specify which
-# one.
+# Sets a file suffix to be used when generating a target of 'type' with the
+# specified properties. Can be called with no properties if no suffix has
+# already been specified for the 'type'. The 'suffix' parameter can be an empty
+# string ("") to indicate that no suffix should be used.
+#
+# Note that this does not cause files with 'suffix' to be automatically
+# recognized as being of 'type'. Two different types can use the same suffix for
+# their generated files but only one type can be auto-detected for a file with
+# that suffix. User should explicitly specify which one using the
+# register-suffixes rule.
 #
-# The 'suffix' parameter can be empty string ("") to indicate that
-# no suffix should be used.
 rule set-generated-target-suffix ( type : properties * : suffix )
 {
- set-generated-target-ps suffix : $(type) : $(properties) : $(suffix) ;
-}
+ set-generated-target-ps suffix : $(type) : $(properties) : $(suffix) ;
+}
+
 
-# Change the suffix previously registered for this type/properties
-# combination. If suffix is not yet specified, sets it.
+# Change the suffix previously registered for this type/properties combination.
+# If suffix is not yet specified, sets it.
 rule change-generated-target-suffix ( type : properties * : suffix )
-{
- change-generated-target-ps suffix : $(type) : $(properties) : $(suffix) ;
+{
+ change-generated-target-ps suffix : $(type) : $(properties) : $(suffix) ;
 }
 
+
+# Returns the suffix used when generating a file of 'type' with the given
+# properties.
 rule generated-target-suffix ( type : property-set )
 {
- return [ generated-target-ps suffix : $(type) : $(property-set) ] ;
+ return [ generated-target-ps suffix : $(type) : $(property-set) ] ;
 }
 
-# Sets a target prefix that should be used when generating target
-# of 'type' with the specified properties. Can be called with
-# empty properties if no prefix for 'type' was specified yet.
+
+# Sets a target prefix that should be used when generating targets of 'type'
+# with the specified properties. Can be called with empty properties if no
+# prefix for 'type' has been specified yet.
 #
-# The 'prefix' parameter can be empty string ("") to indicate that
-# no prefix should be used.
+# The 'prefix' parameter can be empty string ("") to indicate that no prefix
+# should be used.
 #
-# Example usage is for library names that have to have a "lib"
-# prefix as in unix.
+# Usage example: library names use the "lib" prefix on unix.
 rule set-generated-target-prefix ( type : properties * : prefix )
 {
- set-generated-target-ps prefix : $(type) : $(properties) : $(prefix) ;
-}
+ set-generated-target-ps prefix : $(type) : $(properties) : $(prefix) ;
+}
 
-# Change the prefix previously registered for this type/properties
-# combination. If prefix is not yet specified, sets it.
+
+# Change the prefix previously registered for this type/properties combination.
+# If prefix is not yet specified, sets it.
 rule change-generated-target-prefix ( type : properties * : prefix )
-{
- change-generated-target-ps prefix : $(type) : $(properties) : $(prefix) ;
+{
+ change-generated-target-ps prefix : $(type) : $(properties) : $(prefix) ;
 }
 
+
 rule generated-target-prefix ( type : property-set )
 {
- return [ generated-target-ps prefix : $(type) : $(property-set) ] ;
+ return [ generated-target-ps prefix : $(type) : $(property-set) ] ;
 }
 
-# Common rules for prefix/suffix provisioning follow
 
-rule set-generated-target-ps ( ps : type : properties * : psval )
+# Common rules for prefix/suffix provisioning follow.
+
+local rule set-generated-target-ps ( ps : type : properties * : psval )
 {
     properties = <target-type>$(type) $(properties) ;
     $(.$(ps)es).insert $(properties) : $(psval) ;
-}
+}
 
-rule change-generated-target-ps ( ps : type : properties * : psval )
-{
- properties = <target-type>$(type) $(properties) ;
+
+local rule change-generated-target-ps ( ps : type : properties * : psval )
+{
+ properties = <target-type>$(type) $(properties) ;
     local prev = [ $(.$(ps)es).find-replace $(properties) : $(psval) ] ;
     if ! $(prev)
     {
         set-generated-target-ps $(ps) : $(type) : $(properties) : $(psval) ;
- }
+ }
 }
 
-# Returns either prefix or suffix (as indicated by 'ps') that
-# should be used when generating target of 'type' with the specified properties.
-# Parameter 'ps' can be either "prefix" or "suffix". If no prefix/suffix is
-# specified for 'type', returns prefix/suffix for base type, if any.
-rule generated-target-ps-real ( ps : type : properties * )
+
+# Returns either prefix or suffix (as indicated by 'ps') that should be used
+# when generating a target of 'type' with the specified properties. Parameter
+# 'ps' can be either "prefix" or "suffix". If no prefix/suffix is specified for
+# 'type', returns prefix/suffix for base type, if any.
+local rule generated-target-ps-real ( ps : type : properties * )
 {
     local result ;
     local found ;
     while $(type) && ! $(found)
     {
         result = [ $(.$(ps)es).find <target-type>$(type) $(properties) ] ;
- # If the prefix/suffix is explicitly set to empty string,
- # we consider prefix/suffix to be found. If we did not compare with "",
- # there would be no way for user to set empty prefix/suffix.
+ # If the prefix/suffix is explicitly set to an empty string, we consider
+ # prefix/suffix to be found. If we were not to compare with "", there
+ # would be no way to specify an empty prefix/suffix.
         if $(result)-is-not-empty
         {
             found = true ;
         }
         type = $(.bases.$(type)) ;
     }
- if $(result) = ""
+ if $(result) = ""
     {
         result = ;
     }
@@ -312,35 +323,35 @@
 }
 
 
-rule generated-target-ps ( ps : type : property-set )
+local rule generated-target-ps ( ps : type : property-set )
 {
     local key = .$(ps).$(type).$(property-set) ;
     local v = $($(key)) ;
     if ! $(v)
     {
         v = [ generated-target-ps-real $(ps) : $(type)
- : [ $(property-set).raw ] ] ;
+ : [ $(property-set).raw ] ] ;
         if ! $(v)
         {
             v = none ;
         }
         $(key) = $(v) ;
     }
-
+
     if $(v) != none
     {
         return $(v) ;
- }
+ }
 }
 
 
 # Returns file type given it's name. If there are several dots in filename,
-# tries each suffix. E.g. for name of "file.so.1.2" suffixes "2", "1", and
-# "so" will be tried.
-rule type ( filename )
+# tries each suffix. E.g. for name of "file.so.1.2" suffixes "2", "1", and "so"
+# will be tried.
+rule type ( filename )
 {
     local type ;
- while ! $(type) && $(filename:S)
+ while ! $(type) && $(filename:S)
     {
         local suffix = $(filename:S) ;
         type = $(.type$(suffix)) ;
@@ -350,21 +361,23 @@
 }
 
 
-
-rule main-target-rule ( name : sources * : requirements * : default-build *
- : usage-requirements * )
+# Rule used to construct all main targets. Note that this rule gets imported
+# into the global namespace under different alias names and exactly what type of
+# target it is supposed to construct is read from the name of the alias rule
+# actually used to invoke it.
+rule main-target-rule ( name : sources * : requirements * : default-build *
+ : usage-requirements * )
 {
- # First find required target type, which is equal to the name used
- # to invoke us.
+ # First discover the required target type, which is equal to the rule name
+ # used to invoke us.
     local bt = [ BACKTRACE 1 ] ;
     local rulename = $(bt[4]) ;
-
+
     local project = [ project.current ] ;
-
- # This is a circular module dependency, so it must be imported here
+
+ # This is a circular module dependency so it must be imported here.
     import targets ;
- return [ targets.create-typed-target $(.main-target-type.$(rulename)) : $(project)
- : $(name) : $(sources) : $(requirements)
- : $(default-build) : $(usage-requirements) ] ;
+ return [ targets.create-typed-target $(.main-target-type.$(rulename))
+ : $(project) : $(name) : $(sources) : $(requirements)
+ : $(default-build) : $(usage-requirements) ] ;
 }
-

Modified: branches/fix-links/tools/build/v2/build/version.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/version.jam (original)
+++ branches/fix-links/tools/build/v2/build/version.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,11 +1,13 @@
-# Copyright 2002, 2003, 2004, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2002, 2003, 2004, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 rule boost-build ( )
 {
     return "V2 (Milestone 12)" ;
 }
+
+
 rule jam ( )
 {
     local v = [ modules.peek : JAM_VERSION ] ;

Modified: branches/fix-links/tools/build/v2/build/virtual-target.jam
==============================================================================
--- branches/fix-links/tools/build/v2/build/virtual-target.jam (original)
+++ branches/fix-links/tools/build/v2/build/virtual-target.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,16 +1,21 @@
-# Copyright 2003 Dave Abrahams
-# Copyright 2005, 2006 Rene Rivera
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003 Dave Abrahams
+# Copyright 2005, 2006 Rene Rivera
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 # Implements virtual targets, which correspond to actual files created during
-# build, but are not yet targets in Jam sense. They are needed, for example,
-# when searching for possible transormation sequences, when it's not known
-# if particular target should be created at all.
+# a build, but are not yet targets in Jam sense. They are needed, for example,
+# when searching for possible transormation sequences, when it's not yet known
+# whether a particular target should be created at all.
 
 import "class" : new ;
-import path property-set utility sequence errors set type os ;
+import errors ;
+import path ;
+import sequence ;
+import set ;
+import type ;
+import utility ;
 
 # +--------------------------+
 # | virtual-target |
@@ -56,39 +61,41 @@
 # +---------------------+ | actualize-sources() |
 # +---------------------+
 #
-# The 'compile-action' and 'link-action' classes are defined not here,
-# but in builtin.jam modules. They are shown in the diagram to give
-# the big picture.
-
-# Potential target. It can be converted into jam target and used in
-# building, if needed. However, it can be also dropped, which allows
-# to search for different transformation and select only one.
+# The 'compile-action' and 'link-action' classes are not defined here but in
+# builtin.jam modules. They are shown in the diagram to give the big picture.
+
+# Models a potential target. It can be converted into a Jam target and used in
+# building, if needed. However, it can be also dropped, which allows us to
+# search for different transformations and select only one.
 #
-class virtual-target
+class virtual-target
 {
- import virtual-target utility scanner ;
-
- rule __init__ ( name # Name of this target -- specifies the name of
- : project # Project to which this target belongs
+ import scanner ;
+ import sequence ;
+ import utility ;
+ import virtual-target ;
+
+ rule __init__ (
+ name # Target/project name.
+ : project # Project to which this target belongs.
     )
- {
+ {
         self.name = $(name) ;
         self.project = $(project) ;
         self.dependencies = ;
     }
-
+
     # Name of this target.
     rule name ( ) { return $(self.name) ; }
 
     # Project of this target.
     rule project ( ) { return $(self.project) ; }
 
- # Adds additional instances of 'virtual-target' that this
- # one depends on.
+ # Adds additional 'virtual-target' instances this one depends on.
     rule depends ( d + )
     {
         self.dependencies = [ sequence.merge $(self.dependencies)
- : [ sequence.insertion-sort $(d) ] ] ;
+ : [ sequence.insertion-sort $(d) ] ] ;
     }
 
     rule dependencies ( )
@@ -96,16 +103,16 @@
         return $(self.dependencies) ;
     }
 
- # Generates all the actual targets and sets up build actions for
- # this target.
+ # Generates all the actual targets and sets up build actions for this
+ # target.
     #
- # If 'scanner' is specified, creates an additional target
- # with the same location as actual target, which will depend on the
- # actual target and be associated with 'scanner'. That additional
- # target is returned. See the docs (#dependency_scanning) for rationale.
- # Target must correspond to a file if 'scanner' is specified.
+ # If 'scanner' is specified, creates an additional target with the same
+ # location as the actual target, which will depend on the actual target and
+ # be associated with a 'scanner'. That additional target is returned. See
+ # the docs (#dependency_scanning) for rationale. Target must correspond to a
+ # file if 'scanner' is specified.
     #
- # If scanner is not specified, then actual target is returned.
+ # If scanner is not specified then the actual target is returned.
     rule actualize ( scanner ? )
     {
         local actual-name = [ actualize-no-scanner ] ;
@@ -121,7 +128,8 @@
                 [ utility.ungrist $(actual-name:G) ] $(scanner) : - ] ;
             local name = $(actual-name:G=$(g)) ;
 
- if ! $(self.made.$(name)) {
+ if ! $(self.made.$(name))
+ {
                 self.made.$(name) = true ;
 
                 DEPENDS $(name) : $(actual-name) ;
@@ -132,13 +140,12 @@
             }
             return $(name) ;
         }
-
     }
 
 # private: (overridables)
 
- # Sets up build actions for 'target'. Should call appropriate rules
- # and set target variables.
+ # Sets up build actions for 'target'. Should call appropriate rules and set
+ # target variables.
     rule actualize-action ( target )
     {
         errors.error "method should be defined in derived classes" ;
@@ -149,16 +156,16 @@
     {
         errors.error "method should be defined in derived classes" ;
     }
-
- # If the target is generated one, returns the path where it will be
- # generated. Otherwise, returns empty list.
+
+ # If the target is a generated one, returns the path where it will be
+ # generated. Otherwise, returns an empty list.
     rule path ( )
     {
- errors.error "method should be defined in derived classes" ;
+ errors.error "method should be defined in derived classes" ;
     }
-
- # Return that actual target name that should be used
- # (for the case where no scanner is involved)
+
+ # Returns the actual target name to be used in case when no scanner is
+ # involved.
     rule actual-name ( )
     {
         errors.error "method should be defined in derived classes" ;
@@ -167,56 +174,58 @@
 # implementation
     rule actualize-no-scanner ( )
     {
- # In fact, we just need to merge virtual-target with
- # abstract-virtual-target and the latter is the only class
- # derived from the former. But that's for later.
- errors.error "method should be defined in derived classes" ;
- }
+ # In fact, we just need to merge virtual-target with
+ # abstract-virtual-target as the latter is the only class derived from
+ # the former. But that's for later.
+ errors.error "method should be defined in derived classes" ;
+ }
 }
 
 
-# Target which correspond to a file. The exact mapping for file
-# is not yet specified in this class. (TODO: Actually, the class name
-# could be better...)
+# Target corresponding to a file. The exact mapping for file is not yet
+# specified in this class. (TODO: Actually, the class name could be better...)
 #
-# May be a source file (when no action is specified), or
-# derived file (otherwise).
+# May be a source file (when no action is specified) or a derived file
+# (otherwise).
 #
-# The target's grist is concatenation of project's location,
-# properties of action (for derived files), and, optionally,
-# value identifying the main target.
+# The target's grist is concatenation of its project's location, properties of
+# action (for derived files) and, optionally, value identifying the main target.
 class abstract-file-target : virtual-target
 {
- import project regex sequence path type ;
+ import project ;
+ import regex ;
+ import sequence ;
+ import path ;
+ import type ;
     import property-set ;
     import indirect ;
-
- rule __init__ (
- name # Name for this target
- exact ? # If non-empty, the name is exactly the name
- # created file should have. Otherwise, the '__init__'
- # method will add suffix obtained from 'type' by
- # calling 'type.generated-target-suffix'.
- : type ? # The type of this target.
+
+ rule __init__ (
+ name # Target's name.
+ exact ? # If non-empty, the name is exactly the name created file
+ # should have. Otherwise, the '__init__' method will add a
+ # suffix obtained from 'type' by calling
+ # 'type.generated-target-suffix'.
+ : type ? # Target's type.
         : project
         : action ?
     )
     {
         virtual-target.__init__ $(name) : $(project) ;
-
+
         self.type = $(type) ;
         self.action = $(action) ;
         if $(action)
- {
+ {
             $(action).add-targets $(__name__) ;
 
- if $(self.type) && ! $(exact)
- {
+ if $(self.type) && ! $(exact)
+ {
                 _adjust-name $(name) ;
- }
- }
+ }
+ }
     }
-
+
     rule type ( ) { return $(self.type) ; }
 
     # Sets the path. When generating target name, it will override any path
@@ -226,15 +235,14 @@
         self.path = [ path.native $(path) ] ;
     }
 
- # If 'a' is supplied, sets action to 'a'.
- # Returns the action currently set.
+ # Returns the currently set action.
     rule action ( )
     {
         return $(self.action) ;
     }
 
- # Sets/gets the 'root' flag. Target is root if it directly correspods to some
- # variant of a main target.
+ # Sets/gets the 'root' flag. Target is root if it directly corresponds to
+ # some variant of a main target.
     rule root ( set ? )
     {
         if $(set)
@@ -243,26 +251,19 @@
         }
         return $(self.root) ;
     }
-
- # Gets or sets the subvariant which created this target. Subvariant
- # is set when target is brought into existance, and is never changed
- # after that. In particual, if target is shared by subvariant, only
- # the first is stored.
- rule creating-subvariant ( s ? # If specified, specified the value to set,
- # which should be instance of 'subvariant'
- # class.
+
+ # Gets or sets the subvariant which created this target. Subvariant is set
+ # when target is brought into existance and is never changed after that. In
+ # particular, if a target is shared by a subvariant, only the first is
+ # stored.
+ rule creating-subvariant ( s ? # If specified, specifies the value to set,
+ # which should be a 'subvariant' class
+ # instance.
                              )
     {
- if $(s) && ( ! $(self.creating-subvariant) && ! $(overwrite) )
+ if $(s) && ! $(self.creating-subvariant) && ! $(overwrite)
         {
- if $(self.creating-subvariant)
- {
- errors.error "Attempt to change 'dg'" ;
- }
- else
- {
- self.creating-subvariant = $(s) ;
- }
+ self.creating-subvariant = $(s) ;
         }
         return $(self.creating-subvariant) ;
     }
@@ -274,10 +275,9 @@
             $(self.action).actualize ;
         }
     }
-
- # Return a human-readable representation of this target
- #
- # If this target has an action, that's:
+
+ # Return a human-readable representation of this target. If this target has
+ # an action, that's:
     #
     # { <action-name>-<self.name>.<self.type> <action-sources>... }
     #
@@ -288,21 +288,19 @@
     rule str ( )
     {
         local action = [ action ] ;
-
- local name-dot-type = [ sequence.join $(self.name) "." $(self.type) ] ;
-
+ local name-dot-type = [ sequence.join $(self.name) "." $(self.type) ] ;
+
         if $(action)
         {
- local sources = [ $(action).sources ] ;
-
- local action-name = [ $(action).action-name ] ;
+ local sources = [ $(action).sources ] ;
+ local action-name = [ $(action).action-name ] ;
 
- local ss ;
+ local ss ;
             for local s in $(sources)
             {
                 ss += [ $(s).str ] ;
             }
-
+
             return "{" $(action-name)-$(name-dot-type) $(ss) "}" ;
         }
         else
@@ -331,70 +329,65 @@
     rule actual-name ( )
     {
         if ! $(self.actual-name)
- {
+ {
             local grist = [ grist ] ;
-
             local basename = [ path.native $(self.name) ] ;
             self.actual-name = <$(grist)>$(basename) ;
-
+
         }
         return $(self.actual-name) ;
     }
-
- # Helper to 'actual-name', above. Compute unique prefix used to distinguish
- # this target from other targets with the same name which create different
- # file.
+
+ # Helper to 'actual-name', above. Computes a unique prefix used to
+ # distinguish this target from other targets with the same name creating
+ # different files.
     rule grist ( )
     {
         # Depending on target, there may be different approaches to generating
- # unique prefixes. We'll generate prefixes in the form
+ # unique prefixes. We'll generate prefixes in the form
         # <one letter approach code> <the actual prefix>
         local path = [ path ] ;
         if $(path)
         {
             # The target will be generated to a known path. Just use the path
             # for identification, since path is as unique as it can get.
- return p$(path) ;
+ return p$(path) ;
         }
         else
         {
- # File is either source, which will be searched for, or is not a file at
- # all. Use the location of project for distinguishing.
+ # File is either source, which will be searched for, or is not a
+ # file at all. Use the location of project for distinguishing.
             local project-location = [ $(self.project).get location ] ;
- local location-grist =
- [ sequence.join [ regex.split $(project-location) "/" ] : "!" ] ;
-
+ local location-grist = [ sequence.join [ regex.split
+ $(project-location) "/" ] : "!" ] ;
+
             if $(self.action)
             {
- local ps = [ $(self.action).properties ] ;
+ local ps = [ $(self.action).properties ] ;
                 local property-grist = [ $(ps).as-path ] ;
- # 'property-grist' can be empty when 'ps' is an empty
- # property set.
+ # 'property-grist' can be empty when 'ps' is an empty property
+ # set.
                 if $(property-grist)
- {
+ {
                     location-grist = $(location-grist)/$(property-grist) ;
- }
- }
-
+ }
+ }
+
             return l$(location-grist) ;
- }
- }
+ }
+ }
 
- # Given the target name specified in constructor, returns the
- # name which should be really used, by looking at the <tag> properties.
- # The tag properties come in two flavour:
- # - <tag>value,
- # - <tag>@rule-name
- # In the first case, value is just added to name
- # In the second case, the specified rule is called with specified name,
- # target type and properties and should return the new name.
- # If not <tag> property is specified, or the rule specified by
- # <tag> returns nothing, returns the result of calling
- # virtual-target.add-suffix
+ # Given the target name specified in constructor, returns the name which
+ # should be really used, by looking at the <tag> properties. Tag properties
+ # need to be specified as <tag>@rule-name. This makes Boost.Build call the
+ # specified rule with the target name, type and properties to get the new
+ # name. If no <tag> property is specified or the rule specified by <tag>
+ # returns nothing, returns the result of calling
+ # virtual-target.add-prefix-and-suffix.
     rule _adjust-name ( specified-name )
- {
+ {
         local ps ;
- if $(self.action)
+ if $(self.action)
         {
             ps = [ $(self.action).properties ] ;
         }
@@ -402,15 +395,14 @@
         {
             ps = [ property-set.empty ] ;
         }
-
- #~ We add ourselves to the properties so that any tag rule can get
- #~ more direct information about the target than just that available
- #~ through the properties. This is useful in implementing
- #~ name changes based on the sources of the target. For example to
- #~ make unique names of object files based on the source file.
- #~ --grafik
+
+ # We add ourselves to the properties so that any tag rule can get more
+ # direct information about the target than just that available through
+ # the properties. This is useful in implementing name changes based on
+ # the sources of the target. For example to make unique names of object
+ # files based on the source file. --grafik
         ps = [ property-set.create [ $(ps).raw ] <target>$(__name__) ] ;
-
+
         local tag = [ $(ps).get <tag> ] ;
 
         if $(tag)
@@ -420,46 +412,49 @@
             {
                 if $(tag[2])
                 {
- errors.error "<tag>@rulename is present but is not the only <tag> feature" ;
+ errors.error "<tag>@rulename is present but is not the only"
+ "<tag> feature" ;
                 }
-
- self.name = [ indirect.call $(rule-name) $(specified-name) :
- $(self.type) : $(ps) ] ;
+
+ self.name = [ indirect.call $(rule-name) $(specified-name)
+ : $(self.type) : $(ps) ] ;
             }
             else
             {
- errors.error
- "The value of the <tag> feature must be '@rule-nane'" ;
+ errors.error
+ "The value of the <tag> feature must be '@rule-name'" ;
             }
         }
-
+
         # If there's no tag or the tag rule returned nothing.
         if ! $(tag) || ! $(self.name)
- {
- self.name = [ virtual-target.add-prefix-and-suffix
- $(specified-name) : $(self.type) : $(ps) ] ;
- }
+ {
+ self.name = [ virtual-target.add-prefix-and-suffix $(specified-name)
+ : $(self.type) : $(ps) ] ;
+ }
     }
 
     rule actualize-no-scanner ( )
     {
         local name = [ actual-name ] ;
 
- # Do anything only on the first invocation
- if ! $(self.made.$(name)) {
+ # Do anything only on the first invocation.
+ if ! $(self.made.$(name))
+ {
             self.made.$(name) = true ;
-
+
             if $(self.action)
- {
- # For non-derived target, we don't care if there
- # are several virtual targets that refer to the same name.
- # One case when this is unavoidable is when file name is
- # main.cpp and two targets have types CPP (for compiling)
- # and MOCCABLE_CPP (for convertion to H via Qt tools).
+ {
+ # For non-derived target, we don't care if there are several
+ # virtual targets that refer to the same name. One case when
+ # this is unavoidable is when the file name is main.cpp and two
+ # targets have types CPP (for compiling) and MOCCABLE_CPP (for
+ # conversion to H via Qt tools).
                 virtual-target.register-actual-name $(name) : $(__name__) ;
             }
-
- for local i in $(self.dependencies) {
+
+ for local i in $(self.dependencies)
+ {
                 DEPENDS $(name) : [ $(i).actualize ] ;
             }
 
@@ -468,18 +463,18 @@
         }
         return $(name) ;
     }
-
 }
 
-# Appends the suffix appropriate to 'type/property-set' combination
-# to the specified name and returns the result.
+
+# Appends the suffix appropriate to 'type/property-set' combination to the
+# specified name and returns the result.
 rule add-prefix-and-suffix ( specified-name : type ? : property-set )
 {
     local suffix = [ type.generated-target-suffix $(type) : $(property-set) ] ;
-
- # Handle suffixes for which no leading dot is desired. Those are
- # specified by enclosing them in <...>. Needed by python so it
- # can create "_d.so" extensions, for example.
+
+ # Handle suffixes for which no leading dot is desired. Those are specified
+ # by enclosing them in <...>. Needed by python so it can create "_d.so"
+ # extensions, for example.
     if $(suffix:G)
     {
         suffix = [ utility.ungrist $(suffix) ] ;
@@ -488,9 +483,9 @@
     {
         suffix = .$(suffix) ;
     }
-
+
     local prefix = [ type.generated-target-prefix $(type) : $(property-set) ] ;
-
+
     if [ MATCH ^($(prefix)) : $(specified-name) ]
     {
         prefix = ;
@@ -499,26 +494,26 @@
 }
 
 
-# File target with explicitly known location.
+# File targets with explicitly known location.
 #
 # The file path is determined as
-# - value passed to the 'set-path' method, if any
-# - for derived files, project's build dir, joined with components
-# that describe action's properties. If the free properties
-# are not equal to the project's reference properties
-# an element with name of main target is added.
-# - for source files, project's source dir
+# * Value passed to the 'set-path' method, if any.
+# * For derived files, project's build dir, joined with components that
+# describe action properties. If free properties are not equal to the
+# project's reference properties an element with the name of the main
+# target is added.
+# * For source files, project's source dir.
 #
-# The file suffix is
-# - the value passed to the 'suffix' method, if any, or
-# - the suffix which correspond to the target's type.
+# The file suffix is determined as:
+# * The value passed to the 'suffix' method, if any.
+# * The suffix corresponding to the target's type.
 #
-class file-target : abstract-file-target
+class file-target : abstract-file-target
 {
- import common ;
- import errors ;
     import "class" : new ;
-
+ import common ;
+ import errors ;
+
     rule __init__ (
       name exact ?
         : type ? # Optional type for this target
@@ -527,149 +522,150 @@
         : path ?
     )
     {
- abstract-file-target.__init__ $(name) $(exact) : $(type) : $(project)
- : $(action) ;
+ abstract-file-target.__init__ $(name) $(exact) : $(type) : $(project)
+ : $(action) ;
 
         self.path = $(path) ;
     }
-
+
     rule clone-with-different-type ( new-type )
     {
         return [ new file-target $(self.name) exact : $(new-type)
- : $(self.project) : $(self.action) : $(self.path) ] ;
+ : $(self.project) : $(self.action) : $(self.path) ] ;
     }
-
+
     rule actualize-location ( target )
     {
         if $(self.action)
         {
             # This is a derived file.
             local path = [ path ] ;
- LOCATE on $(target) = $(path) ;
+ LOCATE on $(target) = $(path) ;
 
             # Make sure the path exists.
             DEPENDS $(target) : $(path) ;
             common.MkDir $(path) ;
 
- # It's possible that the target name includes a directory
- # too, for example when installing headers. Create that
- # directory.
+ # It's possible that the target name includes a directory too, for
+ # example when installing headers. Create that directory.
             if $(target:D)
             {
                 local d = $(target:D) ;
                 d = $(d:R=$(path)) ;
                 DEPENDS $(target) : $(d) ;
-
                 common.MkDir $(d) ;
- }
-
- # For real file target, we create a fake target that
- # depends on the real target. This allows to run
+ }
+
+ # For a real file target, we create a fake target depending on the
+ # real target. This allows us to run
             #
             # bjam hello.o
             #
- # without trying to guess the name of the real target.
- # Note the that target has no directory name, and a special
- # grist <e>.
+ # without trying to guess the name of the real target. Note that the
+ # target has no directory name and uses a special <e> grist.
             #
- # First, that means that "bjam hello.o" will build all
- # known hello.o targets.
- # Second, the <e> grist makes sure this target won't be confused
- # with other targets, for example, if we have subdir 'test'
- # with target 'test' in it that includes 'test.o' file,
- # then the target for directory will be just 'test' the target
- # for test.o will be <ptest/bin/gcc/debug>test.o and the target
- # we create below will be <e>test.o
+ # First, that means that "bjam hello.o" will build all known hello.o
+ # targets. Second, the <e> grist makes sure this target won't be
+ # confused with other targets, for example, if we have subdir 'test'
+ # with target 'test' in it that includes a 'test.o' file, then the
+ # target for directory will be just 'test' the target for test.o
+ # will be <ptest/bin/gcc/debug>test.o and the target we create below
+ # will be <e>test.o
             DEPENDS $(target:G=e) : $(target) ;
         }
         else
         {
             SEARCH on $(target) = [ path.native $(self.path) ] ;
- }
+ }
     }
-
- # Returns the directory for this target
+
+ # Returns the directory for this target.
     rule path ( )
     {
         if ! $(self.path)
         {
             if $(self.action)
- {
- local p = [ $(self.action).properties ] ;
+ {
+ local p = [ $(self.action).properties ] ;
                 local path = [ $(p).target-path ] ;
-
+
                 if $(path[2]) = true
- {
- # Indicates that the path is relative to
- # build dir.
+ {
+ # Indicates that the path is relative to the build dir.
                     path = [ path.join [ $(self.project).build-dir ]
- $(path[1]) ] ;
+ $(path[1]) ] ;
                 }
-
- # Store the computed path, so that it's not recomputed
- # any more
+
                 self.path = [ path.native $(path) ] ;
- }
+ }
         }
         return $(self.path) ;
      }
-
 }
 
+
 class notfile-target : abstract-file-target
 {
     rule __init__ ( name : project : action ? )
     {
         abstract-file-target.__init__ $(name) : : $(project) : $(action) ;
     }
-
- # Returns nothing, to indicate that target path is not known.
+
+ # Returns nothing to indicate that the target's path is not known.
     rule path ( )
     {
         return ;
     }
-
+
     rule actualize-location ( target )
     {
         NOTFILE $(target) ;
         ALWAYS $(target) ;
- }
-}
+ }
+}
 
-# Class which represents an action.
-# Both 'targets' and 'sources' should list instances of 'virtual-target'.
-# Action name should name a rule with this prototype
+
+# Class representing an action. Both 'targets' and 'sources' should list
+# instances of 'virtual-target'. Action name should name a rule with this
+# prototype:
 # rule action-name ( targets + : sources * : properties * )
-# Targets and sources are passed as actual jam targets. The rule may
-# not establish dependency relationship, but should do everything else.
-class action
+# Targets and sources are passed as actual Jam targets. The rule may not
+# establish additional dependency relationships.
+
+class action
 {
- import type toolset property-set indirect class path assert errors ;
-
+ import "class" ;
+ import errors ;
+ import type ;
+ import toolset ;
+ import property-set ;
+ import indirect ;
+ import path ;
+
     rule __init__ ( sources * : action-name + : property-set ? )
- {
+ {
         self.sources = $(sources) ;
-
+
         self.action-name = [ indirect.make-qualified $(action-name) ] ;
-
- if ! $(property-set)
+
+ if ! $(property-set)
         {
             property-set = [ property-set.empty ] ;
         }
-
+
         if ! [ class.is-instance $(property-set) ]
- {
+ {
             errors.error "Property set instance required" ;
         }
-
+
         self.properties = $(property-set) ;
- }
-
+ }
+
     rule add-targets ( targets * )
     {
         self.targets += $(targets) ;
     }
-
+
     rule targets ( )
     {
         return $(self.targets) ;
@@ -710,30 +706,29 @@
 
             DEPENDS $(actual-targets) : $(self.actual-sources) $(self.dependency-only-sources) ;
 
- # Action name can include additional argument to rule, which should not
- # be passed to 'set-target-variables'
+ # Action name can include additional argument to rule, which should
+ # not be passed to 'set-target-variables'
             toolset.set-target-variables
- [ indirect.get-rule $(self.action-name[1]) ] $(actual-targets)
+ [ indirect.get-rule $(self.action-name[1]) ] $(actual-targets)
                 : $(properties) ;
-
+
             # Reflect ourselves in a variable for the target. This allows
             # looking up additional info for the action given the raw target.
- # For example to debug or output action information from action rules.
+ # For example to debug or output action information from action
+ # rules.
             .action on $(actual-targets) = $(__name__) ;
-
- indirect.call $(self.action-name)
- $(actual-targets) : $(self.actual-sources) : [ $(properties).raw ]
- ;
-
- # Since we set up creating action here, we also set up
- # action for cleaning up
+
+ indirect.call $(self.action-name) $(actual-targets)
+ : $(self.actual-sources) : [ $(properties).raw ] ;
+
+ # Since we set up the creating action here, we set up the action for
+ # cleaning up as well.
             common.Clean clean-all : $(actual-targets) ;
         }
     }
 
- # Helper for 'actualize-sources'.
- # For each passed source, actualizes it with the appropriate scanner.
- # Returns the actualized virtual targets.
+ # Helper for 'actualize-sources'. For each passed source, actualizes it with
+ # the appropriate scanner. Returns the actualized virtual targets.
     rule actualize-source-type ( sources * : property-set )
     {
         local result = ;
@@ -742,118 +737,117 @@
             local scanner ;
             if [ $(i).type ]
             {
- scanner =
- [ type.get-scanner [ $(i).type ] : $(property-set) ] ;
+ scanner = [ type.get-scanner [ $(i).type ] : $(property-set) ] ;
             }
             result += [ $(i).actualize $(scanner) ] ;
         }
-
         return $(result) ;
     }
-
- # Creates actual jam targets for sources. Initialized two member
- # variables:.
- # 'self.actual-sources' -- sources which are passed to updating action
- # 'self.dependency-only-sources' -- sources which are made dependencies, but
- # are not used otherwise.
+
+ # Creates actual Jam targets for sources. Initializes the following member
+ # variables:
+ # 'self.actual-sources' -- sources passed to the updating action.
+ # 'self.dependency-only-sources' -- sources marked as dependencies, but
+ # are not used otherwise.
     #
- # New values will be *appended* to the variables. They may be non-empty,
- # if caller wants it.
+ # New values will be *appended* to the variables. They may be non-empty if
+ # caller wants it.
     rule actualize-sources ( sources * : property-set )
     {
         local dependencies = [ $(self.properties).get <dependency> ] ;
-
- self.dependency-only-sources += [
- actualize-source-type $(dependencies) : $(property-set) ] ;
- self.actual-sources += [
- actualize-source-type $(sources) : $(property-set) ] ;
-
- # This is used to help bjam find dependencies in generated headers
- # in other main targets.
- # Say:
+
+ self.dependency-only-sources +=
+ [ actualize-source-type $(dependencies) : $(property-set) ] ;
+ self.actual-sources +=
+ [ actualize-source-type $(sources) : $(property-set) ] ;
+
+ # This is used to help bjam find dependencies in generated headers and
+ # other main targets, e.g. in:
         #
         # make a.h : ....... ;
         # exe hello : hello.cpp : <implicit-dependency>a.h ;
         #
- # However, for bjam to find the dependency the generated target must
- # be actualized (i.e. have the jam target). In the above case,
- # if we're building just hello ("bjam hello"), 'a.h' won't be
- # actualized unless we do it here.
+ # For bjam to find the dependency the generated target must be
+ # actualized (i.e. have its Jam target constructed). In the above case,
+ # if we're building just hello ("bjam hello"), 'a.h' won't be actualized
+ # unless we do it here.
         local implicit = [ $(self.properties).get <implicit-dependency> ] ;
         for local i in $(implicit)
         {
             $(i:G=).actualize ;
- }
+ }
     }
 
- # Determined real properties when trying building with 'properties'.
- # This is last chance to fix properties, for example to adjust includes
- # to get generated headers correctly. Default implementation returns
- # its argument.
+ # Determines real properties when trying to build with 'properties'. This is
+ # the last chance to fix properties, for example to adjust includes to get
+ # generated headers correctly. Default implementation simply returns its
+ # argument.
     rule adjust-properties ( property-set )
     {
         return $(property-set) ;
     }
 }
 
-# Action class which does nothing --- it produces the targets with
-# specific properties out of nowhere. It's needed to distinguish virtual
-# targets with different properties that are known to exist, and have no
-# actions which create them.
-class null-action : action
+
+# Action class which does nothing --- it produces the targets with specific
+# properties out of nowhere. It's needed to distinguish virtual targets with
+# different properties that are known to exist and have no actions which create
+# them.
+class null-action : action
 {
     rule __init__ ( property-set ? )
     {
- action.__init__ : .no-action : $(property-set) ;
+ action.__init__ : .no-action : $(property-set) ;
     }
-
+
     rule actualize ( )
     {
         if ! $(self.actualized)
         {
             self.actualized = true ;
-
             for local i in [ targets ]
             {
                 $(i).actualize ;
             }
- }
+ }
     }
 }
 
-# Class which acts exactly like 'action', except that the sources
-# are not scanned for dependencies.
-class non-scanning-action : action
+
+# Class which acts exactly like 'action', except that its sources are not
+# scanned for dependencies.
+class non-scanning-action : action
 {
     rule __init__ ( sources * : action-name + : property-set ? )
- {
+ {
         action.__init__ $(sources) : $(action-name) : $(property-set) ;
     }
+
     rule actualize-source-type ( sources * : property-set )
     {
         local result ;
         for local i in $(sources)
         {
             result += [ $(i).actualize ] ;
- }
+ }
         return $(result) ;
     }
 }
 
 
-# Creates a virtual target with approariate name and type from 'file'.
-# If a target with that name in that project was already created, returns that already
+# Creates a virtual target with an appropriate name and type from 'file'. If a
+# target with that name in that project already exists, returns that already
 # created target.
-# FIXME: more correct way would be to compute path to the file, based on name and source location
-# for the project, and use that path to determine if the target was already created.
-# TODO: passing project with all virtual targets starts to be annoying.
+# FIXME: a more correct way would be to compute the path to the file, based on
+# name and source location for the project, and use that path to determine if
+# the target was already created.
+# TODO: passing a project with all virtual targets is starting to be annoying.
 rule from-file ( file : file-loc : project )
 {
- import type ; # had to do this here to break a circular dependency
+ import type ; # Had to do this here to break a circular dependency.
 
     # Check if we've created a target corresponding to this file.
- local path = [ path.root [ path.root $(file) $(file-loc) ]
- [ path.pwd ] ] ;
+ local path = [ path.root [ path.root $(file) $(file-loc) ] [ path.pwd ] ] ;
 
     if $(.files.$(path))
     {
@@ -866,62 +860,64 @@
         local result ;
 
         result = [ new file-target $(file)
- : $(type)
- : $(project)
- : #action
- : $(file-loc) ] ;
+ : $(type)
+ : $(project)
+ : #action
+ : $(file-loc) ] ;
 
         .files.$(path) = $(result) ;
         return $(result) ;
     }
 }
 
-# Registers a new virtual target. Checks if there's already registered target, with the same
-# name, type, project and subvariant properties, and also with the same sources
-# and equal action. If such target is found it is retured and 'target' is not registers.
-# Otherwise, 'target' is registered and returned.
+
+# Registers a new virtual target. Checks if there's already a registered target
+# with the same name, type, project and subvariant properties as well as the
+# same sources and equal action. If such target is found it is returned and a
+# new 'target' is not registered. Otherwise, 'target' is registered and
+# returned.
 rule register ( target )
 {
     local signature = [ sequence.join
- [ $(target).path ] [ $(target).name ] : - ] ;
+ [ $(target).path ] [ $(target).name ] : - ] ;
 
-
     local result ;
     for local t in $(.cache.$(signature))
     {
         local a1 = [ $(t).action ] ;
         local a2 = [ $(target).action ] ;
-
+
         if ! $(result)
         {
             if ! $(a1) && ! $(a2)
             {
                 result = $(t) ;
             }
- else
+ else
             {
- if $(a1) && $(a2) && [ $(a1).action-name ] = [ $(a2).action-name ] &&
- [ $(a1).sources ] = [ $(a2).sources ]
+ if $(a1) && $(a2) &&
+ [ $(a1).action-name ] = [ $(a2).action-name ] &&
+ [ $(a1).sources ] = [ $(a2).sources ]
                 {
                     local ps1 = [ $(a1).properties ] ;
                     local ps2 = [ $(a2).properties ] ;
                     local p1 = [ $(ps1).base ] [ $(ps1).free ] [ $(ps1).dependency ] ;
                     local p2 = [ $(ps2).base ] [ $(ps2).free ] [ $(ps2).dependency ] ;
- if $(p1) = $(p2)
- {
+ if $(p1) = $(p2)
+ {
                         result = $(t) ;
- }
+ }
                 }
- }
+ }
         }
     }
-
+
     if ! $(result)
     {
- .cache.$(signature) += $(target) ;
+ .cache.$(signature) += $(target) ;
         result = $(target) ;
     }
-
+
     .recent-targets += $(result) ;
     .all-targets += $(result) ;
 
@@ -929,28 +925,30 @@
 }
 
 
-# Each target returned by 'register' is added to a list of
-# 'recent-target', returned by this function. So, this allows
-# us to find all targets created when building a given main
-# target, even if the target
+# Each target returned by 'register' is added to a recent-targets list, returned
+# by this function. This allows us to find all targets created when building a
+# given main target, even if the target... !!!MISSING TEXT HERE!!!
 rule recent-targets ( )
 {
     return $(.recent-targets) ;
 }
 
+
 rule clear-recent-targets ( )
 {
     .recent-targets = ;
 }
 
-# Returns all virtual targets ever created
+
+# Returns all virtual targets ever created.
 rule all-targets ( )
 {
     return $(.all-targets) ;
 }
 
-# Returns all targets from 'targets' with types
-# equal to 'type' or derived from it.
+
+# Returns all targets from 'targets' with types equal to 'type' or derived from
+# it.
 rule select-by-type ( type : targets * )
 {
     local result ;
@@ -959,14 +957,12 @@
         if [ type.is-subtype [ $(t).type ] $(type) ]
         {
             result += $(t) ;
- }
+ }
     }
-
- return $(result) ;
+ return $(result) ;
 }
 
 
-
 rule register-actual-name ( actual-name : virtual-target )
 {
     if $(.actual.$(actual-name))
@@ -975,8 +971,7 @@
         local cs2 = [ $(virtual-target).creating-subvariant ] ;
         local cmt1 = [ $(cs1).main-target ] ;
         local cmt2 = [ $(cs2).main-target ] ;
-
-
+
         local action1 = [ $(.actual.$(actual-name)).action ] ;
         local action2 = [ $(virtual-target).action ] ;
         local properties-added ;
@@ -991,33 +986,34 @@
             properties-removed ?= "none" ;
             properties-added = [ set.difference $(p2) : $(p1) ] ;
             properties-added ?= "none" ;
- }
- errors.error "Duplicate name of actual target:" $(actual-name)
- : "previous virtual target" [ $(.actual.$(actual-name)).str ]
- : "created from" [ $(cmt1).full-name ]
- : "another virtual target" [ $(virtual-target).str ]
- : "created from" [ $(cmt2).full-name ]
- : "added properties: " $(properties-added)
- : "removed properties: " $(properties-removed) ;
+ }
+ errors.error "Duplicate name of actual target:" $(actual-name)
+ : "previous virtual target" [ $(.actual.$(actual-name)).str ]
+ : "created from" [ $(cmt1).full-name ]
+ : "another virtual target" [ $(virtual-target).str ]
+ : "created from" [ $(cmt2).full-name ]
+ : "added properties:" $(properties-added)
+ : "removed properties:" $(properties-removed) ;
     }
     else
     {
         .actual.$(actual-name) = $(virtual-target) ;
- }
+ }
 }
 
 
-# Traverses the dependency graph of 'target' and return all targets that will
-# be created before this one is created. If root of some dependency graph is
-# found during traversal, it's either included or not, dependencing of the
-# value of 'include-roots'. In either case, sources of root are not traversed.
+# Traverses the dependency graph of 'target' and return all targets that will be
+# created before this one is created. If the root of some dependency graph is
+# found during traversal, it's either included or not, depending on the value of
+# 'include-roots'. In either case traversal stops at root targets, i.e. sources
+# of root targets are not traversed.
 rule traverse ( target : include-roots ? : include-sources ? )
 {
     local result ;
     if [ $(target).action ]
     {
         local action = [ $(target).action ] ;
- # This includes 'target' as well
+ # This includes the 'target' as well.
         result += [ $(action).targets ] ;
 
         for local t in [ $(action).sources ]
@@ -1029,20 +1025,21 @@
             else if $(include-roots)
             {
                 result += $(t) ;
- }
+ }
         }
     }
     else if $(include-sources)
     {
         result = $(target) ;
- }
+ }
     return $(result) ;
 }
 
-# Takes an 'action' instances and creates new instance of it
-# and all produced target. The rule-name and properties are set
-# to 'new-rule-name' and 'new-properties', if those are specified.
-# Returns the cloned action.
+
+# Takes an 'action' instance and creates a new instance of it and all targets
+# produced by the action. The rule-name and properties are set to
+# 'new-rule-name' and 'new-properties', if those are specified. Returns the
+# cloned action.
 rule clone-action ( action : new-project : new-action-name ? : new-properties ? )
 {
     if ! $(new-action-name)
@@ -1055,142 +1052,139 @@
     }
 
     local action-class = [ modules.peek $(action) : __class__ ] ;
- local cloned-action = [ class.new $(action-class)
+ local cloned-action = [ class.new $(action-class)
       [ $(action).sources ] : $(new-action-name) : $(new-properties) ] ;
-
+
     local cloned-targets ;
     for local target in [ $(action).targets ]
     {
         local n = [ $(target).name ] ;
- # Don't modify the name of the produced targets.Strip the directory f
- local cloned-target = [ class.new file-target $(n) exact : [ $(target).type ]
- : $(new-project) : $(cloned-action) ] ;
+ # Don't modify produced targets names.
+ local cloned-target = [ class.new file-target $(n) exact
+ : [ $(target).type ] : $(new-project) : $(cloned-action) ] ;
         local d = [ $(target).dependencies ] ;
         if $(d)
- {
+ {
             $(cloned-target).depends $(d) ;
- }
+ }
         $(cloned-target).root [ $(target).root ] ;
         $(cloned-target).creating-subvariant [ $(target).creating-subvariant ] ;
-
+
         cloned-targets += $(cloned-target) ;
- }
-
- return $(cloned-action) ;
+ }
+
+ return $(cloned-action) ;
 }
 
+
 class subvariant
 {
- import sequence ;
+ import sequence ;
     import type ;
-
- rule __init__ ( main-target # The instance of main-target class
- : property-set # Properties requested for this target
+
+ rule __init__ ( main-target # The instance of main-target class.
+ : property-set # Properties requested for this target.
         : sources *
- : build-properties # Actually used properties
- : sources-usage-requirements # Properties propagated from sources
- : created-targets * ) # Top-level created targets
- {
- self.main-target = $(main-target) ;
+ : build-properties # Actually used properties.
+ : sources-usage-requirements # Properties propagated from sources.
+ : created-targets * ) # Top-level created targets.
+ {
+ self.main-target = $(main-target) ;
         self.properties = $(property-set) ;
         self.sources = $(sources) ;
         self.build-properties = $(build-properties) ;
         self.sources-usage-requirements = $(sources-usage-requirements) ;
         self.created-targets = $(created-targets) ;
 
- # Pre-compose the list of other dependency graphs, on which this one
- # depends
+ # Pre-compose a list of other dependency graphs this one depends on.
         local deps = [ $(build-properties).get <implicit-dependency> ] ;
         for local d in $(deps)
         {
             self.other-dg += [ $(d:G=).creating-subvariant ] ;
         }
-
+
         self.other-dg = [ sequence.unique $(self.other-dg) ] ;
     }
-
-
+
     rule main-target ( )
     {
         return $(self.main-target) ;
     }
-
- rule created-targets ( )
+
+ rule created-targets ( )
     {
         return $(self.created-targets) ;
     }
-
+
     rule requested-properties ( )
     {
         return $(self.properties) ;
     }
-
+
     rule build-properties ( )
     {
         return $(self.build-properties) ;
     }
-
+
     rule sources-usage-requirements ( )
     {
         return $(self.sources-usage-requirements) ;
     }
-
+
     rule set-usage-requirements ( usage-requirements )
     {
         self.usage-requirements = $(usage-requirements) ;
     }
-
+
     rule usage-requirements ( )
     {
         return $(self.usage-requirements) ;
     }
-
- # Returns all targets referenced by this subvariant,
- # either directly or indirectly, and
- # either as sources, or as dependency properties.
- # Targets referred with dependency property are returned a properties,
- # not targets.
+
+ # Returns all targets referenced by this subvariant, either directly or
+ # indirectly, and either as sources, or as dependency properties. Targets
+ # referred to using the dependency property are returned as properties, not
+ # targets.
     rule all-referenced-targets ( )
     {
         # Find directly referenced targets.
         local deps = [ $(self.build-properties).dependency ] ;
         local all-targets = $(self.sources) $(deps) ;
-
+
         # Find other subvariants.
         local r ;
         for local t in $(all-targets)
- {
+ {
             r += [ $(t:G=).creating-subvariant ] ;
         }
         r = [ sequence.unique $(r) ] ;
- for local s in $(r)
+ for local s in $(r)
         {
             if $(s) != $(__name__)
             {
                 all-targets += [ $(s).all-referenced-targets ] ;
- }
+ }
         }
- return $(all-targets) ;
+ return $(all-targets) ;
     }
-
- # Returns the properties which specify implicit include paths to
- # generated headers. This traverses all targets in this subvariant,
- # and subvariants referred by <implcit-dependecy>properties.
- # For all targets which are of type 'target-type' (or for all targets,
- # if 'target-type' is not specified), the result will contain
- # <$(feature)>path-to-that-target.
+
+ # Returns the properties specifying implicit include paths to generated
+ # headers. This traverses all targets in this subvariant and subvariants
+ # referred by <implcit-dependecy> properties. For all targets of type
+ # 'target-type' (or for all targets, if 'target-type' is not specified), the
+ # result will contain <$(feature)>path-to-that-target.
     rule implicit-includes ( feature : target-type ? )
     {
         local key = ii$(feature)-$(target-type:E="") ;
         if ! $($(key))-is-nonempty
         {
- local target-paths = [ all-target-directories $(target-type) ] ;
+ local target-paths = [ all-target-directories $(target-type) ] ;
             target-paths = [ sequence.unique $(target-paths) ] ;
             local result = $(target-paths:G=$(feature)) ;
             if ! $(result)
             {
                 result = "" ;
- }
+ }
             $(key) = $(result) ;
         }
         if $($(key)) = ""
@@ -1200,37 +1194,34 @@
         else
         {
             return $($(key)) ;
- }
+ }
     }
-
+
     rule all-target-directories ( target-type ? )
     {
         if ! $(self.target-directories)
         {
             compute-target-directories $(target-type) ;
- }
+ }
         return $(self.target-directories) ;
     }
-
+
     rule compute-target-directories ( target-type ? )
- {
+ {
         local result ;
         for local t in $(self.created-targets)
         {
- if $(target-type) && ! [ type.is-derived [ $(t).type ] $(target-type) ]
+ # Skip targets of the wrong type.
+ if ! $(target-type) ||
+ [ type.is-derived [ $(t).type ] $(target-type) ]
             {
- # Skip target which is of wrong type.
- }
- else
- {
                 result = [ sequence.merge $(result) : [ $(t).path ] ] ;
- }
+ }
         }
         for local d in $(self.other-dg)
         {
             result += [ $(d).all-target-directories $(target-type) ] ;
         }
         self.target-directories = $(result) ;
- }
+ }
 }
-

Modified: branches/fix-links/tools/build/v2/doc/src/architecture.xml
==============================================================================
--- branches/fix-links/tools/build/v2/doc/src/architecture.xml (original)
+++ branches/fix-links/tools/build/v2/doc/src/architecture.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -334,7 +334,7 @@
     "bin" directory, it should be supported as well. I.e. in the
     scanario above, Jamfile in "dir" might create a main target,
     which generates "a.h". The file will be generated to "dir/bin"
- directory, but we still have to recornize the dependency.
+ directory, but we still have to recognize the dependency.
       </simpara>
     </listitem>
   </orderedlist>

Modified: branches/fix-links/tools/build/v2/doc/src/extending.xml
==============================================================================
--- branches/fix-links/tools/build/v2/doc/src/extending.xml (original)
+++ branches/fix-links/tools/build/v2/doc/src/extending.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -37,30 +37,28 @@
     </listitem>
   </orderedlist>
 
- <para>It's quite easy to achieve. You write special verbatim files
- that are just C++, except that the very first line of the file
- contains the name of a variable that should be generated. A simple tool
- is created that takes a verbatim file and creates a cpp file with
- a single <code>char*</code> variable whose name is taken from the first line
- of the verbatim file and whose value is the file's properly quoted content.</para>
+ <para>It's quite easy to achieve. You write special verbatim files that are
+ just C++, except that the very first line of the file contains the name of a
+ variable that should be generated. A simple tool is created that takes a
+ verbatim file and creates a cpp file with a single <code>char*</code> variable
+ whose name is taken from the first line of the verbatim file and whose value
+ is the file's properly quoted content.</para>
 
   <para>Let's see what Boost.Build can do.</para>
 
- <para>First off, Boost.Build has no idea about "verbatim files". So,
- you must register a new target type. The following code does
- it:</para>
+ <para>First off, Boost.Build has no idea about "verbatim files". So, you must
+ register a new target type. The following code does it:</para>
 
 <programlisting>
 import type ;
-type.register VERBATIM : vrb ;
+type.register VERBATIM : verbatim ;
 </programlisting>
 
- <para>The first parameter to
- <functionname>type.register</functionname> gives the name of the
- declared type. By convention, it's uppercase. The second parameter
- is the suffix for files of this type. So, if Boost.Build sees
- <filename>code.vrb</filename> in a list of sources, it knows that it's of type
- <code>VERBATIM</code>.</para>
+ <para>The first parameter to <functionname>type.register</functionname> gives
+ the name of the declared type. By convention, it's uppercase. The second
+ parameter is the suffix for files of this type. So, if Boost.Build sees
+ <filename>code.verbatim</filename> in a list of sources, it knows that it's of
+ type <code>VERBATIM</code>.</para>
 
   <para>Next, you tell Boost.Build that the verbatim files can be
   transformed into C++ files in one build step. A
@@ -96,26 +94,29 @@
         -->
 </para>
 
- <para>Now, we're ready to tie it all together. Put all the code
- above in file <filename>verbatim.jam</filename>, add <code>import verbatim ;</code>
- to <filename>project-root.jam</filename>, and it's possible to write
- the following in Jamfile:</para>
+ <para>
+ Now, we're ready to tie it all together. Put all the code above in file
+ <filename>verbatim.jam</filename>, add <code>import verbatim ;</code> to
+ <filename>Jamroot.jam</filename>, and it's possible to write the following
+ in your Jamfile:
+ </para>
 
 <programlisting>
 exe codegen : codegen.cpp class_template.verbatim usage.verbatim ;
 </programlisting>
 
   <para>
-The verbatim files will be automatically converted into C++
-and linked it.
+ The listed verbatim files will be automatically converted into C++ source
+ files, compiled and then linked to the codegen executable.
   </para>
 
- <para>In the subsequent sections, we will extend this example, and review
- all the mechanisms in detail. The complete code is available in <filename>example/customization</filename>
- directory.
- </para>
-
+ <para>
+ In subsequent sections, we will extend this example, and review all the
+ mechanisms in detail. The complete code is available in the
+ <filename>example/customization</filename> directory.
+ </para>
   </section>
+
   <section id="bbv2.extending.targets">
     <title>Target types</title>
       <para>The first thing we did in the <link
@@ -281,13 +282,13 @@
 generators.register-standard verbatim.inline-file : VERBATIM : CPP ;
 generators.register-composing mex.mex : CPP LIB : MEX ;
 </programlisting>
- Standard generators take a <emphasis>single</emphasis> source of type
- <code>VERBATIM</code> and produces a result. The second generator
- takes any number of sources, which can have either the
- <code>CPP</code> or the <code>LIB</code> type. Composing generators
+ The first (standard) generator takes a <emphasis>single</emphasis>
+ source of type <code>VERBATIM</code> and produces a result. The second
+ (composing) generator takes any number of sources, which can have either
+ the <code>CPP</code> or the <code>LIB</code> type. Composing generators
         are typically used for generating top-level target type. For example,
- the first generator invoked when building an <code>exe</code> target
- is a composing generator corresponding to the proper linker.
+ the first generator invoked when building an <code>exe</code> target is
+ a composing generator corresponding to the proper linker.
       </para>
 
       <para>You should also know about two specific functions for registering
@@ -723,51 +724,46 @@
       in Jamfiles, which will convert source to the OBFUSCATED_CPP type.
     </para>
     
- <para>The second way is to write a wrapper rule that calls
- any of the existing rules. For example, suppose you have only one library per
- directory and want all cpp files in the directory to be compiled into that library. You
- can achieve this effect with:
+ <para>
+ The second way is to write a wrapper rule that calls any of the existing
+ rules. For example, suppose you have only one library per directory and
+ want all cpp files in the directory to be compiled into that library. You
+ can achieve this effect using:
 <programlisting>
 lib codegen : [ glob *.cpp ] ;
 </programlisting>
- but if you want to make it even simpler, you could add the following
- definition to the <filename>project-root.jam</filename> file:
+ If you want to make it even simpler, you could add the following
+ definition to the <filename>Jamroot.jam</filename> file:
 <programlisting>
 rule glib ( name : extra-sources * : requirements * )
 {
     lib $(name) : [ glob *.cpp ] $(extra-sources) : $(requirements) ;
 }
 </programlisting>
-which would allow you to reduce the Jamfile to
+ allowing you to reduce the Jamfile to just
 <programlisting>
 glib codegen ;
 </programlisting>
     </para>
 
     <para>
- Note that because you can associate a custom generator with a target
- type, the logic of building can be rather compiler.
- <!-- "compiler" is not an adjective. The logic can't be "rather
- compiler." What you might mean here is completely
- mysterious to me -->
- For example, the
+ Note that because you can associate a custom generator with a target type,
+ the logic of building can be rather complicated. For example, the
       <code>boostbook</code> module declares a target type
- <code>BOOSTBOOK_MAIN</code> and a custom generator for that
- type. You can use that as example if your main target rule is
- non-trivial.
+ <code>BOOSTBOOK_MAIN</code> and a custom generator for that type. You can
+ use that as example if your main target rule is non-trivial.
     </para>
-
   </section>
 
   <section id="bbv2.extending.toolset_modules">
 
     <title>Toolset modules</title>
 
- <para>If your extensions will be used only on one project, they can be
- placed in a separate <filename>.jam</filename> file that will be
- imported by your <filename>project-root.jam</filename>. If the
- extensions will be used on many projects, users will thank you for
- a finishing touch.
+ <para>
+ If your extensions will be used only on one project, they can be placed in
+ a separate <filename>.jam</filename> file and imported by your
+ <filename>Jamroot.jam</filename>. If the extensions will be used on many
+ projects, users will thank you for a finishing touch.
     </para>
 
     <para>The <code>using</code> rule provides a standard mechanism

Modified: branches/fix-links/tools/build/v2/doc/src/faq.xml
==============================================================================
--- branches/fix-links/tools/build/v2/doc/src/faq.xml (original)
+++ branches/fix-links/tools/build/v2/doc/src/faq.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -216,12 +216,12 @@
   </section>
 
   <section>
- <title>How to get the project-root location?
+ <title>How to get the project root (a.k.a. Jamroot.jam) location?
     </title>
 
- <para>You might want to use the location of the project-root in your
- Jamfiles. To do it, you'd need to declare path constant in your
- project-root.jam:
+ <para>
+ You might want to use your project's root location in your Jamfiles. To
+ access it just declare a path constant in your Jamroot.jam file using:
 <programlisting>
 path-constant TOP : . ;
 </programlisting>
@@ -264,7 +264,7 @@
     <para>(This entry is specific to Unix system.)Before answering the
       questions, let's recall a few points about shared libraries. Shared
       libraries can be used by several applications, or other libraries,
- without phisycally including the library in the application. This can
+ without physically including the library in the application. This can
       greatly decrease the total size of applications. It's also possible to
       upgrade a shared library when the application is already
       installed. Finally, shared linking can be faster.

Modified: branches/fix-links/tools/build/v2/doc/src/reference.xml
==============================================================================
--- branches/fix-links/tools/build/v2/doc/src/reference.xml (original)
+++ branches/fix-links/tools/build/v2/doc/src/reference.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1436,10 +1436,10 @@
       <orderedlist>
         <listitem>
           <simpara>
- For each alternative <emphasis>condition</emphasis> is defined
- as the set of base properies in requirements. [Note: it might be
- better to specify the condition explicitly, as in
- conditional requirements].
+ For each alternative <emphasis>condition</emphasis> is defined as
+ the set of base properties in requirements. [Note: it might be
+ better to specify the condition explicitly, as in conditional
+ requirements].
           </simpara>
         </listitem>
         

Modified: branches/fix-links/tools/build/v2/doc/src/tutorial.xml
==============================================================================
--- branches/fix-links/tools/build/v2/doc/src/tutorial.xml (original)
+++ branches/fix-links/tools/build/v2/doc/src/tutorial.xml 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -605,13 +605,12 @@
 lib demangler : demangler_msvc.cpp : &lt;toolset&gt;msvc ; # alternative 3
 </programlisting>
       When building <filename>demangler</filename>, Boost.Build will compare
- requirements for each alternative with build properties to find the best match.
- For example, when building with with <code>&lt;toolset&gt;gcc</code>
- alternative 2, will be selected, and when building with
- <code>&lt;toolset&gt;msvc</code> alternative 3 will be selected. In all other
- cases, the most generic alternative 1 will be built.
+ requirements for each alternative with build properties to find the best
+ match. For example, when building with <code>&lt;toolset&gt;gcc</code>
+ alternative 2, will be selected, and when building with
+ <code>&lt;toolset&gt;msvc</code> alternative 3 will be selected. In all
+ other cases, the most generic alternative 1 will be built.
     </para>
-
   </section>
 
   <section id="bbv2.tutorial.prebuilt">

Modified: branches/fix-links/tools/build/v2/hacking.txt
==============================================================================
--- branches/fix-links/tools/build/v2/hacking.txt (original)
+++ branches/fix-links/tools/build/v2/hacking.txt 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,20 +1,20 @@
-Copyright 2003, 2006 Vladimir Prus
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+Copyright 2003, 2006 Vladimir Prus
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 
              ----------------------------------
              Boost.Build contributor guidelines
              ----------------------------------
 
-Boost.Build is an open-source project. This means that we welcome and
-appreciate all contributions --- be it ideas, bug reports, or patches.
-This document contains guidelines which helps to assure that development
-goes on smoothly, and changes are made quickly.
-
-The guidelines are not mandatory, and you can decide for yourself which one
-to follow. But note, that 10 mins that you spare writing a comment, for
-example, might lead to significally longer delay for everyone.
+Boost.Build is an open-source project. This means that we welcome and appreciate
+all contributions --- be it ideas, bug reports, or patches. This document
+contains guidelines which helps to assure that development goes on smoothly, and
+changes are made quickly.
+
+The guidelines are not mandatory, and you can decide for yourself which one to
+follow. But note, that 10 mins that you spare writing a comment, for example,
+might lead to significally longer delay for everyone.
 
 Before contributing, make sure you are subscribed to our mailing list
 
@@ -25,7 +25,7 @@
    - The issue tracker
      http://zigzag.cs.msu.su/boost.build
 
- - commits mailing list:
+ - commits mailing list:
      boost-build_at_[hidden]
      http://sourceforge.net/mailarchive/forum.php?forum_id=9097
 
@@ -37,8 +37,8 @@
 When reporting a bug, please try to provide the following information.
 
    - What you did. A minimal reproducible testcase is very much appreciated.
- Shell script with some annotations is much better than verbose description of
- the problem. A regression test is the best (see test/test_system.html).
+ Shell script with some annotations is much better than verbose description
+ of the problem. A regression test is the best (see test/test_system.html).
    - What you got.
    - What you expected.
    - What version of Boost.Build and Boost.Jam did you use. If possible,
@@ -53,48 +53,48 @@
   - provide a log message together with the patch
   - put the patch and the log message as attachment to your email.
 
-The purpose of log message serves to communicate what was changed, and
-*why*. Without a good log message, you might spend a lot of time later,
-wondering where a strange piece of code came from and why it was necessary.
+The purpose of log message serves to communicate what was changed, and *why*.
+Without a good log message, you might spend a lot of time later, wondering where
+a strange piece of code came from and why it was necessary.
 
 The good log message mentions each changed file and each rule/method, saying
 what happend to it, and why. Consider, the following log message
 
     Better direct request handling.
-
+
      * new/build-request.jam
        (directly-requested-properties-adjuster): Redo.
-
+
      * new/targets.jam
        (main-target.generate-really): Adjust properties here.
-
+
      * new/virtual-target.jam
        (register-actual-name): New rule.
        (virtual-target.actualize-no-scanner): Call the above, to detected bugs,
        where two virtual target correspond to one Jam target name.
-
-The log messages for the last two files are good. They tell what was
-changed. The change to the first file is clearly undercommented.
 
-It's OK to use terse log messages for uninteresting changes, like
-ones induces by interface changes elsewhere.
+The log messages for the last two files are good. They tell what was changed.
+The change to the first file is clearly undercommented.
+
+It's OK to use terse log messages for uninteresting changes, like ones induced
+by interface changes elsewhere.
 
 
 POLICIES.
 
 1. Testing.
 
-All serious changes must be tested. New rules must be tested by the module
-where they are declared. Test system (test/test_system.html) should be used
-to verify user-observable behaviour.
+All serious changes must be tested. New rules must be tested by the module where
+they are declared. Test system (test/test_system.html) should be used to verify
+user-observable behaviour.
 
 2. Documentation.
 
-It turns out that it's hard to have too much comments, but it's easy to have
-too little. Please prepend each rule with a comment saying what the rule does
-and what arguments mean. Stop for a minute and consider if the comment makes
-sense for anybody else, and completely describes what the rules does. Generic
-phrases like "adjusts properties" are really not enough.
+It turns out that it's hard to have too much comments, but it's easy to have too
+little. Please prepend each rule with a comment saying what the rule does and
+what arguments mean. Stop for a minute and consider if the comment makes sense
+for anybody else, and completely describes what the rules does. Generic phrases
+like "adjusts properties" are really not enough.
 
 When applicable, make changes to the user documentation as well.
 
@@ -106,8 +106,8 @@
 
         rule call-me-ishmael ( ) ...
 
- 2. Names with dots in them are "intended globals". Ordinary globals use
- a dot prefix:
+ 2. Names with dots in them are "intended globals". Ordinary globals use a
+ dot prefix:
 
         .foobar
         $(.foobar)
@@ -142,12 +142,12 @@
     Please pass HTML files though HTML Tidy (http://tidy.sf.net) before
     comitting. This has to important purposes:
     - detecting bad HTML
- - converting files to uniform indentation style, which inverses effect
- of different editors and makes differences between revisions much
- smaller and easy for review.
+ - converting files to uniform indentation style, which inverses effect of
+ different editors and makes differences between revisions much smaller and
+ easy for review.
 
- Alas, the way Tidy indents HTML differs between version. Please use
- the version awailable at
+ Alas, the way Tidy indents HTML differs between version. Please use the
+ version available at
 
        http://tidy.sourceforge.net/src/old/tidy_src_020411.tgz
 

Modified: branches/fix-links/tools/build/v2/kernel/bootstrap.jam
==============================================================================
--- branches/fix-links/tools/build/v2/kernel/bootstrap.jam (original)
+++ branches/fix-links/tools/build/v2/kernel/bootstrap.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -118,7 +118,7 @@
 import option ;
 local dont-build = [ option.process ] ;
 
-# Should we skip building, i.e. loding the build system, according
+# Should we skip building, i.e. loading the build system, according
 # to the options processed?
 #
 if ! $(dont-build)
@@ -131,4 +131,3 @@
     # Use last element in case of multiple command-line options
     import $(build-system[-1]) ;
 }
-

Modified: branches/fix-links/tools/build/v2/kernel/errors.jam
==============================================================================
--- branches/fix-links/tools/build/v2/kernel/errors.jam (original)
+++ branches/fix-links/tools/build/v2/kernel/errors.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,50 +1,48 @@
-# Copyright 2003 Dave Abrahams
-# Copyright 2004 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-# Print a stack backtrace leading to this rule's caller. Each
-# argument represents a line of output to be printed after the first
-# line of the backtrace.
+# Copyright 2003 Dave Abrahams
+# Copyright 2004 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+# Print a stack backtrace leading to this rule's caller. Each argument
+# represents a line of output to be printed after the first line of the
+# backtrace.
 rule backtrace ( skip-frames prefix messages * : * )
 {
     local frame-skips = 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 ;
     local drop-elements = $(frame-skips[$(skip-frames)]) ;
     if ! ( $(skip-frames) in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 )
     {
- ECHO warning: backtrace doesn't support skipping
- $(skip-frames) frames; using 1 instead. ;
+ ECHO warning: backtrace doesn't support skipping $(skip-frames) frames;
+ using 1 instead. ;
         drop-elements = 5 ;
     }
-
- local args = $(.args) ;
+
+ local args = $(.args) ;
     if $(.user-modules-only)
     {
         local bt = [ nearest-user-location ] ;
         ECHO "$(prefix) at $(bt) " ;
         for local n in $(args)
- {
+ {
             if $($(n))-is-not-empty
             {
                 ECHO $(prefix) $($(n)) ;
             }
- }
+ }
     }
     else
     {
- # get the whole backtrace, then drop the initial quadruples
+ # Get the whole backtrace, then drop the initial quadruples
         # corresponding to the frames that must be skipped.
         local bt = [ BACKTRACE ] ;
- bt = $(bt[$(drop-elements)-]) ;
-
+ bt = $(bt[$(drop-elements)-]) ;
+
         while $(bt)
         {
             local m = [ MATCH ^(.+)\\.$ : $(bt[3]) ] ;
             ECHO $(bt[1]):$(bt[2]): "in" $(bt[4]) "from module" $(m) ;
-
-
- # the first time through, print each argument on a separate
- # line
+
+ # The first time through, print each argument on a separate line.
             for local n in $(args)
             {
                 if $($(n))-is-not-empty
@@ -52,39 +50,40 @@
                     ECHO $(prefix) $($(n)) ;
                 }
             }
- args = ; # kill args so that this never happens again
-
- # Move on to the next quadruple
+ args = ; # Kill args so that this never happens again.
+
+ # Move on to the next quadruple.
             bt = $(bt[5-]) ;
         }
- }
+ }
 }
 
 .args ?= messages 2 3 4 5 6 7 8 9 ;
 .disabled ?= ;
-.last-error-$(.args) ?= ;
+.last-error-$(.args) ?= ;
+
 
 # try-catch --
 #
-# This is not really an exception-handling mechanism, but it does
-# allow us to perform some error-checking on our
-# error-checking. Errors are suppressed after a try, and the first one
-# is recorded. Use catch to check that the error message matched
-# expectations.
+# This is not really an exception-handling mechanism, but it does allow us to
+# perform some error-checking on our error-checking. Errors are suppressed after
+# a try, and the first one is recorded. Use catch to check that the error
+# message matched expectations.
 
-# begin looking for error messages
+# Begin looking for error messages.
 rule try ( )
 {
     .disabled += true ;
     .last-error-$(.args) = ;
 }
 
-# stop looking for error messages; generate an error if an argument of
-# messages is not found in the corresponding argument in the error call.
+
+# Stop looking for error messages; generate an error if an argument of messages
+# is not found in the corresponding argument in the error call.
 rule catch ( messages * : * )
 {
- .disabled = $(.disabled[2-]) ; # pop the stack
-
+ .disabled = $(.disabled[2-]) ; # Pop the stack.
+
     import sequence ;
 
     if ! $(.last-error-$(.args))-is-nonempty
@@ -109,6 +108,7 @@
     }
 }
 
+
 rule error-skip-frames ( skip-frames messages * : * )
 {
     if ! $(.disabled)
@@ -122,12 +122,12 @@
         {
             # Add an extra empty string so that we always have
             # something in the event of an error
- .last-error-$(n) = $($(n)) "" ;
+ .last-error-$(n) = $($(n)) "" ;
         }
     }
 }
 
-if --no-error-backtrace in [ modules.peek : ARGV ]
+if --no-error-backtrace in [ modules.peek : ARGV ]
 {
     .no-error-backtrace = true ;
 }
@@ -144,24 +144,25 @@
             if $($(n))-is-not-empty
             {
                 if ! $(first-printed)
- {
+ {
                     ECHO error: $($(n)) ;
                     first-printed = true ;
                 }
                 else
                 {
- ECHO $($(n)) ;
- }
+ ECHO $($(n)) ;
+ }
             }
- }
+ }
         EXIT ;
     }
     else
- {
+ {
         error-skip-frames 3 $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
- }
+ }
 }
 
+
 # Same as 'error', but the generated backtrace will include only user files.
 rule user-error ( messages * : * )
 {
@@ -176,10 +177,11 @@
     backtrace 2 warning: $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
 }
 
-# convert an arbitrary argument list into a list with ":" separators
-# and quoted elements representing the same information. This is
-# mostly useful for formatting descriptions of the arguments with
-# which a rule was called when reporting an error.
+
+# Convert an arbitrary argument list into a list with ":" separators and quoted
+# elements representing the same information. This is mostly useful for
+# formatting descriptions of arguments with which a rule was called when
+# reporting an error.
 rule lol->list ( * )
 {
     local result ;
@@ -188,7 +190,7 @@
     {
         local n = $(remaining[1]) ;
         remaining = $(remaining[2-]) ;
-
+
         if $(n) != 1
         {
             result += ":" ;
@@ -198,49 +200,50 @@
     return $(result) ;
 }
 
-# Return the file:line for the nearest entry in backtrace which correspond
-# to a user module.
+
+# Return the file:line for the nearest entry in backtrace which correspond to a
+# user module.
 rule nearest-user-location ( )
 {
     local bt = [ BACKTRACE ] ;
-
+
     local result ;
     while $(bt) && ! $(result)
     {
         local m = [ MATCH ^(.+)\\.$ : $(bt[3]) ] ;
         local user-modules = ([Jj]amroot(.jam|.v2|)|([Jj]amfile(.jam|.v2|)|user-config.jam|site-config.jam|project-root.jam) ;
-
- if [ MATCH $(user-modules) : $(bt[1]:D=) ]
- {
+
+ if [ MATCH $(user-modules) : $(bt[1]:D=) ]
+ {
             result = $(bt[1]):$(bt[2]) ;
- }
+ }
         bt = $(bt[5-]) ;
     }
     return $(result) ;
 }
 
-# If optimized rule is available in jam, use it.
-if NEAREST_USER_LOCATION in [ RULENAMES ]
+
+# If optimized rule is available in Jam, use it.
+if NEAREST_USER_LOCATION in [ RULENAMES ]
 {
     rule nearest-user-location ( )
     {
         local r = [ NEAREST_USER_LOCATION ] ;
         return $(r[1]):$(r[2]) ;
- }
+ }
 }
 
 
-
 rule __test__ ( )
 {
- # show that we can correctly catch an expected error
+ # Show that we can correctly catch an expected error.
     try ;
     {
         error an error occurred : somewhere ;
     }
     catch an error occurred : somewhere ;
-
- # show that unexpected errors generate real errors
+
+ # Show that unexpected errors generate real errors.
     try ;
     {
         try ;
@@ -250,9 +253,8 @@
         catch an error occurred : nowhere ;
     }
     catch expected \"nowhere\" in argument 2 ;
-
- # show that not catching an error where one was expected is an
- # error
+
+ # Show that not catching an error where one was expected is an error.
     try ;
     {
         try ;

Modified: branches/fix-links/tools/build/v2/kernel/modules.jam
==============================================================================
--- branches/fix-links/tools/build/v2/kernel/modules.jam (original)
+++ branches/fix-links/tools/build/v2/kernel/modules.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,22 +1,24 @@
-# Copyright 2003 Dave Abrahams
-# Copyright 2003, 2005 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003 Dave Abrahams
+# Copyright 2003, 2005 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
-# Essentially an include guard; ensures that no module is loaded multiple times
+# Essentially an include guard; ensures that no module is loaded multiple times.
 .loaded ?= ;
 
-# A list of modules currently being loaded for error reporting of circular dependencies
+# A list of modules currently being loaded for error reporting of circular
+# dependencies.
 .loading ?= ;
 
-# A list of modules needing to be tested via __test__ rule
+# A list of modules needing to be tested via __test__ rule.
 .untested ?= ;
 
-# A list of modules which have been tested via __test__
+# A list of modules which have been tested via __test__.
 .tested ?= ;
 
-# meant to be invoked from import when no __test__ rule is defined in a given
-# module
+
+# Meant to be invoked from import when no __test__ rule is defined in the given
+# module.
 local rule no-test-defined
 {
     import modules ;
@@ -26,15 +28,17 @@
     }
 }
 
-# return the binding of the given module
+
+# Return the binding of the given module.
 rule binding ( module )
 {
     return $($(module).__binding__) ;
 }
 
-# Sets the module-local value of a variable. This is the most
-# reliable way to set a module-local variable in a different module;
-# it eliminates issues of name shadowing due to dynamic scoping.
+
+# Sets the module-local value of a variable. This is the most reliable way to
+# set a module-local variable in a different module; it eliminates issues of
+# name shadowing due to dynamic scoping.
 rule poke ( module-name ? : variables + : value * )
 {
     module $(<)
@@ -43,10 +47,10 @@
     }
 }
 
-# Returns the module-local value of a variable. This is the most
-# reliable way to examine a module-local variable in a different
-# module; it eliminates issues of name shadowing due to dynamic
-# scoping.
+
+# Returns the module-local value of a variable. This is the most reliable way to
+# examine a module-local variable in a different module; it eliminates issues of
+# name shadowing due to dynamic scoping.
 rule peek ( module-name ? : variables + )
 {
     module $(<)
@@ -55,10 +59,11 @@
     }
 }
 
-# Call the given rule locally in the given module. Use this for rules
-# which accept rule names as arguments, so that the passed rule may be
-# invoked in the context of the rule's caller (for example, if the
-# rule accesses module globals or is a local rule).
+
+# Call the given rule locally in the given module. Use this for rules accepting
+# rule names as arguments, so that the passed rule may be invoked in the context
+# of the rule's caller (for example, if the rule accesses module globals or is a
+# local rule).
 rule call-in ( module-name ? : rule-name args * : * )
 {
     module $(module-name)
@@ -67,65 +72,66 @@
     }
 }
 
-# Given a possibly qualified rule name and arguments, remove any
-# initial module qualification from the rule and invoke it in that
-# module. If there is no module qualification, the rule is invoked in
-# the global module.
+
+# Given a possibly qualified rule name and arguments, remove any initial module
+# qualification from the rule and invoke it in that module. If there is no
+# module qualification, the rule is invoked in the global module.
 rule call-locally ( qualified-rule-name args * : * )
 {
     local module-rule = [ MATCH (.*)\\.(.*) : $(qualified-rule-name) ] ;
     local rule-name = $(module-rule[2]) ;
     rule-name ?= $(qualified-rule-name) ;
- return [
- call-in $(module-rule[1])
- : $(rule-name) $(args) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9)
- ] ;
+ return [ call-in $(module-rule[1]) : $(rule-name) $(args)
+ : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ] ;
 }
 
-# load the indicated module if it is not already loaded.
+
+# Load the indicated module if it is not already loaded.
 rule load (
- module-name # name of module to load. Rules will be defined in this module
- : filename ? # (partial) path to file; Defaults to $(module-name).jam
- : search * # Directories in which to search for filename. Defaults to $(BOOST_BUILD_PATH)
+ module-name # Name of module to load. Rules will be defined in this
+ # module.
+ : filename ? # (partial) path to file; Defaults to $(module-name).jam.
+ : search * # Directories in which to search for filename. Defaults to
+ # $(BOOST_BUILD_PATH).
 )
 {
     # Avoid loading modules twice
     if ! ( $(module-name) in $(.loaded) )
     {
         filename ?= $(module-name).jam ;
-
- # Mark the module loaded so we don't try to load it recursively
+
+ # Mark the module loaded so we don't try to load it recursively.
         .loaded += $(module-name) ;
-
- # suppress tests if any module loads are already in progress.
+
+ # Suppress tests if any module loads are already in progress.
         local suppress-test = $(.loading[1]) ;
-
- # Push this module on the loading stack
+
+ # Push this module on the loading stack.
         .loading += $(module-name) ;
-
- # Remember that it's untested
- .untested += $(module-name) ;
-
- # Insert the new module's __name__ and __file__ globals
+
+ # Remember that it's untested.
+ .untested += $(module-name) ;
+
+ # Insert the new module's __name__ and __file__ globals.
         poke $(module-name) : __name__ : $(module-name) ;
         poke $(module-name) : __file__ : $(filename) ;
-
+
         module $(module-name)
         {
- # Prepare a default behavior, in case no __test__ is defined.
+ # Prepare default behavior, in case no __test__ is defined.
             IMPORT modules : no-test-defined : $(__name__) : __test__ ;
 
- # Add some grist so that the module will have a unique target name
+ # Add some grist so that the module will have a unique target name.
             local module-target = $(__file__:G=module@) ;
-
+
             local search = $(3) ;
             search ?= [ modules.peek : BOOST_BUILD_PATH ] ;
             SEARCH on $(module-target) = $(search) ;
             BINDRULE on $(module-target) = modules.record-binding ;
-
+
             include $(module-target) ;
-
- # Allow the module to see its own names with full qualification
+
+ # Allow the module to see its own names with full qualification.
             local rules = [ RULENAMES $(__name__) ] ;
             IMPORT $(__name__) : $(rules) : $(__name__) : $(__name__).$(rules) ;
         }
@@ -133,40 +139,41 @@
         if $(module-name) != modules && ! [ binding $(module-name) ]
         {
             import errors ;
- errors.error "couldn't find module" $(module-name) in $(search) ;
+ errors.error "Couldn't find module" $(module-name) in $(search) ;
         }
-
- # Pop the loading stack. Must happen before testing or we'll find a circular loading dependency
+
+ # Pop the loading stack. Must happen before testing or we'll run into a
+ # circular loading dependency.
         .loading = $(.loading[1--2]) ;
-
- # Run any pending tests if this is an outer load
+
+ # Run any pending tests if this is an outer load.
         if ! $(suppress-test)
         {
             local argv = [ peek : ARGV ] ;
             for local m in $(.untested)
             {
- if ( ! $(m) in $(.tested) ) # avoid recursive test invocations
- && ( ( --debug in $(argv) ) || ( --debug-module=$(m) in $(argv) ) )
+ if ( ! $(m) in $(.tested) ) # Avoid recursive test invocations.
+ && ( ( --debug in $(argv) ) || ( --debug-module=$(m) in $(argv) ) )
                 {
                     .tested += $(m) ;
                     if ! ( --quiet in $(argv) )
                     {
                         ECHO testing module $(m)... ;
                     }
-
- # Import m's rules into __test-$(m)__ for easy access
+
+ # Import m's rules into __test-$(m)__ for easy access.
                     IMPORT $(m) : [ RULENAMES $(m) ] : __test-$(m)__ : [ RULENAMES $(m) ] ;
-
- # execute the module's __test__ rule in its own module to
- # eliminate the inadvertent effects of testing
- # module dependencies (such as assert) on the module itself.
+
+ # Execute the module's __test__ rule in its own module to
+ # eliminate the inadvertent effects of testing module
+ # dependencies (such as assert) on the module itself.
                     IMPORT $(m) : __test__ : __test-$(m)__ : __test__ : LOCALIZE ;
-
+
                     module __test-$(m)__
                     {
- # set up the name of the module we're testing
- # so that no-test-defined can find it.
- __module__ = $(1) ;
+ # Set up the name of the module we're testing so that
+ # no-test-defined can find it.
+ __module__ = $(1) ;
                         __test__ ;
                     }
                 }
@@ -178,23 +185,24 @@
     {
         import errors ;
         errors.error loading \"$(module-name)\"
- : circular module loading dependency:
- : $(.loading)" ->" $(module-name) ;
+ : circular module loading dependency:
+ : $(.loading)" ->" $(module-name) ;
     }
 }
 
-# This helper is used by load (above) to record the binding (path) of
-# each loaded module.
+
+# This helper is used by load (above) to record the binding (path) of each
+# loaded module.
 rule record-binding ( module-target : binding )
 {
     $(.loading[-1]).__binding__ = $(binding) ;
 }
 
-# Transform each path in the list, with all backslashes converted to
-# forward slashes and all detectable redundancy removed. Something
-# like this is probably needed in path.jam, but I'm not sure of that,
-# I don't understand it, and I'm not ready to move all of path.jam
-# into the kernel.
+
+# Transform each path in the list, with all backslashes converted to forward
+# slashes and all detectable redundancy removed. Something like this is probably
+# needed in path.jam, but I'm not sure of that, I don't understand it, and I'm
+# not ready to move all of path.jam into the kernel.
 local rule normalize-raw-paths ( paths * )
 {
     local result ;
@@ -205,64 +213,62 @@
     return $(result) ;
 }
 
+
 .cwd = [ PWD ] ;
 
 
-# load the indicated module and import rule names into the current
-# module. Any members of rules-opt will be available without
-# qualification in the caller's module. Any members of rename-opt will
-# be taken as the names of the rules in the caller's module, in place
-# of the names they have in the imported module. If rules-opt = '*',
-# all rules from the indicated module are imported into the caller's
-# module. If rename-opt is supplied, it must have the same number of
+# Load the indicated module and import rule names into the current module. Any
+# members of rules-opt will be available without qualification in the caller's
+# module. Any members of rename-opt will be taken as the names of the rules in
+# the caller's module, in place of the names they have in the imported module.
+# If rules-opt = '*', all rules from the indicated module are imported into the
+# caller's module. If rename-opt is supplied, it must have the same number of
 # elements as rules-opt.
 rule import ( module-names + : rules-opt * : rename-opt * )
 {
- if $(rules-opt) = * || ! $(rules-opt)
+ if ( $(rules-opt) = * || ! $(rules-opt) ) && $(rename-opt)
     {
- if $(rename-opt)
- {
- errors.error "rule aliasing is only available for explicit imports." ;
- }
+ errors.error "Rule aliasing is only available for explicit imports." ;
     }
-
+
     if $(module-names[2]) && ( $(rules-opt) || $(rename-opt) )
     {
- errors.error when loading multiple modules, no specific rules or renaming is allowed ;
+ errors.error "When loading multiple modules, no specific rules or"
+ "renaming is allowed" ;
     }
-
- local caller = [ CALLER_MODULE ] ;
-
+
+ local caller = [ CALLER_MODULE ] ;
+
     # Import each specified module
     for local m in $(module-names)
     {
         if ! $(m) in $(.loaded)
- {
- # if the importing module isn't already in the BOOST_BUILD_PATH,
- # prepend it to the path. We don't want to invert the search
- # order of modules that are already there.
-
- local caller-location ;
+ {
+ # If the importing module isn't already in the BOOST_BUILD_PATH,
+ # prepend it to the path. We don't want to invert the search order
+ # of modules that are already there.
+
+ local caller-location ;
             if $(caller)
             {
                 caller-location = [ binding $(caller) ] ;
                 caller-location = $(caller-location:D) ;
                 caller-location = [ normalize-raw-paths $(caller-location:R=$(.cwd)) ] ;
             }
-
+
             local search = [ peek : BOOST_BUILD_PATH ] ;
             search = [ normalize-raw-paths $(search:R=$(.cwd)) ] ;
-
+
             if $(caller-location) && ! $(caller-location) in $(search)
             {
                 search = $(caller-location) $(search) ;
             }
-
+
             load $(m) : : $(search) ;
         }
-
+
         IMPORT_MODULE $(m) : $(caller) ;
-
+
         if $(rules-opt)
         {
             local source-names ;
@@ -282,50 +288,49 @@
     }
 }
 
-# Define exported copies in $(target-module) of all rules exported
-# from $(source-module). Also make them available in the global
-# module with qualification, so that it is just as though the rules
-# were defined originally in $(target-module).
-rule clone-rules (
- source-module
- target-module
- )
+# Define exported copies in $(target-module) of all rules exported from
+# $(source-module). Also make them available in the global module with
+# qualification, so that it is just as though the rules were defined originally
+# in $(target-module).
+rule clone-rules ( source-module target-module )
 {
     local rules = [ RULENAMES $(source-module) ] ;
-
+
     IMPORT $(source-module) : $(rules) : $(target-module) : $(rules) : LOCALIZE ;
     EXPORT $(target-module) : $(rules) ;
     IMPORT $(target-module) : $(rules) : : $(target-module).$(rules) ;
 }
 
-# These rules need to be available in all modules to implement
-# module loading itself and other fundamental operations.
+
+# These rules need to be available in all modules to implement module loading
+# itself and other fundamental operations.
 local globalize = peek poke record-binding ;
 IMPORT modules : $(globalize) : : modules.$(globalize) ;
 
+
 local rule __test__ ( )
 {
     import assert ;
     import modules : normalize-raw-paths ;
-
+
     module modules.__test__
     {
         foo = bar ;
     }
-
+
     assert.result bar : peek modules.__test__ : foo ;
+
     poke modules.__test__ : foo : bar baz ;
     assert.result bar baz : peek modules.__test__ : foo ;
+
     assert.result c:/foo/bar : normalize-raw-paths c:/x/../foo/./xx/yy/../../bar ;
- assert.result . : normalize-raw-paths . ;
- assert.result .. : normalize-raw-paths .. ;
- assert.result ../.. : normalize-raw-paths ../.. ;
- assert.result .. : normalize-raw-paths ./.. ;
- assert.result / / : normalize-raw-paths / \\ ;
- assert.result a : normalize-raw-paths a ;
- assert.result a : normalize-raw-paths a/ ;
- assert.result /a : normalize-raw-paths /a/ ;
- assert.result / : normalize-raw-paths /a/.. ;
+ assert.result . : normalize-raw-paths . ;
+ assert.result .. : normalize-raw-paths .. ;
+ assert.result ../.. : normalize-raw-paths ../.. ;
+ assert.result .. : normalize-raw-paths ./.. ;
+ assert.result / / : normalize-raw-paths / \\ ;
+ assert.result a : normalize-raw-paths a ;
+ assert.result a : normalize-raw-paths a/ ;
+ assert.result /a : normalize-raw-paths /a/ ;
+ assert.result / : normalize-raw-paths /a/.. ;
 }
-
-

Modified: branches/fix-links/tools/build/v2/notes/build_dir_option.txt
==============================================================================
--- branches/fix-links/tools/build/v2/notes/build_dir_option.txt (original)
+++ branches/fix-links/tools/build/v2/notes/build_dir_option.txt 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
-Copyright 2005 Vladimir Prus
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+Copyright 2005 Vladimir Prus
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 
 Summary
@@ -41,15 +41,15 @@
 
    project foo : build-dir /tmp/build/foo/bin.v2 ;
 
-We can't drop "bin.v2" because it's quite possible that the name of build
-dir have specific meaning. For example, it can be used to
-separate Boost.Build V2 and V1 build results.
+We can't drop "bin.v2" because it's quite possible that the name of build dir
+have specific meaning. For example, it can be used to separate Boost.Build V1
+and V2 build results.
 
-The --build-dir option has no effect if Jamroot does not define any project
-id. Dowing otherwise can lead to nasty problems if we're building two distinct
+The --build-dir option has no effect if Jamroot does not define any project id.
+Doing otherwise can lead to nasty problems if we're building two distinct
 projects (that is with two different Jamroot). They'll get the same build
-directory. Most likely, user will see
-the "duplicate target" error, which is generally confusing.
+directory. Most likely, user will see the "duplicate target" error, which is
+generally confusing.
 
 It is expected that any non-trivial project will have top-level "project"
 invocation with non empty id, so the above limitation is not so drastic.
@@ -57,24 +57,21 @@
 is specified.
 
 Here's the exact behavior of the --build-dir option. If we're loading a
-Jamfile (either root or non-root), that declare some project id and some
+Jamfile (either root or non-root), that declare some project id and some
 build-dir attribute, the following table gives the value of build-dir
 that will actually be used.
 
-
-Root? Id Build-dir attribute Resulting build dir
-yes none * --build-dir is ignored, with warning
-yes 'foo' none /tmp/build/foo
-yes 'foo' 'bin.v2' /tmp/build/foo/bin.v2
-yes 'foo' '/tmp/bar' Error [1]
-no * none --build-dir has no effect, inherited build dir is used
-no * non-empty Error [2]
-
+-------------------------------------------------------------------------------
+Root? Id Build-dir attribute Resulting build dir
+-------------------------------------------------------------------------------
+yes none * --build-dir is ignored, with warning
+yes 'foo' none /tmp/build/foo
+yes 'foo' 'bin.v2' /tmp/build/foo/bin.v2
+yes 'foo' '/tmp/bar' Error [1]
+no * none --build-dir has no effect, inherited
+ build dir is used
+no * non-empty Error [2]
+-------------------------------------------------------------------------------
 [1] -- not clear what to do
-[2] -- can be made to work, but non-empty build-dir
+[2] -- can be made to work, but non-empty build-dir
 attribute in non-root Jamfile does not make much sense even without --build-dir
-
-
-
-
-

Modified: branches/fix-links/tools/build/v2/options/help.jam
==============================================================================
--- branches/fix-links/tools/build/v2/options/help.jam (original)
+++ branches/fix-links/tools/build/v2/options/help.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -25,15 +25,16 @@
 
 # The help system options are parsed here and handed off to the doc
 # module to translate into documentation requests and actions. The
-# understood options are::
+# understood options are:
 #
-# --help-all
-# --help-enable-<option>
 # --help-disable-<option>
-# --help-output <type>
-# --help-output-file <file>
+# --help-doc-options
+# --help-enable-<option>
+# --help-internal
 # --help-options
 # --help-usage
+# --help-output <type>
+# --help-output-file <file>
 # --help [<module-or-class>]
 #
 rule process (

Modified: branches/fix-links/tools/build/v2/roll.sh
==============================================================================
--- branches/fix-links/tools/build/v2/roll.sh (original)
+++ branches/fix-links/tools/build/v2/roll.sh 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -23,10 +23,7 @@
 rm -rf example/versioned
 
 # Remove unnecessary top-level files
-find . -maxdepth 1 -type f | egrep -v "timestamp.txt|roll.sh|bootstrap.jam|build-system.jam|boost_build_v2.html|boost_build.png|index.html|hacking.txt|site-config.jam|user-config.jam" | xargs rm -f
-
-# Prepare some more files.
-echo -e "boost-build kernel ;\n" > boost-build.jam
+find . -maxdepth 1 -type f | egrep -v "timestamp.txt|roll.sh|bootstrap.jam|build-system.jam|boost_build.png|index.html|hacking.txt|site-config.jam|user-config.jam" | xargs rm -f
 
 # Build the documentation
 touch doc/project-root.jam

Modified: branches/fix-links/tools/build/v2/test/BoostBuild.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/BoostBuild.py (original)
+++ branches/fix-links/tools/build/v2/test/BoostBuild.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,29 +6,28 @@
 # http://www.boost.org/LICENSE_1_0.txt)
 
 import TestCmd
-from tree import build_tree, trees_difference
 import copy
 import fnmatch
 import glob
+import math
 import os
 import re
 import shutil
 import string
-import types
-import time
-import tempfile
+import StringIO
 import sys
+import tempfile
+import time
 import traceback
-import math
-from StringIO import StringIO
+import tree
+import types
 
-annotation_func = None
 
 annotations = []
 
+
 def print_annotation(name, value):
- """Writes some named bit of information about test
- run.
+ """Writes some named bits of information about test run.
     """
     print name + " {{{"
     print value
@@ -41,18 +40,23 @@
         print_annotation(ann[0], ann[1])
     annotations = []
 
+
 defer_annotations = 0
 
+
 def set_defer_annotations(n):
     global defer_annotations
     defer_annotations = n
 
+
 def annotation(name, value):
- """Records an annotation about test run."""
+ """Records an annotation about the test run.
+ """
     annotations.append((name, value))
     if not defer_annotations:
         flush_annotations()
 
+
 def get_toolset():
     toolset = None;
     for arg in sys.argv[1:]:
@@ -60,17 +64,22 @@
             toolset = arg
     return toolset or 'gcc'
 
-windows = 0
+
+# Detect the host OS.
+windows = False
 if os.environ.get('OS','').lower().startswith('windows') or \
        os.__dict__.has_key('uname') and \
        os.uname()[0].lower().startswith('cygwin'):
- windows = 1
+ windows = True
+
 
 suffixes = {}
 
+
 # Prepare the map of suffixes
 def prepare_suffix_map(toolset):
- global windows, suffixes
+ global windows
+ global suffixes
     suffixes = {'.exe': '', '.dll': '.so', '.lib': '.a', '.obj': '.o'}
     suffixes['.implib'] = '.no_implib_files_on_this_platform'
     if windows:
@@ -82,7 +91,8 @@
     if os.__dict__.has_key('uname') and os.uname()[0] == 'Darwin':
         suffixes['.dll'] = '.dylib'
 
-def re_remove(sequence,regex):
+
+def re_remove(sequence, regex):
     me = re.compile(regex)
     result = filter( lambda x: me.match(x), sequence )
     if 0 == len(result):
@@ -90,26 +100,29 @@
     for r in result:
         sequence.remove(r)
 
-def glob_remove(sequence,pattern):
+
+def glob_remove(sequence, pattern):
     result = fnmatch.filter(sequence,pattern)
     if 0 == len(result):
         raise ValueError()
     for r in result:
         sequence.remove(r)
 
-lib_prefix = 1
-dll_prefix = 1
+
+# Configuration stating whether Boost Build is expected to automatically prepend
+# prefixes to built library targets.
+lib_prefix = True
+dll_prefix = True
 if windows:
- #~ lib_prefix = 0
- dll_prefix = 0
-
-
+ dll_prefix = False
+
+
 #
 # FIXME: this is copy-pasted from TestSCons.py
 # Should be moved to TestCmd.py?
 #
 if os.name == 'posix':
- def _failed(self, status = 0):
+ def _failed(self, status=0):
         if self.status is None:
             return None
         if os.WIFSIGNALED(status):
@@ -121,7 +134,7 @@
         else:
             return -1
 elif os.name == 'nt':
- def _failed(self, status = 0):
+ def _failed(self, status=0):
         return not self.status is None and self.status != status
     def _status(self):
         return self.status
@@ -129,28 +142,28 @@
 class Tester(TestCmd.TestCmd):
     """Class for testing Boost.Build.
 
- Optional argument `executable` indicates the name of the
- executable to invoke. Set this to "jam" to test Boost.Build v1
- behavior.
+ Optional argument `executable` indicates the name of the executable to
+ invoke. Set this to "jam" to test Boost.Build v1 behavior.
 
- Optional argument `work_dir` indicates an absolute directory,
- where the test will run be run.
+ Optional argument `work_dir` indicates an absolute directory, where the test
+ will run be run.
     """
- def __init__(self, arguments="", executable = 'bjam', match =
- TestCmd.match_exact, boost_build_path = None,
- translate_suffixes = 1, pass_toolset = 1,
- workdir = '',
- **keywords):
+ def __init__(self, arguments="", executable="bjam",
+ match=TestCmd.match_exact, boost_build_path=None,
+ translate_suffixes=True, pass_toolset=True, use_test_config=True,
+ ignore_toolset_requirements=True, workdir="", **keywords):
 
         self.original_workdir = os.getcwd()
         if workdir != '' and not os.path.isabs(workdir):
- raise "Parameter workdir <"+workdir+"> must point to a absolute directory: "
+ raise "Parameter workdir <"+workdir+"> must point to an absolute directory: "
 
         self.last_build_time = 0
         self.translate_suffixes = translate_suffixes
+ self.use_test_config = use_test_config
 
         self.toolset = get_toolset()
         self.pass_toolset = pass_toolset
+ self.ignore_toolset_requirements = ignore_toolset_requirements
 
         prepare_suffix_map(pass_toolset and self.toolset or 'gcc')
 
@@ -183,21 +196,18 @@
                 elif os.uname()[0] == "OSF1":
                     jam_build_dir = "bin.osf"
                 else:
- raise "Don't know directory where jam is build for this system: " + os.name + "/" + os.uname()[0]
+ raise "Don't know directory where Jam is built for this system: " + os.name + "/" + os.uname()[0]
             else:
- raise "Don't know directory where jam is build for this system: " + os.name
-
- # Find there jam_src is located.
- # try for the debug version if it's lying around
+ raise "Don't know directory where Jam is built for this system: " + os.name
 
+ # Find where jam_src is located. Try for the debug version if it's
+ # lying around.
             dirs = [os.path.join('../../../jam/src', jam_build_dir + '.debug'),
                     os.path.join('../../../jam/src', jam_build_dir),
                     os.path.join('../../jam_src', jam_build_dir + '.debug'),
                     os.path.join('../../jam_src', jam_build_dir),
                     os.path.join('../jam_src', jam_build_dir + '.debug'),
- os.path.join('../jam_src', jam_build_dir),
- ]
-
+ os.path.join('../jam_src', jam_build_dir)]
             for d in dirs:
                 if os.path.exists(d):
                     jam_build_dir = d
@@ -215,7 +225,7 @@
             boost_build_path = self.original_workdir
 
         program_list = []
-
+
         if '--default-bjam' in sys.argv:
             program_list.append(executable)
             inpath_bjam = True
@@ -225,7 +235,6 @@
         program_list.append('-sBOOST_BUILD_PATH=' + boost_build_path)
         if verbosity:
             program_list += verbosity
- program_list += ["--ignore-toolset-requirements"]
         if arguments:
             program_list += arguments.split(" ")
 
@@ -233,8 +242,8 @@
             self
             , program=program_list
             , match=match
- , workdir = workdir
- , inpath = inpath_bjam
+ , workdir=workdir
+ , inpath=inpath_bjam
             , **keywords)
 
         os.chdir(self.workdir)
@@ -244,22 +253,22 @@
             TestCmd.TestCmd.cleanup(self)
             os.chdir(self.original_workdir)
         except AttributeError:
- # Whe this is called during by TestCmd.TestCmd.__del__ we can have both
- # 'TestCmd' and 'os' unavailable in our scope. Do nothing in this case.
+ # When this is called during by TestCmd.TestCmd.__del__ we can have
+ # both 'TestCmd' and 'os' unavailable in our scope. Do nothing in
+ # this case.
             pass
-
+
     #
- # Methods that change working directory's content
+ # Methods that change the working directory's content.
     #
     def set_tree(self, tree_location):
- # Seem like it's not possible to remove a directory which is
- # current.
+ # Seems like it's not possible to remove the current a directory.
         d = os.getcwd()
         os.chdir(os.path.dirname(self.workdir))
- shutil.rmtree(self.workdir, ignore_errors=0)
+ shutil.rmtree(self.workdir, ignore_errors=False)
 
         if not os.path.isabs(tree_location):
- tree_location = os.path.join(self.original_workdir, tree_location)
+ tree_location = os.path.join(self.original_workdir, tree_location)
         shutil.copytree(tree_location, self.workdir)
 
         os.chdir(d)
@@ -271,7 +280,6 @@
 
         os.path.walk(".", make_writable, None)
 
-
     def write(self, file, content):
         self.wait_for_time_change()
         nfile = self.native_file_name(file)
@@ -286,12 +294,12 @@
             os.makedirs(os.path.dirname(new))
         except:
             pass
-
+
         try:
             os.remove(new)
         except:
             pass
-
+
         os.rename(old, new)
         self.touch(new);
 
@@ -305,10 +313,10 @@
     def copy_preserving_timestamp(self, src, dst):
         src_name = self.native_file_name(src)
         dst_name = self.native_file_name(dst)
- stats = os.stat(src_name)
+ stats = os.stat(src_name)
         self.write(dst, self.read(src, 1))
         os.utime(dst_name, (stats.st_atime, stats.st_mtime))
-
+
     def touch(self, names):
         self.wait_for_time_change()
         for name in self.adjust_names(names):
@@ -319,7 +327,7 @@
         if not type(names) == types.ListType:
             names = [names]
 
- # Avoid attempts to remove current dir
+ # Avoid attempts to remove the current directory.
         os.chdir(self.original_workdir)
         for name in names:
             n = self.native_file_name(name)
@@ -329,32 +337,32 @@
                 n = self.glob_file(string.replace(name, "$toolset", self.toolset+"*"))
             if n:
                 if os.path.isdir(n):
- shutil.rmtree(n, ignore_errors=0)
+ shutil.rmtree(n, ignore_errors=False)
                 else:
                     os.unlink(n)
 
- # Create working dir root again, in case
- # we've removed it
+ # Create working dir root again, in case we've removed it.
         if not os.path.exists(self.workdir):
             os.mkdir(self.workdir)
         os.chdir(self.workdir)
 
     def expand_toolset(self, name):
- """Expands $toolset in the given file to tested toolset"""
+ """Expands $toolset in the given file to tested toolset.
+ """
         content = self.read(name)
         content = string.replace(content, "$toolset", self.toolset)
         self.write(name, content)
-
+
     def dump_stdio(self):
         annotation("STDOUT", self.stdout())
         annotation("STDERR", self.stderr())
-
+
     #
     # FIXME: Large portion copied from TestSCons.py, should be moved?
     #
- def run_build_system(
- self, extra_args='', subdir='', stdout = None, stderr = '',
- status = 0, match = None, pass_toolset = None, **kw):
+ def run_build_system(self, extra_args="", subdir="", stdout=None, stderr="",
+ status=0, match=None, pass_toolset=None, use_test_config=None,
+ ignore_toolset_requirements=None, **kw):
 
         if os.path.isabs(subdir):
             if stderr:
@@ -362,21 +370,32 @@
             status = 1
             return
 
- self.previous_tree = build_tree(self.workdir)
+ self.previous_tree = tree.build_tree(self.workdir)
 
         if match is None:
             match = self.match
 
         if pass_toolset is None:
- pass_toolset = self.pass_toolset
+ pass_toolset = self.pass_toolset
+
+ if use_test_config is None:
+ use_test_config = self.use_test_config
+
+ if ignore_toolset_requirements is None:
+ ignore_toolset_requirements = self.ignore_toolset_requirements
 
         try:
             kw['program'] = []
             kw['program'] += self.program
             if extra_args:
- kw['program'] += extra_args.split(" ")
+ kw['program'] += extra_args.split(" ")
             if pass_toolset:
- kw['program'].append(self.toolset)
+ kw['program'].append("toolset=" + self.toolset)
+ if use_test_config:
+ kw['program'].append('--test-config="%s"'
+ % os.path.join(self.original_workdir, "test-config.jam"))
+ if ignore_toolset_requirements:
+ kw['program'].append("--ignore-toolset-requirements")
             kw['chdir'] = subdir
             apply(TestCmd.TestCmd.run, [self], kw)
         except:
@@ -388,42 +407,41 @@
             if status != 0:
                 expect = " (expected %d)" % status
 
- annotation("failed command", '"%s" returned %d%s' % (
- kw['program'], _status(self), expect))
+ annotation("failure", '"%s" returned %d%s'
+ % (kw['program'], _status(self), expect))
 
             annotation("reason", "error returned by bjam")
             self.fail_test(1)
 
         if not stdout is None and not match(self.stdout(), stdout):
- annotation("reason", "Unexpected stdout")
+ annotation("failure", "Unexpected stdout")
             annotation("Expected STDOUT", stdout)
             annotation("Actual STDOUT", self.stdout())
             stderr = self.stderr()
             if stderr:
                 annotation("STDERR", stderr)
             self.maybe_do_diff(self.stdout(), stdout)
- self.fail_test(1, dump_stdio = 0)
+ self.fail_test(1, dump_stdio=False)
 
- # Intel tends to produce some message to stderr, which makes tests
- # fail
+ # Intel tends to produce some message to stderr which makes tests fail.
         intel_workaround = re.compile("^xi(link|lib): executing.*\n", re.M)
         actual_stderr = re.sub(intel_workaround, "", self.stderr())
 
         if not stderr is None and not match(actual_stderr, stderr):
- annotation("reason", "Unexpected stderr")
+ annotation("failure", "Unexpected stderr")
             annotation("Expected STDERR", stderr)
             annotation("Actual STDERR", self.stderr())
             annotation("STDOUT", self.stdout())
             self.maybe_do_diff(actual_stderr, stderr)
- self.fail_test(1, dump_stdio = 0)
+ self.fail_test(1, dump_stdio=False)
 
- self.tree = build_tree(self.workdir)
- self.difference = trees_difference(self.previous_tree, self.tree)
+ self.tree = tree.build_tree(self.workdir)
+ self.difference = tree.trees_difference(self.previous_tree, self.tree)
         self.difference.ignore_directories()
         self.unexpected_difference = copy.deepcopy(self.difference)
 
         self.last_build_time = time.time()
-
+
     def glob_file(self, name):
         result = None
         if hasattr(self,'difference'):
@@ -437,7 +455,7 @@
                 result = result[0]
         return result
 
- def read(self, name, binary = 0):
+ def read(self, name, binary=False):
         try:
             if self.toolset:
                 name = string.replace(name, "$toolset", self.toolset+"*")
@@ -449,7 +467,7 @@
                 openMode += "U"
             return open(name, openMode).read()
         except:
- annotation("reason", "Could not open '%s'" % name)
+ annotation("failure", "Could not open '%s'" % name)
             self.fail_test(1)
             return ''
 
@@ -460,68 +478,69 @@
             return result + '\n'
         else:
             return result
-
- def fail_test(self, condition, dump_stdio = 1, *args):
- # If test failed, print the difference
- if condition and hasattr(self, 'difference'):
- f = StringIO()
+
+ def fail_test(self, condition, dump_stdio=True, *args):
+ if not condition:
+ return
+
+ if hasattr(self, 'difference'):
+ f = StringIO.StringIO()
             self.difference.pprint(f)
             annotation("changes caused by the last build command", f.getvalue())
-
- if condition and dump_stdio:
+
+ if dump_stdio:
             self.dump_stdio()
 
- if condition and '--preserve' in sys.argv:
- print
+ if '--preserve' in sys.argv:
+ print
             print "*** Copying the state of working dir into 'failed_test' ***"
- print
+ print
             path = os.path.join(self.original_workdir, "failed_test")
             if os.path.isdir(path):
- shutil.rmtree(path, ignore_errors=0)
+ shutil.rmtree(path, ignore_errors=False)
             elif os.path.exists(path):
- raise "The path " + path + " already exists and is not directory";
+ raise "Path " + path + " already exists and is not a directory";
             shutil.copytree(self.workdir, path)
 
- if condition:
- at = TestCmd.caller(traceback.extract_stack(), 0)
- annotation("stacktrace", at)
- sys.exit(1)
-
+ at = TestCmd.caller(traceback.extract_stack(), 0)
+ annotation("stacktrace", at)
+ sys.exit(1)
+
     # A number of methods below check expectations with actual difference
- # between directory trees before and after build.
- # All the 'expect*' methods require exact names to be passed.
- # All the 'ignore*' methods allow wildcards.
+ # between directory trees before and after a build. All the 'expect*'
+ # methods require exact names to be passed. All the 'ignore*' methods allow
+ # wildcards.
 
- # All names can be lists, which are taken to be directory components
- def expect_addition(self, names):
+ # All names can be lists, which are taken to be directory components.
+ def expect_addition(self, names):
         for name in self.adjust_names(names):
- try:
- glob_remove(self.unexpected_difference.added_files,name)
- except:
- print "File %s not added as expected" % (name,)
- self.fail_test(1)
+ try:
+ glob_remove(self.unexpected_difference.added_files,name)
+ except:
+ print "File %s not added as expected" % name
+ self.fail_test(1)
 
     def ignore_addition(self, wildcard):
         self.ignore_elements(self.unexpected_difference.added_files, wildcard)
 
     def expect_removal(self, names):
         for name in self.adjust_names(names):
- try:
- glob_remove(self.unexpected_difference.removed_files,name)
- except:
- print "File %s not removed as expected" % (name,)
- self.fail_test(1)
+ try:
+ glob_remove(self.unexpected_difference.removed_files,name)
+ except:
+ print "File %s not removed as expected" % name
+ self.fail_test(1)
 
     def ignore_removal(self, wildcard):
         self.ignore_elements(self.unexpected_difference.removed_files, wildcard)
 
     def expect_modification(self, names):
         for name in self.adjust_names(names):
- try:
- glob_remove(self.unexpected_difference.modified_files,name)
- except:
- print "File %s not modified as expected" % (name,)
- self.fail_test(1)
+ try:
+ glob_remove(self.unexpected_difference.modified_files,name)
+ except:
+ print "File %s not modified as expected" % name
+ self.fail_test(1)
 
     def ignore_modification(self, wildcard):
         self.ignore_elements(self.unexpected_difference.modified_files, wildcard)
@@ -529,12 +548,12 @@
     def expect_touch(self, names):
         d = self.unexpected_difference
         for name in self.adjust_names(names):
-
- # We need to check in both touched and modified files.
- # The reason is that:
- # (1) for windows binaries often have slight
- # differences even with identical inputs
- # (2) Intel's compiler for Linux has the same behaviour
+ # We need to check both touched and modified files. The reason is
+ # that:
+ # (1) Windows binaries such as obj, exe or dll files have slight
+ # differences even with identical inputs due to Windows PE
+ # format headers containing an internal timestamp.
+ # (2) Intel's compiler for Linux has the same behaviour.
             filesets = [d.modified_files, d.touched_files]
 
             while filesets:
@@ -545,11 +564,9 @@
                     filesets.pop()
 
             if not filesets:
- annotation("reason",
- "File %s not touched as expected" % (name,))
+ annotation("failure", "File %s not touched as expected" % name)
                 self.fail_test(1)
 
-
     def ignore_touch(self, wildcard):
         self.ignore_elements(self.unexpected_difference.touched_files, wildcard)
 
@@ -562,68 +579,72 @@
     def expect_nothing(self, names):
         for name in self.adjust_names(names):
             if name in self.difference.added_files:
- annotation("reason",
- "File %s is added, but no action was expected" % (name,))
+ annotation("failure",
+ "File %s added, but no action was expected" % name)
                 self.fail_test(1)
             if name in self.difference.removed_files:
- annotation("reason",
- "File %s is removed, but no action was expected" % (name,))
+ annotation("failure",
+ "File %s removed, but no action was expected" % name)
                 self.fail_test(1)
                 pass
             if name in self.difference.modified_files:
- annotation("reason",
- "File %s is modified, but no action was expected" % (name,))
+ annotation("failure",
+ "File %s modified, but no action was expected" % name)
                 self.fail_test(1)
             if name in self.difference.touched_files:
- annotation("reason",
- "File %s is touched, but no action was expected" % (name,))
+ annotation("failure",
+ "File %s touched, but no action was expected" % name)
                 self.fail_test(1)
 
     def expect_nothing_more(self):
-
- # not totally sure about this change, but I don't see a good alternative
+ # Not totally sure about this change, but I don't see a good
+ # alternative.
         if windows:
- self.ignore('*.ilk') # msvc incremental linking files
- self.ignore('*.pdb') # msvc program database files
- self.ignore('*.rsp') # response files
- self.ignore('*.tds') # borland debug symbols
- self.ignore('*.manifest') # msvc DLL manifests
+ self.ignore('*.ilk') # MSVC incremental linking files.
+ self.ignore('*.pdb') # MSVC program database files.
+ self.ignore('*.rsp') # Response files.
+ self.ignore('*.tds') # Borland debug symbols.
+ self.ignore('*.manifest') # MSVC DLL manifests.
 
- # debug builds of bjam built with gcc produce this profiling data
+ # Debug builds of bjam built with gcc produce this profiling data.
         self.ignore('gmon.out')
         self.ignore('*/gmon.out')
-
+
         if not self.unexpected_difference.empty():
- print 'FAILED'
- print '------- The following changes were unexpected ------- '
- self.unexpected_difference.pprint()
- self.fail_test(1)
+ print 'FAILED'
+ print '------- The following changes were unexpected -------'
+ self.unexpected_difference.pprint()
+ self.fail_test(1)
 
- def _expect_line(self, content, expected):
+ def __expect_line(self, content, expected, expected_to_exist):
         expected = expected.strip()
         lines = content.splitlines()
- found = 0
+ found = False
         for line in lines:
             line = line.strip()
             if fnmatch.fnmatch(line, expected):
- found = 1
+ found = True
                 break
 
- if not found:
- print "Did not found expected line in output:"
- print expected
- print "The output was:"
- print content
+ if expected_to_exist and not found:
+ annotation( "failure",
+ "Did not find expected line:\n%s\nin output:\n%s" %
+ (expected, content))
+ self.fail_test(1)
+ if not expected_to_exist and found:
+ annotation( "failure",
+ "Found an unexpected line:\n%s\nin output:\n%s" %
+ (expected, content))
             self.fail_test(1)
 
- def expect_output_line(self, expected):
- self._expect_line(self.stdout(), expected)
+ def expect_output_line(self, line, expected_to_exist=True):
+ self.__expect_line(self.stdout(), line, expected_to_exist)
 
- def expect_content_line(self, name, expected):
- content = self._read_file(name)
- self._expect_line(content, expected)
+ def expect_content_line(self, name, line, expected_to_exist=True):
+ content = self.__read_file(name)
+ self.__expect_line(content, line, expected_to_exist)
 
- def _read_file(self, name, exact=0):
+ def __read_file(self, name, exact=False):
         name = self.adjust_names(name)[0]
         result = ""
         try:
@@ -635,13 +656,12 @@
             print "Note: could not open file", name
             self.fail_test(1)
         return result
-
 
- def expect_content(self, name, content, exact=0):
- actual = self._read_file(name, exact)
+ def expect_content(self, name, content, exact=False):
+ actual = self.__read_file(name, exact)
         content = string.replace(content, "$toolset", self.toolset+"*")
 
- matched = 0
+ matched = False
         if exact:
             matched = fnmatch.fnmatch(actual,content)
         else:
@@ -674,40 +694,39 @@
             if os.system("diff -u " + e + " " + a):
                 print "Unable to compute difference: diff -u %s %s" % (e,a)
             os.unlink(e)
- os.unlink(a)
+ os.unlink(a)
         else:
- print "Set environmental variable 'DO_DIFF' to examine difference."
+ print "Set environmental variable 'DO_DIFF' to examine difference."
 
- # Helpers
+ # Helpers.
     def mul(self, *arguments):
         if len(arguments) == 0:
- return None
- else:
- here = arguments[0]
- if type(here) == type(''):
- here = [here]
-
- if len(arguments) > 1:
- there = apply(self.mul, arguments[1:])
- result = []
- for i in here:
- for j in there:
- result.append(i + j)
- return result
- else:
- return here
+ return None
 
+ here = arguments[0]
+ if type(here) == type(''):
+ here = [here]
+
+ if len(arguments) > 1:
+ there = apply(self.mul, arguments[1:])
+ result = []
+ for i in here:
+ for j in there:
+ result.append(i + j)
+ return result
 
+ return here
 
- # Internal methods
+ # Internal methods.
     def ignore_elements(self, list, wildcard):
- """Removes in-place, element of 'list' that match the given wildcard."""
+ """Removes in-place, element of 'list' that match the given wildcard.
+ """
         list[:] = filter(lambda x, w=wildcard: not fnmatch.fnmatch(x, w), list)
 
     def adjust_lib_name(self, name):
         global lib_prefix
         result = name
-
+
         pos = string.rfind(name, ".")
         if pos != -1:
             suffix = name[pos:]
@@ -721,15 +740,15 @@
                 if dll_prefix:
                     tail = "lib" + tail
                     result = os.path.join(head, tail)
- # If we try to use this name in Jamfile, we better
- # convert \ to /, as otherwise we'd have to quote \.
+ # If we want to use this name in a Jamfile, we better convert \ to /, as
+ # otherwise we'd have to quote \.
         result = string.replace(result, "\\", "/")
         return result
-
+
     def adjust_suffix(self, name):
         if not self.translate_suffixes:
             return name
-
+
         pos = string.rfind(name, ".")
         if pos != -1:
             suffix = name[pos:]
@@ -742,11 +761,11 @@
 
         return name + suffix
 
- # Acceps either string of list of string and returns list of strings
+ # Acceps either a string or a list of strings and returns a list of strings.
     # Adjusts suffixes on all names.
     def adjust_names(self, names):
         if type(names) == types.StringType:
- names = [names]
+ names = [names]
         r = map(self.adjust_lib_name, names)
         r = map(self.adjust_suffix, r)
         r = map(lambda x, t=self.toolset: string.replace(x, "$toolset", t+"*"), r)
@@ -762,29 +781,27 @@
     def wait_for_time_change(self):
         while 1:
             f = time.time();
- # In fact, I'm not sure why "+ 2" as opposed to "+ 1" is
- # needed but empirically, "+ 1" sometimes causes 'touch'
- # and other functions not to bump file time enough for
- # rebuild to happen.
+ # In fact, I'm not sure why "+ 2" as opposed to "+ 1" is needed but
+ # empirically, "+ 1" sometimes causes 'touch' and other functions
+ # not to bump the file time enough for a rebuild to happen.
             if math.floor(f) < math.floor(self.last_build_time) + 2:
                 time.sleep(0.1)
             else:
                 break
-
 
-
+
 class List:
 
     def __init__(self, s=""):
         elements = []
- if isinstance(s, type("")):
- # Have to handle espaced spaces correctly
+ if isinstance(s, type("")):
+ # Have to handle espaced spaces correctly.
             s = string.replace(s, "\ ", '\001')
             elements = string.split(s)
         else:
             elements = s;
-
- self.l = []
+
+ self.l = []
         for e in elements:
             self.l.append(string.replace(e, '\001', ' '))
 
@@ -808,7 +825,7 @@
                  + repr(string.join(self.l, ' '))
                  + ')')
 
- def __mul__(self, other):
+ def __mul__(self, other):
         result = List()
         if not isinstance(other, List):
             other = List(other)
@@ -819,7 +836,7 @@
 
     def __rmul__(self, other):
         if not isinstance(other, List):
- other = List(other)
+ other = List(other)
         return List.__mul__(other, self)
 
     def __add__(self, other):
@@ -827,12 +844,8 @@
         result.l = self.l[:] + other.l[:]
         return result
 
-# quickie tests. Should use doctest instead.
+# Quickie tests. Should use doctest instead.
 if __name__ == '__main__':
     assert str(List("foo bar") * "/baz") == "['foo/baz', 'bar/baz']"
     assert repr("foo/" * List("bar baz")) == "__main__.List('foo/bar foo/baz')"
     print 'tests passed'
-
-
-
-

Modified: branches/fix-links/tools/build/v2/test/abs_workdir.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/abs_workdir.py (original)
+++ branches/fix-links/tools/build/v2/test/abs_workdir.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,30 +2,25 @@
 # Testing whether we may run a test in a absolute directories
 # There are no tests for temporary directories as this is implictly tested in a lot of other cases
 
-from BoostBuild import Tester
-import os, string
+import BoostBuild
+import os
+import string
 
-t = Tester(
- executable="jam"
- , workdir = os.getcwd()
- , pass_toolset=0
- )
+t = BoostBuild.Tester(arguments="pwd", executable="jam", workdir=os.getcwd(),
+ pass_toolset=0)
 
-jamfile="""
+t.write("Jamroot.jam", """
 actions print_pwd { pwd ; }
 print_pwd pwd ;
 Always pwd ;
-"""
+""")
 
-t.write("Jamfile", jamfile)
-t.write("project-root.jam", " ")
-
-t.run_build_system(status=0, extra_args = "pwd")
+t.run_build_system(status=0)
 
 if 'TMP' in os.environ:
- tmp_dir =os.environ.get('TMP')
+ tmp_dir = os.environ.get('TMP')
 else:
- tmp_dir ="/tmp"
+ tmp_dir = "/tmp"
 
 if string.rfind(t.stdout(), tmp_dir) != -1:
     t.fail_test(1)
@@ -33,7 +28,7 @@
 if string.rfind(t.stdout(), 'build/v2/test') == -1:
     t.fail_test(1)
 
-t.run_build_system(status=1, extra_args = "pwd", subdir ="/must/fail/with/absolute/path",
- stderr=None)
+t.run_build_system(status=1, subdir="/must/fail/with/absolute/path",
+ stderr=None)
 t.cleanup
 

Modified: branches/fix-links/tools/build/v2/test/alias.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/alias.py (original)
+++ branches/fix-links/tools/build/v2/test/alias.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,17 +1,25 @@
 #!/usr/bin/python
 
-# Copyright 2003 Dave Abrahams
-# Copyright 2003 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003 Dave Abrahams
+# Copyright 2003 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 from BoostBuild import Tester, List
-t = Tester()
 
-# Test that top-level project can affect build dir
-t.write("project-root.jam", "")
-t.write("Jamfile", """
 
+################################################################################
+#
+# test_alias_rule()
+# -----------------
+#
+################################################################################
+
+def test_alias_rule(t):
+ """Basic alias rule test.
+ """
+
+ t.write("Jamroot.jam", """
 exe a : a.cpp ;
 exe b : b.cpp ;
 exe c : c.cpp ;
@@ -21,60 +29,78 @@
 
 alias src : s.cpp ;
 exe hello : hello.cpp src ;
+""")
 
+ t.write("a.cpp", "int main() { return 0; }\n")
+ t.copy("a.cpp", "b.cpp")
+ t.copy("a.cpp", "c.cpp")
+ t.copy("a.cpp", "hello.cpp")
+ t.write("s.cpp", "")
+
+ # Check that targets to which "bin1" refers are updated, and only those.
+ t.run_build_system("bin1")
+ t.expect_addition(List("bin/$toolset/debug/") * "a.exe a.obj")
+ t.expect_nothing_more()
+
+ # Try again with "bin2"
+ t.run_build_system("bin2")
+ t.expect_addition(List("bin/$toolset/debug/") * "b.exe b.obj")
+ t.expect_nothing_more()
+
+ # Try building everything, making sure 'hello' target is created.
+ t.run_build_system()
+ t.expect_addition(List("bin/$toolset/debug/") * "hello.exe hello.obj")
+ t.expect_addition("bin/$toolset/debug/s.obj")
+ t.expect_addition(List("bin/$toolset/debug/") * "c.exe c.obj")
+ t.expect_nothing_more()
+
+
+################################################################################
+#
+# test_alias_source_usage_requirements()
+# --------------------------------------
+#
+################################################################################
+
+def test_alias_source_usage_requirements(t):
+ """Check whether usage requirements are propagated via "alias". In case they
+ are not, linking will fail as there will be no main() function defined
+ anywhere in the source.
+ """
+
+ t.write("Jamroot.jam", """
+lib l : l.cpp : : : <define>WANT_MAIN ;
+alias la : l ;
+exe main : main.cpp la ;
 """)
-t.write("a.cpp", "int main() { return 0; }\n")
-t.copy("a.cpp", "b.cpp")
-t.copy("a.cpp", "c.cpp")
-t.copy("a.cpp", "hello.cpp")
-t.write("s.cpp", "")
-
-# Check that targets to which "bin1" refers are updated,
-# and only those.
-t.run_build_system("bin1")
-t.ignore("*.tds")
-t.expect_addition(List("bin/$toolset/debug/") * "a.exe a.obj")
-t.expect_nothing_more()
-
-# Try again with "bin2"
-t.run_build_system("bin2")
-t.ignore("*.tds")
-t.expect_addition(List("bin/$toolset/debug/") * "b.exe b.obj")
-t.expect_nothing_more()
-
-# Try building everything, making sure 'hello' target is
-# created
-t.run_build_system()
-t.ignore("*.tds")
-t.expect_addition("bin/$toolset/debug/hello.exe")
-
-# Regression test.
-# Check if usage requirements are propagated via "alias"
-
-t.write("l.cpp", """
+
+ t.write("l.cpp", """
 void
 #if defined(_WIN32)
 __declspec(dllexport)
 #endif
 foo() {}
-
 """)
 
-t.write("Jamfile", """
-lib l : l.cpp : : : <define>WANT_MAIN ;
-alias la : l ;
-exe main : main.cpp la ;
-""")
-
-t.write("main.cpp", """
+ t.write("main.cpp", """
 #ifdef WANT_MAIN
 int main() { return 0; }
 #endif
-
 """)
 
-t.write("project-root.jam", "")
+ t.run_build_system()
+
+
+################################################################################
+#
+# main()
+# ------
+#
+################################################################################
+
+t = Tester()
 
-t.run_build_system()
+test_alias_rule(t)
+test_alias_source_usage_requirements(t)
 
 t.cleanup()

Modified: branches/fix-links/tools/build/v2/test/conditionals.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/conditionals.py (original)
+++ branches/fix-links/tools/build/v2/test/conditionals.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,55 +1,47 @@
 #!/usr/bin/python
 
-# Copyright 2003 Dave Abrahams
-# Copyright 2002, 2003, 2004 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-# Test conditional properties
-
-from BoostBuild import Tester, List
-import os
-from string import strip
-
-t = Tester()
-
-# Arrange a project which will build only if
-# 'a.cpp' is compiled with "STATIC" define.
-t.write("project-root.jam", "import gcc ;")
+# Copyright 2003 Dave Abrahams
+# Copyright 2002, 2003, 2004 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+# Test conditional properties.
+
+import BoostBuild
+
+t = BoostBuild.Tester()
+
+# Arrange a project which will build only if 'a.cpp' is compiled with "STATIC"
+# define.
 t.write("a.cpp", """
 #ifdef STATIC
-int main() { return 0; }
+int main() { return 0; }
 #endif
 """)
-t.write("Jamfile", "exe a : a.cpp : <link>static:<define>STATIC ;")
+
+# Test conditionals in target requirements.
+t.write("Jamroot.jam", "exe a : a.cpp : <link>static:<define>STATIC ;")
 t.run_build_system("link=static")
 t.expect_addition("bin/$toolset/debug/link-static/a.exe")
+t.rm("bin")
 
-t.write("Jamfile", """
+# Test conditionals in project requirements.
+t.write("Jamroot.jam", """
 project : requirements <link>static:<define>STATIC ;
 exe a : a.cpp ;
 """)
-t.rm("bin")
 t.run_build_system("link=static")
 t.expect_addition("bin/$toolset/debug/link-static/a.exe")
+t.rm("bin")
 
-# Regression test for a bug found by Ali Azarbayejani.
-# Conditionals inside usage requirement were not evaluated.
-# This breaks
-
-t.write("Jamfile", """
+# Regression test for a bug found by Ali Azarbayejani. Conditionals inside usage
+# requirement were not being evaluated.
+t.write("Jamroot.jam", """
 lib l : l.cpp : : : <link>static:<define>STATIC ;
 exe a : a.cpp l ;
 """)
-t.write("l.cpp", "")
-t.write("l.cpp", """
-int i;
-""")
-
-t.rm("bin")
+t.write("l.cpp", "int i;")
 t.run_build_system("link=static")
 t.expect_addition("bin/$toolset/debug/link-static/a.exe")
 
-
-
 t.cleanup()

Modified: branches/fix-links/tools/build/v2/test/conditionals2.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/conditionals2.py (original)
+++ branches/fix-links/tools/build/v2/test/conditionals2.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,35 +1,33 @@
 #!/usr/bin/python
 
-# Copyright 2003 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 # Regression test: it was possible that due to evaluation of conditional
 # requirements, two different values of non-free features were present in
 # property set.
 
-from BoostBuild import Tester, List
+import BoostBuild
 
-t = Tester()
-
-t.write("project-root.jam", "")
+t = BoostBuild.Tester()
 
 t.write("a.cpp", "")
 
-t.write("Jamfile", """
-import feature : feature ;
-import common : file-creation-command ;
+t.write("Jamroot.jam", """
+import feature ;
+import common ;
 
-feature the_feature : false true : propagated ;
+feature.feature the_feature : false true : propagated ;
 
 rule maker ( targets * : sources * : properties * )
 {
- if <the_feature>false in $(properties)
- && <the_feature>true in $(properties)
+ if <the_feature>false in $(properties) &&
+ <the_feature>true in $(properties)
     {
         EXIT "Oops, two different values of non-free feature" ;
- }
- CMD on $(targets) = [ file-creation-command ] ;
+ }
+ CMD on $(targets) = [ common.file-creation-command ] ;
 }
 
 actions maker
@@ -37,12 +35,9 @@
     $(CMD) $(<) ;
 }
 
-make a : a.cpp : maker : <variant>debug:<the_feature>true ;
+make a : a.cpp : maker : <variant>debug:<the_feature>true ;
 """)
 
 t.run_build_system()
 
 t.cleanup()
-
-
-

Modified: branches/fix-links/tools/build/v2/test/conditionals3.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/conditionals3.py (original)
+++ branches/fix-links/tools/build/v2/test/conditionals3.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,19 +1,17 @@
 #!/usr/bin/python
 
-# Copyright 2003 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
-# Test that conditional properties work, even if property is free, and
-# value includes colon.
-from BoostBuild import Tester, List
+# Test that conditional properties work, even if property is free, and value
+# includes a colon.
 
+import BoostBuild
 
-t = Tester()
+t = BoostBuild.Tester()
 
-# Create the needed files
-t.write("project-root.jam", "")
-t.write("Jamfile", """
+t.write("Jamroot.jam", """
 exe hello : hello.cpp : <variant>debug:<define>CLASS=Foo::Bar ;
 """)
 t.write("hello.cpp", """
@@ -21,12 +19,11 @@
 int main()
 {
     CLASS c;
+ c; // Disables the unused variable warning.
     return 0;
 }
-
 """)
 
-# Don't check stderr, which can include warning about unused 'c'.
 t.run_build_system(stdout=None, stderr=None)
 t.expect_addition("bin/$toolset/debug/hello.exe")
 

Modified: branches/fix-links/tools/build/v2/test/double_loading.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/double_loading.py (original)
+++ branches/fix-links/tools/build/v2/test/double_loading.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -10,37 +10,22 @@
 t = Tester()
 
 # Regression test for double loading of the same Jamfile.
-t.write("Jamfile", """
-build-project subdir ;
-""")
-
-t.write("project-root.jam", """
-""")
-
-t.write("subdir/Jamfile", """
-ECHO "Loaded subdir" ;
-""")
+t.write("Jamfile.jam", "build-project subdir ;")
+t.write("Jamroot.jam", "" )
+t.write("subdir/Jamfile.jam", 'ECHO "Loaded subdir" ;')
 
 t.run_build_system(subdir="subdir")
-t.fail_test(string.count(t.stdout(), "Loaded subdir") != 1)
+t.expect_output_line("Loaded subdir")
 
-# Regression test for a more contrived case. The top-level
-# jamfile refers to subdir via use-project, while subdir's
-# Jamfile is being loaded. The motivation why use-project
-# referring to subprojects are usefull can be found at
-# http://article.gmane.org/gmane.comp.lib.boost.build/3906/
-t.write("Jamfile", """
-use-project /subdir : subdir ;
-""")
-
-t.write("project-root.jam", """
-""")
-
-t.write("subdir/Jamfile", """
-project subdir ;
-""")
+
+# Regression test for a more contrived case. The top-level Jamfile refers to
+# subdir via use-project, while subdir's Jamfile is being loaded. The motivation
+# why use-project referring to subprojects is useful can be found at
+# http://article.gmane.org/gmane.comp.lib.boost.build/3906/
+t.write("Jamfile.jam", "use-project /subdir : subdir ;")
+t.write("Jamroot.jam", "" )
+t.write("subdir/Jamfile.jam", "project subdir ;")
 
 t.run_build_system(subdir="subdir");
 
 t.cleanup()
-

Modified: branches/fix-links/tools/build/v2/test/library_property.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/library_property.py (original)
+++ branches/fix-links/tools/build/v2/test/library_property.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -11,7 +11,7 @@
 # exe a : a.cpp helper ;
 # obj helper : helper.cpp : <optimization>off ;
 #
-# caused 'foo' to be built with with and without optimization.
+# caused 'foo' to be built with and without optimization.
 from BoostBuild import Tester, List
 
 # Create a temporary working directory

Modified: branches/fix-links/tools/build/v2/test/module-actions/bootstrap.jam
==============================================================================
--- branches/fix-links/tools/build/v2/test/module-actions/bootstrap.jam (original)
+++ branches/fix-links/tools/build/v2/test/module-actions/bootstrap.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,35 +1,21 @@
-# Copyright 2003 Dave Abrahams
-# Copyright 2006 Rene Rivera
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
-
-# Demonstration that module variables have the right effect in actions
-
-# Set a variable which says how to dump a file to stdout
-if $(NT)
-{
- CATENATE = type ;
-}
-else
-{
- CATENATE = cat ;
-}
+# Copyright 2003 Dave Abrahams
+# Copyright 2006 Rene Rivera
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+
+# Demonstration that module variables have the right effect in actions.
 
-# invoke the given action rule `act' to build target from sources
-rule do-make ( target : sources * : act )
-{
- DEPENDS $(target) : $(sources) ;
- $(act) $(target) : $(sources) ;
-}
 
-# top-level version of do-make which causes target to be built by
-# default
+# Top-level rule that causes a target to be built by invoking the specified
+# action.
 rule make ( target : sources * : act )
 {
     DEPENDS all : $(target) ;
- do-make $(target) : $(sources) : $(act) ;
+ DEPENDS $(target) : $(sources) ;
+ $(act) $(target) : $(sources) ;
 }
 
+
 X1 = X1-global ;
 X2 = X2-global ;
 X3 = X3-global ;
@@ -37,15 +23,15 @@
 module A
 {
     X1 = X1-A ;
-
+
     rule act ( target )
     {
         NOTFILE $(target) ;
         ALWAYS $(target) ;
     }
-
+
     actions act { echo A.act $(<): $(X1) $(X2) $(X3) }
-
+
     make t1 : : A.act ;
     make t2 : : A.act ;
     make t3 : : A.act ;
@@ -54,9 +40,9 @@
 module B
 {
     X2 = X2-B ;
-
+
     actions act { echo B.act $(<): $(X1) $(X2) $(X3) }
-
+
     make t1 : : B.act ;
     make t2 : : B.act ;
     make t3 : : B.act ;

Modified: branches/fix-links/tools/build/v2/test/module_actions.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/module_actions.py (original)
+++ branches/fix-links/tools/build/v2/test/module_actions.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,39 +6,48 @@
 # Distributed under the Boost Software License, Version 1.0.
 # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
-from BoostBuild import Tester, List
+import BoostBuild
 import os
 import re
 
 spaces_re = re.compile("\ \ +")
 trailing_spaces_re = re.compile("\ +\n")
 
-t = Tester(pass_toolset=0)
+t = BoostBuild.Tester("-d+1", pass_toolset=0)
 
 t.set_tree('module-actions')
 
-expected = r'''A.act t1: X1-t1
+# Note that the following string contains some trailing spaces that should not
+# be removed.
+expected_output = """...found 4 targets...
+...updating 3 targets...
+A.act t1
+A.act t1: X1-t1
+B.act t1
 B.act t1: X1-t1 X2-B
+act t1
 act t1: X1-t1 X2-global X3-global
+A.act t2
 A.act t2: X1-A X2-t2
+B.act t2
 B.act t2: X2-t2
+act t2
 act t2: X1-global X2-t2 X3-global
+A.act t3
 A.act t3: X1-A X3-t3
+B.act t3
 B.act t3: X2-B X3-t3
+act t3
 act t3: X1-global X2-global X3-t3
-'''
+...updated 3 targets...
+"""
 
-# On Unixes, call to 'echo 1 2 3' produces '1 2 3' (note spacing)
+# On Unixes, call to 'echo 1 2 3' produces '1 2 3' (note the spacing)
 # Accomodate for that fact.
 if os.name != 'nt':
- expected = re.sub(spaces_re, " ", expected)
- expected = re.sub(trailing_spaces_re, "\n", expected)
-
-# We expect t5 and t7's output to be dumped to stdout
-t.run_build_system(
- stdout = expected
-)
+ expected_output = re.sub(spaces_re, " ", expected_output)
+ expected_output = re.sub(trailing_spaces_re, "\n", expected_output)
 
+t.run_build_system(stdout=expected_output)
 t.expect_nothing_more()
 t.cleanup()
-

Modified: branches/fix-links/tools/build/v2/test/project_test3.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/project_test3.py (original)
+++ branches/fix-links/tools/build/v2/test/project_test3.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -16,7 +16,7 @@
 os.remove("project-root.jam")
 t.run_build_system(status=1, stdout=
 """error: Could not find parent for project at '.'
-error: Did not find Jamfile or project-root.jam in any parent directory.
+error: Did not find Jamfile.jam or Jamroot.jam in any parent directory.
 
 """)
 

Modified: branches/fix-links/tools/build/v2/test/tag.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/tag.py (original)
+++ branches/fix-links/tools/build/v2/test/tag.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -5,43 +5,70 @@
 # all copies. This software is provided "as is" without express or implied
 # warranty, and with no claim as to its suitability for any purpose.
 
-from BoostBuild import Tester, List
-import string
+import BoostBuild
 
-t = Tester()
 
-t.write("project-root.jam", "")
-t.write("Jamfile", """
+################################################################################
+#
+# test_folder_with_dot_in_name()
+# ------------------------------
+#
+################################################################################
+
+def test_folder_with_dot_in_name(t):
+ """ Regression test: the 'tag' feature did not work in directories that had
+ a dot in their name.
+ """
+
+ t.write("version-1.32.0/Jamroot.jam", """
+project test : requirements <tag>@$(__name__).tag ;
+
+rule tag ( name : type ? : property-set )
+{
+ # Do nothing, just make sure the rule is invoked OK.
+ ECHO "The tag rule was invoked" ;
+}
+exe a : a.cpp ;
+""")
+ t.write("version-1.32.0/a.cpp", "int main() { return 0; }\n")
+
+ t.run_build_system(subdir="version-1.32.0")
+ t.expect_addition("version-1.32.0/bin/$toolset/debug/a.exe")
+ t.expect_output_line("The tag rule was invoked")
+
+
+################################################################################
+#
+# test_tag_property()
+# -------------------
+#
+################################################################################
+
+def test_tag_property(t):
+ """Basic tag property test.
+ """
+
+ t.write("Jamroot.jam", """
 import virtual-target ;
+
 rule tag ( name : type ? : property-set )
 {
     local tags ;
- local v = [ $(property-set).get <variant> ] ;
- if $(v) = debug
- {
- tags += d ;
- }
- else if $(v) = release
- {
- tags += r ;
- }
-
- local l = [ $(property-set).get <link> ] ;
- if $(l) = shared
+ switch [ $(property-set).get <variant> ]
     {
- tags += s ;
+ case debug : tags += d ;
+ case release : tags += r ;
     }
- else if $(l) = static
+ switch [ $(property-set).get <link> ]
     {
- tags += t ;
+ case shared : tags += s ;
+ case static : tags += t ;
     }
-
     if $(tags)
     {
- return [ virtual-target.add-prefix-and-suffix $(name)_$(tags:J="")
+ return [ virtual-target.add-prefix-and-suffix $(name)_$(tags:J="")
             : $(type) : $(property-set) ] ;
     }
-
 }
 
 # Test both fully-qualified and local name of the rule
@@ -50,57 +77,50 @@
 stage c : a ;
 """)
 
-t.write("a.cpp", """
+ t.write("a.cpp", """
 int main()
 {
     return 0;
 }
 
 #ifdef _MSC_VER
-__declspec (dllexport) void x () {}
+__declspec (dllexport) void x () {}
 #endif
 """)
 
-file_list = \
-List("bin/$toolset/debug/a_ds.exe") + \
-List("bin/$toolset/debug/b_ds.dll") + \
-List("c/a_ds.exe") + \
-List("bin/$toolset/release/a_rs.exe") + \
-List("bin/$toolset/release/b_rs.dll") + \
-List("c/a_rs.exe") + \
-List("bin/$toolset/debug/link-static/a_dt.exe") + \
-List("bin/$toolset/debug/link-static/b_dt.lib") + \
-List("c/a_dt.exe") + \
-List("bin/$toolset/release/link-static/a_rt.exe") + \
-List("bin/$toolset/release/link-static/b_rt.lib") + \
-List("c/a_rt.exe")
-
-variants = "debug release link=static,shared"
-
-t.run_build_system(variants)
-t.expect_addition(file_list)
-
-t.run_build_system(variants + " clean")
-t.expect_removal(file_list)
-
-# Regression test: the 'tag' feature did not work in directories that
-# had dot in names.
-t.write("version-1.32.0/Jamroot", """
-project test : requirements <tag>@$(__name__).tag ;
+ file_list = \
+ BoostBuild.List("bin/$toolset/debug/a_ds.exe") + \
+ BoostBuild.List("bin/$toolset/debug/b_ds.dll") + \
+ BoostBuild.List("c/a_ds.exe") + \
+ BoostBuild.List("bin/$toolset/release/a_rs.exe") + \
+ BoostBuild.List("bin/$toolset/release/b_rs.dll") + \
+ BoostBuild.List("c/a_rs.exe") + \
+ BoostBuild.List("bin/$toolset/debug/link-static/a_dt.exe") + \
+ BoostBuild.List("bin/$toolset/debug/link-static/b_dt.lib") + \
+ BoostBuild.List("c/a_dt.exe") + \
+ BoostBuild.List("bin/$toolset/release/link-static/a_rt.exe") + \
+ BoostBuild.List("bin/$toolset/release/link-static/b_rt.lib") + \
+ BoostBuild.List("c/a_rt.exe")
+
+ variants = "debug release link=static,shared"
+
+ t.run_build_system(variants)
+ t.expect_addition(file_list)
+
+ t.run_build_system(variants + " clean")
+ t.expect_removal(file_list)
+
+
+################################################################################
+#
+# main()
+# ------
+#
+################################################################################
 
-rule tag ( name : type ? : property-set )
-{
- # Do nothing, just make sure the rule is invoked OK.
- ECHO "The tag rule was invoked" ;
-}
-exe a : a.cpp ;
-""")
-
-t.write("version-1.32.0/a.cpp", "int main() { return 0; }\n")
+t = BoostBuild.Tester()
 
-t.run_build_system(subdir="version-1.32.0")
-t.expect_addition("version-1.32.0/bin/$toolset/debug/a.exe")
-t.fail_test(string.find(t.stdout(), "The tag rule was invoked") == -1)
+test_tag_property(t)
+test_folder_with_dot_in_name(t)
 
 t.cleanup()
-

Modified: branches/fix-links/tools/build/v2/test/test_all.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/test_all.py (original)
+++ branches/fix-links/tools/build/v2/test/test_all.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -104,8 +104,14 @@
           "no_type",
           "chain",
           "default_build",
+ "default_toolset",
           "use_requirements",
           "conditionals",
+ "conditionals2",
+ "conditionals3",
+ "conditionals_multiple",
+ "configuration",
+ "indirect_conditional",
           "stage",
           "prebuilt",
           "project_dependencies",
@@ -124,10 +130,8 @@
           "bad_dirname",
           "c_file",
           "inline",
- "conditionals2",
           "property_expansion",
           "loop",
- "conditionals3",
           "tag",
           "suffix",
           "inherit_toolset",
@@ -154,7 +158,6 @@
           "project_root_rule",
           "resolution",
           "build_file",
- "indirect_conditional",
           "build_no",
           "disambiguation",
           "clean",

Modified: branches/fix-links/tools/build/v2/test/timedata.py
==============================================================================
--- branches/fix-links/tools/build/v2/test/timedata.py (original)
+++ branches/fix-links/tools/build/v2/test/timedata.py 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,16 +6,18 @@
 # This tests the build step timing facilities.
 
 import BoostBuild
+import re
 
 t = BoostBuild.Tester(pass_toolset=0)
 
-t.write('file.jam', '''
+t.write("file.jam", """
 rule time
 {
     DEPENDS $(<) : $(>) ;
     __TIMING_RULE__ on $(>) = record_time $(<) ;
     DEPENDS all : $(<) ;
 }
+
 actions time
 {
     echo $(>) user: $(__USER_TIME__) system: $(__SYSTEM_TIME__)
@@ -24,7 +26,6 @@
 
 rule record_time ( target : source : start end user system )
 {
- ECHO record_time called: $(target) / $(source) / $(user) / $(system) ;
     __USER_TIME__ on $(target) = $(user) ;
     __SYSTEM_TIME__ on $(target) = $(system) ;
 }
@@ -33,6 +34,7 @@
 {
     DEPENDS $(<) : $(>) ;
 }
+
 actions make
 {
     echo made from $(>) >> $(<)
@@ -41,17 +43,22 @@
 
 time foo : bar ;
 make bar : baz ;
-''')
+""")
 
-import re
-t.write('baz', 'nothing\n')
-t.run_build_system(
- '-ffile.jam',
- stdout=r'bar +user: [0-9\.]+ +system: +[0-9\.]+ *$',
- match = lambda actual,expected: re.search(expected,actual,re.DOTALL)
- )
-t.expect_addition('foo')
-t.expect_addition('bar')
+t.write("baz", "nothing\n")
+
+expected_output = """\.\.\.found 4 targets\.\.\.
+\.\.\.updating 2 targets\.\.\.
+make bar
+time foo
+bar +user: [0-9\.]+ +system: +[0-9\.]+ *
+\.\.\.updated 2 targets\.\.\.$
+"""
+
+t.run_build_system("-ffile.jam -d+1", stdout=expected_output,
+ match=lambda actual, expected: re.search(expected, actual, re.DOTALL))
+t.expect_addition("foo")
+t.expect_addition("bar")
 t.expect_nothing_more()
 
 t.cleanup()

Modified: branches/fix-links/tools/build/v2/tools/builtin.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/builtin.jam (original)
+++ branches/fix-links/tools/build/v2/tools/builtin.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,45 +1,47 @@
-# Copyright 2002, 2003, 2004, 2005 Dave Abrahams
-# Copyright 2002, 2005, 2006, 2007 Rene Rivera
-# Copyright 2006 Juergen Hunold
-# Copyright 2005 Toon Knapen
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2002, 2003, 2004, 2005 Dave Abrahams
+# Copyright 2002, 2005, 2006, 2007 Rene Rivera
+# Copyright 2006 Juergen Hunold
+# Copyright 2005 Toon Knapen
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 # Defines standard features and rules.
 
+import alias ;
 import "class" : new ;
-
 import feature : feature compose ;
 import toolset : flags ;
 import errors : error ;
-import type ;
-import scanner ;
+import generate ;
 import generators ;
-import regex ;
-import virtual-target ;
 import os ;
-import symlink ;
-import alias ;
-import property ;
 import print ;
-import utility ;
 import project ;
-import generate ;
+import property ;
+import regex ;
+import scanner ;
+import stage ;
+import symlink ;
+import type ;
+import utility ;
+import virtual-target ;
+import types/register ;
+
+
+.os-names = amiga aix bsd cygwin darwin dos emx freebsd hpux linux netbsd
+ openbsd osf qnx qnxnto sgi solaris sun sunos svr4 sysv ultrix unix unixware
+ vms windows ;
 
-# This feature is used to determine which OS we're on.
-# In future, this may become <target-os> and <host-os>
-# The future is now...
+
+# Feature used to determine which OS we're on. New <target-os> and <host-os>
+# features should be used instead.
 local os = [ modules.peek : OS ] ;
-feature os : $(os) : propagated link-incompatible ;
+feature.feature os : $(os) : propagated link-incompatible ;
+
 
-.os-names = amiga aix bsd cygwin darwin dos emx freebsd hpux
- linux netbsd openbsd osf qnx qnxnto sgi solaris sun sunos
- svr4 sysv ultrix unix unixware vms windows ;
-
-# Translates from bjam current OS to the os tags used
-# in host-os and target-os. I.e. it returns the
-# running host-os.
+# Translates from bjam current OS to the os tags used in host-os and target-os,
+# i.e. returns the running host-os.
 local rule default-host-os ( )
 {
     local host-os ;
@@ -51,238 +53,230 @@
     {
         switch [ os.name ]
         {
- case NT : host-os = windows ;
- case AS400 : host-os = unix ;
- case MINGW : host-os = windows ;
- case BSDI : host-os = bsd ;
- case COHERENT : host-os = unix ;
- case DRAGONFLYBSD : host-os = bsd ;
- case IRIX : host-os = sgi ;
- case MACOSX : host-os = darwin ;
- case KFREEBSD : host-os = freebsd ;
- case LINUX : host-os = linux ;
- case * : host-os = unix ;
+ case NT : host-os = windows ;
+ case AS400 : host-os = unix ;
+ case MINGW : host-os = windows ;
+ case BSDI : host-os = bsd ;
+ case COHERENT : host-os = unix ;
+ case DRAGONFLYBSD : host-os = bsd ;
+ case IRIX : host-os = sgi ;
+ case MACOSX : host-os = darwin ;
+ case KFREEBSD : host-os = freebsd ;
+ case LINUX : host-os = linux ;
+ case * : host-os = unix ;
         }
     }
     return $(host-os:L) ;
 }
 
-# The two OS features define a known set of abstract OS
-# names. The host-os is the OS under which bjam is running.
-# Even though this should really be a fixed property we need
-# to list all the values to prevent unkown value errors.
-# Both set the default value to the current OS to account for
-# the default use case of building on the target OS.
-feature host-os : $(.os-names) ;
+
+# The two OS features define a known set of abstract OS names. The host-os is
+# the OS under which bjam is running. Even though this should really be a fixed
+# property we need to list all the values to prevent unknown value errors. Both
+# set the default value to the current OS to account for the default use case of
+# building on the target OS.
+feature.feature host-os : $(.os-names) ;
 feature.set-default host-os : [ default-host-os ] ;
 
-feature target-os
- : $(.os-names)
- : propagated link-incompatible ;
+feature.feature target-os : $(.os-names) : propagated link-incompatible ;
 feature.set-default target-os : [ default-host-os ] ;
 
 
-feature toolset : : implicit propagated symmetric ;
-
-feature stdlib : native : propagated composite ;
-
-feature link : shared static : propagated ;
-feature runtime-link : shared static : propagated ;
-feature runtime-debugging : on off : propagated ;
-
-
-feature optimization : off speed space : propagated ;
-feature profiling : off on : propagated ;
-feature inlining : off on full : propagated ;
-
-feature threading : single multi : propagated ;
-feature rtti : on off : propagated ;
-feature exception-handling : on off : propagated ;
-# Whether there is support for asynchronous EH (e.g. catching SEGVs)
-feature asynch-exceptions : off on : propagated ;
-# Whether all extern "C" functions are considered nothrow by default
-feature extern-c-nothrow : off on : propagated ;
-feature debug-symbols : on off : propagated ;
-feature define : : free ;
-feature undef : : free ;
-feature "include" : : free path ; #order-sensitive ;
-feature cflags : : free ;
-feature cxxflags : : free ;
-feature fflags : : free ;
-feature asmflags : : free ;
-feature linkflags : : free ;
-feature archiveflags : : free ;
-feature version : : free ;
-
-# Generic, i.e. non-lanugage specific, flags for tools.
-feature flags : : free ;
+feature.feature toolset : : implicit propagated symmetric ;
+feature.feature stdlib : native : propagated composite ;
+feature.feature link : shared static : propagated ;
+feature.feature runtime-link : shared static : propagated ;
+feature.feature runtime-debugging : on off : propagated ;
+feature.feature optimization : off speed space : propagated ;
+feature.feature profiling : off on : propagated ;
+feature.feature inlining : off on full : propagated ;
+feature.feature threading : single multi : propagated ;
+feature.feature rtti : on off : propagated ;
+feature.feature exception-handling : on off : propagated ;
+
+# Whether there is support for asynchronous EH (e.g. catching SEGVs).
+feature.feature asynch-exceptions : off on : propagated ;
+
+# Whether all extern "C" functions are considered nothrow by default.
+feature.feature extern-c-nothrow : off on : propagated ;
+
+feature.feature debug-symbols : on off : propagated ;
+feature.feature define : : free ;
+feature.feature undef : : free ;
+feature.feature "include" : : free path ; #order-sensitive ;
+feature.feature cflags : : free ;
+feature.feature cxxflags : : free ;
+feature.feature fflags : : free ;
+feature.feature asmflags : : free ;
+feature.feature linkflags : : free ;
+feature.feature archiveflags : : free ;
+feature.feature version : : free ;
 
+# Generic, i.e. non-language specific, flags for tools.
+feature.feature flags : : free ;
 feature.feature location-prefix : : free ;
 
 
-# The following features are incidental, since
-# in themself they have no effect on build products.
-# Not making them incidental will result in problems in corner
-# cases, for example:
-#
+# The following features are incidental since they have no effect on built
+# products. Not making them incidental will result in problems in corner cases,
+# e.g.:
+#
 # unit-test a : a.cpp : <use>b ;
 # lib b : a.cpp b ;
-#
-# Here, if <use> is not incidental, we'll decide we have two
-# targets for a.obj with different properties, and will complain.
 #
-# Note that making feature incidental does not mean it's ignored. It may
-# be ignored when creating the virtual target, but the rest of build process
-# will use them.
-feature use : : free dependency incidental ;
-feature dependency : : free dependency incidental ;
-feature implicit-dependency : : free dependency incidental ;
-
-feature warnings :
- on # enable default/"reasonable" warning level for the tool
- all # enable all possible warnings issued by the tool
- off # disable all warnings issued by the tool
+# Here, if <use> is not incidental, we'll decide we have two targets for a.obj
+# with different properties, and will complain.
+#
+# Note that making feature incidental does not mean it's ignored. It may be
+# ignored when creating the virtual target, but the rest of build process will
+# use them.
+feature.feature use : : free dependency incidental ;
+feature.feature dependency : : free dependency incidental ;
+feature.feature implicit-dependency : : free dependency incidental ;
+
+feature.feature warnings :
+ on # Enable default/"reasonable" warning level for the tool.
+ all # Enable all possible warnings issued by the tool.
+ off # Disable all warnings issued by the tool.
   : incidental propagated ;
 
-feature warnings-as-errors :
- off # do not fail the compilation if there are warnings
- on # fail the compilation if there are warnings
+feature.feature warnings-as-errors :
+ off # Do not fail the compilation if there are warnings.
+ on # Fail the compilation if there are warnings.
   : incidental propagated ;
 
-feature source : : free dependency incidental ;
-feature library : : free dependency incidental ;
-feature file : : free dependency incidental ;
-feature find-shared-library : : free ; #order-sensitive ;
-feature find-static-library : : free ; #order-sensitive ;
-feature library-path : : free path ; #order-sensitive ;
-# Internal feature.
-feature library-file : : free dependency ;
+feature.feature source : : free dependency incidental ;
+feature.feature library : : free dependency incidental ;
+feature.feature file : : free dependency incidental ;
+feature.feature find-shared-library : : free ; #order-sensitive ;
+feature.feature find-static-library : : free ; #order-sensitive ;
+feature.feature library-path : : free path ; #order-sensitive ;
 
-feature name : : free ;
-feature tag : : free ;
-feature search : : free path ; #order-sensitive ;
-feature location : : free path ;
+# Internal feature.
+feature.feature library-file : : free dependency ;
 
-feature dll-path : : free path ;
-feature hardcode-dll-paths : true false : incidental ;
+feature.feature name : : free ;
+feature.feature tag : : free ;
+feature.feature search : : free path ; #order-sensitive ;
+feature.feature location : : free path ;
+feature.feature dll-path : : free path ;
+feature.feature hardcode-dll-paths : true false : incidental ;
 
 
-# An internal feature that holds the paths of all dependency
-# dynamic libraries. On Windows, it's needed so that we can all
-# those paths to PATH when running applications.
-# On Linux, it's needed to add proper -rpath-link command line options.
-feature xdll-path : : free path ;
+# An internal feature that holds the paths of all dependency shared libraries.
+# On Windows, it's needed so that we can add all those paths to PATH when
+# running applications. On Linux, it's needed to add proper -rpath-link command
+# line options.
+feature.feature xdll-path : : free path ;
 
-#provides means to specify def-file for windows dlls.
-feature def-file : : free dependency ;
+# Provides means to specify def-file for windows DLLs.
+feature.feature def-file : : free dependency ;
 
-feature.feature suppress-import-lib : false true : incidental ;
+feature.feature suppress-import-lib : false true : incidental ;
 
-# This is internal feature which is used to store the name of
-# bjam action to call when building a target.
+# Internal feature used to store the name of a bjam action to call when building
+# a target.
 feature.feature action : : free ;
 
-# This feature is used to allow specific generators to run.
-# For example, QT tools can only be invoked when QT library
-# is used. In that case, <allow>qt will be in usage requirement
-# of the library.
-feature allow : : free ;
-
-# The addressing model to generate code for.
-# Currently a limited set only specifying the bit size of pointers.
-feature address-model : 16 32 64
- : propagated optional ;
+# This feature is used to allow specific generators to run. For example, QT
+# tools can only be invoked when QT library is used. In that case, <allow>qt
+# will be in usage requirement of the library.
+feature.feature allow : : free ;
+
+# The addressing model to generate code for. Currently a limited set only
+# specifying the bit size of pointers.
+feature.feature address-model : 16 32 64 : propagated optional ;
 
 # Type of CPU architecture to compile for.
-feature architecture :
+feature.feature architecture :
     # x86 and x86-64
     x86
+
     # ia64
     ia64
+
     # Sparc
     sparc
+
     # RS/6000 & PowerPC
     power
+
     # MIPS/SGI
     mips1 mips2 mips3 mips4 mips32 mips32r2 mips64
+
     # HP/PA-RISC
     parisc
- # Combined architectures for platforms/toolsets that support
- # building for multiple architectures at once. "combined"
- # would be the default multi-arch for the toolset.
- combined
- combined-x86-power
- #
+
+ # Combined architectures for platforms/toolsets that support building for
+ # multiple architectures at once. "combined" would be the default multi-arch
+ # for the toolset.
+ combined
+ combined-x86-power
+
     : propagated optional ;
 
 # The specific instruction set in an architecture to compile.
-feature instruction-set :
+feature.feature instruction-set :
     # x86 and x86-64
- i386 i486 i586 i686
- pentium pentium-mmx pentiumpro pentium2 pentium3 pentium3m pentium-m pentium4 pentium4m
- prescott nocona
- conroe conroe-xe conroe-l allendale mermon mermon-xe kentsfield kentsfield-xe
- penryn wolfdale yorksfield nehalem
- k6 k6-2 k6-3 athlon athlon-tbird athlon-4 athlon-xp athlon-mp
- k8 opteron athlon64 athlon-fx
- winchip-c6 winchip2
- c3 c3-2
+ i386 i486 i586 i686 pentium pentium-mmx pentiumpro pentium2 pentium3
+ pentium3m pentium-m pentium4 pentium4m prescott nocona conroe conroe-xe
+ conroe-l allendale mermon mermon-xe kentsfield kentsfield-xe penryn wolfdale
+ yorksfield nehalem k6 k6-2 k6-3 athlon athlon-tbird athlon-4 athlon-xp
+ athlon-mp k8 opteron athlon64 athlon-fx winchip-c6 winchip2 c3 c3-2
+
     # ia64
     itanium itanium1 merced itanium2 mckinley
+
     # Sparc
- v7 cypress v8 supersparc sparclite hypersparc sparclite86x
- f930 f934 sparclet tsc701 v9 ultrasparc ultrasparc3
+ v7 cypress v8 supersparc sparclite hypersparc sparclite86x f930 f934
+ sparclet tsc701 v9 ultrasparc ultrasparc3
+
     # RS/6000 & PowerPC
- 401 403 405 405fp 440 440fp 505
- 601 602 603 603e 604 604e 620 630 740 7400 7450 750
- 801 821 823 860 970 8540
- power-common ec603e g3 g4 g5
- power power2 power3 power4 power5 powerpc powerpc64
- rios rios1 rsc rios2 rs64a
+ 401 403 405 405fp 440 440fp 505 601 602 603 603e 604 604e 620 630 740 7400
+ 7450 750 801 821 823 860 970 8540 power-common ec603e g3 g4 g5 power power2
+ power3 power4 power5 powerpc powerpc64 rios rios1 rsc rios2 rs64a
+
     # MIPS
- 4kc 4kp 5kc 20kc m4k
- r2000 r3000 r3900 r4000 r4100 r4300 r4400 r4600 r4650 r6000 r8000
- rm7000 rm9000 orion sb1
- vr4100 vr4111 vr4120 vr4130 vr4300 vr5000 vr5400 vr5500
+ 4kc 4kp 5kc 20kc m4k r2000 r3000 r3900 r4000 r4100 r4300 r4400 r4600 r4650
+ r6000 r8000 rm7000 rm9000 orion sb1 vr4100 vr4111 vr4120 vr4130 vr4300
+ vr5000 vr5400 vr5500
+
     # HP/PA-RISC
     700 7100 7100lc 7200 7300 8000
- #
+
     : propagated optional ;
-
-
-# Used to select specific variant of C++ ABI is the compiler
-# supports several.
-feature c++abi : : propagated optional ;
-
-
-feature conditional : : incidental free ;
+
+# Used to select a specific variant of C++ ABI if the compiler supports several.
+feature.feature c++abi : : propagated optional ;
+
+feature.feature conditional : : incidental free ;
 
 # The value of 'no' prevents building of a target.
-feature build : yes no : optional ;
+feature.feature build : yes no : optional ;
 
 # Windows-specific features
 
-feature user-interface : console gui wince native auto ;
+feature.feature user-interface : console gui wince native auto ;
+
+feature.feature variant : : implicit composite propagated symmetric ;
 
-feature variant : : implicit composite propagated symmetric ;
 
 # Declares a new variant.
-# First determines explicit properties for this variant, by
-# refining parents' explicit properties with the passed explicit
-# properties. The result is remembered and will be used if
-# this variant is used as parent.
 #
-# Second, determines the full property set for this variant by
-# adding to the explicit properties default values for all properties
-# which neither present nor are symmetric.
+# First determines explicit properties for this variant, by refining parents'
+# explicit properties with the passed explicit properties. The result is
+# remembered and will be used if this variant is used as parent.
+#
+# Second, determines the full property set for this variant by adding to the
+# explicit properties default values for all missing non-symmetric properties.
 #
-# Lastly, makes appropriate value of 'variant' property expand
-# to the full property set.
-rule variant ( name # Name of the variant
- : parents-or-properties * # Specifies parent variants, if
- # 'explicit-properties' are given,
- # and explicit-properties otherwise.
- : explicit-properties * # Explicit properties.
+# Lastly, makes appropriate value of 'variant' property expand to the full
+# property set.
+rule variant ( name # Name of the variant
+ : parents-or-properties * # Specifies parent variants, if
+ # 'explicit-properties' are given, and
+ # explicit-properties or parents otherwise.
+ : explicit-properties * # Explicit properties.
     )
 {
     local parents ;
@@ -302,97 +296,99 @@
         parents = $(parents-or-properties) ;
     }
 
- # The problem is that we have to check for conflicts
- # between base variants.
+ # The problem is that we have to check for conflicts between base variants.
     if $(parents[2])
     {
- error "multiple base variants are not yet supported" ;
+ errors.error "multiple base variants are not yet supported" ;
     }
-
+
     local inherited ;
- # Add explicitly specified properties for parents
+ # Add explicitly specified properties for parents.
     for local p in $(parents)
     {
- # TODO: the check may be sticter
+ # TODO: This check may be made stricter.
         if ! [ feature.is-implicit-value $(p) ]
         {
- error "Invalid base varaint" $(p) ;
+ errors.error "Invalid base variant" $(p) ;
         }
-
+
         inherited += $(.explicit-properties.$(p)) ;
     }
     property.validate $(explicit-properties) ;
- explicit-properties = [ property.refine $(inherited) : $(explicit-properties) ] ;
-
- # Record explicitly specified properties for this variant
- # We do this after inheriting parents' properties, so that
- # they affect other variants, derived from this one.
+ explicit-properties = [ property.refine $(inherited)
+ : $(explicit-properties) ] ;
+
+ # Record explicitly specified properties for this variant. We do this after
+ # inheriting parents' properties so they affect other variants derived from
+ # this one.
     .explicit-properties.$(name) = $(explicit-properties) ;
-
+
     feature.extend variant : $(name) ;
- feature.compose <variant>$(name) : $(explicit-properties) ;
+ feature.compose <variant>$(name) : $(explicit-properties) ;
 }
 IMPORT $(__name__) : variant : : variant ;
 
-variant debug : <optimization>off <debug-symbols>on <inlining>off <runtime-debugging>on ;
-variant release : <optimization>speed <debug-symbols>off <inlining>full
+
+variant debug : <optimization>off <debug-symbols>on <inlining>off
+ <runtime-debugging>on ;
+variant release : <optimization>speed <debug-symbols>off <inlining>full
                   <runtime-debugging>off <define>NDEBUG ;
 variant profile : release : <profiling>on <debug-symbols>on ;
 
+
 class searched-lib-target : abstract-file-target
 {
- rule __init__ ( name
- : project
- : shared ?
+ rule __init__ ( name
+ : project
+ : shared ?
         : search *
         : action
     )
     {
- abstract-file-target.__init__ $(name) : SEARCHED_LIB : $(project)
+ abstract-file-target.__init__ $(name) : SEARCHED_LIB : $(project)
           : $(action) : ;
-
+
         self.shared = $(shared) ;
         self.search = $(search) ;
     }
-
+
     rule shared ( )
     {
         return $(self.shared) ;
     }
-
+
     rule search ( )
     {
         return $(self.search) ;
     }
-
+
     rule actualize-location ( target )
     {
         NOTFILE $(target) ;
- }
-
+ }
+
     rule path ( )
     {
     }
-}
-
-import types/register ;
-import stage ;
+}
 
 
-class c-scanner : scanner
+class c-scanner : scanner
 {
- import regex virtual-target path scanner ;
-
+ import path ;
+ import regex ;
+ import scanner ;
+ import virtual-target ;
+
     rule __init__ ( includes * )
     {
         scanner.__init__ ;
-
+
         for local i in $(includes)
- {
+ {
             self.includes += [ path.native $(i:G=) ] ;
         }
-
- }
+ }
 
     rule pattern ( )
     {
@@ -401,72 +397,70 @@
 
     rule process ( target : matches * : binding )
     {
- local angle = [ regex.transform $(matches) : "<(.*)>" ] ;
+ local angle = [ regex.transform $(matches) : "<(.*)>" ] ;
         local quoted = [ regex.transform $(matches) : "\"(.*)\"" ] ;
 
         # CONSIDER: the new scoping rule seem to defeat "on target" variables.
- local g = [ on $(target) return $(HDRGRIST) ] ;
+ local g = [ on $(target) return $(HDRGRIST) ] ;
         local b = [ NORMALIZE_PATH $(binding:D) ] ;
 
- # Attach binding of including file to included targets.
- # When target is directly created from virtual target
- # this extra information is unnecessary. But in other
- # cases, it allows to distinguish between two headers of the
- # same name included from different places.
- # We don't need this extra information for angle includes,
- # since they should not depend on including file (we can't
- # get literal "." in include path).
+ # Attach binding of including file to included targets. When a target is
+ # directly created from virtual target this extra information is
+ # unnecessary. But in other cases, it allows us to distinguish between
+ # two headers of the same name included from different places. We don't
+ # need this extra information for angle includes, since they should not
+ # depend on including file (we can't get literal "." in include path).
         local g2 = $(g)"#"$(b) ;
-
+
         angle = $(angle:G=$(g)) ;
         quoted = $(quoted:G=$(g2)) ;
-
+
         local all = $(angle) $(quoted) ;
 
         INCLUDES $(target) : $(all) ;
         NOCARE $(all) ;
         SEARCH on $(angle) = $(self.includes:G=) ;
         SEARCH on $(quoted) = $(b) $(self.includes:G=) ;
-
- # Just propagate current scanner to includes, in a hope
- # that includes do not change scanners.
+
+ # Just propagate the current scanner to includes in hope that includes
+ # do not change scanners.
         scanner.propagate $(__name__) : $(angle) $(quoted) : $(target) ;
-
+
         ISFILE $(angle) $(quoted) ;
- }
+ }
 }
 
-scanner.register c-scanner : include ;
 
-type.set-scanner CPP : c-scanner ;
+type.register H : h ;
+type.register HPP : hpp : H ;
+type.register C : c ;
 
+scanner.register c-scanner : include ;
 
-type.register H : h ;
-type.register HPP : hpp : H ;
-type.register C : c ;
+type.set-scanner CPP : c-scanner ;
+type.set-scanner C : c-scanner ;
 
-type.set-scanner C : c-scanner ;
 
-# The generator class for libraries (target type LIB). Depending on properties it will
-# request building of the approapriate specific type -- SHARED_LIB, STATIC_LIB or
-# SHARED_LIB.
+# The generator class for libraries (target type LIB). Depending on properties
+# it will request building of the appropriate specific library type --
+# -- SHARED_LIB, STATIC_LIB or SHARED_LIB.
 class lib-generator : generator
 {
     rule __init__ ( * : * )
     {
         generator.__init__ $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
     }
-
+
     rule run ( project name ? : property-set : sources * )
     {
- # The lib generator is composing, and can be only invoked with
+ # The lib generator is composing, and can be only invoked with an
         # explicit name. This check is present in generator.run (and so in
- # builtin.linking-generator), but duplicate it here to avoid doing
- # extra work.
+ # builtin.linking-generator) but duplicated here to avoid doing extra
+ # work.
         if $(name)
- {
+ {
             local properties = [ $(property-set).raw ] ;
- # Determine the needed target type
+ # Determine the needed target type.
             local actual-type ;
                 # <source>files can be generated by <conditional>@rule feature
                 # in which case we don't consider it a SEARCHED_LIB type.
@@ -477,129 +471,129 @@
             }
             else if <file> in $(properties:G)
             {
- # The generator for
                 actual-type = LIB ;
- }
+ }
             else if <link>shared in $(properties)
             {
                 actual-type = SHARED_LIB ;
             }
- else
+ else
             {
                 actual-type = STATIC_LIB ;
             }
             property-set = [ $(property-set).add-raw <main-target-type>LIB ] ;
             # Construct the target.
- return [ generators.construct $(project) $(name) : $(actual-type)
- : $(property-set) : $(sources) ] ;
- }
- }
-
+ return [ generators.construct $(project) $(name) : $(actual-type)
+ : $(property-set) : $(sources) ] ;
+ }
+ }
+
     rule viable-source-types ( )
     {
         return * ;
- }
+ }
 }
 
+
 generators.register [ new lib-generator builtin.lib-generator : : LIB ] ;
 
+
 # The implementation of the 'lib' rule. Beyond standard syntax that rule allows
-# simplified:
-# lib a b c ;
-# so we need to write code to handle that syntax.
-rule lib ( names + : sources * : requirements * : default-build *
+# simplified: "lib a b c ;".
+rule lib ( names + : sources * : requirements * : default-build *
     : usage-requirements * )
 {
- local result ;
- local project = [ project.current ] ;
-
- # This is a circular module dependency, so it must be imported here
- import targets ;
-
     if $(names[2])
     {
         if <name> in $(requirements:G)
         {
             errors.user-error "When several names are given to the 'lib' rule" :
- "it's not allowed to specify the <name> feature. " ;
- }
+ "it's not allowed to specify the <name> feature." ;
+ }
         if $(sources)
         {
             errors.user-error "When several names are given to the 'lib' rule" :
- "it's not allowed to specify sources. " ;
- }
+ "it's not allowed to specify sources." ;
+ }
     }
-
+
+ # This is a circular module dependency so it must be imported here.
+ import targets ;
+
+ local project = [ project.current ] ;
+ local result ;
+
     for local name in $(names)
- {
+ {
         local r = $(requirements) ;
- # Support " lib a ; " and " lib a b c ; " syntaxes.
+ # Support " lib a ; " and " lib a b c ; " syntax.
         if ! $(sources) && ! <name> in $(requirements:G)
                         && ! <file> in $(requirements:G)
         {
             r += <name>$(name) ;
- }
+ }
         result += [ targets.main-target-alternative
- [ new typed-target $(name) : $(project) : LIB
- : [ targets.main-target-sources $(sources) : $(name) ]
- : [ targets.main-target-requirements $(r) : $(project) ]
- : [ targets.main-target-default-build $(default-build) : $(project) ]
- : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
- ] ] ;
- }
+ [ new typed-target $(name) : $(project) : LIB
+ : [ targets.main-target-sources $(sources) : $(name) ]
+ : [ targets.main-target-requirements $(r) : $(project) ]
+ : [ targets.main-target-default-build $(default-build) : $(project) ]
+ : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
+ ] ] ;
+ }
     return $(result) ;
 }
 IMPORT $(__name__) : lib : : lib ;
 
+
 class searched-lib-generator : generator
 {
     import property-set ;
-
+
     rule __init__ ( )
     {
- # The requirements cause the generators to be tried *only* when we're building
- # lib target and there's 'search' feature. This seems ugly --- all we want
- # is make sure searched-lib-generator is not invoced deep in transformation
- # search.
+ # The requirements cause the generators to be tried *only* when we're
+ # building a lib target with a 'search' feature. This seems ugly --- all
+ # we want is to make sure searched-lib-generator is not invoked deep
+ # inside transformation search to produce intermediate targets.
         generator.__init__ searched-lib-generator : : SEARCHED_LIB ;
     }
-
+
     rule run ( project name ? : property-set : sources * )
     {
         if $(name)
         {
- # If name is empty, it means we're called not from top-level.
- # In this case, we just fail immediately, because searched-lib-generator
- # cannot be used to produce intermediate targets.
-
- local properties = [ $(property-set).raw ] ;
+ # If 'name' is empty, it means we have not been called to build a
+ # top-level target. In this case, we just fail immediately, because
+ # searched-lib-generator cannot be used to produce intermediate
+ # targets.
+
+ local properties = [ $(property-set).raw ] ;
             local shared ;
             if <link>shared in $(properties)
             {
                 shared = true ;
- }
-
+ }
+
             local search = [ feature.get-values <search> : $(properties) ] ;
 
- a = [ new null-action $(property-set) ] ;
+ local a = [ new null-action $(property-set) ] ;
             local lib-name = [ feature.get-values <name> : $(properties) ] ;
             lib-name ?= $(name) ;
- local t = [ new searched-lib-target $(lib-name) : $(project) : $(shared)
- : $(search)
- : $(a)
- ] ;
+ local t = [ new searched-lib-target $(lib-name) : $(project)
+ : $(shared) : $(search) : $(a) ] ;
             # We return sources for a simple reason. If there's
- # lib png : z : <name>png ;
- # the 'z' target should be returned, so that apps linking to
- # 'png' will link to 'z', too.
+ # lib png : z : <name>png ;
+ # the 'z' target should be returned, so that apps linking to 'png'
+ # will link to 'z', too.
             return [ property-set.create <xdll-path>$(search) ]
                    [ virtual-target.register $(t) ] $(sources) ;
         }
- }
+ }
 }
 
 generators.register [ new searched-lib-generator ] ;
 
+
 class prebuilt-lib-generator : generator
 {
     rule __init__ ( * : * )
@@ -611,94 +605,95 @@
     {
         local f = [ $(property-set).get <file> ] ;
         return $(f) $(sources) ;
- }
+ }
 }
 
-generators.register
+generators.register
   [ new prebuilt-lib-generator builtin.prebuilt : : LIB : <file> ] ;
 
 generators.override builtin.prebuilt : builtin.lib-generator ;
 
-
-class compile-action : action
+
+class compile-action : action
 {
     import sequence ;
-
+
     rule __init__ ( targets * : sources * : action-name : properties * )
     {
         action.__init__ $(targets) : $(sources) : $(action-name) : $(properties) ;
     }
-
-
- # For all virtual targets for the same dependency graph as self,
- # i.e. which belong to the same main target, add their directories
- # to include path.
+
+ # For all virtual targets for the same dependency graph as self, i.e. which
+ # belong to the same main target, add their directories to the include path.
     rule adjust-properties ( property-set )
- {
+ {
         local s = [ $(self.targets[1]).creating-subvariant ] ;
- return [ $(property-set).add-raw
+ return [ $(property-set).add-raw
           [ $(s).implicit-includes "include" : H ] ] ;
- }
+ }
 }
 
-# Declare a special compiler generator.
-# The only thing it does is changing the type used to represent
-# 'action' in the constructed dependency graph to 'compile-action'.
-# That class in turn adds additional include paths to handle a case
-# when a source file includes headers which are generated themselfs.
+
+# Declare a special compiler generator. The only thing it does is changing the
+# type used to represent 'action' in the constructed dependency graph to
+# 'compile-action'. That class in turn adds additional include paths to handle
+# cases when a source file includes headers which are generated themselves.
 class C-compiling-generator : generator
 {
- rule __init__ ( id : source-types + : target-types + :
- requirements * : optional-properties * )
+ rule __init__ ( id : source-types + : target-types + : requirements *
+ : optional-properties * )
     {
         generator.__init__ $(id) : $(source-types) : $(target-types) :
- $(requirements) : $(optional-properties) ;
+ $(requirements) : $(optional-properties) ;
     }
-
+
     rule action-class ( )
     {
         return compile-action ;
     }
 }
 
-rule register-c-compiler ( id : source-types + : target-types + :
- requirements * : optional-properties * )
+
+rule register-c-compiler ( id : source-types + : target-types + : requirements *
+ : optional-properties * )
 {
- local g = [ new C-compiling-generator $(id) : $(source-types)
- : $(target-types) : $(requirements) : $(optional-properties) ] ;
- generators.register $(g) ;
+ generators.register [ new C-compiling-generator $(id) : $(source-types)
+ : $(target-types) : $(requirements) : $(optional-properties) ] ;
 }
 
-# FIXME: this is ugly, should find a better way (we'd want client code to
-# register all generators as "generator.some-rule", not with "some-module.some-rule".)
+# FIXME: this is ugly, should find a better way (we'd like client code to
+# register all generators as "generators.some-rule" instead of
+# "some-module.some-rule".)
 IMPORT $(__name__) : register-c-compiler : : generators.register-c-compiler ;
 
+
 # The generator class for handling EXE and SHARED_LIB creation.
 class linking-generator : generator
 {
- import property-set ;
- import type ;
     import path ;
     import project ;
-
- rule __init__ ( id
- composing ? : # Specify if generator is composing. The generator will be
- # composing if non-empty string is passed, or parameter is
- # not given. To make generator non-composing, pass empty
- # string ("")
- source-types + : target-types + :
+ import property-set ;
+ import type ;
+
+ rule __init__ ( id
+ composing ? : # The generator will be composing if a non-empty
+ # string is passed or the parameter is not given. To
+ # make the generator non-composing, pass an empty
+ # string ("").
+ source-types + :
+ target-types + :
         requirements * )
     {
         composing ?= true ;
- generator.__init__ $(id) $(composing) : $(source-types) : $(target-types) :
- $(requirements) ;
+ generator.__init__ $(id) $(composing) : $(source-types)
+ : $(target-types) : $(requirements) ;
     }
-
+
     rule run ( project name ? : property-set : sources + )
- {
- sources += [ $(property-set).get <library> ] ;
-
- # Add <library-path> properties for all searched libraries
+ {
+ sources += [ $(property-set).get <library> ] ;
+
+ # Add <library-path> properties for all searched libraries.
         local extra ;
         for local s in $(sources)
         {
@@ -708,62 +703,60 @@
                 extra += <library-path>$(search) ;
             }
         }
-
- # It's possible that sources include shared libraries that
- # did not came from 'lib' targets. For example, .so files
- # specified as sources.
- # In this case we have
- # - add extra dll-path properties
- # - propagate extra xdll-path properties so that application
- # linking to use will get xdll-path to those libraries.
+
+ # It's possible that sources include shared libraries that did not came
+ # from 'lib' targets, e.g. .so files specified as sources. In this case
+ # we have to add extra dll-path properties and propagate extra xdll-path
+ # properties so that application linking to use will get xdll-path to
+ # those libraries.
         local extra-xdll-paths ;
         for local s in $(sources)
         {
- if [ type.is-derived [ $(s).type ] SHARED_LIB ] && ! [ $(s).action ]
+ if [ type.is-derived [ $(s).type ] SHARED_LIB ] && ! [ $(s).action ]
             {
- # Unfortunately, we don't have a good way to find the path
- # to a file, so use this nasty approach.
+ # Unfortunately, we don't have a good way to find the path to a
+ # file, so use this nasty approach.
                 local p = [ $(s).project ] ;
                 local location = [ path.root [ $(s).name ]
- [ $(p).get source-location ] ] ;
+ [ $(p).get source-location ] ] ;
                 extra-xdll-paths += [ path.parent $(location) ] ;
- }
+ }
         }
-
- # Hardcode dll paths only when linking executables.
+
+ # Hardcode DLL paths only when linking executables.
         # Pros: don't need to relink libraries when installing.
- # Cons: "standalone" libraries (plugins, python extensions)
- # can't hardcode paths to dependent libraries.
+ # Cons: "standalone" libraries (plugins, python extensions) can't
+ # hardcode paths to dependent libraries.
         if [ $(property-set).get <hardcode-dll-paths> ] = true
- && [ type.is-derived $(self.target-types[1]) EXE ]
+ && [ type.is-derived $(self.target-types[1]) EXE ]
         {
             local xdll-path = [ $(property-set).get <xdll-path> ] ;
             extra += <dll-path>$(xdll-path) <dll-path>$(extra-xdll-paths) ;
         }
-
+
         if $(extra)
         {
             property-set = [ $(property-set).add-raw $(extra) ] ;
- }
-
+ }
+
         local result = [ generator.run $(project) $(name) : $(property-set)
- : $(sources) ] ;
-
+ : $(sources) ] ;
+
         local ur ;
         if $(result)
- {
- ur = [ extra-usage-requirements $(result) : $(property-set) ] ;
- ur = [ $(ur).add
- [ property-set.create <xdll-path>$(extra-xdll-paths) ] ] ;
- }
+ {
+ ur = [ extra-usage-requirements $(result) : $(property-set) ] ;
+ ur = [ $(ur).add
+ [ property-set.create <xdll-path>$(extra-xdll-paths) ] ] ;
+ }
         return $(ur) $(result) ;
     }
-
+
     rule extra-usage-requirements ( created-targets * : property-set )
- {
- local result = [ property-set.empty ] ;
+ {
+ local result = [ property-set.empty ] ;
         local extra ;
-
+
         # Add appropricate <xdll-path> usage requirements.
         local raw = [ $(property-set).raw ] ;
         if <link>shared in $(raw)
@@ -772,41 +765,40 @@
             local pwd = [ path.pwd ] ;
             for local t in $(created-targets)
             {
- if [ type.is-derived [ $(t).type ] SHARED_LIB ]
+ if [ type.is-derived [ $(t).type ] SHARED_LIB ]
                 {
                     paths += [ path.root [ path.make [ $(t).path ] ] $(pwd) ] ;
- }
- }
+ }
+ }
             extra += $(paths:G=<xdll-path>) ;
         }
-
+
         # We need to pass <xdll-path> features that we've got from sources,
- # because if shared library is built, exe which uses it must know paths
- # to other shared libraries this one depends on, to be able to find them
- # all at runtime.
-
- # Just pass all features in property-set, it's theorically possible
- # that we'll propagate <xdll-path> features explicitly specified by
- # the user, but then the user's to blaim for using internal feature.
+ # because if a shared library is built, exe using it needs to know paths
+ # to other shared libraries this one depends on in order to be able to
+ # find them all at runtime.
+
+ # Just pass all features in property-set, it's theorically possible that
+ # we'll propagate <xdll-path> features explicitly specified by the user,
+ # but then the user's to blaim for using an internal feature.
         local values = [ $(property-set).get <xdll-path> ] ;
         extra += $(values:G=<xdll-path>) ;
-
+
         if $(extra)
         {
             result = [ property-set.create $(extra) ] ;
         }
         return $(result) ;
     }
-
+
     rule generated-targets ( sources + : property-set : project name ? )
     {
- local sources2 ; # sources to pass to inherited rule
- local properties2 ; # properties to pass to inherited rule
- local libraries ; # sources which are libraries
-
- # Searched libraries are not passed as argument to linker
- # but via some option. So, we pass them to the action
- # via property.
+ local sources2 ; # Sources to pass to inherited rule.
+ local properties2 ; # Properties to pass to inherited rule.
+ local libraries ; # Library sources.
+
+ # Searched libraries are not passed as arguments to the linker but via
+ # some option. So, we pass them to the action using a property.
         properties2 = [ $(property-set).raw ] ;
         local fsa ;
         local fst ;
@@ -815,75 +807,73 @@
             if [ type.is-derived [ $(s).type ] SEARCHED_LIB ]
             {
                 local name = [ $(s).name ] ;
- if [ $(s).shared ]
- {
- fsa += $(name) ;
+ if [ $(s).shared ]
+ {
+ fsa += $(name) ;
                 }
                 else
                 {
                     fst += $(name) ;
- }
+ }
             }
             else
             {
                 sources2 += $(s) ;
             }
         }
- properties2 += <find-shared-library>$(fsa:J=&&)
+ properties2 += <find-shared-library>$(fsa:J=&&)
                        <find-static-library>$(fst:J=&&) ;
-
- local spawn = [ generator.generated-targets $(sources2)
- : [ property-set.create $(properties2) ] : $(project) $(name) ] ;
-
- return $(spawn) ;
- }
-}
-
-rule register-linker ( id composing ? : source-types + : target-types + :
- requirements * )
-{
- local g = [ new linking-generator $(id) $(composing) : $(source-types)
- : $(target-types) : $(requirements) ] ;
- generators.register $(g) ;
+
+ return [ generator.generated-targets $(sources2)
+ : [ property-set.create $(properties2) ] : $(project) $(name) ] ;
+ }
 }
 
+
+rule register-linker ( id composing ? : source-types + : target-types +
+ : requirements * )
+{
+ generators.register [ new linking-generator $(id) $(composing)
+ : $(source-types) : $(target-types) : $(requirements) ] ;
+}
+
+
 # The generator class for handling STATIC_LIB creation.
 class archive-generator : generator
 {
- import property-set ;
+ import property-set ;
 
- rule __init__ ( id composing ? : source-types + : target-types + :
- requirements * )
+ rule __init__ ( id composing ? : source-types + : target-types +
+ : requirements * )
     {
         composing ?= true ;
- generator.__init__ $(id) $(composing) : $(source-types) : $(target-types) :
- $(requirements) ;
+ generator.__init__ $(id) $(composing) : $(source-types)
+ : $(target-types) : $(requirements) ;
     }
-
+
     rule run ( project name ? : property-set : sources + )
- {
- sources += [ $(property-set).get <library> ] ;
-
+ {
+ sources += [ $(property-set).get <library> ] ;
+
         local result = [ generator.run $(project) $(name) : $(property-set)
- : $(sources) ] ;
-
- # For static linking, if we get a library in source, we can't
- # directly link to it. So, we need to cause our dependencies
- # to link to that library. There are two approaches:
+ : $(sources) ] ;
+
+ # For static linking, if we get a library in source, we can't directly
+ # link to it so we need to cause our dependencies to link to that
+ # library. There are two approaches:
         # - adding the library to the list of returned targets.
         # - using the <library> usage requirements.
         # The problem with the first is:
- #
+ #
         # lib a1 : : <file>liba1.a ;
         # lib a2 : a2.cpp a1 : <link>static ;
         # install dist : a2 ;
         #
- # here we'll try to install 'a1', even though it's not necessary in
- # the general case.
- # With the second approaches, even indirect dependents will link to
- # the library, but it should not cause any harm.
- # So, return all LIB sources together with created targets,
- # so that dependents link to them.
+ # here we'll try to install 'a1', even though it's not necessary in the
+ # general case. With the second approach, even indirect dependants will
+ # link to the library, but it should not cause any harm. So, return all
+ # LIB sources together with created targets, so that dependants link to
+ # them.
         local usage-requirements ;
         if [ $(property-set).get <link> ] = static
         {
@@ -892,41 +882,36 @@
                 if [ type.is-derived [ $(t).type ] LIB ]
                 {
                     usage-requirements += <library>$(t) ;
- }
- }
+ }
+ }
         }
-
+
         usage-requirements = [ property-set.create $(usage-requirements) ] ;
-
+
         return $(usage-requirements) $(result) ;
- }
+ }
 }
 
-rule register-archiver ( id composing ? : source-types + : target-types + :
- requirements * )
+
+rule register-archiver ( id composing ? : source-types + : target-types +
+ : requirements * )
 {
- local g = [ new archive-generator $(id) $(composing) : $(source-types)
- : $(target-types) : $(requirements) ] ;
- generators.register $(g) ;
+ generators.register [ new archive-generator $(id) $(composing)
+ : $(source-types) : $(target-types) : $(requirements) ] ;
 }
 
-# Generators that accepts everything, and produces nothing.
-# Usefull as general fallback for toolset-specific actions, like
-# PCH generation.
+
+# Generator that accepts everything and produces nothing. Useful as a general
+# fallback for toolset-specific actions like PCH generation.
 class dummy-generator : generator
 {
     import property-set ;
-
+
     rule run ( project name ? : property-set : sources + )
     {
         return [ property-set.empty ] ;
     }
 }
 
-
-
-IMPORT $(__name__) : register-linker register-archiver
- : : generators.register-linker generators.register-archiver ;
-
-
-
+IMPORT $(__name__) : register-linker register-archiver
+ : : generators.register-linker generators.register-archiver ;

Modified: branches/fix-links/tools/build/v2/tools/cast.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/cast.jam (original)
+++ branches/fix-links/tools/build/v2/tools/cast.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -10,7 +10,7 @@
 # This is done with:
 #
 # exe main : main.cpp [ cast _ moccable-cpp : widget.cpp ] ;
-#
+#
 # Boost.Build will assing target type CPP to both main.cpp and widget.cpp.
 # Then, the cast rule will change target type of widget.cpp to
 # MOCCABLE-CPP, and Qt support will run MOC tool as part of build process.
@@ -22,22 +22,25 @@
 # cast, as defining new target type + generator for that type is somewhat
 # simpler then defining main target rule.
 
-import project type targets ;
 import "class" : new ;
 import errors ;
+import project ;
 import property-set ;
+import targets ;
+import type ;
+
 
 class cast-target-class : typed-target
 {
     import type ;
-
- rule __init__ ( name : project : type
- : sources * : requirements * : default-build * : usage-requirements * )
+
+ rule __init__ ( name : project : type : sources * : requirements *
+ : default-build * : usage-requirements * )
     {
- typed-target.__init__ $(name) : $(project) : $(type)
- : $(sources) : $(requirements) : $(default-build) : $(usage-requirements) ;
+ typed-target.__init__ $(name) : $(project) : $(type) : $(sources)
+ : $(requirements) : $(default-build) : $(usage-requirements) ;
     }
-
+
     rule construct ( name : source-targets * : property-set )
     {
         local result ;
@@ -47,43 +50,42 @@
             {
                 ECHO "error: source to the 'cast' rule is not a file!" ;
                 EXIT ;
- }
+ }
             if [ $(s).action ]
             {
                 ECHO "error: only non-derived target are allowed for 'cast'." ;
                 ECHO "error: when building " [ full-name ] ;
                 EXIT ;
- }
+ }
             local r = [ $(s).clone-with-different-type $(self.type) ] ;
             result += [ virtual-target.register $(r) ] ;
         }
-
         return [ property-set.empty ] $(result) ;
- }
-
+ }
 }
 
-rule cast ( name type : sources * : requirements * : default-build *
+
+rule cast ( name type : sources * : requirements * : default-build *
     : usage-requirements * )
 {
     local project = [ project.current ] ;
-
+
     local real-type = [ type.type-from-rule-name $(type) ] ;
     if ! $(real-type)
     {
- errors.user-error "No type corresponds to main target rule nam '$(type)'"
- : "Hint: try lowercase name" ;
+ errors.user-error "No type corresponds to main target rule name '$(type)'"
+ : "Hint: try lowercase name" ;
     }
-
-
- # This is a circular module dependency, so it must be imported here
+
+ # This is a circular module dependency so it must be imported here.
     import targets ;
     targets.main-target-alternative
- [ new cast-target-class $(name) : $(project) : $(real-type)
- : [ targets.main-target-sources $(sources) : $(name) ]
- : [ targets.main-target-requirements $(requirements) : $(project) ]
- : [ targets.main-target-default-build $(default-build) : $(project) ]
- : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
- ] ;
+ [ new cast-target-class $(name) : $(project) : $(real-type)
+ : [ targets.main-target-sources $(sources) : $(name) ]
+ : [ targets.main-target-requirements $(requirements) : $(project) ]
+ : [ targets.main-target-default-build $(default-build) : $(project) ]
+ : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
+ ] ;
 }
+
 IMPORT $(__name__) : cast : : cast ;

Modified: branches/fix-links/tools/build/v2/tools/common.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/common.jam (original)
+++ branches/fix-links/tools/build/v2/tools/common.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,9 +1,9 @@
-# Copyright 2003, 2005 Dave Abrahams
-# Copyright 2005, 2006 Rene Rivera
-# Copyright 2005 Toon Knapen
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003, 2005 Dave Abrahams
+# Copyright 2005, 2006 Rene Rivera
+# Copyright 2005 Toon Knapen
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 # Provides actions common to all toolsets, for as making directoies and
 # removing files.
@@ -31,41 +31,43 @@
 
 # Configurations
 #
-# The following class helps to manage toolset configurations. Each configuration
-# has unique ID and one or more parameters. A typical example of unique ID is
-# a condition generated by 'common.check-init-parameters' rule. Other kinds of
-# ID can be used. Parameters may include any details about the configuration like
-# 'command', 'path', etc.
-#
-# A configuration may be in one of two states:
-#
-# - registered - a toolset configuration is registered (by autodetection code
-# for instance) but is not used. I.e. 'toolset.using' wasn't yet been called
-# for this configuration.
-# - used - once called 'toolset.using' marks the configuration as 'used'.
-#
-# The main difference between the states is that while a configuration is
-# 'registered' its options can be freely changed. This is useful in particular
-# for autodetection code - all detected configurations may be safely overwritten
-# by a user.
+# The following class helps to manage toolset configurations. Each configuration
+# has a unique ID and one or more parameters. A typical example of a unique ID
+# is a condition generated by 'common.check-init-parameters' rule. Other kinds
+# of IDs can be used. Parameters may include any details about the configuration
+# like 'command', 'path', etc.
+#
+# A toolset configuration may be in one of the following states:
+#
+# - registered
+# Configuration has been registered (e.g. by autodetection code) but has
+# not yet been marked as used, i.e. 'toolset.using' rule has not yet been
+# called for it.
+# - used
+# Once called 'toolset.using' rule marks the configuration as 'used'.
+#
+# The main difference between the states above is that while a configuration is
+# 'registered' its options can be freely changed. This is useful in particular
+# for autodetection code - all detected configurations may be safely overwritten
+# by user code.
 
 class configurations
 {
- import errors : error ;
+ import errors ;
 
     rule __init__ ( )
     {
     }
-
- # Registers a configuration.
+
+ # Registers a configuration.
     #
- # Returns 'true' if the configuration has been added and an empty value if
+ # Returns 'true' if the configuration has been added and an empty value if
     # it already exists. Reports an error if the configuration is 'used'.
     rule register ( id )
     {
- if $(id) in $(self.used)
+ if $(id) in $(self.used)
         {
- error "common: the configuration '$(id)' is in use" ;
+ errors.error "common: the configuration '$(id)' is in use" ;
         }
 
         local retval ;
@@ -74,28 +76,28 @@
         {
             self.all += $(id) ;
 
- # indicate that a new configuration has been added
+ # Indicate that a new configuration has been added.
             retval = true ;
         }
 
         return $(retval) ;
     }
 
- # Mark a configuration as 'used'.
+ # Mark a configuration as 'used'.
     #
- # Returns 'true' if the state of the configuration has been changed to
+ # Returns 'true' if the state of the configuration has been changed to
     # 'used' and an empty value if it the state wasn't changed. Reports an error
     # if the configuration isn't known.
     rule use ( id )
     {
         if ! $(id) in $(self.all)
         {
- error "common: the configuration '$(id)' is not known" ;
+ errors.error "common: the configuration '$(id)' is not known" ;
         }
 
         local retval ;
 
- if ! $(id) in $(self.used)
+ if ! $(id) in $(self.used)
         {
             self.used += $(id) ;
 
@@ -117,31 +119,30 @@
     {
         return $(self.used) ;
     }
-
+
     # Returns the value of a configuration parameter.
     rule get ( id : param )
     {
- return $(self.$(param).$(id)) ;
+ return $(self.$(param).$(id)) ;
     }
 
     # Sets the value of a configuration parameter.
     rule set ( id : param : value * )
     {
- self.$(param).$(id) = $(value) ;
+ self.$(param).$(id) = $(value) ;
     }
 }
 
 
-# The rule checks toolset parameters. Each trailing parameter
-# should be a pair of parameter name and parameter value.
-# The rule will check that each parameter either has value in
-# each invocation, or has no value in each invocation. Also,
-# the rule will check that the combination of all parameter values is
-# unique in all invocations.
+# The rule for checking toolset parameters. Trailing parameters should all be
+# parameter name/value pairs. The rule will check that each parameter either has
+# a value in each invocation or has no value in each invocation. Also, the rule
+# will check that the combination of all parameter values is unique in all
+# invocations.
 #
-# Each parameter name corresponds to subfeature. This rule will declare subfeature
-# the first time non-empty parameter value is passed, and will extend it with
-# all the values.
+# Each parameter name corresponds to a subfeature. This rule will declare
+# a subfeature the first time a non-empty parameter value is passed and will
+# extend it with all the values.
 #
 # The return value from this rule is a condition to be used for flags settings.
 rule check-init-parameters ( toolset : * )
@@ -152,8 +153,8 @@
     {
         local name = $($(index)[1]) ;
         local value = $($(index)[2]) ;
-
- if $(value)-is-specified
+
+ if $(value)-is-not-empty
         {
             condition = $(condition)-$(value) ;
             if $(.had-unspecified-value.$(toolset).$(name))
@@ -163,37 +164,36 @@
                 "no value was specified in earlier initialization" :
                 "an explicit value is specified now" ;
             }
- # The below logic is for intel compiler. It calls this rule
- # with 'intel-linux' and 'intel-win' as toolset, so we need to
- # get the base part of toolset name.
- # We can't pass 'intel' as toolset, because it that case it will
- # be impossible to register versionles intel-linux and
- # intel-win of specific version.
+ # The below logic is for intel compiler. It calls this rule with
+ # 'intel-linux' and 'intel-win' as toolset, so we need to get the
+ # base part of toolset name. We can't pass 'intel' as toolset
+ # because in that case it will be impossible to register versionless
+ # intel-linux and intel-win toolsets of a specific version.
             local t = $(toolset) ;
             local m = [ MATCH ([^-]*)- : $(toolset) ] ;
             if $(m)
             {
                 t = $(m[1]) ;
- }
- if ! $(.had-value.$(toolset).$(name))
+ }
+ if ! $(.had-value.$(toolset).$(name))
             {
                 if ! $(.declared-subfeature.$(t).$(name))
                 {
                     feature.subfeature toolset $(t) : $(name) : : propagated ;
                     .declared-subfeature.$(t).$(name) = true ;
- }
+ }
                 .had-value.$(toolset).$(name) = true ;
             }
             feature.extend-subfeature toolset $(t) : $(name) : $(value) ;
         }
         else
         {
- if $(.had-value.$(toolset).$(name))
+ if $(.had-value.$(toolset).$(name))
             {
- errors.user-error
+ errors.user-error
                 "$(toolset) initialization: parameter '$(name)' inconsistent" :
                 "an explicit value was specified in an earlier initialization" :
- "no value is specified now" ;
+ "no value is specified now" ;
             }
             .had-unspecified-value.$(toolset).$(name) = true ;
         }
@@ -201,23 +201,24 @@
     }
     if $(sig) in $(.all-signatures)
     {
- local message =
- "duplicate initialization of $(toolset) with the following parameters: " ;
+ local message =
+ "duplicate initialization of $(toolset) with the following parameters: " ;
         for local index in 2 3 4 5 6 7 8 9
         {
             local p = $($(index)) ;
             if $(p)
             {
                 message += "$(p[1]) = $(p[2]:E=<unspecified>)" ;
- }
+ }
         }
         message += "previous initialization at $(.init-loc.$(sig))" ;
- errors.user-error $(message[1]) : $(message[2]) : $(message[3]) : $(message[4])
- : $(message[5]) : $(message[6]) : $(message[7]) : $(message[8]) ;
- }
+ errors.user-error
+ $(message[1]) : $(message[2]) : $(message[3]) : $(message[4]) :
+ $(message[5]) : $(message[6]) : $(message[7]) : $(message[8]) ;
+ }
     .all-signatures += $(sig) ;
     .init-loc.$(sig) = [ errors.nearest-user-location ] ;
-
+
     if $(.show-configuration)
     {
         ECHO notice: $(condition) ;
@@ -225,18 +226,16 @@
     return $(condition) ;
 }
 
-# A helper rule to get the command to invoke some tool.
-# In 'user-provided-command' is not given, tries to find binary
-# named 'tool' in PATH and in the passed 'additional-path'. Otherwise,
-# verified that the first element of 'user-provided-command' is an
-# existing program.
-#
+
+# A helper rule to get the command to invoke some tool. If
+# 'user-provided-command' is not given, tries to find binary named 'tool' in
+# PATH and in the passed 'additional-path'. Otherwise, verifies that the first
+# element of 'user-provided-command' is an existing program.
 #
 # This rule returns the command to be used when invoking the tool. If we can't
-# find the tool, a warning is issued.
-# If 'path-last' is specified, PATH is checked after 'additional-paths' when
-# searching to 'tool'.
-rule get-invocation-command-nodefault (
+# find the tool, a warning is issued. If 'path-last' is specified, PATH is
+# checked after 'additional-paths' when searching for 'tool'.
+rule get-invocation-command-nodefault (
     toolset : tool : user-provided-command * : additional-paths * : path-last ? )
 {
     local command ;
@@ -251,7 +250,7 @@
     }
     else
     {
- command = [ common.check-tool $(user-provided-command) ] ;
+ command = [ common.check-tool $(user-provided-command) ] ;
         if ! $(command) && $(.debug-configuration)
         {
             ECHO "warning: toolset $(toolset) initialization: " ;
@@ -263,15 +262,15 @@
     return $(command) ;
 }
 
-# Same as get-invocation-command-nodefault, except that if no tool
-# if found, returns either the user-provided-command, if present,
-# or the 'tool' parameter.
-rule get-invocation-command (
+
+# Same as get-invocation-command-nodefault, except that if no tool is found,
+# returns either the user-provided-command, if present, or the 'tool' parameter.
+rule get-invocation-command (
     toolset : tool : user-provided-command * : additional-paths * : path-last ? )
 {
     local result = [ get-invocation-command-nodefault $(toolset) : $(tool)
- : $(user-provided-command) : $(additional-paths) : $(path-last) ] ;
-
+ : $(user-provided-command) : $(additional-paths) : $(path-last) ] ;
+
     if ! $(result)
     {
         if $(user-provided-command)
@@ -281,14 +280,14 @@
         else
         {
             result = $(tool) ;
- }
+ }
     }
- return $(result) ;
+ return $(result) ;
 }
-
-# Given an invocation command,
-# return the absolute path to the command. This works even if commnad
-# has not path element and is present in PATH.
+
+
+# Given an invocation command return the absolute path to the command. This
+# works even if command has no path element and was found on the PATH.
 rule get-absolute-tool-path ( command )
 {
     if $(command:D)
@@ -299,22 +298,20 @@
     {
         local m = [ GLOB [ modules.peek : PATH Path path ] : $(command) $(command).exe ] ;
         return $(m[1]:D) ;
- }
+ }
 }
 
 
-
 # Attempts to find tool (binary) named 'name' in PATH and in 'additional-paths'.
-# If found in PATH, returns 'name'.
-# If found in additional paths, returns absolute name. If the tool is found
-# in several directories, return all paths.
-# Otherwise, returns empty string.
-# If 'path-last' is specified, PATH is searched after 'additional-paths'.
+# If found in PATH, returns 'name' and if found in additional paths, returns
+# absolute name. If the tool is found in several directories, returns all paths.
+# Otherwise, returns an empty string. If 'path-last' is specified, PATH is
+# searched after 'additional-paths'.
 rule find-tool ( name : additional-paths * : path-last ? )
 {
     local path = [ path.programs-path ] ;
     local match = [ path.glob $(path) : $(name) $(name).exe ] ;
- local additional-match = [ path.glob $(additional-paths) : $(name) $(name).exe ] ;
+ local additional-match = [ path.glob $(additional-paths) : $(name) $(name).exe ] ;
 
     local result ;
     if $(path-last)
@@ -337,65 +334,65 @@
         }
     }
     if $(result)
- {
+ {
         return [ path.native $(result[1]) ] ;
- }
+ }
 }
 
-# Checks if 'command' can be found either in path
-# or is a full name to an existing file.
+
+# Checks if 'command' can be found either in path or is a full name to an
+# existing file.
 rule check-tool-aux ( command )
 {
     if $(command:D)
     {
         if [ path.exists $(command) ]
- # Both NT and Cygwin will run .exe files by their unqualified names
- || [ os.on-windows ] && [ path.exists $(command).exe ]
- # Only NT will run .bat files by their unqualified names
+ # Both NT and Cygwin will run .exe files by their unqualified names.
+ || [ os.on-windows ] && [ path.exists $(command).exe ]
+ # Only NT will run .bat files by their unqualified names.
             || [ os.name ] = NT && [ path.exists $(command).bat ]
         {
             return $(command) ;
- }
+ }
     }
     else
     {
         if [ GLOB [ modules.peek : PATH Path path ] : $(command) ]
         {
             return $(command) ;
- }
- }
+ }
+ }
 }
 
 
-# Checks that a tool can be invoked by 'command'.
-# If command is not an absolute path, checks if it can be found in 'path'.
-# If comand is absolute path, check that it exists. Returns 'command'
-# if ok and empty string otherwise.
+# Checks that a tool can be invoked by 'command'. If command is not an absolute
+# path, checks if it can be found in 'path'. If comand is an absolute path,
+# check that it exists. Returns 'command' if ok or empty string otherwise.
 rule check-tool ( xcommand + )
 {
- if [ check-tool-aux $(xcommand[1]) ]
- || [ check-tool-aux $(xcommand[-1]) ]
+ if [ check-tool-aux $(xcommand[1]) ] ||
+ [ check-tool-aux $(xcommand[-1]) ]
     {
         return $(xcommand) ;
     }
 }
 
-# Handle common options for toolset, specifically sets the following
-# flag variables:
+
+# Handle common options for toolset, specifically sets the following flag
+# variables:
 # - CONFIG_COMMAND to 'command'
-# - OPTIONS for compile.c to the value of <cflags> in options
-# - OPTIONS for compile.c++ to the value of <cxxflags> in options
-# - OPTIOns for compile to the value of <compileflags> in options
-# - OPTIONs for link to the value of <linkflags> in options
+# - OPTIONS for compile.c to the value of <cflags> in options
+# - OPTIONS for compile.c++ to the value of <cxxflags> in options
+# - OPTIOns for compile to the value of <compileflags> in options
+# - OPTIONs for link to the value of <linkflags> in options
 rule handle-options ( toolset : condition * : command * : options * )
 {
     if $(.debug-configuration)
     {
         ECHO "notice: will use '$(command)' for $(toolset), condition $(condition:E=(empty))" ;
     }
-
- # The last parameter ('true') says it's OK to set flags for another
- # module,
+
+ # The last parameter ('true') says it's OK to set flags for another module.
     toolset.flags $(toolset) CONFIG_COMMAND $(condition) : $(command) : unchecked ;
     toolset.flags $(toolset).compile OPTIONS $(condition) :
       [ feature.get-values <compileflags> : $(options) ] : unchecked ;
@@ -406,12 +403,11 @@
     toolset.flags $(toolset).compile.fortran OPTIONS $(condition) :
       [ feature.get-values <fflags> : $(options) ] : unchecked ;
     toolset.flags $(toolset).link OPTIONS $(condition) :
- [ feature.get-values <linkflags> : $(options) ] : unchecked ;
+ [ feature.get-values <linkflags> : $(options) ] : unchecked ;
 }
 
 
-# returns the location of the "program files" directory on a windows
-# platform
+# Returns the location of the "program files" directory on a windows platform.
 rule get-program-files-dir ( )
 {
     local ProgramFiles = [ modules.peek : ProgramFiles ] ;
@@ -426,12 +422,13 @@
     return $(ProgramFiles) ;
 }
 
+
 if [ os.name ] = NT
 {
     RM = del /f /q ;
     CP = copy ;
     IGNORE = "2>nul >nul & setlocal" ;
- LN ?= $(CP) ;
+ LN ?= $(CP) ;
 }
 else
 {
@@ -440,28 +437,29 @@
     LN = ln ;
 }
 
-nl = "
-" ;
 
-rule rm-command ( )
+rule rm-command ( )
 {
- return $(RM) ;
+ return $(RM) ;
 }
 
+
 rule copy-command ( )
 {
     return $(CP) ;
 }
 
 
-# Returns the command needed to set the environment variable on the
-# current platform. The variable setting persists through all
-# following commands and is visible in the environment seen by
-# subsequently executed commands. In other words, on Unix systems,
-# the variable is exported, which is consistent with the only possible
-# behavior on Windows systems.
+# Returns the command needed to set an environment variable on the current
+# platform. The variable setting persists through all following commands and is
+# visible in the environment seen by subsequently executed commands. In other
+# words, on Unix systems, the variable is exported, which is consistent with the
+# only possible behavior on Windows systems.
 rule variable-setting-command ( variable : value )
-{
+{
+ local nl = "
+" ;
+
     if [ os.name ] = NT
     {
         return "set $(variable)=$(value)$(nl)" ;
@@ -472,30 +470,28 @@
     }
 }
 
-# Returns a command that sets the named shell path variable to the
-# given NATIVE paths to on the current platform.
+
+# Returns a command to sets a named shell path variable to the given NATIVE
+# paths on the current platform.
 rule path-variable-setting-command ( variable : paths * )
-{
+{
     local sep = [ os.path-separator ] ;
     return [ variable-setting-command $(variable) : $(paths:J=$(sep)) ] ;
 }
 
-# Returns a command that prepends the given paths to the named path
-# variable on the current platform.
+
+# Returns a command that prepends the given paths to the named path variable on
+# the current platform.
 rule prepend-path-variable-command ( variable : paths * )
-{
- return [
- path-variable-setting-command $(variable)
- : $(paths) [ os.expand-variable $(variable) ]
- ] ;
+{
+ return [ path-variable-setting-command $(variable)
+ : $(paths) [ os.expand-variable $(variable) ] ] ;
 }
 
 
-# Return a command which can create a file. If 'r' is result of invocation,
-# then
-# r foobar
-# will create foobar with unspecified content. What happens if file already
-# exists is unspecified.
+# Return a command which can create a file. If 'r' is result of invocation, then
+# 'r foobar' will create foobar with unspecified content. What happens if file
+# already exists is unspecified.
 rule file-creation-command ( )
 {
     if [ modules.peek : NT ]
@@ -508,10 +504,10 @@
     }
 }
 
-
-# Returns a command that may be used for 'touching' files.
-# It is not a real 'touch' command on NT because it adds an empty line at
-# the end of file but it works with source files
+
+# Returns a command that may be used for 'touching' files. It is not a real
+# 'touch' command on NT because it adds an empty line at the end of file but it
+# works with source files.
 rule file-touch-command ( )
 {
     if [ os.name ] in NT
@@ -527,18 +523,14 @@
 
 rule MkDir
 {
- # If dir exists, don't update it
- # Do this even for $(DOT).
-
+ # If dir exists, don't update it. Do this even for $(DOT).
     NOUPDATE $(<) ;
 
     if $(<) != $(DOT) && ! $($(<)-mkdir)
     {
- local s ;
-
- # Cheesy gate to prevent multiple invocations on same dir
- # MkDir1 has the actions
- # Arrange for jam dirs
+ # Cheesy gate to prevent multiple invocations on same dir.
+ # MkDir1 has the actions.
+ # Arrange for jam dirs.
 
         $(<)-mkdir = true ;
         MkDir1 $(<) ;
@@ -547,7 +539,7 @@
         # Recursively make parent directories.
         # $(<:P) = $(<)'s parent, & we recurse until root
 
- s = $(<:P) ;
+ local s = $(<:P) ;
 
         if $(NT)
         {
@@ -557,7 +549,7 @@
                 case *:\\ : s = ;
             }
         }
-
+
         if $(s) && $(s) != $(<)
         {
             Depends $(<) : $(s) ;
@@ -570,18 +562,21 @@
     }
 }
 
+
 actions MkDir1
 {
     mkdir "$(<)"
 }
 
+
 actions piecemeal together existing Clean
 {
     $(RM) "$(>)"
 }
 
-rule copy
-{
+
+rule copy
+{
 }
 
 
@@ -590,28 +585,32 @@
     $(CP) "$(>)" "$(<)"
 }
 
+
 rule RmTemps
 {
 }
+
+
 actions quietly updated piecemeal together RmTemps
 {
     $(RM) "$(>)" $(IGNORE)
 }
 
+
 actions hard-link
 {
     $(RM) "$(<)" 2$(NULL_OUT) $(NULL_OUT)
- $(LN) "$(>)" "$(<)" $(NULL_OUT)
+ $(LN) "$(>)" "$(<)" $(NULL_OUT)
 }
 
 
 # Given a target, as given to a custom tag rule, returns a string formatted
 # according to the passed format. Format is a list of properties that is
-# represented in the result. For each element of format the corresponding
-# target information is obtained and added to the result string.
-# For all, but the literal, the format value is taken as the as string to
-# prepend to the output to join the item to the rest of the result. If not
-# given "-" is used as a joiner.
+# represented in the result. For each element of format the corresponding target
+# information is obtained and added to the result string. For all, but the
+# literal, the format value is taken as the as string to prepend to the output
+# to join the item to the rest of the result. If not given "-" is used as a
+# joiner.
 #
 # The format options can be:
 #
@@ -642,8 +641,8 @@
 # boost_thread-vc80-mt-gd-1_33.dll, or
 # boost_regex-vc80-gd-1_33.dll
 #
-# The returned name also has the target type specific prefix and suffix
-# which puts it in a ready form to use as the value from a custom tag rule.
+# The returned name also has the target type specific prefix and suffix which
+# puts it in a ready form to use as the value from a custom tag rule.
 #
 rule format-name ( format * : name : type ? : property-set )
 {
@@ -656,19 +655,19 @@
             {
                 case <base> :
                 result += $(name:B) ;
-
+
                 case <toolset> :
                 result += [ join-tag $(f:G=) :
                     [ toolset-tag $(name) : $(type) : $(property-set) ] ] ;
-
+
                 case <threading> :
                 result += [ join-tag $(f:G=) :
                     [ threading-tag $(name) : $(type) : $(property-set) ] ] ;
-
+
                 case <runtime> :
                 result += [ join-tag $(f:G=) :
                     [ runtime-tag $(name) : $(type) : $(property-set) ] ] ;
-
+
                 case <version:*> :
                 local key = [ MATCH <version:(.*)> : $(f:G) ] ;
                 local version = [ $(property-set).get <$(key)> ] ;
@@ -676,7 +675,7 @@
                 version = [ MATCH "^([^.]+)[.]([^.]+)[.]?([^.]*)"
                     : $(version) ] ;
                 result += [ join-tag $(f:G=) : $(version[1])_$(version[2]) ] ;
-
+
                 case <property:*> :
                 local key = [ MATCH <property:(.*)> : $(f:G) ] ;
                 local p = [ $(property-set).get [ MATCH <property:(.*)> : $(f:G) ] ] ;
@@ -684,7 +683,7 @@
                 {
                     result += [ join-tag $(f:G=) : $(p) ] ;
                 }
-
+
                 case * :
                 result += $(f:G=) ;
             }
@@ -695,16 +694,18 @@
     }
 }
 
+
 local rule join-tag ( joiner ? : tag ? )
 {
     if ! $(joinder) { joiner = - ; }
     return $(joiner)$(tag) ;
 }
 
+
 local rule toolset-tag ( name : type ? : property-set )
 {
     local tag = ;
-
+
     local properties = [ $(property-set).raw ] ;
     switch [ $(property-set).get <toolset> ]
     {
@@ -721,7 +722,7 @@
                 case * : tag += gcc ;
             }
         }
- case intel :
+ case intel :
         if [ $(property-set).get <toolset-intel:platform> ] = win
         {
             tag += iw ;
@@ -742,8 +743,7 @@
     }
     local version = [ MATCH "<toolset.*version>([0123456789]+)[.]([0123456789]*)"
         : $(properties) ] ;
- # For historical reasons, vc6.0 and vc7.0 use different
- # naming.
+ # For historical reasons, vc6.0 and vc7.0 use different naming.
     if $(tag) = vc
     {
         if $(version[1]) = 6
@@ -756,88 +756,87 @@
             version = 7 ;
         }
     }
- # On intel, version is not added, because it does not
- # matter and it's the version of vc used as backend
- # that matters. Ideally, we'd encode the backend
- # version but that will break compatibility with
- # V1.
+ # On intel, version is not added, because it does not matter and it's the
+ # version of vc used as backend that matters. Ideally, we'd encode the
+ # backend version but that would break compatibility with V1.
     if $(tag) = iw
     {
         version = ;
     }
-
- # On borland, version is not added for compatibility
- # with V1.
+
+ # On borland, version is not added for compatibility with V1.
     if $(tag) = bcb
     {
         version = ;
     }
-
+
     tag += $(version) ;
-
+
     return $(tag:J=) ;
 }
 
+
 local rule threading-tag ( name : type ? : property-set )
 {
     local tag = ;
     local properties = [ $(property-set).raw ] ;
     if <threading>multi in $(properties) { tag = mt ; }
-
+
     return $(tag:J=) ;
 }
 
+
 local rule runtime-tag ( name : type ? : property-set )
 {
     local tag = ;
-
+
     local properties = [ $(property-set).raw ] ;
     if <runtime-link>static in $(properties) { tag += s ; }
-
- # This is ugly thing. In V1, there's a code to automatically
- # detect which properties affect a target. So, if
- # <runtime-debugging> does not affect gcc toolset, the
- # tag rules won't even see <runtime-debugging>.
- # Similar functionality in V2 is not implemented yet, so we just
- # check for toolsets which are know to care about runtime debug
- if <toolset>msvc in $(properties)
- || <stdlib>stlport in $(properties)
+
+ # This is an ugly thing. In V1, there's a code to automatically detect which
+ # properties affect a target. So, if <runtime-debugging> does not affect gcc
+ # toolset, the tag rules won't even see <runtime-debugging>. Similar
+ # functionality in V2 is not implemented yet, so we just check for toolsets
+ # which are known to care about runtime debug.
+ if <toolset>msvc in $(properties) ||
+ <stdlib>stlport in $(properties)
     {
- if <runtime-debugging>on in $(properties) { tag += g ; }
+ if <runtime-debugging>on in $(properties) { tag += g ; }
     }
-
+
     if <python-debugging>on in $(properties) { tag += y ; }
     if <variant>debug in $(properties) { tag += d ; }
     if <stdlib>stlport in $(properties) { tag += p ; }
     if <stdlib-stlport:iostream>hostios in $(properties) { tag += n ; }
-
+
     return $(tag:J=) ;
 }
 
-rule __test__ ( ) {
 
+rule __test__ ( )
+{
     import assert ;
-
- local save-os = [ modules.peek os : name ] ;
-
- modules.poke os : .name : LINUX ;
-
+
     local nl = "
 " ;
-
+
+ local save-os = [ modules.peek os : name ] ;
+
+ modules.poke os : .name : LINUX ;
+
     assert.result "PATH=foo:bar:baz$(nl)export PATH$(nl)"
- : path-variable-setting-command PATH : foo bar baz ;
-
+ : path-variable-setting-command PATH : foo bar baz ;
+
     assert.result "PATH=foo:bar:$PATH$(nl)export PATH$(nl)"
- : prepend-path-variable-command PATH : foo bar ;
-
+ : prepend-path-variable-command PATH : foo bar ;
+
     modules.poke os : .name : NT ;
-
+
     assert.result "set PATH=foo;bar;baz$(nl)"
- : path-variable-setting-command PATH : foo bar baz ;
-
+ : path-variable-setting-command PATH : foo bar baz ;
+
     assert.result "set PATH=foo;bar;%PATH%$(nl)"
- : prepend-path-variable-command PATH : foo bar ;
+ : prepend-path-variable-command PATH : foo bar ;
 
- modules.poke os : .name : $(save-os) ;
-}
+ modules.poke os : .name : $(save-os) ;
+}

Modified: branches/fix-links/tools/build/v2/tools/doxygen.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/doxygen.jam (original)
+++ branches/fix-links/tools/build/v2/tools/doxygen.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -352,7 +352,7 @@
         # Build an HTML directory from the sources.
         local html-location = [ feature.get-values <location> : $(requirements) ] ;
         local output-dir = [ path.root
- [ path.join $(html-location:E=html) [ $(project).get build-dir ] ]
+ [ path.join [ $(project).get build-dir ] $(html-location:E=html) ]
             [ path.pwd ]
             ] ;
         local output-dir-native = [ path.native $(output-dir) ] ;

Modified: branches/fix-links/tools/build/v2/tools/generate.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/generate.jam (original)
+++ branches/fix-links/tools/build/v2/tools/generate.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,6 +1,6 @@
-# Copyright 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 # Declares main target 'generate' that can be used to produce targets
 # by calling a user-provides rule, that takes virtual target and produces
@@ -9,13 +9,13 @@
 import targets ;
 import "class" : new ;
 import property ;
-import errors : error ;
-import type : type ;
+import errors ;
 import regex ;
 import property-set ;
 import project ;
 import feature ;
 
+
 feature.feature generating-rule : : free ;
 
 
@@ -24,28 +24,28 @@
     import errors ;
     import indirect ;
     import virtual-target ;
-
+
     rule __init__ ( name : project : sources * : requirements *
         : default-build * : usage-requirements * )
- {
- basic-target.__init__ $(name) : $(project) : $(sources)
- : $(requirements) : $(default-build) : $(usage-requirements) ;
-
+ {
+ basic-target.__init__ $(name) : $(project) : $(sources)
+ : $(requirements) : $(default-build) : $(usage-requirements) ;
+
         local r = [ $(self.requirements).get <generating-rule> ] ;
         if ! $(r)
         {
- errors.user-error
- "The generate rule requires <generating-rule> property to be set" ;
- }
+ errors.user-error
+ "The generate rule requires <generating-rule> property to be set" ;
+ }
     }
-
+
     rule construct ( name : sources * : property-set )
     {
         local result ;
         local gr = [ $(property-set).get <generating-rule> ] ;
-
+
         # FIXME: this is copy-paste from virtual-target.jam. Must
- # have an utilty rule to call a rule like this.
+ # have n utilty rule to call a rule like this.
         local rule-name = [ MATCH ^@(.*) : $(gr) ] ;
         if $(rule-name)
         {
@@ -53,22 +53,21 @@
             {
                 errors.error "<tag>@rulename is present but is not the only <tag> feature" ;
             }
-
-
- result = [ indirect.call $(rule-name) $(self.project) $(name)
- : $(property-set) : $(sources) ] ;
-
+
+ result = [ indirect.call $(rule-name) $(self.project) $(name)
+ : $(property-set) : $(sources) ] ;
+
             if ! $(result)
             {
                 ECHO "warning: Unable to construct" [ full-name ] ;
- }
- }
-
+ }
+ }
+
         local ur ;
         local targets ;
 
         if $(result)
- {
+ {
             if [ class.is-a $(result[1]) : property-set ]
             {
                 ur = $(result[1]) ;
@@ -78,31 +77,30 @@
             {
                 ur = [ property-set.empty ] ;
                 targets = $(result) ;
- }
- }
+ }
+ }
         local rt ;
         for t in $(targets)
         {
             rt += [ virtual-target.register $(t) ] ;
         }
         return $(ur) $(rt) ;
- }
+ }
 }
 
-rule generate ( name : sources * : requirements * : default-build *
+
+rule generate ( name : sources * : requirements * : default-build *
     : usage-requirements * )
 {
     local project = [ project.current ] ;
-
+
     targets.main-target-alternative
- [ new generated-target-class $(name) : $(project)
- : [ targets.main-target-sources $(sources) : $(name) ]
- : [ targets.main-target-requirements $(requirements) : $(project) ]
- : [ targets.main-target-default-build $(default-build) : $(project) ]
- : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
- ] ;
+ [ new generated-target-class $(name) : $(project)
+ : [ targets.main-target-sources $(sources) : $(name) ]
+ : [ targets.main-target-requirements $(requirements) : $(project) ]
+ : [ targets.main-target-default-build $(default-build) : $(project) ]
+ : [ targets.main-target-usage-requirements $(usage-requirements) : $(project) ]
+ ] ;
 }
 
 IMPORT $(__name__) : generate : : generate ;
-
-

Modified: branches/fix-links/tools/build/v2/tools/gettext.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/gettext.jam (original)
+++ branches/fix-links/tools/build/v2/tools/gettext.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,47 +1,47 @@
-# Copyright 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 # This module support GNU gettext internationalization utilities.
-#
+#
 # It provides two main target rules: 'gettext.catalog', used for
 # creating machine-readable catalogs from translations files, and
 # 'gettext.update', used for update translation files from modified
 # sources.
-#
+#
 # To add i18n support to your application you should follow these
 # steps.
-#
+#
 # - Decide on a file name which will contain translations and
 # what main target name will be used to update it. For example::
-#
+#
 # gettext.update update-russian : russian.po a.cpp my_app ;
-#
+#
 # - Create the initial translation file by running::
 #
 # bjam update-russian
 #
 # - Edit russian.po. For example, you might change fields like LastTranslator.
-#
+#
 # - Create a main target for final message catalog::
 #
 # gettext.catalog russian : russian.po ;
 #
-# The machine-readable catalog will be updated whenever you update
+# The machine-readable catalog will be updated whenever you update
 # "russian.po". The "russian.po" file will be updated only on explicit
 # request. When you're ready to update translations, you should
-#
+#
 # - Run::
-#
+#
 # bjam update-russian
 #
 # - Edit "russian.po" in appropriate editor.
-#
+#
 # The next bjam run will convert "russian.po" into machine-readable form.
 #
 # By default, translations are marked by 'i18n' call. The 'gettext.keyword'
 # feature can be used to alter this.
-
+
 
 import targets ;
 import property-set ;
@@ -59,7 +59,7 @@
 
 # Initializes the gettext module.
 rule init ( path ? # Path where all tools are located. If not specified,
- # they should be in PATH.
+ # they should be in PATH.
           )
 {
     if $(.initialized) && $(.path) != $(path)
@@ -68,9 +68,9 @@
     }
     .initialized = true ;
     if $(path)
- {
+ {
         .path = $(path)/ ;
- }
+ }
 }
 
 # Creates a main target 'name', which, when updated, will cause
@@ -80,36 +80,36 @@
 # of those main targets will be scanned, provided they are of
 # appropricate type. The 'gettext.types' feature can be used to
 # control the types.
-#
+#
 # The target will be updated only if explicitly requested on the
 # command line.
 rule update ( name : existing-translation sources + : requirements * )
 {
     local project = [ project.current ] ;
-
+
     targets.main-target-alternative
       [ new typed-target $(name) : $(project) : gettext.UPDATE :
         $(existing-translation) $(sources)
- : [ targets.main-target-requirements $(requirements) : $(project) ]
+ : [ targets.main-target-requirements $(requirements) : $(project) ]
       ] ;
     $(project).mark-target-as-explicit $(name) ;
 }
 
 
 # The human editable source, containing translation.
-type.register gettext.PO : po ;
+type.register gettext.PO : po ;
 # The machine readable message catalog.
 type.register gettext.catalog : mo ;
 # Intermediate type produce by extracting translations from
 # sources.
-type.register gettext.POT : pot ;
+type.register gettext.POT : pot ;
 # Pseudo type used to invoke update-translations generator
 type.register gettext.UPDATE ;
 
 # Identifies the keyword that should be used when scanning sources.
 # Default: i18n
 feature gettext.keyword : : free ;
-# Contains space-separated list of sources types which should be scanned.
+# Contains space-separated list of sources types which should be scanned.
 # Default: "C CPP"
 feature gettext.types : : free ;
 
@@ -119,7 +119,7 @@
 {
     import regex : split ;
     import property-set ;
-
+
     rule __init__ ( * : * )
     {
         generator.__init__ $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
@@ -135,11 +135,11 @@
         local types = [ $(property-set).get <gettext.types> ] ;
         types ?= "C CPP" ;
         types = [ regex.split $(types) " " ] ;
-
+
         local keywords = [ $(property-set).get <gettext.keyword> ] ;
         property-set = [ property-set.create $(keywords:G=<gettext.keyword>) ] ;
 
- # First deterime the list of sources that must be scanned for
+ # First deterime the list of sources that must be scanned for
         # messages.
         local all-sources ;
         # CONSIDER: I'm not sure if the logic should be the same as for 'stage':
@@ -154,22 +154,22 @@
             if [ $(s).type ] in $(types)
             {
                 right-sources += $(s) ;
- }
+ }
         }
-
+
         local .constructed ;
         if $(right-sources)
- {
+ {
             # Create the POT file, which will contain list of messages extracted
             # from the sources.
- local extract =
+ local extract =
               [ new action $(right-sources) : gettext.extract : $(property-set) ] ;
- local new-messages = [ new file-target $(name) : gettext.POT
+ local new-messages = [ new file-target $(name) : gettext.POT
               : $(project) : $(extract) ] ;
-
+
             # Create a notfile target which will update the existing translation file
- # with new messages.
- local a = [ new action $(sources[1]) $(new-messages)
+ # with new messages.
+ local a = [ new action $(sources[1]) $(new-messages)
               : gettext.update-po-dispatch ] ;
             local r = [ new notfile-target $(name) : $(project) : $(a) ] ;
             .constructed = [ virtual-target.register $(r) ] ;
@@ -177,9 +177,9 @@
         else
         {
             errors.error "No source could be scanned by gettext tools" ;
- }
- return $(.constructed) ;
- }
+ }
+ return $(.constructed) ;
+ }
 }
 generators.register [ new update-translations-generator gettext.update : : gettext.UPDATE ] ;
 
@@ -199,23 +199,22 @@
 # first run), we need to copy the file created from sources.
 # In all other cases, we need to update the file.
 rule update-po-dispatch
-{
+{
     NOCARE $(>[1]) ;
     gettext.create-po $(<) : $(>) ;
     gettext.update-po $(<) : $(>) ;
- _ on $(<) = " " ;
+ _ on $(<) = " " ;
     ok on $(<) = "" ;
     EXISTING_PO on $(<) = $(>[1]) ;
 }
 
-# Due to fancy interaction of existing and updated, this rule
-# can be called with with one source, in which case we copy
-# the lonely source into EXISTING_PO, or with two sources,
-# in which case the action body expands to nothing.
-# I'd really like to have "missing" action modifier.
+# Due to fancy interaction of existing and updated, this rule can be called with
+# one source, in which case we copy the lonely source into EXISTING_PO, or with
+# two sources, in which case the action body expands to nothing. I'd really like
+# to have "missing" action modifier.
 actions quietly existing updated create-po bind EXISTING_PO
 {
- cp$(_)"$(>[1])"$(_)"$(EXISTING_PO)"$($(>[2]:E=ok))
+ cp$(_)"$(>[1])"$(_)"$(EXISTING_PO)"$($(>[2]:E=ok))
 }
 
 actions updated update-po bind EXISTING_PO
@@ -223,12 +222,9 @@
     $(.path)msgmerge$(_)-U$(_)"$(EXISTING_PO)"$(_)"$(>[1])"
 }
 
-actions gettext.compile
+actions gettext.compile
 {
- $(.path)msgfmt -o $(<) $(>)
+ $(.path)msgfmt -o $(<) $(>)
 }
 
 IMPORT $(__name__) : update : : gettext.update ;
-
-
-

Modified: branches/fix-links/tools/build/v2/tools/intel-win.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/intel-win.jam (original)
+++ branches/fix-links/tools/build/v2/tools/intel-win.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -78,6 +78,10 @@
 
     # Enable ADL
     C++FLAGS += -Qoption,c,--arg_dep_lookup ; #"c" works for C++, too
+
+ # Disable Microsoft "secure" overloads in Dinkumware libraries
+ # since they cause compile errors with Intel versions 9 and 10
+ C++FLAGS += -D_SECURE_SCL=0 ;
 
     if $(major) > 5
     {

Modified: branches/fix-links/tools/build/v2/tools/intel.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/intel.jam (original)
+++ branches/fix-links/tools/build/v2/tools/intel.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -30,6 +30,5 @@
     {
         toolset.using intel-win :
           $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
-
     }
 }

Modified: branches/fix-links/tools/build/v2/tools/msvc.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/msvc.jam (original)
+++ branches/fix-links/tools/build/v2/tools/msvc.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -9,17 +9,16 @@
 # License Version 1.0. (See accompanying file LICENSE_1_0.txt or
 # http://www.boost.org/LICENSE_1_0.txt)
 
+import "class" : new ;
 import property ;
 import generators ;
 import os ;
 import type ;
 import toolset : flags ;
-import errors : error ;
-import feature : feature get-values ;
+import errors ;
+import feature ;
 import path ;
-import sequence : unique ;
 import common ;
-import "class" : new ;
 import rc ;
 import midl ;
 import mc ;
@@ -51,15 +50,14 @@
 # Dynamic runtime comes only in MT flavour.
 toolset.add-requirements <toolset>msvc,<runtime-link>shared:<threading>multi ;
 
-
-RM = [ common.rm-command ] ;
+RM = [ common.rm-command ] ;
 nl = "
 " ;
 
 
-# Initialize the toolset for a specific version. As the result, path to
-# compiler and, possible, program names are set up, and will be used when
-# that version of compiler is requested. For example, you might have:
+# Initialize the toolset for a specific version. As the result, path to compiler
+# and, possible, program names are set up, and will be used when that version of
+# compiler is requested. For example, you might have:
 #
 # using msvc : 6.5 : cl.exe ;
 # using msvc : 7.0 : Y:/foo/bar/cl.exe ;
@@ -72,36 +70,36 @@
 # - all - all detected versions will be registered;
 # - default - this is an equivalent to an empty version.
 #
-# Depending on a supplied version, detected configurations and presence
-# 'cl.exe' in the path different results may be achieved. The following
-# table describes all possible cases:
+# Depending on a supplied version, detected configurations and presence 'cl.exe'
+# in the path different results may be achieved. The following table describes
+# all possible cases:
 #
 # Nothing "x.y"
 # Passed Nothing "x.y" detected, detected,
 # version detected detected cl.exe in path cl.exe in path
-#
+#
 # default Error Use "x.y" Create "default" Use "x.y"
 # all None Use all None Use all
 # x.y - Use "x.y" - Use "x.y"
 # a.b Error Error Create "a.b" Create "a.b"
-#
+#
 # "x.y" - refers to a detected version;
 # "a.b" - refers to an undetected version.
 #
 # Note: for free VC7.1 tools, we don't correctly find vcvars32.bar when user
 # explicitly provides a path.
-rule init (
+rule init (
     version ? # the msvc version which is being configured. When omitted
             # the tools invoked when no explicit version is given will be configured.
- : command *
+ : command *
     # the command to invoke the compiler. If not specified:
     # - if version is given, default location for that version will be searched
- #
- # - if version is not given, default locations for 7.1, 7.0 and 6.* will
- # be searched
- #
- # - if compiler is not found in default locations, PATH will be searched.
- : options *
+ #
+ # - if version is not given, default locations for 7.1, 7.0 and 6.* will
+ # be searched
+ #
+ # - if compiler is not found in default locations, PATH will be searched.
+ : options *
     # options can include <setup>, <compiler>, <assembler>, <linker> and <resource-compiler>
     #
     # <compiler-filter>
@@ -118,22 +116,19 @@
 }
 
 
-# 'configure' is a newer version of 'init'. The parameter 'command' is passed as
+# 'configure' is a newer version of 'init'. The parameter 'command' is passed as
 # a part of the 'options' list.
-rule configure (
- version ? :
- options *
- )
+rule configure ( version ? : options * )
 {
     switch $(version)
     {
         case all :
             if $(options)
             {
- error "msvc: options should be empty when 'all' is specified" ;
+ errors.error "msvc: options should be empty when 'all' is specified" ;
             }
 
- # use all detected versions
+ # Use all detected versions.
             for local v in [ $(.versions).all ]
             {
                 configure-really $(v) ;
@@ -149,27 +144,24 @@
 
 
 # Supported CPU architectures
-cpu-arch-i386 =
+cpu-arch-i386 =
     <architecture>/<address-model>
     <architecture>/<address-model>32
- <architecture>x86/<address-model>
+ <architecture>x86/<address-model>
     <architecture>x86/<address-model>32 ;
 
-cpu-arch-amd64 =
- <architecture>/<address-model>64
+cpu-arch-amd64 =
+ <architecture>/<address-model>64
     <architecture>x86/<address-model>64 ;
 
 cpu-arch-ia64 =
- <architecture>ia64/<address-model>
+ <architecture>ia64/<address-model>
     <architecture>ia64/<address-model>64 ;
 
 
-local rule configure-really (
- version ? :
- options *
- )
+local rule configure-really ( version ? : options * )
 {
- # If no version supplied use the default configuration. Note that condition
+ # If no version supplied use the default configuration. Note that condition
     # remains versionless.
     local v = $(version) ;
     if ! $(v)
@@ -179,7 +171,7 @@
         version = $(version[1]) ;
         v = $(version) ;
 
- # Note: 'version' can still be empty at this point if no versions were
+ # Note: 'version' can still be empty at this point if no versions were
         # detected.
         version ?= "default" ;
     }
@@ -194,15 +186,15 @@
     if $(version) in [ $(.versions).used ]
     {
         # Allow multiple 'toolset.usage' calls for the same configuration
- # if the identical sets of options are used
+ # if the identical sets of options are used
         if $(options) && ( $(options) != [ $(.versions).get $(version) : options ] )
         {
- error "msvc: the toolset version '$(version)' is configured already" ;
+ errors.error "msvc: the toolset version '$(version)' is configured already" ;
         }
     }
     else
     {
- # Register a new configuration
+ # Register a new configuration
         $(.versions).register $(version) ;
 
         # Add user-supplied to auto-detected options
@@ -212,26 +204,23 @@
         $(.versions).use $(version) ;
 
         # Generate condition and save it
- local condition = [ common.check-init-parameters msvc :
- version $(v) ] ;
+ local condition = [ common.check-init-parameters msvc : version $(v) ] ;
 
         $(.versions).set $(version) : condition : $(condition) ;
 
+ local command = [ feature.get-values <command> : $(options) ] ;
 
- local command = [ get-values <command> : $(options) ] ;
-
- # If version is specified, we try to search first in default paths,
- # and only then in PATH.
+ # If version is specified, we try to search first in default paths, and
+ # only then in PATH.
         command = [ common.get-invocation-command msvc : cl.exe : $(command)
           : [ default-paths $(version) ] : $(version) ] ;
 
         common.handle-options msvc : $(condition) : $(command) : $(options) ;
-
 
- if ! $(version)
+ if ! $(version)
         {
- # Even if version is not explicitly specified, try to detect the version
- # from the path.
+ # Even if version is not explicitly specified, try to detect the
+ # version from the path.
             if [ MATCH "(Microsoft Visual Studio 9)" : $(command) ]
             {
                 version = 9.0 ;
@@ -239,7 +228,7 @@
             if [ MATCH "(Microsoft Visual Studio 8)" : $(command) ]
             {
                 version = 8.0 ;
- }
+ }
             else if [ MATCH "(NET 2003[\/\\]VC7)" : $(command) ]
             {
                 version = 7.1 ;
@@ -255,11 +244,10 @@
             else
             {
                 version = 6.0 ;
- }
+ }
         }
 
-
- # Generate and register setup command
+ # Generate and register setup command.
 
         local below-8.0 = [ MATCH ^([67]\\.) : $(version) ] ;
 
@@ -276,9 +264,9 @@
             parent = [ path.parent $(parent) ] ;
             parent = [ path.native $(parent) ] ;
 
- # setup will be used if the script name has been specified.
- # If setup is not specified, a default script will be used instead.
- setup = [ get-values <setup> : $(options) ] ;
+ # Setup will be used if the script name has been specified. If setup
+ # is not specified, a default script will be used instead.
+ setup = [ feature.get-values <setup> : $(options) ] ;
 
             if ! $(setup)
             {
@@ -291,14 +279,14 @@
                     setup ?= vcvarsall.bat ;
                 }
 
- # The vccars32.bat is actually in "bin" directory.
- # (except for free VC7.1 tools)
+ # The vccars32.bat is actually in "bin" directory except for
+ # free VC7.1 tools.
                 setup = [ GLOB $(command) $(parent) : $(setup) ] ;
             }
 
             if $(setup)
             {
- # Note Cygwin to Windows translation
+ # Note Cygwin to Windows translation.
                 setup = "\""$(setup[1]:W)"\"" ;
 
                 if ! $(below-8.0)
@@ -309,16 +297,14 @@
                     # say about x86_IPF, that seem to be doc bug,
                     # and x86_ia64 is right one.
                     setup-option = x86 x86_amd64 x86_ia64 ;
-
- # When using 64-bit Windows, and targeting 64-bit,
- # it's possible to use native 64-bit compiler, which is
- # selected by the "amd64" parameter to vcvarsall.bat.
- # There are two variables we can use --
- # PROCESSOR_ARCHITECTURE and PROCESSOR_IDENTIFIER.
- # The first is 'x86' when running 32-bit windows,
- # no matter what processor is, and 'AMD64' on 64-bit
- # windows on x86 (either AMD64 or EM64T).
- # windows.
+
+ # When using 64-bit Windows, and targeting 64-bit, it's
+ # possible to use native 64-bit compiler, which is selected
+ # by the "amd64" parameter to vcvarsall.bat. There are two
+ # variables we can use -- PROCESSOR_ARCHITECTURE and
+ # PROCESSOR_IDENTIFIER. The first is 'x86' when running
+ # 32-bit windows, no matter what processor is, and 'AMD64'
+ # on 64-bit windows on x86 (either AMD64 or EM64T) windows.
                     if [ MATCH ^(AMD64) : [ os.environ PROCESSOR_ARCHITECTURE ] ]
                     {
                         setup-option = x86 amd64 x86_ia64 ;
@@ -338,32 +324,32 @@
 
         command = $(prefix)$(setup)" "$(setup-option:E="")$(suffix) ;
 
- # Setup script is not required in some configurations
+ # Setup script is not required in some configurations.
         command ?= "" ;
 
- # Get tool names (if any) and finish setup
+ # Get tool names (if any) and finish setup.
 
- compiler = [ get-values <compiler> : $(options) ] ;
+ compiler = [ feature.get-values <compiler> : $(options) ] ;
         compiler ?= cl ;
 
- linker = [ get-values <linker> : $(options) ] ;
+ linker = [ feature.get-values <linker> : $(options) ] ;
         linker ?= link ;
 
- resource-compiler = [ get-values <resource-compiler> : $(options) ] ;
+ resource-compiler = [ feature.get-values <resource-compiler> : $(options) ] ;
         resource-compiler ?= rc ;
 
- assembler = [ get-values <assembler> : $(options) ] ;
+ assembler = [ feature.get-values <assembler> : $(options) ] ;
         assembler ?= ml ;
 
- idl-compiler = [ get-values <idl-compiler> : $(options) ] ;
+ idl-compiler = [ feature.get-values <idl-compiler> : $(options) ] ;
         idl-compiler ?= midl ;
 
- mc-compiler = [ get-values <mc-compiler> : $(options) ] ;
+ mc-compiler = [ feature.get-values <mc-compiler> : $(options) ] ;
         mc-compiler ?= mc ;
 
         manifest-tool = mt ;
-
- local cc-filter = [ get-values <compiler-filter> : $(options) ] ;
+
+ local cc-filter = [ feature.get-values <compiler-filter> : $(options) ] ;
 
         for local i in 1 2 3
         {
@@ -378,31 +364,31 @@
                     ECHO "msvc: condition: '$(cond)', "
                         "command: '$(command[$(i)])'" ;
                 }
-
- flags msvc.compile .CC $(cond) : $(command[$(i)])$(compiler) /Zm800 -nologo ;
- flags msvc.compile .RC $(cond) : $(command[$(i)])$(resource-compiler) ;
- flags msvc.compile .ASM $(cond) : $(command[$(i)])$(assembler) ;
- flags msvc.link .LD $(cond) : $(command[$(i)])$(linker) /NOLOGO /INCREMENTAL:NO ;
- flags msvc.archive .LD $(cond) : $(command[$(i)])$(linker) /lib /NOLOGO ;
- flags msvc.compile .IDL $(cond) : $(command[$(i)])$(idl-compiler) ;
- flags msvc.compile .MC $(cond) : $(command[$(i)])$(mc-compiler) ;
+
+ toolset.flags msvc.compile .CC $(cond) : $(command[$(i)])$(compiler) /Zm800 -nologo ;
+ toolset.flags msvc.compile .RC $(cond) : $(command[$(i)])$(resource-compiler) ;
+ toolset.flags msvc.compile .ASM $(cond) : $(command[$(i)])$(assembler) ;
+ toolset.flags msvc.link .LD $(cond) : $(command[$(i)])$(linker) /NOLOGO /INCREMENTAL:NO ;
+ toolset.flags msvc.archive .LD $(cond) : $(command[$(i)])$(linker) /lib /NOLOGO ;
+ toolset.flags msvc.compile .IDL $(cond) : $(command[$(i)])$(idl-compiler) ;
+ toolset.flags msvc.compile .MC $(cond) : $(command[$(i)])$(mc-compiler) ;
 
                 if ! [ os.name ] in NT
                 {
- flags msvc.link .MT $(cond) : $(command[$(i)])$(manifest-tool) -nologo ;
+ toolset.flags msvc.link .MT $(cond) : $(command[$(i)])$(manifest-tool) -nologo ;
                 }
                 else
                 {
- flags msvc.link .MT $(cond) : $(manifest-tool) -nologo ;
+ toolset.flags msvc.link .MT $(cond) : $(manifest-tool) -nologo ;
                 }
-
+
                 if $(cc-filter)
                 {
- flags msvc .CC.FILTER $(cond) : "|" $(cc-filter) ;
+ toolset.flags msvc .CC.FILTER $(cond) : "|" $(cc-filter) ;
                 }
             }
         }
- # Set version-specific flags
+ # Set version-specific flags.
         configure-version-specific msvc : $(version) : $(condition) ;
     }
 }
@@ -411,95 +397,94 @@
 # Supported CPU types (only Itanium optimization options are supported from
 # VC++ 2005 on). See http://msdn2.microsoft.com/en-us/library/h66s5s0e(vs.90).aspx
 cpu-type-g5 = i586 pentium pentium-mmx ;
-cpu-type-g6 =
- i686 pentiumpro pentium2 pentium3 pentium3m pentium-m k6 k6-2 k6-3
+cpu-type-g6 =
+ i686 pentiumpro pentium2 pentium3 pentium3m pentium-m k6 k6-2 k6-3
     winchip-c6 winchip2 c3 c3-2 ;
 
-cpu-type-em64t = prescott nocona
+cpu-type-em64t = prescott nocona
     conroe conroe-xe conroe-l allendale mermon mermon-xe kentsfield kentsfield-xe
     penryn wolfdale yorksfield nehalem ;
 cpu-type-amd64 = k8 opteron athlon64 athlon-fx ;
 
-cpu-type-g7 =
- pentium4 pentium4m athlon athlon-tbird athlon-4 athlon-xp athlon-mp
+cpu-type-g7 =
+ pentium4 pentium4m athlon athlon-tbird athlon-4 athlon-xp athlon-mp
     $(cpu-type-em64t) $(cpu-type-amd64) ;
 
 cpu-type-itanium = itanium itanium1 merced ;
 cpu-type-itanium2 = itanium2 mckinley ;
 
-# Sets up flag definitions that are dependent on the version ot
-# compiler.
+
+# Sets up flag definitions dependent on the compiler version used.
 # - 'version' is the version of compiler in N.M format.
-# - 'condition' is the property set to be used as condition for flag
-# - 'toolset' is the toolset for which flag settings are to be defined
+# - 'condition' is the property set to be used as condition for flag.
+# - 'toolset' is the toolset for which flag settings are to be defined.
 # This makes the rule reusable for other msvc-option-compatible compilers.
 rule configure-version-specific ( toolset : version : condition )
 {
     toolset.push-checking-for-flags-module unchecked ;
- # Starting with versions 7.0, the msvc compiler have the /Zc:forScope
- # and /Zc:wchar_t options that improve C++ standard conformance, but
- # those options are off by default.
- # If we're sure that msvc version is at 7.*, add those options explicitly.
- # We can be sure either if user specified version 7.* explicitly,
- # or if the installation path contain 7.* (this is checked above).
+ # Starting with versions 7.0, the msvc compiler have the /Zc:forScope and
+ # /Zc:wchar_t options that improve C++ standard conformance, but those
+ # options are off by default. If we're sure that msvc version is at 7.*, add
+ # those options explicitly. We can be sure either if user specified version
+ # 7.* explicitly, or if the installation path contain 7.* (checked above).
     if ! [ MATCH ^(6\\.) : $(version) ]
     {
- flags $(toolset).compile CFLAGS $(condition) : /Zc:forScope /Zc:wchar_t ;
- flags $(toolset).compile.c++ C++FLAGS $(condition) : /wd4675 ;
+ toolset.flags $(toolset).compile CFLAGS $(condition) : /Zc:forScope /Zc:wchar_t ;
+ toolset.flags $(toolset).compile.c++ C++FLAGS $(condition) : /wd4675 ;
         # disable the function is deprecated warning
         # Some version of msvc have a bug, that cause deprecation
         # warning to be emitted even with /W0
- flags $(toolset).compile CFLAGS $(condition)/<warnings>off : /wd4996 ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/<warnings>off : /wd4996 ;
         # 64-bit compatibility warning
- flags $(toolset).compile CFLAGS $(condition)/<warnings>all : /Wp64 ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/<warnings>all : /Wp64 ;
     }
-
+
     #
     # Processor-specific optimization
     #
 
     if [ MATCH ^([67]) : $(version) ]
     {
- # 8.0 deprecates some of the options
- flags $(toolset).compile CFLAGS $(condition)/<optimization>speed $(condition)/<optimization>space : /Ogiy /Gs ;
- flags $(toolset).compile CFLAGS $(condition)/<optimization>speed : /Ot ;
- flags $(toolset).compile CFLAGS $(condition)/<optimization>space : /Os ;
-
- flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set> : /GB ;
- flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>i386 : /G3 ;
- flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>i486 : /G4 ;
- flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>$(cpu-type-g5) : /G5 ;
- flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>$(cpu-type-g6) : /G6 ;
- flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>$(cpu-type-g7) : /G7 ;
-
- # Improve floating-point accuracy. Otherwise, some of C++ Boost's
- # "math" tests will fail.
- flags $(toolset).compile CFLAGS $(condition) : /Op ;
-
- # 7.1 and below have single-threaded static RTL
- flags $(toolset).compile CFLAGS $(condition)/<runtime-debugging>off/<runtime-link>static/<threading>single : /ML ;
- flags $(toolset).compile CFLAGS $(condition)/<runtime-debugging>on/<runtime-link>static/<threading>single : /MLd ;
+ # 8.0 deprecates some of the options.
+ toolset.flags $(toolset).compile CFLAGS $(condition)/<optimization>speed $(condition)/<optimization>space : /Ogiy /Gs ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/<optimization>speed : /Ot ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/<optimization>space : /Os ;
+
+ toolset.flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set> : /GB ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>i386 : /G3 ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>i486 : /G4 ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>$(cpu-type-g5) : /G5 ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>$(cpu-type-g6) : /G6 ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-i386)/<instruction-set>$(cpu-type-g7) : /G7 ;
+
+ # Improve floating-point accuracy. Otherwise, some of C++ Boost's "math"
+ # tests will fail.
+ toolset.flags $(toolset).compile CFLAGS $(condition) : /Op ;
+
+ # 7.1 and below have single-threaded static RTL.
+ toolset.flags $(toolset).compile CFLAGS $(condition)/<runtime-debugging>off/<runtime-link>static/<threading>single : /ML ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/<runtime-debugging>on/<runtime-link>static/<threading>single : /MLd ;
     }
     else
     {
- # 8.0 and above adds some more options
- flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-amd64)/<instruction-set> : /favor:blend ;
- flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-amd64)/<instruction-set>$(cpu-type-em64t) : /favor:EM64T ;
- flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-amd64)/<instruction-set>$(cpu-type-amd64) : /favor:AMD64 ;
-
- # 8.0 and above only has multi-threaded static RTL
- flags $(toolset).compile CFLAGS $(condition)/<runtime-debugging>off/<runtime-link>static/<threading>single : /MT ;
- flags $(toolset).compile CFLAGS $(condition)/<runtime-debugging>on/<runtime-link>static/<threading>single : /MTd ;
+ # 8.0 and above adds some more options.
+ toolset.flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-amd64)/<instruction-set> : /favor:blend ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-amd64)/<instruction-set>$(cpu-type-em64t) : /favor:EM64T ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/$(cpu-arch-amd64)/<instruction-set>$(cpu-type-amd64) : /favor:AMD64 ;
+
+ # 8.0 and above only has multi-threaded static RTL.
+ toolset.flags $(toolset).compile CFLAGS $(condition)/<runtime-debugging>off/<runtime-link>static/<threading>single : /MT ;
+ toolset.flags $(toolset).compile CFLAGS $(condition)/<runtime-debugging>on/<runtime-link>static/<threading>single : /MTd ;
     }
     toolset.pop-checking-for-flags-module ;
 }
 
 
-# Returns the default installation path for the given version.
+# Returns the default installation path for the given version.
 local rule default-path ( version )
 {
- # Use auto-detected path if possible
- local path = [ get-values <command> :
+ # Use auto-detected path if possible
+ local path = [ feature.get-values <command> :
         [ $(.versions).get $(version) : options ] ] ;
 
     if $(path)
@@ -532,12 +517,13 @@
     return $(path) ;
 }
 
-# Returns either the default installation path (if 'version' is not empty) or list of all
-# known default paths (if no version is given)
+
+# Returns either the default installation path (if 'version' is not empty) or
+# list of all known default paths (if no version is given)
 rule default-paths ( version ? )
 {
     local possible-paths ;
-
+
     if $(version)
     {
         possible-paths += [ default-path $(version) ] ;
@@ -554,14 +540,13 @@
 }
 
 
-# Declare generators
+# Declare generators.
 
-# is it possible to combine these?
-# make the generators non-composing, so that they don't convert each source
-# into separate rsp file.
+# Is it possible to combine these? Make the generators non-composing so that
+# they don't convert each source into a separate rsp file.
 generators.register-linker msvc.link : OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB : EXE : <toolset>msvc ;
 generators.register-linker msvc.link.dll : OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB : SHARED_LIB IMPORT_LIB : <toolset>msvc ;
-
+
 generators.register-archiver msvc.archive : OBJ : STATIC_LIB : <toolset>msvc ;
 generators.register-c-compiler msvc.compile.c++ : CPP : OBJ : <toolset>msvc ;
 generators.register-c-compiler msvc.compile.c : C : OBJ : <toolset>msvc ;
@@ -579,14 +564,14 @@
 
 # pch support
 
-feature pch-source : : free dependency ;
+feature.feature pch-source : : free dependency ;
 
 class msvc-pch-generator : pch-generator
 {
     import property-set ;
 
     rule run-pch ( project name ? : property-set : sources * )
- {
+ {
         # searching header and source file in the sources
         local pch-header ;
         local pch-source ;
@@ -603,30 +588,24 @@
                 pch-source = $(s) ;
             }
         }
-
+
         if ! $(pch-header)
         {
             errors.user-error "can't build pch without pch-header" ;
         }
 
- # If we don't have PCH source, it's fine, we'll
- # create temporary .cpp file in the action.
+ # If we don't have PCH source - that's fine. We'll just create a
+ # temporary .cpp file in the action.
 
- local generated =
- [
- # Passing of <pch-source> is a dirty trick,
- # needed because non-composing generators
- # with multiple inputs are subtly broken:
- # https://zigzag.cs.msu.su:7813/boost.build/ticket/111
- generator.run $(project) $(name)
- : [
- property-set.create
- <pch-source>$(pch-source)
- [ $(property-set).raw ]
- ]
- : $(pch-header)
- ]
- ;
+ local generated = [ generator.run $(project) $(name)
+ : [ property-set.create
+ # Passing of <pch-source> is a dirty trick, needed because
+ # non-composing generators with multiple inputs are subtly
+ # broken. For more detailed information see:
+ # https://zigzag.cs.msu.su:7813/boost.build/ticket/111
+ <pch-source>$(pch-source)
+ [ $(property-set).raw ] ]
+ : $(pch-header) ] ;
 
         local pch-file ;
         for local g in $(generated)
@@ -637,29 +616,24 @@
             }
         }
 
- return
- [
- property-set.create
- <pch-header>$(pch-header)
- <pch-file>$(pch-file)
- ]
- $(generated)
- ;
+ return [ property-set.create <pch-header>$(pch-header)
+ <pch-file>$(pch-file) ] $(generated) ;
     }
 }
 
-# Note: the 'H' source type will catch both '.h' header and '.hpp' header. The latter
-# have HPP type, but HPP type is derived from H. The type of compilation is determined
-# entirely by the destination type.
+
+# Note: the 'H' source type will catch both '.h' header and '.hpp' header. The
+# latter have HPP type, but HPP type is derived from H. The type of compilation
+# is determined entirely by the destination type.
 generators.register [ new msvc-pch-generator msvc.compile.c.pch : H : C_PCH OBJ : <pch>on <toolset>msvc ] ;
 generators.register [ new msvc-pch-generator msvc.compile.c++.pch : H : CPP_PCH OBJ : <pch>on <toolset>msvc ] ;
 
 generators.override msvc.compile.c.pch : pch.default-c-pch-generator ;
 generators.override msvc.compile.c++.pch : pch.default-cpp-pch-generator ;
 
-flags msvc.compile PCH_FILE <pch>on : <pch-file> ;
-flags msvc.compile PCH_SOURCE <pch>on : <pch-source> ;
-flags msvc.compile PCH_HEADER <pch>on : <pch-header> ;
+flags msvc.compile PCH_FILE <pch>on : <pch-file> ;
+flags msvc.compile PCH_SOURCE <pch>on : <pch-source> ;
+flags msvc.compile PCH_HEADER <pch>on : <pch-header> ;
 
 #
 # Declare flags and action for compilation
@@ -705,22 +679,26 @@
 flags msvc.compile UNDEFS <undef> ;
 flags msvc.compile INCLUDES <include> ;
 
+
 rule get-rspline ( target : lang-opt )
 {
     CC_RSPLINE on $(target) = [ on $(target) return $(lang-opt) -U$(UNDEFS) $(CFLAGS) $(C++FLAGS) $(OPTIONS) -c $(nl)-D$(DEFINES) $(nl)\"-I$(INCLUDES)\" ] ;
 }
 
+
 rule compile-c-c++ ( targets + : sources * )
 {
     DEPENDS $(<[1]) : [ on $(<[1]) return $(PCH_HEADER) ] ;
     DEPENDS $(<[1]) : [ on $(<[1]) return $(PCH_FILE) ] ;
 }
 
+
 actions compile-c-c++
 {
     $(.CC) @"@($(<[1]:W).rsp:E="$(>[1]:W)" -Fo"$(<[1]:W)" -Yu"$(>[3]:D=)" -Fp"$(>[2]:W)" $(CC_RSPLINE))" $(.CC.FILTER)
 }
 
+
 rule compile.c ( targets + : sources * : properties * )
 {
     C++FLAGS on $(targets[1]) = ;
@@ -728,19 +706,22 @@
     compile-c-c++ $(<) : $(>) [ on $(<) return $(PCH_FILE) ] [ on $(<) return $(PCH_HEADER) ] ;
 }
 
+
 rule compile.c++ ( targets + : sources * : properties * )
 {
     get-rspline $(targets) : -TP ;
     compile-c-c++ $(<) : $(>) [ on $(<) return $(PCH_FILE) ] [ on $(<) return $(PCH_HEADER) ] ;
 }
 
+
 actions compile-c-c++-pch-s
 {
     $(.CC) @"@($(<[1]:W).rsp:E="$(>[2]:W)" -Fo"$(<[2]:W)" -Yc"$(>[1]:D=)" -Yl"__bjam_pch_symbol_$(>[1]:D=)" -Fp"$(<[1]:W)" $(CC_RSPLINE))" $(.CC.FILTER)
 }
 
-# Needed only to avoid messing up Emacs syntax highlighting in
-# the messing N-quoted code below.
+
+# Needed only to avoid messing up Emacs syntax highlighting in the messy
+# N-quoted code below.
 quote = "\"" ;
 
 actions compile-c-c++-pch
@@ -748,6 +729,7 @@
     $(.CC) @"@($(<[1]:W).rsp:E="$(>[2]:W)" -Fo"$(<[2]:W)" -Yc"$(>[1]:D=)" -Yl"__bjam_pch_symbol_$(>[1]:D=)" -Fp"$(<[1]:W)" $(CC_RSPLINE))" "@($(<[1]:W).cpp:E=#include $(quote)$(>[1]:D=)$(quote))" $(.CC.FILTER)
 }
 
+
 rule compile.c.pch ( targets + : sources * : properties * )
 {
     C++FLAGS on $(targets[1]) = ;
@@ -755,47 +737,52 @@
     get-rspline $(targets[2]) : -TC ;
     local pch-source = [ on $(<) return $(PCH_SOURCE) ] ;
     if $(pch-source)
- {
+ {
         DEPENDS $(<) : $(pch-source) ;
         compile-c-c++-pch-s $(targets) : $(sources) $(pch-source) ;
     }
     else
     {
         compile-c-c++-pch $(targets) : $(sources) ;
- }
+ }
 }
 
+
 rule compile.c++.pch ( targets + : sources * : properties * )
 {
     get-rspline $(targets[1]) : -TP ;
     get-rspline $(targets[2]) : -TP ;
     local pch-source = [ on $(<) return $(PCH_SOURCE) ] ;
     if $(pch-source)
- {
+ {
         DEPENDS $(<) : $(pch-source) ;
         compile-c-c++-pch-s $(targets) : $(sources) $(pch-source) ;
     }
     else
     {
         compile-c-c++-pch $(targets) : $(sources) ;
- }
+ }
 }
 
+
 actions compile.rc
 {
     $(.RC) -l 0x409 -U$(UNDEFS) -D$(DEFINES) -I"$(INCLUDES)" -fo "$(<:W)" "$(>:W)"
 }
 
+
 # See midl.jam for details
 TOUCH_FILE = [ common.file-touch-command ] ;
 
+
 actions compile.idl
 {
     $(.IDL) /nologo @"@($(<[1]:W).rsp:E=$(nl)"$(>:W)" $(nl)-D$(DEFINES) $(nl)"-I$(INCLUDES)" $(nl)-U$(UNDEFS) $(nl)$(MIDLFLAGS) $(nl)/tlb "$(<[1]:W)" $(nl)/h "$(<[2]:W)" $(nl)/iid "$(<[3]:W)" $(nl)/proxy "$(<[4]:W)" $(nl)/dlldata "$(<[5]:W)")"
- $(TOUCH_FILE) "$(<[4]:W)"
- $(TOUCH_FILE) "$(<[5]:W)"
+ $(TOUCH_FILE) "$(<[4]:W)"
+ $(TOUCH_FILE) "$(<[5]:W)"
 }
 
+
 # Declare flags and action for the assembler
 
 flags msvc.compile.asm USER_ASMFLAGS <asmflags> : ;
@@ -813,12 +800,13 @@
     $(.ASM) -nologo -c -coff -Zp4 -Cp -Cx $(USER_ASMFLAGS) -Fo "$(<:W)" "$(>:W)"
 }
 
+
 # Declare flags and action for linking
-flags msvc.link PDB_LINKFLAG <debug-symbols>on/<debug-store>database : /PDB: ; # not used yet
+flags msvc.link PDB_LINKFLAG <debug-symbols>on/<debug-store>database : /PDB: ; # not used yet
 flags msvc.link LINKFLAGS <debug-symbols>on : /DEBUG ;
 flags msvc.link DEF_FILE <def-file> ;
-# The linker disables the default optimizations when using /DEBUG. Whe have
-# to enable them manually for release builds with debug symbols.
+# The linker disables the default optimizations when using /DEBUG. Whe have to
+# enable them manually for release builds with debug symbols.
 flags msvc LINKFLAGS <debug-symbols>on/<runtime-debugging>off : /OPT:REF,ICF ;
 
 flags msvc LINKFLAGS <user-interface>console : /subsystem:console ;
@@ -830,7 +818,6 @@
 flags msvc.link OPTIONS <linkflags> ;
 flags msvc.link LINKPATH <library-path> ;
 
-
 flags msvc.link FINDLIBS_ST <find-static-library> ;
 flags msvc.link FINDLIBS_SA <find-shared-library> ;
 flags msvc.link LIBRARY_OPTION <toolset>msvc : "" : unchecked ;
@@ -844,40 +831,38 @@
     DEPENDS $(<) : [ on $(<) return $(DEF_FILE) ] ;
 }
 
-# Declare action for creating static libraries
-# If library exists, remove it before adding files. See
-# http://article.gmane.org/gmane.comp.lib.boost.build/4241
-# for rationale.
+# Declare action for creating static libraries. If library exists, remove it
+# before adding files. See
+# http://article.gmane.org/gmane.comp.lib.boost.build/4241 for rationale.
 if [ os.name ] in NT
-{
- # The 'DEL' command would issue a message to stdout
- # if the file does not exist, so need a check.
+{
+ # The 'DEL' command would issue a message to stdout if the file does not
+ # exist, so need a check.
     actions archive
- {
- if exist "$(<[1])" DEL "$(<[1])"
+ {
+ if exist "$(<[1])" DEL "$(<[1])"
         $(.LD) $(AROPTIONS) /out:"$(<[1])" @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES_MENTIONED_BY_FILE) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
     }
 }
 else
 {
     actions archive
- {
+ {
         $(RM) "$(<[1])"
         $(.LD) $(AROPTIONS) /out:"$(<[1])" @"@($(<[1]:W).rsp:E=$(nl)"$(>)" $(nl)$(LIBRARIES_MENTIONED_BY_FILE) $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_ST).lib" $(nl)"$(LIBRARY_OPTION)$(FINDLIBS_SA).lib")"
     }
 }
-
-# incremental linking a DLL causes no end of problems: if the
-# actual exports don't change, the import .lib file is never
-# updated. Therefore, the .lib is always out-of-date and gets
-# rebuilt every time. I'm not sure that incremental linking is
-# such a great idea in general, but in this case I'm sure we
-# don't want it.
-
-# Windows Manifests is a new way to specify dependencies
-# on managed DotNet assemblies and Windows native DLLs. The
-# manifests are embedded as resources and are useful in
-# any PE targets (both DLL and EXE)
+
+
+# Incremental linking a DLL causes no end of problems: if the actual exports
+# don't change, the import .lib file is never updated. Therefore, the .lib is
+# always out-of-date and gets rebuilt every time. I'm not sure that incremental
+# linking is such a great idea in general, but in this case I'm sure we don't
+# want it.
+
+# Windows manifest is a new way to specify dependencies on managed DotNet
+# assemblies and Windows native DLLs. The manifests are embedded as resources
+# and are useful in any PE target (both DLL and EXE).
 
 if [ os.name ] in NT
 {
@@ -927,7 +912,7 @@
 
 #
 # Autodetection code
-# detects versions listed as '.known-versions' using registry, environment
+# detects versions listed as '.known-versions' using registry, environment
 # and checking default paths. Supports both native Windows and Cygwin.
 #
 
@@ -941,7 +926,7 @@
 .version-alias-7 = 7.0 ;
 .version-alias-8 = 8.0 ;
 .version-alias-9 = 9.0 ;
-
+
 # Name of the registry key that contains Visual C++ installation path
 # (relative to "HKEY_LOCAL_MACHINE\SOFTWARE\\Microsoft"
 .version-6.0-reg = "VisualStudio\\6.0\\Setup\\Microsoft Visual C++" ;
@@ -953,18 +938,18 @@
 .version-9.0express-reg = "VCExpress\\9.0\\Setup\\VC" ;
 
 # Visual C++ Toolkit 2003 do not store its installation path in the registry.
-# The environment variable 'VCToolkitInstallDir' and the default installation
+# The environment variable 'VCToolkitInstallDir' and the default installation
 # path will be checked instead.
 .version-7.1toolkit-path = "Microsoft Visual C++ Toolkit 2003" "bin" ;
 .version-7.1toolkit-env = VCToolkitInstallDir ;
 
-# Path to the folder containing "cl.exe" relative to the value of the corresponding
-# environment variable
+# Path to the folder containing "cl.exe" relative to the value of the
+# corresponding environment variable.
 .version-7.1toolkit-envpath = "bin" ;
 
 
-# Validates given path, registers found configuration and prints debug information
-# about it.
+# Validates given path, registers found configuration and prints debug
+# information about it.
 local rule register-configuration ( version : path ? )
 {
     if $(path)
@@ -986,8 +971,7 @@
 
 if [ os.name ] in NT CYGWIN
 {
- # Get installation paths from the registry
-
+ # Get installation paths from the registry.
     for local i in $(.known-versions)
     {
         if $(.version-$(i)-reg)
@@ -999,7 +983,7 @@
                 "HKEY_LOCAL_MACHINE\\SOFTWARE\\"$(x)"\\Microsoft\\"$(.version-$(i)-reg)
                 : "ProductDir" ] ;
             }
-
+
             if $(vc-path)
             {
                 vc-path = [ path.native [ path.join [ path.make-NT $(vc-path[1]) ] "bin" ] ] ;
@@ -1010,7 +994,7 @@
 }
 
 
-# Check environment and default installation paths
+# Check environment and default installation paths.
 
 for local i in $(.known-versions)
 {
@@ -1019,4 +1003,3 @@
         register-configuration $(i) : [ default-path $(i) ] ;
     }
 }
-

Modified: branches/fix-links/tools/build/v2/tools/notfile.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/notfile.jam (original)
+++ branches/fix-links/tools/build/v2/tools/notfile.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,47 +4,52 @@
 # License Version 1.0. (See accompanying file LICENSE_1_0.txt or
 # http://www.boost.org/LICENSE_1_0.txt)
 
+import "class" : new ;
 import generators ;
-import type ;
-import feature ;
 import project ;
 import targets ;
 import toolset ;
-import "class" : new ;
+import type ;
+
 
 type.register NOTFILE_MAIN ;
 
+
 class notfile-generator : generator
 {
     rule __init__ ( * : * )
     {
         generator.__init__ $(1) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ;
     }
-
+
     rule run ( project name ? : property-set : sources * : multiple ? )
     {
         local action ;
         local action-name = [ $(property-set).get <action> ] ;
-
+
         local m = [ MATCH ^@(.*) : $(action-name) ] ;
-
- if $(m)
+
+ if $(m)
         {
- action = [ new action $(sources) : $(m[1])
- : $(property-set) ] ;
+ action = [ new action $(sources) : $(m[1])
+ : $(property-set) ] ;
         }
         else
         {
- action = [ new action $(sources) : notfile.run
- : $(property-set) ] ;
- }
+ action = [ new action $(sources) : notfile.run
+ : $(property-set) ] ;
+ }
         return [ new notfile-target $(name) : $(project) : $(action) ] ;
- }
+ }
 }
 
+
 generators.register [ new notfile-generator notfile.main : : NOTFILE_MAIN ] ;
 
+
 toolset.flags notfile.run ACTION : <action> ;
+
+
 actions run
 {
     $(ACTION)
@@ -52,20 +57,17 @@
 
 
 rule notfile ( target-name : action + : sources * : requirements * : default-build * )
-{
+{
     local project = [ project.current ] ;
-
+
     requirements += <action>$(action) ;
 
-
- targets.main-target-alternative
+ targets.main-target-alternative
         [ new typed-target $(target-name) : $(project) : NOTFILE_MAIN
- : [ targets.main-target-sources $(sources) : $(target-name) ]
- : [ targets.main-target-requirements $(requirements) : $(project) ]
- : [ targets.main-target-default-build $(default-build) : $(project) ]
+ : [ targets.main-target-sources $(sources) : $(target-name) ]
+ : [ targets.main-target-requirements $(requirements) : $(project) ]
+ : [ targets.main-target-default-build $(default-build) : $(project) ]
         ] ;
 }
 
 IMPORT $(__name__) : notfile : : notfile ;
-
-

Modified: branches/fix-links/tools/build/v2/tools/package.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/package.jam (original)
+++ branches/fix-links/tools/build/v2/tools/package.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -34,7 +34,6 @@
 import targets ;
 import "class" : new ;
 import option ;
-import errors ;
 import stage ;
 import property ;
 
@@ -77,7 +76,6 @@
     # source header files
     local include-locate = [ option.get includedir : $(prefix)/include ] ;
 
-
     stage.install $(name)-bin : $(binaries) : $(requirements) <location>$(bin-locate) ;
     stage.install $(name)-lib :
         $(binaries) $(libraries)

Modified: branches/fix-links/tools/build/v2/tools/pch.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/pch.jam (original)
+++ branches/fix-links/tools/build/v2/tools/pch.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -34,19 +34,18 @@
 type.register C_PCH : : PCH ;
 type.register CPP_PCH : : PCH ;
 
-# control precompiled header (PCH) generation
+# Control precompiled header (PCH) generation.
 feature.feature pch :
- on
- off
- : propagated
- ;
+ on
+ off
+ : propagated ;
+
 
 feature.feature pch-header : : free dependency ;
 feature.feature pch-file : : free dependency ;
 
-# Base PCH generator. The 'run' method has the logic to
-# prevent this generator from being run unless it's used
-# in top-level PCH target.
+# Base PCH generator. The 'run' method has the logic to prevent this generator
+# from being run unless it's being used for a top-level PCH target.
 class pch-generator : generator
 {
     import property-set ;
@@ -60,38 +59,37 @@
     {
         if ! $(name)
         {
- # Unless this generator is invoked as the top-most
- # generator for a main target, fail. This allows using
- # 'H' type as input type for this generator, while
- # preventing Boost.Build to try this generator when not
- # explicitly asked for.
+ # Unless this generator is invoked as the top-most generator for a
+ # main target, fail. This allows using 'H' type as input type for
+ # this generator, while preventing Boost.Build to try this generator
+ # when not explicitly asked for.
             #
- # One bad example is msvc, where pch generator produces
- # both PCH target and OBJ target, so if there's any
- # header generated (like by bison, or by msidl), we'd
- # try to use pch generator to get OBJ from that H, which
- # is completely wrong. By restricting this generator
+ # One bad example is msvc, where pch generator produces both PCH
+ # target and OBJ target, so if there's any header generated (like by
+ # bison, or by msidl), we'd try to use pch generator to get OBJ from
+ # that H, which is completely wrong. By restricting this generator
             # only to pch main target, such problem is solved.
         }
         else
         {
- local r = [ run-pch $(project) $(name)
+ local r = [ run-pch $(project) $(name)
               : [ $(property-set).add-raw <define>BOOST_BUILD_PCH_ENABLED ]
               : $(sources) ] ;
             return [ generators.add-usage-requirements $(r)
               : <define>BOOST_BUILD_PCH_ENABLED ] ;
- }
+ }
     }
-
+
     # This rule must be overridden by the derived classes.
     rule run-pch ( project name ? : property-set : sources + )
- {
- }
+ {
+ }
 }
 
-# NOTE: requiremetns are empty,
-# default pch generator can be applied when pch=off
-generators.register [
- new dummy-generator pch.default-c-pch-generator : : C_PCH ] ;
-generators.register [
- new dummy-generator pch.default-cpp-pch-generator : : CPP_PCH ] ;
+
+# NOTE: requirements are empty, default pch generator can be applied when
+# pch=off.
+generators.register
+ [ new dummy-generator pch.default-c-pch-generator : : C_PCH ] ;
+generators.register
+ [ new dummy-generator pch.default-cpp-pch-generator : : CPP_PCH ] ;

Modified: branches/fix-links/tools/build/v2/tools/python.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/python.jam (original)
+++ branches/fix-links/tools/build/v2/tools/python.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -94,8 +94,8 @@
 #
 # using python 2.3 ;
 # using python 2.3 : /usr/local/bin/python ;
-#
-rule init ( version ? : cmd-or-prefix ? : includes * : libraries ?
+#
+rule init ( version ? : cmd-or-prefix ? : includes * : libraries ?
     : condition * : extension-suffix ? )
 {
     project.push-current $(.project) ;
@@ -108,7 +108,7 @@
             debug-message " user-specified "$(v): \"$($(v))\" ;
         }
     }
-
+
     configure $(version) : $(cmd-or-prefix) : $(includes) : $(libraries) : $(condition) : $(extension-suffix) ;
 
     project.pop-current ;
@@ -617,7 +617,7 @@
             # For example, on my installation, adding -ldl causes at
             # least one test to fail because the library can't be
             # found and removing it causes no failures.
-
+
             # Apparently, though, we need to add -lrt for gcc.
             return <toolset>gcc:<library>rt ;
 
@@ -664,7 +664,7 @@
 }
 
 # implementation of init
-local rule configure (
+local rule configure (
   version ? : cmd-or-prefix ? : includes * : libraries ? : condition * : extension-suffix ? )
 {
     local prefix ;
@@ -675,13 +675,13 @@
     local target-os = [ feature.get-values target-os : $(condition) ] ;
     target-os ?= [ feature.defaults target-os ] ;
     target-os = $(target-os:G=) ;
-
- if $(target-os) = windows && <python-debugging>on in $(condition)
+
+ if $(target-os) = windows && <python-debugging>on in $(condition)
     {
         extension-suffix ?= _d ;
     }
     extension-suffix ?= "" ;
-
+
     # Normalize and dissect any version number
     local major-minor ;
     if $(version)
@@ -715,7 +715,7 @@
     # Values to use in case we can't really find anything in the system.
     local fallback-cmd = $(cmds-to-try[1]) ;
     local fallback-version ;
-
+
     # Anything left to find or check?
     if ! ( $(interpreter-cmd) && $(includes) && $(libraries) )
     {
@@ -734,7 +734,7 @@
             case windows : platform = win32 ;
             case cygwin : platform = cygwin ;
         }
-
+
         while $(cmds-to-try)
         {
             # pop top command
@@ -780,7 +780,7 @@
             }
         }
     }
-
+
     # Anything left to compute?
     if $(includes) && $(libraries)
     {
@@ -858,13 +858,13 @@
     }
 
     local dll-path = $(libraries) ;
-
+
     # Make sure that we can find the Python DLL on windows
     if $(target-os) = windows && $(exec-prefix)
     {
         dll-path += $(exec-prefix) ;
     }
-
+
     #
     # prepare usage requirements
     #
@@ -884,9 +884,9 @@
         }
     }
 
- # Register the right suffix for extensions
+ # Register the right suffix for extensions.
     register-extension-suffix $(extension-suffix) : $(target-requirements) ;
-
+
     #
     # Declare the "python" target. This should really be called
     # python_for_embedding
@@ -911,7 +911,7 @@
         # (http://article.gmane.org/gmane.comp.python.general/544986). The
         # evil here, aside from the workaround necessitated by
         # Python's bug, is that:
- #
+ #
         # a. we're guessing the location of the python standard
         # library from the location of pythonXX.lib
         #
@@ -924,7 +924,7 @@
             set-PYTHONPATH =
               [ common.prepend-path-variable-command PYTHONPATH : $(libraries:D)/Lib ] ;
         }
-
+
         alias python
           :
           : $(target-requirements)
@@ -933,8 +933,8 @@
             # the system libs is a mystery, but if we don't do it, on
             # cygwin, -lpythonX.Y never appears in the command line
             # (although it does on linux).
- : $(usage-requirements)
- <testing.launcher>$(set-PYTHONPATH)
+ : $(usage-requirements)
+ <testing.launcher>$(set-PYTHONPATH)
               <library-path>$(libraries) <dll-path>$(dll-path) <library>python.lib
           ;
     }
@@ -987,12 +987,12 @@
 local rule register-extension-suffix ( root : condition * )
 {
     local suffix ;
-
+
     switch [ feature.get-values target-os : $(condition) ]
     {
       case windows : suffix = pyd ;
       case cygwin : suffix = dll ;
- case hpux :
+ case hpux :
       {
           if [ feature.get-values python : $(condition) ] in 1.5 1.6 2.0 2.1 2.2 2.3 2.4
           {
@@ -1005,7 +1005,7 @@
       }
       case * : suffix = so ;
     }
-
+
     type.set-generated-target-suffix PYTHON_EXTENSION : $(condition) : <$(root).$(suffix)> ;
 }
 
@@ -1023,23 +1023,23 @@
 
     local project = [ project.current ] ;
 
-
     targets.main-target-alternative
- [ new typed-target $(name) : $(project) : PYTHON_EXTENSION
- : [ targets.main-target-sources $(sources) : $(name) ]
- : [ targets.main-target-requirements $(requirements) : $(project) ]
- : [ targets.main-target-default-build $(default-build) : $(project) ]
- ] ;
+ [ new typed-target $(name) : $(project) : PYTHON_EXTENSION
+ : [ targets.main-target-sources $(sources) : $(name) ]
+ : [ targets.main-target-requirements $(requirements) : $(project) ]
+ : [ targets.main-target-default-build $(default-build) : $(project) ]
+ ] ;
 }
 
 IMPORT python : python-extension : : python-extension ;
 
+
 # Support for testing
 type.register PY : py ;
 type.register RUN_PYD_OUTPUT ;
-#type.set-generated-target-suffix RUN_PYD : : run ;
 type.register RUN_PYD : : TEST ;
 
+
 class python-test-generator : generator
 {
     import set ;

Modified: branches/fix-links/tools/build/v2/tools/qt4.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/qt4.jam (original)
+++ branches/fix-links/tools/build/v2/tools/qt4.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -492,17 +492,18 @@
         
         local r = [ virtual-target.register $(target) ] ;
  
- # Since this generator will return H target, the linking generator
- # won't use it at all, and won't set any dependency on it.
- # However, we need to target to be seen by bjam, so that dependency
- # from sources to this generated header is detected -- if jam does
- # not know about this target, it won't do anything.
+ # Since this generator will return a H target, the linking generator
+ # won't use it at all, and won't set any dependency on it. However, we
+ # need the target to be seen by bjam, so that dependency from sources to
+ # this generated header is detected -- if jam does not know about this
+ # target, it won't do anything.
         DEPENDS all : [ $(r).actualize ] ;
         
         return $(r) ;
     }
 }
 
+
 class moc-h-generator : generator
 {
     rule __init__ ( * : * )
@@ -525,17 +526,19 @@
             
             local r = [ virtual-target.register $(target) ] ;
             
- # Since this generator will return H target, the linking generator
- # won't use it at all, and won't set any dependency on it.
- # However, we need to target to be seen by bjam, so that dependency
- # from sources to this generated header is detected -- if jam does
- # not know about this target, it won't do anything.
+ # Since this generator will return a H target, the linking generator
+ # won't use it at all, and won't set any dependency on it. However,
+ # we need the target to be seen by bjam, so that dependency from
+ # sources to this generated header is detected -- if jam does not
+ # know about this target, it won't do anything.
             DEPENDS all : [ $(r).actualize ] ;
             
             return $(r) ;
         }
     }
 }
+
+
 class moc-inc-generator : generator
 {
     rule __init__ ( * : * )
@@ -556,11 +559,11 @@
             local target = [
               new file-target moc_$(name) : CPP : $(project) : $(a) ] ;
             
- # Since this generator will return H target, the linking generator
- # won't use it at all, and won't set any dependency on it.
- # However, we need to target to be seen by bjam, so that dependency
- # from sources to this generated header is detected -- if jam does
- # not know about this target, it won't do anything.
+ # Since this generator will return a H target, the linking generator
+ # won't use it at all, and won't set any dependency on it. However,
+ # we need the target to be seen by bjam, so that dependency from
+ # sources to this generated header is detected -- if jam does not
+ # know about this target, it won't do anything.
             DEPENDS all : [ $(target).actualize ] ;
             
             return [ virtual-target.register $(target) ] ;
@@ -568,18 +571,20 @@
     }
 }
 
-# Query the installation directory
-# This is needed in at least two scenarios
-# First, when re-using sources from the Qt-Tree.
-# Second, to "install" custom Qt plugins to the Qt-Tree.
+
+# Query the installation directory. This is needed in at least two scenarios.
+# First, when re-using sources from the Qt-Tree. Second, to "install" custom Qt
+# plugins to the Qt-Tree.
 rule directory
 {
     return $(.prefix) ;
 }
 
+
 # Get <include> and <defines> from current toolset
 flags qt4.moc INCLUDES <include> ;
-flags qt4.moc DEFINES <define> ;
+flags qt4.moc DEFINES <define> ;
+
 
 # Processes headers to create Qt MetaObject information
 # Qt4-moc has its c++-parser, so pass INCLUDES and DEFINES.
@@ -588,6 +593,7 @@
     $(.binprefix)/moc -I$(INCLUDES) -D$(DEFINES) -f $(>) -o $(<)
 }
 
+
 # When moccing files for include only, we don't need -f,
 # otherwise the generated code will include the .cpp
 # and we'll get duplicated symbols.
@@ -603,12 +609,14 @@
     $(.binprefix)/rcc $(>) -name $(>:B) -o $(<)
 }
 
+
 # Generates user-interface source from .ui files
 actions uic-h
 {
     $(.binprefix)/uic $(>) -o $(<)
 }
 
+
 # Scanner for .qrc files.
 # Look for the CDATA section of the <file> tag.
 # Ignore the "alias" attribute.

Modified: branches/fix-links/tools/build/v2/tools/stage.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/stage.jam (original)
+++ branches/fix-links/tools/build/v2/tools/stage.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,42 +1,50 @@
-# Copyright 2003 Dave Abrahams
-# Copyright 2005, 2006 Rene Rivera
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003 Dave Abrahams
+# Copyright 2005, 2006 Rene Rivera
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
-# This module defines the 'install' rule, used to copy a set of targets to
-# a single location
+# This module defines the 'install' rule, used to copy a set of targets to a
+# single location
 
 import targets ;
 import "class" : new ;
-import property ;
-import errors : error ;
-import type : type ;
+import errors ;
 import type ;
-import regex ;
 import generators ;
 import feature ;
 import project ;
-import property-set ;
 import virtual-target ;
 import path ;
+import types/register ;
 
-feature.feature <install-dependencies> : off on : incidental ;
-feature.feature <install-type> : : free incidental ;
-feature.feature <install-source-root> : : free path ;
-# If 'on', version symblinks for shared libraries won't be created
-# This feature has effect only on Unix.
+
+feature.feature <install-dependencies> : off on : incidental ;
+feature.feature <install-type> : : free incidental ;
+feature.feature <install-source-root> : : free path ;
+feature.feature <so-version> : : free incidental ;
+
+# If 'on', version symlinks for shared libraries won't be created. Affects Unix
+# builds only.
 feature.feature <install-no-version-symlinks> : on : optional incidental ;
-feature.feature <so-version> : : free incidental ;
+
 
 class install-target-class : basic-target
 {
- import feature project type errors generators path stage ;
+ import feature ;
+ import project ;
+ import type ;
+ import errors ;
+ import generators ;
+ import path ;
+ import stage ;
     import "class" : new ;
-
+ import property ;
+ import property-set ;
+
     rule __init__ ( name-and-dir : project : sources * : requirements * : default-build * )
     {
- basic-target.__init__ $(name-and-dir) : $(project) : $(sources) : $(requirements)
+ basic-target.__init__ $(name-and-dir) : $(project) : $(sources) : $(requirements)
           : $(default-build) ;
     }
 
@@ -50,195 +58,192 @@
 
             property-set = [ $(property-set).add-raw $(loc:G=<location>) ] ;
         }
-
+
         return $(property-set) ;
     }
-
+
     # Takes a target that is installed and property set which is
     # used when installing.
     rule adjust-properties ( target : build-property-set )
     {
         local ps-raw ;
- local a = [ $(target).action ] ;
+ local a = [ $(target).action ] ;
         if $(a)
         {
             local ps = [ $(a).properties ] ;
             ps-raw = [ $(ps).raw ] ;
-
+
             # Unless <hardcode-dll-paths>true is in properties, which can
             # happen only if the user has explicitly requested it, nuke all
- # <dll-path> properties
+ # <dll-path> properties
             if [ $(property-set).get <hardcode-dll-paths> ] != true
             {
                 ps-raw = [ property.change $(ps-raw) : <dll-path> ] ;
             }
-
+
             # If any <dll-path> properties were specified for installing,
             # add them.
             local l = [ $(build-property-set).get <dll-path> ] ;
             ps-raw += $(l:G=<dll-path>) ;
-
+
             # Also copy <linkflags> feature from current build
             # set, to be used for relinking.
             local l = [ $(build-property-set).get <linkflags> ] ;
- ps-raw += $(l:G=<linkflags>) ;
+ ps-raw += $(l:G=<linkflags>) ;
         }
-
+
         # Remove the <tag> feature on original targets.
         ps-raw = [ property.change $(ps-raw) : <tag> ] ;
         # And <location>. If stage target has another stage target
         # in sources, then we'll get virtual targets with <location>
         # property set.
         ps-raw = [ property.change $(ps-raw) : <location> ] ;
-
-
+
+
         local d = [ $(build-property-set).get <dependency> ] ;
         ps-raw += $(d:G=<dependency>) ;
-
+
         local d = [ $(build-property-set).get <location> ] ;
         ps-raw += $(d:G=<location>) ;
-
+
         local ns = [ $(build-property-set).get <install-no-version-symlinks> ] ;
         ps-raw += $(ns:G=<install-no-version-symlinks>) ;
-
+
         local d = [ $(build-property-set).get <install-source-root> ] ;
         # Make the path absolute: we'll use it to compute relative
         # paths and making the path absolute will help.
         if $(d)
- {
+ {
             d = [ path.root $(d) [ path.pwd ] ] ;
             ps-raw += $(d:G=<install-source-root>) ;
- }
-
+ }
+
         if $(ps-raw)
         {
             return [ property-set.create $(ps-raw) ] ;
- }
+ }
         else
         {
             return [ property-set.empty ] ;
- }
+ }
     }
-
-
+
     rule construct ( name : source-targets * : property-set )
- {
- source-targets = [
+ {
+ source-targets = [
           targets-to-stage $(source-targets) : $(property-set) ] ;
-
- property-set = [ update-location $(property-set) ] ;
-
- local ename = [ $(property-set).get <name> ] ;
-
+
+ property-set = [ update-location $(property-set) ] ;
+
+ local ename = [ $(property-set).get <name> ] ;
+
         if $(ename) && $(source-targets[2])
         {
- errors.error
+ errors.error
               "When <name> property is used in 'install', only one source is allowed" ;
         }
-
-
+
         local result ;
         for local i in $(source-targets)
- {
+ {
             local staged-targets ;
-
- local new-properties =
+
+ local new-properties =
               [ adjust-properties $(i) : $(property-set) ] ;
-
+
             # See if something special should be done when staging this
- # type. It is indicated by presense of special "staged" type
- local t = [ $(i).type ] ;
+ # type. It is indicated by presense of special "staged" type
+ local t = [ $(i).type ] ;
             if $(t) && [ type.registered INSTALLED_$(t) ]
             {
                 if $(ename)
                 {
- error.error "In 'install': <name> property specified with target that requires relinking" ;
+ errors.error "In 'install': <name> property specified with target that requires relinking" ;
                 }
                 else
                 {
- local targets = [ generators.construct $(self.project) $(name) :
+ local targets = [ generators.construct $(self.project) $(name) :
                       INSTALLED_$(t) : $(new-properties) : $(i) ] ;
- staged-targets += $(targets[2-]) ;
- }
+ staged-targets += $(targets[2-]) ;
+ }
             }
- else
- {
+ else
+ {
                 staged-targets = [ stage.copy-file $(self.project) $(ename)
                   : $(i) : $(new-properties) ] ;
             }
-
+
             if ! $(staged-targets)
- {
+ {
                 errors.error "Unable to generate staged version of " [ $(source).str ] ;
- }
-
- for t in $(staged-targets)
+ }
+
+ for t in $(staged-targets)
             {
- result += [ virtual-target.register $(t) ] ;
- }
+ result += [ virtual-target.register $(t) ] ;
+ }
         }
-
+
         return [ property-set.empty ] $(result) ;
- }
-
+ }
 
     # Given the list of source targets explicitly passed to 'stage',
     # returns the list of targets which must be staged.
     rule targets-to-stage ( source-targets * : property-set )
- {
+ {
         local result ;
-
+
         # Traverse the dependencies, if needed.
         if [ $(property-set).get <install-dependencies> ] = "on"
         {
             source-targets = [ collect-targets $(source-targets) ] ;
         }
-
+
         # Filter the target types, if needed
- local included-types = [ $(property-set).get <install-type> ] ;
+ local included-types = [ $(property-set).get <install-type> ] ;
         for local r in $(source-targets)
         {
- local ty = [ $(r).type ] ;
+ local ty = [ $(r).type ] ;
             if $(ty)
             {
                 # Don't stage searched libs.
                 if $(ty) != SEARCHED_LIB
                 {
                     if $(included-types)
- {
+ {
                         if [ include-type $(ty) : $(included-types) ]
                         {
                             result += $(r) ;
- }
- }
+ }
+ }
                     else
                     {
- result += $(r) ;
- }
- }
+ result += $(r) ;
+ }
+ }
             }
             else if ! $(included-types)
             {
                 # Don't install typeless target if there's
                 # explicit list of allowed types.
                 result += $(r) ;
- }
+ }
         }
-
+
         return $(result) ;
     }
-
+
     # CONSIDER: figure out why we can't use virtual-target.traverse here.
     rule collect-targets ( targets * )
     {
         # Find subvariants
- local s ;
+ local s ;
         for local t in $(targets)
         {
             s += [ $(t).creating-subvariant ] ;
         }
         s = [ sequence.unique $(s) ] ;
-
+
         local result = $(targets) ;
         for local i in $(s)
         {
@@ -250,11 +255,11 @@
             if $(r:G) != <use>
             {
                 result2 += $(r:G=) ;
- }
- }
- result = [ sequence.unique $(result2) ] ;
+ }
+ }
+ result = [ sequence.unique $(result2) ] ;
     }
-
+
     # Returns true iff 'type' is subtype of some element of 'types-to-include'.
     local rule include-type ( type : types-to-include * )
     {
@@ -264,27 +269,27 @@
             if [ type.is-subtype $(type) $(types-to-include[1]) ]
             {
                 found = true ;
- }
+ }
             types-to-include = $(types-to-include[2-]) ;
         }
-
+
         return $(found) ;
- }
+ }
 }
 
-# Creates a copy of target 'source'. The 'properties' object should
-# have a <location> property which specifies where the target must
-# be placed.
+
+# Creates a copy of target 'source'. The 'properties' object should have a
+# <location> property which specifies where the target must be placed.
 rule copy-file ( project name ? : source : properties )
-{
+{
     local targets ;
     name ?= [ $(source).name ] ;
 
- new-a = [
- new non-scanning-action $(source) : common.copy : $(properties) ] ;
+ new-a = [
+ new non-scanning-action $(source) : common.copy : $(properties) ] ;
     local source-root = [ $(properties).get <install-source-root> ] ;
- if $(source-root)
- {
+ if $(source-root)
+ {
         # Get the real path of the target. We probably need to strip
         # relative path from the target name at construction...
         local path = [ $(source).path ] ;
@@ -293,8 +298,8 @@
         # path. The 'source-root' is already absolute, see the
         # 'adjust-properties' method above.
         path = [ path.root $(path) [ path.pwd ] ] ;
-
- relative = [ path.relative-to $(source-root) $(path) ] ;
+
+ relative = [ path.relative-to $(source-root) $(path) ] ;
         # Note: using $(name:D=$(relative)) might be faster
         # here, but then we need to explicitly check that
         # relative is not ".", otherwise we might get paths like
@@ -302,190 +307,198 @@
         # <prefix>/boost/.
         #
         # try to create it, and mkdir will obviously fail.
- name = [ path.root $(name:D=) $(relative) ] ;
- targets = [ new file-target $(name) exact : [ $(source).type ]
+ name = [ path.root $(name:D=) $(relative) ] ;
+ targets = [ new file-target $(name) exact : [ $(source).type ]
           : $(project) : $(new-a) ] ;
-
- }
+ }
     else
     {
- targets = [ new file-target $(name:D=) exact : [ $(source).type ]
+ targets = [ new file-target $(name:D=) exact : [ $(source).type ]
           : $(project) : $(new-a) ] ;
     }
-
+
     return $(targets) ;
 }
 
+
 rule symlink ( name : project : source : properties )
 {
     local a = [ new action $(source) : symlink.ln :
       $(properties) ] ;
- local targets = [
+ local targets = [
      new file-target $(name) exact : [ $(source).type ] : $(project) : $(a) ] ;
-
+
     return $(targets) ;
 }
 
-rule relink-file ( project : source : property-set )
-{
+
+rule relink-file ( project : source : property-set )
+{
     local action = [ $(source).action ] ;
     local cloned-action = [ virtual-target.clone-action $(action) : $(project) :
       "" : $(property-set) ] ;
- local result = [ $(cloned-action).targets ] ;
-
+ local result = [ $(cloned-action).targets ] ;
+
     return $(result) ;
 }
 
-# Declare installed version of the EXE type. Generator for this type will
-# cause relinking to the new location.
+
+# Declare installed version of the EXE type. Generator for this type will cause
+# relinking to the new location.
 type.register INSTALLED_EXE : : EXE ;
 
 class installed-exe-generator : generator
 {
- import type property-set modules stage ;
-
+ import type ;
+ import property-set ;
+ import modules ;
+ import stage ;
+
     rule __init__ ( )
     {
         generator.__init__ install-exe : EXE : INSTALLED_EXE ;
     }
-
+
     rule run ( project name ? : property-set : source : multiple ? )
     {
         if [ $(property-set).get <os> ] in NT CYGWIN
         {
             # Relinking is never needed on NT
- return [ stage.copy-file $(project)
- : $(source) : $(property-set) ] ;
+ return [ stage.copy-file $(project)
+ : $(source) : $(property-set) ] ;
         }
- else
+ else
         {
- return [ stage.relink-file $(project)
- : $(source) : $(property-set) ] ;
- }
- }
+ return [ stage.relink-file $(project)
+ : $(source) : $(property-set) ] ;
+ }
+ }
 }
 
 generators.register [ new installed-exe-generator ] ;
 
 
-# Installing shared link on Unix might cause a creation of
-# versioned symbolic links.
+# Installing a shared link on Unix might cause a creation of versioned symbolic
+# links.
 type.register INSTALLED_SHARED_LIB : : SHARED_LIB ;
+
 class installed-shared-lib-generator : generator
 {
- import type property-set modules stage ;
-
+ import type ;
+ import property-set ;
+ import modules ;
+ import stage ;
+
     rule __init__ ( )
     {
         generator.__init__ install-shared-lib : SHARED_LIB
           : INSTALLED_SHARED_LIB ;
     }
-
+
     rule run ( project name ? : property-set : source : multiple ? )
- {
+ {
         if [ $(property-set).get <os> ] = NT
         {
- local copied = [ stage.copy-file $(project)
- : $(source) : $(property-set) ] ;
-
+ local copied = [ stage.copy-file $(project)
+ : $(source) : $(property-set) ] ;
+
             copied = [ virtual-target.register $(copied) ] ;
-
+
             return $(copied) ;
         }
- else
+ else
         {
- local a = [ $(source).action ] ;
+ local a = [ $(source).action ] ;
             local copied ;
             if ! $(a)
             {
                 # Non-derived file, just copy.
- copied = [ stage.copy-file $(project)
- : $(source) : $(property-set) ] ;
+ copied = [ stage.copy-file $(project)
+ : $(source) : $(property-set) ] ;
             }
             else
- {
+ {
                 local cp = [ $(a).properties ] ;
                 local current-dll-path = [ $(cp).get <dll-path> ] ;
                 local new-dll-path = [ $(property-set).get <dll-path> ] ;
-
+
                 if $(current-dll-path) != $(new-dll-path)
                 {
                     # Rpath changed, need to relink.
- copied = [ stage.relink-file
+ copied = [ stage.relink-file
                         $(project) : $(source) : $(property-set) ] ;
                 }
                 else
- {
- copied = [ stage.copy-file $(project)
- : $(source) : $(property-set) ] ;
+ {
+ copied = [ stage.copy-file $(project)
+ : $(source) : $(property-set) ] ;
                 }
             }
-
+
             copied = [ virtual-target.register $(copied) ] ;
-
+
             local result = $(copied) ;
             # If the name is in the form NNN.XXX.YYY.ZZZ, where all
             # 'X', 'Y' and 'Z' are numbers, we need to create
             # NNN.XXX and NNN.XXX.YYY symbolic links.
- local m = [ MATCH (.*)\\.([0123456789]+)\\.([0123456789]+)\\.([0123456789]+)$
+ local m = [ MATCH (.*)\\.([0123456789]+)\\.([0123456789]+)\\.([0123456789]+)$
               : [ $(copied).name ] ] ;
             if $(m)
             {
                 # Symlink without version at all is used to make
                 # -lsome_library work.
                 result += [ stage.symlink $(m[1]) : $(project)
- : $(copied) : $(property-set) ] ;
-
+ : $(copied) : $(property-set) ] ;
+
                 # Symlinks of some libfoo.N and libfoo.N.M are used
                 # so that library can found at runtime, if libfoo.N.M.X
                 # has soname of libfoo.N. That happens when the library
                 # makes some binary compatibility guarantees. If not,
                 # it's possible to skip those symlinks.
- local suppress =
+ local suppress =
                   [ $(property-set).get <install-no-version-symlinks> ] ;
-
+
                 if $(suppress) != "on"
- {
+ {
                     result += [ stage.symlink $(m[1]).$(m[2]) : $(project)
                       : $(copied) : $(property-set) ] ;
                     result += [ stage.symlink $(m[1]).$(m[2]).$(m[3]) : $(project)
                       : $(copied) : $(property-set) ] ;
- }
+ }
             }
-
+
             return $(result) ;
- }
- }
+ }
+ }
 }
 
 generators.register [ new installed-shared-lib-generator ] ;
 
 
-
-# Main target rule for 'install'
+# Main target rule for 'install'.
 rule install ( name : sources * : requirements * : default-build * )
 {
     local project = [ project.current ] ;
-
+
     # Unless the user has explicitly asked us to hardcode dll paths, add
     # <hardcode-dll-paths>false in requirements, to override default
     # value.
     if ! <hardcode-dll-paths>true in $(requirements)
     {
         requirements += <hardcode-dll-paths>false ;
- }
-
+ }
+
     if <tag> in $(requirements:G)
     {
- errors.user-error
+ errors.user-error
           "The <tag> property is not allowed for the 'install' rule" ;
     }
-
+
     targets.main-target-alternative
- [ new install-target-class $(name) : $(project)
+ [ new install-target-class $(name) : $(project)
         : [ targets.main-target-sources $(sources) : $(name) ]
- : [ targets.main-target-requirements $(requirements) : $(project) ]
- : [ targets.main-target-default-build $(default-build) : $(project) ]
+ : [ targets.main-target-requirements $(requirements) : $(project) ]
+ : [ targets.main-target-default-build $(default-build) : $(project) ]
       ] ;
 }
 

Modified: branches/fix-links/tools/build/v2/tools/testing.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/testing.jam (original)
+++ branches/fix-links/tools/build/v2/tools/testing.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,36 +1,36 @@
-# Copyright 2005 Dave Abrahams
-# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2005 Dave Abrahams
+# Copyright 2002, 2003, 2004, 2005, 2006 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
-# This module implements regression testing framework. It declares a number of
-# main target rules, which perform some action, and if the results are ok,
+# This module implements regression testing framework. It declares a number of
+# main target rules which perform some action and, if the results are ok,
 # creates an output file.
-#
+#
 # The exact list of rules is:
-# 'compile' -- creates .test file if compilation of sources was successfull
-# 'compile-fail' -- creates .test file if compilation of sources failed
+# 'compile' -- creates .test file if compilation of sources was
+# successful.
+# 'compile-fail' -- creates .test file if compilation of sources failed.
 # 'run' -- creates .test file is running of executable produced from
-# sources was successfull. Also leaves behing .output file
+# sources was successful. Also leaves behind .output file
 # with the output from program run.
 # 'run-fail' -- same as above, but .test file is created if running fails.
 #
-# In all cases, presense of .test file is an incication that
-# the test passed. For more convenient reporting, you might want to use C++ Boost
-# regression testing utilities, see
-# http://www.boost.org/more/regression.html
+# In all cases, presence of .test file is an indication that the test passed.
+# For more convenient reporting, you might want to use C++ Boost regression
+# testing utilities, see http://www.boost.org/more/regression.html
 #
-# For historical reason, a 'unit-test' rule is available which
-# has the same syntax as 'exe' and behaves just like 'run'.
+# For historical reason, a 'unit-test' rule is available which has the same
+# syntax as 'exe' and behaves just like 'run'.
 
 # Things to do:
 # - Teach compiler_status handle Jamfile.v2.
 # Notes:
-# - <no-warn> is not implemented, since in Como-specific, and it's not clear how
-# to implement it
-# - std::locale-support is not impelemted (it's used in one test).
+# - <no-warn> is not implemented, since in Como-specific, and it's not clear
+# how to implement it
+# - std::locale-support is not implemented (it's used in one test).
+
 
-
 import targets ;
 import "class" : new ;
 import property ;
@@ -48,77 +48,83 @@
 import sequence ;
 import errors ;
 
-rule init ( ) { }
 
-# The feature which controls the name of program used to
-# lanch test programs.
-feature.feature testing.launcher : : optional free ;
-feature.feature test-info : : free incidental ;
-feature.feature testing.arg : : free incidental ;
+rule init ( )
+{
+}
+
+
+# Feature controling the command used to lanch test programs.
+feature.feature testing.launcher : : free optional ;
+
+feature.feature test-info : : free incidental ;
+feature.feature testing.arg : : free incidental ;
 feature.feature testing.input-file : : free dependency ;
 
+
 # Register target types.
-type.register TEST : test ;
-type.register COMPILE : : TEST ;
-type.register COMPILE_FAIL : : TEST ;
-type.register RUN_OUTPUT : run ;
-type.register RUN : : TEST ;
-type.register RUN_FAIL : : TEST ;
-type.register LINK_FAIL : : TEST ;
-type.register LINK : : TEST ;
-type.register UNIT_TEST : passed : TEST ;
-
-# Declare the rules which create main targets.
-# While the 'type' module already creates rules with the same names for us,
-# we need extra convenience: default name of main target, so write
-# our own versions.
-
-# Helper rule. Create a test target, using basename of first source if no
-# target name is explicitly passed. Remembers the created target in
-# a global variable.
+type.register TEST : test ;
+type.register COMPILE : : TEST ;
+type.register COMPILE_FAIL : : TEST ;
+type.register RUN_OUTPUT : run ;
+type.register RUN : : TEST ;
+type.register RUN_FAIL : : TEST ;
+type.register LINK_FAIL : : TEST ;
+type.register LINK : : TEST ;
+type.register UNIT_TEST : passed : TEST ;
+
+
+# Declare the rules which create main targets. While the 'type' module already
+# creates rules with the same names for us, we need extra convenience: default
+# name of main target, so write our own versions.
+
+# Helper rule. Create a test target, using basename of first source if no target
+# name is explicitly passed. Remembers the created target in a global variable.
 rule make-test ( target-type : sources + : requirements * : target-name ? )
 {
     target-name ?= $(sources[1]:D=:S=) ;
 
     local project = [ project.current ] ;
- # The <location-prefix> forces the build system for generate paths in the form
- # $build_dir/array1.test/gcc/debug
- # This is necessary to allow post-processing tools to work.
- local t =
- [ targets.create-typed-target
+ # The <location-prefix> forces the build system for generate paths in the
+ # form '$build_dir/array1.test/gcc/debug'. This is necessary to allow
+ # post-processing tools to work.
+ local t =
+ [ targets.create-typed-target
           [ type.type-from-rule-name $(target-type) ] : $(project)
- : $(target-name) : $(sources)
+ : $(target-name) : $(sources)
             : $(requirements) <location-prefix>$(target-name).test ] ;
-
- # Remember the test (for --dump-test).
- # A good way would be to collect all given a project.
- # This has some technical problems: e.g. we can't call this dump from
- # Jamfile since projects referred by 'build-project' are not available until
- # whole Jamfile is loaded.
+
+ # Remember the test (for --dump-tests). A good way would be to collect all
+ # given a project. This has some technical problems: e.g. we can't call this
+ # dump from Jamfile since projects referred by 'build-project' are not
+ # available until the whole Jamfile is loaded.
     .all-tests += $(t) ;
- return $(t) ;
+ return $(t) ;
 }
 
-# Note: passing more that one cpp file here is know to
-# fail. Passing a cpp file and a library target works.
+
+# Note: passing more that one cpp file here is known to fail. Passing a cpp file
+# and a library target works.
 rule compile ( sources + : requirements * : target-name ? )
-{
+{
     return [ make-test compile : $(sources) : $(requirements) : $(target-name) ] ;
 }
 
+
 rule compile-fail ( sources + : requirements * : target-name ? )
-{
+{
     return [ make-test compile-fail : $(sources) : $(requirements) : $(target-name) ] ;
 }
 
+
 rule link ( sources + : requirements * : target-name ? )
-{
+{
     return [ make-test link : $(sources) : $(requirements) : $(target-name) ] ;
 }
 
 
 rule link-fail ( sources + : requirements * : target-name ? )
-{
+{
     return [ make-test link-fail : $(sources) : $(requirements) : $(target-name) ] ;
 }
 
@@ -127,56 +133,55 @@
 {
     if $(input-files[2])
     {
- # Check that sorting made when creating property-set instance
- # won't change the ordering.
+ # Check that sorting made when creating property-set instance won't
+ # change the ordering.
         if [ sequence.insertion-sort $(input-files) ] != $(input-files)
         {
             errors.user-error "Names of input files must be sorted alphabetically"
- : "due to internal limitations" ;
- }
+ : "due to internal limitations" ;
+ }
     }
     return <testing.input-file>$(input-files) ;
 }
 
 
-rule run ( sources + : args * : input-files * : requirements * : target-name ?
+rule run ( sources + : args * : input-files * : requirements * : target-name ?
     : default-build * )
-{
+{
     requirements += <testing.arg>$(args:J=" ") ;
     requirements += [ handle-input-files $(input-files) ] ;
     return [ make-test run : $(sources) : $(requirements) : $(target-name) ] ;
 }
 
-rule run-fail ( sources + : args * : input-files * : requirements * : target-name ?
- : default-build * )
-{
- requirements += <testing.arg>$(args:J=" ") ;
+
+rule run-fail ( sources + : args * : input-files * : requirements *
+ : target-name ? : default-build * )
+{
+ requirements += <testing.arg>$(args:J=" ") ;
     requirements += [ handle-input-files $(input-files) ] ;
     return [ make-test run-fail : $(sources) : $(requirements) : $(target-name) ] ;
 }
 
-
-# Use 'test-suite' as synonym for 'alias', for backward compatibility.
+# Use 'test-suite' as a synonym for 'alias', for backward compatibility.
 IMPORT : alias : : test-suite ;
 
 
-
-# For all main target in 'project-module',
-# which are typed target with type derived from 'TEST',
-# produce some interesting information.
+# For all main targets in 'project-module', which are typed targets with type
+# derived from 'TEST', produce some interesting information.
 rule dump-tests # ( project-module )
 {
     for local t in $(.all-tests)
     {
         dump-test $(t) ;
- }
+ }
 }
 
-# Given a project location, compute the name of Boost library
+
+# Given a project location in normalized form (slashes are forward), compute the
+# name of the Boost library.
 local rule get-library-name ( path )
 {
     # Path is in normalized form, so all slashes are forward.
-
     local match1 = [ MATCH /libs/(.*)/(test|example) : $(path) ] ;
     local match2 = [ MATCH /libs/(.*)$ : $(path) ] ;
     local match3 = [ MATCH (/status$) : $(path) ] ;
@@ -184,19 +189,20 @@
     if $(match1) { return $(match1[0]) ; }
     else if $(match2) { return $(match2[0]) ; }
     else if $(match3) { return "" ; }
- else if --dump-tests in [ modules.peek : ARGV ]
- {
- # The 'run' rule and others might be used outside
- # boost. In that case, just return the path,
- # since the 'library name' makes no sense.
+ else if --dump-tests in [ modules.peek : ARGV ]
+ {
+ # The 'run' rule and others might be used outside boost. In that case,
+ # just return the path, since the 'library name' makes no sense.
         return $(path) ;
     }
 }
 
+
 # Was an XML dump requested?
 .out-xml = [ MATCH --out-xml=(.*) : [ modules.peek : ARGV ] ] ;
 
-# Take a target (instance of 'basic-target') and prints
+
+# Takes a target (instance of 'basic-target') and prints
 # - its type
 # - its name
 # - comments specified via the <test-info> property
@@ -206,44 +212,44 @@
     local type = [ $(target).type ] ;
     local name = [ $(target).name ] ;
     local project = [ $(target).project ] ;
-
+
     local project-root = [ $(project).get project-root ] ;
- local library = [ get-library-name
+ local library = [ get-library-name
         [ path.root [ $(project).get location ] [ path.pwd ] ] ] ;
     if $(library)
     {
         name = $(library)/$(name) ;
     }
-
+
     local sources = [ $(target).sources ] ;
     local source-files ;
     for local s in $(sources)
     {
- if [ class.is-a $(s) : file-reference ]
+ if [ class.is-a $(s) : file-reference ]
         {
- local location =
- [ path.root
+ local location =
+ [ path.root
                   [ path.root [ $(s).name ] [ $(s).location ] ]
- [ path.pwd ] ] ;
-
- source-files +=
- [ path.relative
+ [ path.pwd ] ] ;
+
+ source-files +=
+ [ path.relative
                   $(location)
                   [ path.root $(project-root) [ path.pwd ] ] ] ;
- }
+ }
     }
-
+
     local r = [ $(target).requirements ] ;
- # Extract values of the <test-info> feature
+ # Extract values of the <test-info> feature.
     local test-info = [ $(r).get <test-info> ] ;
-
- # If the user requested XML output on the command-line, add the
- # test info to that XML file rather than dumping them to stdout.
+
+ # If the user requested XML output on the command-line, add the test info to
+ # that XML file rather than dumping them to stdout.
     if $(.out-xml)
     {
         local nl = "
 " ;
- .contents on $(.out-xml) +=
+ .contents on $(.out-xml) +=
             "$(nl) <test type=\"$(type)\" name=\"$(name)\">"
             "$(nl) <info><![CDATA[$(test-info)]]></info>"
             "$(nl) <source><![CDATA[$(source-files)]]></source>"
@@ -252,123 +258,123 @@
     }
     else
     {
- # Format them into a single string of quoted strings
+ # Format them into a single string of quoted strings.
         test-info = \"$(test-info:J=\"\ \")\" ;
-
- ECHO boost-test($(type)) \"$(name)\"
- [$(test-info)]
- ":" \"$(source-files)\"
- ;
+
+ ECHO boost-test($(type)) \"$(name)\"
+ [$(test-info)]
+ ":" \"$(source-files)\" ;
     }
 }
 
-# Register generators. Depending on target type, either
-# 'expect-success' or 'expect-failure' rule will be used.
-generators.register-standard testing.expect-success : OBJ : COMPILE ;
-generators.register-standard testing.expect-failure : OBJ : COMPILE_FAIL ;
-generators.register-standard testing.expect-success : RUN_OUTPUT : RUN ;
-generators.register-standard testing.expect-failure : RUN_OUTPUT : RUN_FAIL ;
-generators.register-standard testing.expect-failure : EXE : LINK_FAIL ;
-generators.register-standard testing.expect-success : EXE : LINK ;
+
+# Register generators. Depending on target type, either 'expect-success' or
+# 'expect-failure' rule will be used.
+generators.register-standard testing.expect-success : OBJ : COMPILE ;
+generators.register-standard testing.expect-failure : OBJ : COMPILE_FAIL ;
+generators.register-standard testing.expect-success : RUN_OUTPUT : RUN ;
+generators.register-standard testing.expect-failure : RUN_OUTPUT : RUN_FAIL ;
+generators.register-standard testing.expect-failure : EXE : LINK_FAIL ;
+generators.register-standard testing.expect-success : EXE : LINK ;
 
 # Generator which runs an EXE and captures output.
 generators.register-standard testing.capture-output : EXE : RUN_OUTPUT ;
 
-# Generator which creates target if sources runs successfully.
-# Differers from RUN in that run output is not captured.
-# The reason why it exists is that the 'run' rule is much better for
-# automated testing, but is not user-friendly. See
+# Generator which creates a target if sources runs successfully. Differs from
+# RUN in that run output is not captured. The reason why it exists is that the
+# 'run' rule is much better for automated testing, but is not user-friendly. See
 # http://article.gmane.org/gmane.comp.lib.boost.build/6353/
 generators.register-standard testing.unit-test : EXE : UNIT_TEST ;
 
 
 # The action rules called by generators.
 
-# Causes the 'target' to exist after bjam invocation if and only if all the
+# Causes the 'target' to exist after bjam invocation if and only if all the
 # dependencies were successfully built.
 rule expect-success ( target : dependency + : requirements * )
 {
- **passed** $(target) : $(sources) ;
+ **passed** $(target) : $(sources) ;
 }
 
-# Causes the 'target' to exist after bjam invocation if and only if all some
-# of the dependencies were not successfully built.
+# Causes the 'target' to exist after bjam invocation if and only if all some of
+# the dependencies were not successfully built.
 rule expect-failure ( target : dependency + : properties * )
 {
     local grist = [ MATCH ^<(.*)> : $(dependency:G) ] ;
     local marker = $(dependency:G=$(grist)*fail) ;
     (failed-as-expected) $(marker) ;
- FAIL_EXPECTED $(dependency) ;
+ FAIL_EXPECTED $(dependency) ;
     LOCATE on $(marker) = [ on $(dependency) return $(LOCATE) ] ;
     RMOLD $(marker) ;
     DEPENDS $(marker) : $(dependency) ;
-
     DEPENDS $(target) : $(marker) ;
     **passed** $(target) : $(marker) ;
 }
 
-# The rule/action combination used to report successfull passing
-# of a test.
+
+# The rule/action combination used to report successfull passing of a test.
 rule **passed**
 {
- # Dump all the tests, if needed.
- # We do it here, since dump should happen after all Jamfiles are read,
- # and there's no such place currently defined (but should).
- if ! $(.dumped-tests) && --dump-tests in [ modules.peek : ARGV ]
+ # Dump all the tests, if needed. We do it here, since dump should happen
+ # only after all Jamfiles have been read, and there's no such place
+ # currently defined (but there should be).
+ if ! $(.dumped-tests) && --dump-tests in [ modules.peek : ARGV ]
     {
         .dumped-tests = true ;
         dump-tests ;
     }
-
- # Force deletion of the target, in case any dependencies failed
- # to build.
+
+ # Force deletion of the target, in case any dependencies failed to build.
     RMOLD $(<) ;
 }
 
+
 actions **passed**
 {
     echo passed > $(<)
 }
 
+
 actions (failed-as-expected)
 {
     echo failed as expected > $(<)
 }
 
+
 rule run-path-setup ( target : source : properties * )
 {
- # For testing, we need to make sure that all dynamic libraries needed by
- # the test are found. So, we collect all paths from dependency libraries
- # (via xdll-path property) and add whatever explicit dll-path user has
- # specified. The resulting paths are added to environment on each test
- # invocation.
+ # For testing, we need to make sure that all dynamic libraries needed by the
+ # test are found. So, we collect all paths from dependency libraries (via
+ # xdll-path property) and add whatever explicit dll-path user has specified.
+ # The resulting paths are added to the environment on each test invocation.
     local dll-paths = [ feature.get-values <dll-path> : $(properties) ] ;
     dll-paths += [ feature.get-values <xdll-path> : $(properties) ] ;
     dll-paths += [ on $(source) return $(RUN_PATH) ] ;
     dll-paths = [ sequence.unique $(dll-paths) ] ;
     if $(dll-paths)
- {
+ {
         dll-paths = [ sequence.transform path.native : $(dll-paths) ] ;
-
- PATH_SETUP on $(target) =
- [ common.prepend-path-variable-command
- [ os.shared-library-path-variable ] : $(dll-paths) ] ;
- }
+ PATH_SETUP on $(target) = [ common.prepend-path-variable-command
+ [ os.shared-library-path-variable ] : $(dll-paths) ] ;
+ }
 }
 
+
 local argv = [ modules.peek : ARGV ] ;
 if --preserve-test-targets in $(argv)
 {
     preserve-test-targets = true ;
 }
 
+
 toolset.flags testing.capture-output ARGS <testing.arg> ;
 toolset.flags testing.capture-output INPUT_FILES <testing.input-file> ;
 toolset.flags testing.capture-output LAUNCHER <testing.launcher> ;
 
-# Runs executable 'sources' and stores stdout in file 'target'.
-# If --preserve-test-targets command line option, removes the executable.
-# The 'target-to-remove' parameter controls what should be removed:
+
+# Runs executable 'sources' and stores stdout in file 'target'. Unless
+# --preserve-test-targets command line option has been specified, removes the
+# executable. The 'target-to-remove' parameter controls what should be removed:
 # - if 'none', does not remove anything, ever
 # - if empty, removes 'source'
 # - if non-empty and not 'none', contains a list of sources to remove.
@@ -376,19 +382,20 @@
 {
     output-file on $(target) = $(target:S=.output) ;
     LOCATE on $(target:S=.output) = [ on $(target) return $(LOCATE) ] ;
-
+
     # The INCLUDES kill a warning about independent target...
     INCLUDES $(target) : $(target:S=.output) ;
- # but it also puts .output into dependency graph, so we must tell jam
- # it's OK if it cannot find the target or updating rule.
- NOCARE $(target:S=.output) ;
-
+ # but it also puts .output into dependency graph, so we must tell jam it's
+ # OK if it cannot find the target or updating rule.
+ NOCARE $(target:S=.output) ;
+
     # This has two-fold effect. First it adds input files to the dependendency
     # graph, preventing a warning. Second, it causes input files to be bound
- # before target is created. Therefore, they are bound using SEARCH setting
- # on them and not LOCATE setting of $(target), as in other case (due to jam bug).
+ # before target is created. Therefore, they are bound using SEARCH setting
+ # on them and not LOCATE setting of $(target), as in other case (due to jam
+ # bug).
     DEPENDS $(target) : [ on $(target) return $(INPUT_FILES) ] ;
-
+
     if $(targets-to-remove) = none
     {
         targets-to-remove = ;
@@ -397,23 +404,19 @@
     {
         targets-to-remove = $(source) ;
     }
-
+
     run-path-setup $(target) : $(source) : $(properties) ;
-
+
     if ! $(preserve-test-targets)
     {
         TEMPORARY $(targets-to-remove) ;
- # Set a second action on target that will
- # be executed after capture output action.
- # The 'RmTemps' rule has the 'ignore' modifier
- # so it's always considered succeeded.
- # This is needed for 'run-fail' test. For that
- # test the target will be marked with FAIL_EXPECTED,
- # and without 'ingore' successfull execution
- # will be negated and be reported as failure.
- # With 'ignore' we don't detect a case where
- # removing files, but it's not likely to
- # happen.
+ # Set a second action on target that will be executed after capture
+ # output action. The 'RmTemps' rule has the 'ignore' modifier so it's
+ # always considered succeeded. This is needed for 'run-fail' test. For
+ # that test the target will be marked with FAIL_EXPECTED, and without
+ # 'ignore' successful execution will be negated and be reported as
+ # failure. With 'ignore' we don't detect a case where removing files
+ # fails, but it's not likely to happen.
         RmTemps $(target) : $(targets-to-remove) ;
     }
 }
@@ -421,34 +424,32 @@
 
 if [ os.name ] = NT
 {
- STATUS = %status% ;
- SET_STATUS = "set status=%ERRORLEVEL%" ;
+ STATUS = %status% ;
+ SET_STATUS = "set status=%ERRORLEVEL%" ;
     RUN_OUTPUT_NL = "echo." ;
- STATUS_0 = "%status% EQU 0 (" ;
- STATUS_NOT_0 = "%status% NEQ 0 (" ;
- VERBOSE = "%verbose% EQU 1 (" ;
- ENDIF = ")" ;
- SHELL_SET = "set " ;
-
- CATENATE = type ;
- CP = copy ;
+ STATUS_0 = "%status% EQU 0 (" ;
+ STATUS_NOT_0 = "%status% NEQ 0 (" ;
+ VERBOSE = "%verbose% EQU 1 (" ;
+ ENDIF = ")" ;
+ SHELL_SET = "set " ;
+ CATENATE = type ;
+ CP = copy ;
 }
 else
 {
- STATUS = "$status" ;
- SET_STATUS = "status=$?" ;
+ STATUS = "$status" ;
+ SET_STATUS = "status=$?" ;
     RUN_OUTPUT_NL = "echo" ;
- STATUS_0 = "test $status -eq 0 ; then" ;
- STATUS_NOT_0 = "test $status -ne 0 ; then" ;
- VERBOSE = "test $verbose -eq 1 ; then" ;
- ENDIF = "fi" ;
- SHELL_SET = "" ;
-
- CATENATE = cat ;
- CP = cp ;
+ STATUS_0 = "test $status -eq 0 ; then" ;
+ STATUS_NOT_0 = "test $status -ne 0 ; then" ;
+ VERBOSE = "test $verbose -eq 1 ; then" ;
+ ENDIF = "fi" ;
+ SHELL_SET = "" ;
+ CATENATE = cat ;
+ CP = cp ;
 }
 
-if --verbose-test in [ modules.peek : ARGV ]
+if --verbose-test in [ modules.peek : ARGV ]
 {
     VERBOSE_TEST = 1 ;
 }
@@ -460,10 +461,11 @@
 
 RM = [ common.rm-command ] ;
 
+
 actions capture-output bind INPUT_FILES output-file
 {
     $(PATH_SETUP)
- $(LAUNCHER) "$(>)" $(ARGS) "$(INPUT_FILES)" > "$(output-file)" 2>&1
+ $(LAUNCHER) "$(>)" $(ARGS) "$(INPUT_FILES)" > "$(output-file)" 2>&1
     $(SET_STATUS)
     $(RUN_OUTPUT_NL) >> "$(output-file)"
     echo EXIT STATUS: $(STATUS) >> "$(output-file)"
@@ -478,15 +480,17 @@
         echo ====== BEGIN OUTPUT ======
         $(CATENATE) "$(output-file)"
         echo ====== END OUTPUT ======
- $(ENDIF)
- exit $(STATUS)
+ $(ENDIF)
+ exit $(STATUS)
 }
 
+
 actions quietly updated ignore piecemeal together RmTemps
 {
     $(RM) "$(>)"
 }
 
+
 MAKE_FILE = [ common.file-creation-command ] ;
 
 toolset.flags testing.unit-test LAUNCHER <testing.launcher> ;
@@ -496,19 +500,21 @@
     run-path-setup $(target) : $(source) : $(properties) ;
 }
 
-actions unit-test
+
+actions unit-test
 {
     $(PATH_SETUP)
     $(LAUNCHER) $(>) $(ARGS) && $(MAKE_FILE) $(<)
 }
 
-IMPORT $(__name__) : compile compile-fail run run-fail link link-fail
- : : compile compile-fail run run-fail link link-fail ;
+IMPORT $(__name__) : compile compile-fail run run-fail link link-fail
+ : : compile compile-fail run run-fail link link-fail ;
 
 
 type.register TIME : time ;
 generators.register-standard testing.time : : TIME ;
 
+
 rule record-time ( target : source : start end user system )
 {
     local src-string = [$(source:G=:J=",")"] " ;
@@ -517,21 +523,24 @@
 }
 
 IMPORT testing : record-time : : testing.record-time ;
+
+
 rule time ( target : source : properties * )
 {
- # Set up rule for recording timing information
+ # Set up rule for recording timing information.
     __TIMING_RULE__ on $(source) = testing.record-time $(target) ;
-
- # Make sure that the source is rebuilt any time we need to
- # retrieve that information
+
+ # Make sure that the source is rebuilt any time we need to retrieve that
+ # information.
     REBUILDS $(target) : $(source) ;
 }
 
+
 actions time
 {
     echo user: $(USER_TIME)
     echo system: $(SYSTEM_TIME)
-
+
     echo user: $(USER_TIME)" seconds" > $(<)
     echo system: $(SYSTEM_TIME)" seconds" > $(<)
 }

Modified: branches/fix-links/tools/build/v2/util/doc.jam
==============================================================================
--- branches/fix-links/tools/build/v2/util/doc.jam (original)
+++ branches/fix-links/tools/build/v2/util/doc.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,13 +1,13 @@
-# Copyright 2002, 2005 Dave Abrahams
-# Copyright 2002, 2003, 2006 Rene Rivera
-# Copyright 2003 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2002, 2005 Dave Abrahams
+# Copyright 2002, 2003, 2006 Rene Rivera
+# Copyright 2003 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 # Documentation system, handles --help requests.
 # It defines rules that attach documentation to modules, rules, and variables.
-# Collects and generates documentation for the various parts of the build system.
-# The documentation is collected from comments integrated into the code.
+# Collects and generates documentation for the various parts of the build
+# system. The documentation is collected from comments integrated into the code.
 
 import modules ;
 import print ;
@@ -235,17 +235,17 @@
 # Generates a general description of the documentation and help system.
 #
 local rule print-help-top ( )
-{
+{
     print.section "General command line usage" ;
 
     print.text " bjam [options] [properties] [targets]
-
+
   Options, properties and targets can be specified in any order.
       " ;
-
- print.section "Important Options" ;
-
- print.list-start ;
+
+ print.section "Important Options" ;
+
+ print.list-start ;
     print.list-item "--clean Remove targets instead of building" ;
     print.list-item "-a Rebuild everything" ;
     print.list-item "-n Don't execute the commands, only print them" ;
@@ -256,11 +256,11 @@
     print.list-item "--debug-building Report which targets are built with what properties" ;
     print.list-item "--debug-generator Diagnose generator search/execution" ;
     print.list-end ;
-
+
     print.section "Further Help"
         The following options can be used to obtain additional documentation.
       ;
-
+
     print.list-start ;
     print.list-item "--help-options Print more obscure command line options." ;
     print.list-item "--help-internal Boost.Build implementation details." ;
@@ -279,18 +279,18 @@
     print.list-item -a;
         Build all targets, even if they are current. ;
     print.list-item -fx;
- Read '"x"' as the Jamfile for building instead of searching
- for the Boost.Build system. ;
+ Read '"x"' as the Jamfile for building instead of searching for the
+ Boost.Build system. ;
     print.list-item -jx;
         Run up to '"x"' commands concurrently. ;
     print.list-item -n;
- Do not execute build commands. Instead print out the commands
- as they would be executed if building. ;
+ Do not execute build commands. Instead print out the commands as they
+ would be executed if building. ;
     print.list-item -ox;
- Write the build commands to the file '"x"'. ;
+ Output the used build commands to file '"x"'. ;
     print.list-item -q;
- Quit as soon as the build of a target fails. Specifying this prevents the
- attempt of building as many targets as possible regardless of failures. ;
+ Quit as soon as a build failure is encountered. Without this option
+ Boost.Jam will continue building as many targets as it can.
     print.list-item -sx=y;
         Sets a Jam variable '"x"' to the value '"y"', overriding any value that
         variable would have from the environment. ;
@@ -299,19 +299,19 @@
     print.list-item -v;
         Display the version of bjam. ;
     print.list-item --x;
- Option '"x"' is ignored but considered and option. The option is then
- available from the '"ARGV"' variable. ;
+ Any option not explicitly handled by Boost.Jam remains available to
+ build scripts using the '"ARGV"' variable. ;
     print.list-item -dn;
         Enables output of diagnostic messages. The debug level '"n"' and all
         below it are enabled by this option. ;
     print.list-item -d+n;
- Enables output of diagnostic messages. Only the output for debug level '"n"'
- is enabled. ;
+ Enables output of diagnostic messages. Only the output for debug level
+ '"n"' is enabled. ;
     print.list-end ;
     print.section "Debug Levels"
- Each debug level shows a different set of information. Usually with the higher
- levels producing more verbose information. The following levels are supported:
- ;
+ Each debug level shows a different set of information. Usually with
+ higher levels producing more verbose information. The following levels
+ are supported: ;
     print.list-start ;
     print.list-item 0;
         Turn off all diagnostic output. Only errors are reported. ;
@@ -353,9 +353,9 @@
     )
 {
     print.section "Help Options"
- These are all the options available for enabling or disabling
- to control the help system in various ways. Options can be enabled
- or disabled with '"--help-enable-<option>"', and "'--help-disable-<option>'"
+ These are all the options available for enabling or disabling to control
+ the help system in various ways. Options can be enabled or disabled with
+ '"--help-enable-<option>"', and "'--help-disable-<option>'"
         respectively.
         ;
     local options-to-list = [ MATCH ^[.]option[.](.*) : $($(module-name).variables) ] ;
@@ -410,11 +410,11 @@
     }
 }
 
-# Generate documentation for possible modules. We attempt to list all known
-# modules, and a brief description of each.
+# Generate documentation for all possible modules. We attempt to list all known
+# modules together with a brief description of each.
 #
 local rule print-help-all (
- ignored # Usually the module name, but is ignored here.
+ ignored # Usually the module name, but is ignored here.
     )
 {
     print.section "Modules"
@@ -451,19 +451,19 @@
 {
     # Print the docs.
     print.section "Module '$(module-name)'" $($(module-name).docs) ;
-
+
     # Print out the documented classes.
     print-help-module-section $(module-name) classes : "Module '$(module-name)' classes"
         Use --help $(module-name).<class-name> to get more information. ;
-
+
     # Print out the documented rules.
     print-help-module-section $(module-name) rules : "Module '$(module-name)' rules"
         Use --help $(module-name).<rule-name> to get more information. ;
-
+
     # Print out the documented variables.
     print-help-module-section $(module-name) variables : "Module '$(module-name)' variables"
         Use --help $(module-name).<variable-name> to get more information. ;
-
+
     # Print out all the same information but indetailed form.
     if $(.option.detailed)
     {
@@ -536,11 +536,11 @@
                     print.list-end ;
                 }
             }
-
+
             # Print out the documented rules of the class.
             print-help-module-section $(module-name) $(class-name).class-rules : "Class '$(module-name).$(class-name)' rules"
                 Use --help $(module-name).<rule-name> to get more information. ;
-
+
             # Print out all the rules if details are requested.
             if $(.option.detailed)
             {
@@ -594,7 +594,7 @@
         # Print the docs.
         print.section "Project-specific help"
             Project has jamfile at $(jamfile) ;
-
+
         print.lines $(jamfile<$(jamfile)>.docs) "" ;
     }
 }
@@ -612,7 +612,7 @@
         # Print the docs.
         print.section "Configuration help"
             Configuration file at $(config-file) ;
-
+
         print.lines $(jamfile<$(config-file)>.docs) "" ;
     }
 }
@@ -738,7 +738,7 @@
                 scope-level = $(scope-level[2-]) ;
             }
         }
-
+
         return true ;
     }
 }
@@ -847,10 +847,10 @@
     }
 }
 
-# Scan a module file for documentation comments. This also
-# invokes any actions assigned to the module. The actions
-# are the rules that do the actual output of the documentation.
-# This rue is invoked as the header scan rule for the module file.
+# Scan a module file for documentation comments. This also invokes any actions
+# assigned to the module. The actions are the rules that do the actual output of
+# the documentation. This rule is invoked as the header scan rule for the module
+# file.
 #
 rule scan-module (
     target # The module file.

Modified: branches/fix-links/tools/build/v2/util/indirect.jam
==============================================================================
--- branches/fix-links/tools/build/v2/util/indirect.jam (original)
+++ branches/fix-links/tools/build/v2/util/indirect.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,14 +1,16 @@
-# Copyright 2003 Dave Abrahams
-# Copyright 2003 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2003 Dave Abrahams
+# Copyright 2003 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 import modules ;
 import numbers ;
 
-# The pattern that indirect rules must match: module$rule
+
+# The pattern that indirect rules must match: module%rule
 .pattern = ^([^%]*)%([^%]+)$ ;
-
+
+
 #
 # Type checking rules.
 #
@@ -16,14 +18,15 @@
 {
     if ! [ MATCH $(.pattern) : $(x) ]
     {
- return "expected a string of the form module$rule, but got \""$(x)"\" for argument" ;
+ return "expected a string of the form module%rule, but got \""$(x)"\" for argument" ;
     }
 }
 
-# make an indirect rule which calls the given rule; if context is
-# supplied it is expected to be the module in which to invoke the rule
-# by the 'call' rule below. Otherwise, the rule will be invoked in
-# the module of this rule's caller.
+
+# Make an indirect rule which calls the given rule. If context is supplied it is
+# expected to be the module in which to invoke the rule by the 'call' rule
+# below. Otherwise, the rule will be invoked in the module of this rule's
+# caller.
 rule make ( rulename bound-args * : context ? )
 {
     context ?= [ CALLER_MODULE ] ;
@@ -31,12 +34,12 @@
     return $(context)%$(rulename) $(bound-args) ;
 }
 
-# make an indirect rule which calls the given rule. rulename may be a
-# qualified rule; if so it is returned unchanged. Otherwise, if
-# frames is not supplied, the result will be invoked (by 'call',
-# below) in the module of the caller. Otherwise, frames > 1
-# specifies additional call frames to back up in order to find the
-# module context.
+
+# Make an indirect rule which calls the given rule. 'rulename' may be a
+# qualified rule; if so it is returned unchanged. Otherwise, if frames is not
+# supplied, the result will be invoked (by 'call', below) in the module of the
+# caller. Otherwise, frames > 1 specifies additional call frames to back up in
+# order to find the module context.
 rule make-qualified ( rulename bound-args * : frames ? )
 {
     if [ MATCH $(.pattern) : $(rulename) ]
@@ -46,17 +49,16 @@
     else
     {
         frames ?= 1 ;
- # Take the first dot-separated element as module name.
- # This disallows module names with dots, but allows rule names
- # with dots.
+ # Take the first dot-separated element as module name. This disallows
+ # module names with dots, but allows rule names with dots.
         local module-context = [ MATCH ^([^.]*)\\..* : $(rulename) ] ;
         module-context ?= [ CALLER_MODULE $(frames) ] ;
         return [ make $(rulename) $(bound-args) : $(module-context) ] ;
     }
 }
 
-# return the module name in which the given indirect rule will be
-# invoked.
+
+# Returns the module name in which the given indirect rule will be invoked.
 rule get-module ( [indirect-rule] x )
 {
     local m = [ MATCH $(.pattern) : $(x) ] ;
@@ -67,37 +69,36 @@
     return $(m[1]) ;
 }
 
-# return the rulename that will be called when x is invoked
+
+# Returns the rulename that will be called when x is invoked.
 rule get-rule ( [indirect-rule] x )
 {
     local m = [ MATCH $(.pattern) : $(x) ] ;
     return $(m[2]) ;
 }
 
+
 # Invoke the given indirect-rule.
 rule call ( [indirect-rule] r args * : * )
 {
- return [
- modules.call-in [ get-module $(r) ]
- : [ get-rule $(r) ] $(args) : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9)
- ] ;
+ return [ modules.call-in [ get-module $(r) ] : [ get-rule $(r) ] $(args)
+ : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ] ;
 }
 
+
 rule __test__
 {
     import assert ;
-
+
     rule foo-barr! ( x )
     {
         assert.equal $(x) : x ;
     }
-
+
     assert.equal [ get-rule [ make foo-barr! ] ] : foo-barr! ;
     assert.equal [ get-module [ make foo-barr! ] ] : [ CALLER_MODULE ] ;
-
+
     call [ make foo-barr! ] x ;
     call [ make foo-barr! x ] ;
-
-
     call [ make foo-barr! : [ CALLER_MODULE ] ] x ;
 }

Modified: branches/fix-links/tools/build/v2/util/order.jam
==============================================================================
--- branches/fix-links/tools/build/v2/util/order.jam (original)
+++ branches/fix-links/tools/build/v2/util/order.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,70 +3,71 @@
 # License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
 # at http://www.boost.org/LICENSE_1_0.txt)
 
-# This module defines a class which allows to order arbitrary object
-# with regard to arbitrary binary relation.
+# This module defines a class which allows to order arbitrary object with
+# regard to arbitrary binary relation.
 #
-# The primary use case is the gcc toolset, which is sensitive to
-# library order: if library 'a' uses symbols from library 'b',
-# then 'a' must be present before 'b' on the linker's command line.
+# The primary use case is the gcc toolset, which is sensitive to library order:
+# if library 'a' uses symbols from library 'b', then 'a' must be present before
+# 'b' on the linker's command line.
 #
-# This requirement can be lifted for gcc with GNU ld, but for gcc with
-# Solaris LD (and for Solaris toolset as well), the order always matters.
+# This requirement can be lifted for gcc with GNU ld, but for gcc with Solaris
+# LD (and for Solaris toolset as well), the order always matters.
 #
-# So, we need to store order requirements and then order libraries
-# according to them. It it not possible to use dependency graph as
-# order requirements. What we need is "use symbols" relationship
-# while dependency graph provides "needs to be updated" relationship.
+# So, we need to store order requirements and then order libraries according to
+# them. It is not possible to use the dependency graph as order requirements.
+# What we need is a "use symbols" relationship while dependency graph provides
+# the "needs to be updated" relationship.
 #
 # For example::
 # lib a : a.cpp b;
 # lib b ;
 #
-# For static linking, the 'a' library need not depend on 'b'. However, it
-# still should come before 'b' on the command line.
+# For static linking, library 'a' need not depend on 'b'. However, it should
+# still come before 'b' on the command line.
 
-class order
+class order
 {
- rule __init__ ( ) {
+ rule __init__ ( )
+ {
     }
-
- # Adds the constraint that 'first' should precede 'second'
+
+ # Adds the constraint that 'first' should preceede 'second'.
     rule add-pair ( first second )
     {
         .constraits += $(first)--$(second) ;
     }
     NATIVE_RULE class_at_order : add-pair ;
-
- # Given a list of objects, reorder them so that the constains specified
- # by 'add-pair' are satisfied.
+
+ # Given a list of objects, reorder them so that the constraints specified by
+ # 'add-pair' are satisfied.
     #
     # The algorithm was adopted from an awk script by Nikita Youshchenko
     # (yoush at cs dot msu dot su)
     rule order ( objects * )
     {
- # The algorithm used is the same is standard transitive closure,
- # except that we're not keeping in-degree for all vertices, but
- # rather removing edges.
+ # The algorithm used is the same is standard transitive closure, except
+ # that we're not keeping in-degree for all vertices, but rather removing
+ # edges.
         local result ;
         if $(objects)
- {
- local constraints = [ eliminate-unused-constraits $(objects) ] ;
-
- # Find some library that nobody depends upon and add it to
- # the 'result' array.
+ {
+ local constraints = [ eliminate-unused-constraits $(objects) ] ;
+
+ # Find some library that nobody depends upon and add it to the
+ # 'result' array.
             local obj ;
             while $(objects)
- {
+ {
                 local new_objects ;
                 while $(objects)
                 {
- obj = $(objects[1]) ;
+ obj = $(objects[1]) ;
                     if [ has-no-dependents $(obj) : $(constraints) ]
                     {
                         # Emulate break ;
                         new_objects += $(objects[2-]) ;
                         objects = ;
- }
+ }
                     else
                     {
                         new_objects += $(obj) ;
@@ -74,30 +75,30 @@
                         objects = $(objects[2-]) ;
                     }
                 }
-
+
                 if ! $(obj)
                 {
                     errors.error "Circular order dependencies" ;
                 }
                 # No problem with placing first.
                 result += $(obj) ;
- # Remove all containts where 'obj' comes first,
- # since they are already satisfied.
+ # Remove all contraints where 'obj' comes first, since they are
+ # already satisfied.
                 constraints = [ remove-satisfied $(constraints) : $(obj) ] ;
- # Add the remaining objects for further processing
- # on the next iteration
-
- objects = $(new_objects) ;
- }
-
- }
+
+ # Add the remaining objects for further processing on the next
+ # iteration
+ objects = $(new_objects) ;
+ }
+
+ }
         return $(result) ;
- }
+ }
     NATIVE_RULE class_at_order : order ;
-
- # Eliminate constains which mentions objects not in 'objects'.
- # In graph-theory terms, this is finding subgraph induced by
- # ordered vertices.
+
+ # Eliminate constraints which mention objects not in 'objects'. In
+ # graph-theory terms, this is finding a subgraph induced by ordered
+ # vertices.
     rule eliminate-unused-constraits ( objects * )
     {
         local result ;
@@ -107,32 +108,32 @@
             if $(m[1]) in $(objects) && $(m[2]) in $(objects)
             {
                 result += $(c) ;
- }
- }
+ }
+ }
         return $(result) ;
     }
-
- # Returns true if there's no constrain in 'constaraint' where
- # 'obj' comes second.
+
+ # Returns true if there's no constraint in 'constaraints' where 'obj' comes
+ # second.
     rule has-no-dependents ( obj : constraints * )
     {
         local failed ;
- while $(constraints) && ! $(failed)
+ while $(constraints) && ! $(failed)
         {
             local c = $(constraints[1]) ;
             local m = [ MATCH (.*)--(.*) : $(c) ] ;
             if $(m[2]) = $(obj)
             {
                 failed = true ;
- }
+ }
             constraints = $(constraints[2-]) ;
         }
         if ! $(failed)
         {
             return true ;
- }
+ }
     }
-
+
     rule remove-satisfied ( constraints * : obj )
     {
         local result ;
@@ -142,32 +143,27 @@
             if $(m[1]) != $(obj)
             {
                 result += $(c) ;
- }
+ }
         }
- return $(result) ;
- }
+ return $(result) ;
+ }
 }
 
+
 rule __test__ ( )
 {
     import "class" : new ;
     import assert ;
-
+
     c1 = [ new order ] ;
     $(c1).add-pair l1 l2 ;
-
+
     assert.result l1 l2 : $(c1).order l1 l2 ;
     assert.result l1 l2 : $(c1).order l2 l1 ;
-
+
     $(c1).add-pair l2 l3 ;
     assert.result l1 l2 : $(c1).order l2 l1 ;
     $(c1).add-pair x l2 ;
     assert.result l1 l2 : $(c1).order l2 l1 ;
     assert.result l1 l2 l3 : $(c1).order l2 l3 l1 ;
-
-
-
-
 }
-
-

Modified: branches/fix-links/tools/build/v2/util/os.jam
==============================================================================
--- branches/fix-links/tools/build/v2/util/os.jam (original)
+++ branches/fix-links/tools/build/v2/util/os.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1,23 +1,26 @@
-# Copyright 2001, 2002, 2003, 2005 Dave Abrahams
-# Copyright 2006 Rene Rivera
-# Copyright 2003, 2005 Vladimir Prus
-# Distributed under the Boost Software License, Version 1.0.
-# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
+# Copyright 2001, 2002, 2003, 2005 Dave Abrahams
+# Copyright 2006 Rene Rivera
+# Copyright 2003, 2005 Vladimir Prus
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
 import modules ;
 import string ;
 
-# Return the value(s) of the given environment variable(s) at the time
-# bjam was invoked.
+
+# Return the value(s) of the given environment variable(s) at the time bjam was
+# invoked.
 rule environ ( variable-names + )
 {
     return [ modules.peek .ENVIRON : $(variable-names) ] ;
 }
 
+
 .name = [ modules.peek : OS ] ;
 .platform = [ modules.peek : OSPLAT ] ;
 .version = [ modules.peek : OSVER ] ;
 
+
 local rule constant ( c : os ? )
 {
     os ?= $(.name) ;
@@ -27,10 +30,10 @@
     return $(result[1]) ;
 }
 
-rule get-constant ( os ? )
+rule get-constant ( os ? )
 {
- # Find the name of the constant being accessed, which is
- # equal to the name used to invoke us.
+ # Find the name of the constant being accessed, which is equal to the name
+ # used to invoke us.
     local bt = [ BACKTRACE 1 ] ;
     local rulename = [ MATCH ([^.]*)$ : $(bt[4]) ] ;
     return [ constant $(rulename) : $(os) ] ;
@@ -39,15 +42,15 @@
 
 # export all the common constants
 .constants = name platform version shared-library-path-variable path-separator executable-path-variable executable-suffix ;
-for local constant in $(.constants)
+for local constant in $(.constants)
 {
     IMPORT $(__name__) : get-constant : $(__name__) : $(constant) ;
 }
 EXPORT $(__name__) : $(.constants) ;
 
 .executable-path-variable-NT = PATH ;
-# On Windows the case and capitalization of PATH is not always
-# predictable, so let's find out what variable name was really set.
+# On Windows the case and capitalization of PATH is not always predictable, so
+# let's find out what variable name was really set.
 if $(.name) = NT
 {
     for local n in [ VARNAMES .ENVIRON ]
@@ -59,8 +62,8 @@
     }
 }
 
-# Specific constants for various platforms. There's no need to define
-# any constant whose value would be the same as the default, below.
+# Specific constants for various platforms. There's no need to define any
+# constant whose value would be the same as the default, below.
 .shared-library-path-variable-NT = $(.executable-path-variable-NT) ;
 .path-separator-NT = ";" ;
 .expand-variable-prefix-NT = % ;
@@ -81,16 +84,20 @@
 .executable-path-variable = PATH ;
 .executable-suffix = "" ;
 
-# Return a list of the directories in the PATH. Yes, that information
-# is (sort of) available in the global module, but jam code can change
-# those values, and it isn't always clear what case/capitalization to
-# use when looking. This rule is a more reliable way to get there.
+
+# Return a list of the directories in the PATH. Yes, that information is (sort
+# of) available in the global module, but jam code can change those values, and
+# it isn't always clear what case/capitalization to use when looking. This rule
+# is a more reliable way to get there.
 rule executable-path ( )
 {
- return [ string.words [ environ [ constant executable-path-variable ] ]
- : [ constant path-separator ] ] ;
+ return [ string.words [ environ [ constant executable-path-variable ] ]
+ : [ constant path-separator ] ] ;
 }
-
+
+
+# Initialize the list of home directories for the current user depending on the
+# OS.
 if $(.name) = NT
 {
     local home = [ environ HOMEDRIVE HOMEPATH ] ;
@@ -101,14 +108,16 @@
     .home-directories = [ environ HOME ] ;
 }
 
-# Can't use 'constant' mechanism because it only returns 1-element
-# values.
+
+# Can't use 'constant' mechanism because it only returns 1-element values.
 rule home-directories ( )
 {
     return $(.home-directories) ;
 }
-# Return the string needed to represent the expansion of the named
-# shell variable.
+
+
+# Return the string needed to represent the expansion of the named shell
+# variable.
 rule expand-variable ( variable )
 {
     local prefix = [ constant expand-variable-prefix ] ;
@@ -116,17 +125,18 @@
     return $(prefix)$(variable)$(suffix) ;
 }
 
+
 # Returns true if running on windows, whether in cygwin or not.
-rule on-windows
+rule on-windows ( )
 {
     local result ;
- if [ modules.peek : NT ]
+ if [ modules.peek : NT ]
     {
         result = true ;
     }
- else if [ modules.peek : UNIX ]
+ else if [ modules.peek : UNIX ]
     {
- switch [ modules.peek : JAMUNAME ]
+ switch [ modules.peek : JAMUNAME ]
         {
             case CYGWIN* :
             {
@@ -137,24 +147,22 @@
     return $(result) ;
 }
 
-if ! [ on-windows ]
+
+if ! [ on-windows ]
 {
     .on-unix = 1 ;
 }
 
+
 rule on-unix
 {
     return $(.on-unix) ;
 }
-
 
-import regex ;
 
 rule __test__
 {
     import assert ;
- rule identity ( args * ) { return $(args) ; }
-
     if ! ( --quiet in [ modules.peek : ARGV ] )
     {
         ECHO os: name= [ name ] ;

Modified: branches/fix-links/tools/build/v2/util/path.jam
==============================================================================
--- branches/fix-links/tools/build/v2/util/path.jam (original)
+++ branches/fix-links/tools/build/v2/util/path.jam 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -6,7 +6,7 @@
 # (See accompanying file LICENSE_1_0.txt or copy at
 # http://www.boost.org/LICENSE_1_0.txt)
 
-# Performs various path manipulations. Path are always in a 'normilized'
+# Performs various path manipulations. Paths are always in a 'normalized'
 # representation. In it, a path may be either:
 #
 # - '.', or
@@ -17,10 +17,10 @@
 # at the beginning, and it never ends in slash, except for path consisting
 # of slash only.
 
+import errors ;
 import modules ;
-import sequence ;
 import regex ;
-import errors : error ;
+import sequence ;
 import set ;
 
 
@@ -30,15 +30,11 @@
     local uname = [ modules.peek : JAMUNAME ] ;
     switch $(uname)
     {
- case CYGWIN* :
- os = CYGWIN ;
-
- case * :
- os = UNIX ;
+ case CYGWIN* : os = CYGWIN ;
+ case * : os = UNIX ;
     }
 }
 
-#
 # Converts the native path into normalized form.
 #
 rule make ( native )
@@ -46,7 +42,7 @@
     return [ make-$(os) $(native) ] ;
 }
 
-#
+
 # Builds native representation of the path.
 #
 rule native ( path )
@@ -54,7 +50,7 @@
     return [ native-$(os) $(path) ] ;
 }
 
-#
+
 # Tests if a path is rooted.
 #
 rule is-rooted ( path )
@@ -62,19 +58,22 @@
     return [ MATCH "^(/)" : $(path) ] ;
 }
 
-#
+
 # Tests if a path has a parent.
 #
 rule has-parent ( path )
 {
- if $(path) != / {
+ if $(path) != /
+ {
         return 1 ;
- } else {
+ }
+ else
+ {
         return ;
     }
 }
 
-#
+
 # Returns the path without any directory components.
 #
 rule basename ( path )
@@ -82,41 +81,52 @@
     return [ MATCH "([^/]+)$" : $(path) ] ;
 }
 
-#
+
 # Returns parent directory of the path. If no parent exists, error is issued.
 #
 rule parent ( path )
 {
- if [ has-parent $(path) ] {
-
- if $(path) = . {
+ if [ has-parent $(path) ]
+ {
+ if $(path) = .
+ {
             return .. ;
- } else {
-
+ }
+ else
+ {
             # Strip everything at the end of path up to and including
             # the last slash
             local result = [ regex.match "((.*)/)?([^/]+)" : $(path) : 2 3 ] ;
 
             # Did we strip what we shouldn't?
- if $(result[2]) = ".." {
+ if $(result[2]) = ".."
+ {
                 return $(path)/.. ;
- } else {
- if ! $(result[1]) {
- if [ is-rooted $(path) ] {
+ }
+ else
+ {
+ if ! $(result[1])
+ {
+ if [ is-rooted $(path) ]
+ {
                         result = / ;
- } else {
+ }
+ else
+ {
                         result = . ;
                     }
                 }
                 return $(result[1]) ;
             }
         }
- } else {
- error "Path '$(path)' has no parent" ;
+ }
+ else
+ {
+ errors.error "Path '$(path)' has no parent" ;
     }
 }
 
-#
+
 # Returns path2 such that "[ join path path2 ] = .".
 # The path may not contain ".." element or be rooted.
 #
@@ -130,14 +140,15 @@
     {
         local tokens = [ regex.split $(path) "/" ] ;
         local tokens2 ;
- for local i in $(tokens) {
+ for local i in $(tokens)
+ {
             tokens2 += .. ;
         }
         return [ sequence.join $(tokens2) : "/" ] ;
     }
 }
 
-#
+
 # Auxillary rule: does all the semantic of 'join', except for error cheching.
 # The error checking is separated because this rule is recursive, and I don't
 # like the idea of checking the same input over and over.
@@ -156,7 +167,7 @@
     return $(result) ;
 }
 
-#
+
 # Contanenates the passed path elements. Generates an error if
 # any element other than the first one is rooted.
 #
@@ -172,7 +183,7 @@
         {
             if [ is-rooted $(e) ]
             {
- error only first element may be rooted ;
+ errors.error only first element may be rooted ;
             }
         }
         return [ join-imp $(elements) ] ;
@@ -180,7 +191,6 @@
 }
 
 
-#
 # If 'path' is relative, it is rooted at 'root'. Otherwise, it's unchanged.
 #
 rule root ( path root )
@@ -192,7 +202,7 @@
     }
 }
 
-#
+
 # Returns the current working directory.
 #
 rule pwd ( )
@@ -208,7 +218,7 @@
     }
 }
 
-#
+
 # Returns the list of files matching the given pattern in the
 # specified directory. Both directories and patterns are
 # supplied as portable paths. Each pattern should be non-absolute
@@ -251,6 +261,7 @@
         [ set.difference $(inc) : $(exc) ] ] ;
 }
 
+
 # Recursive version of GLOB. Builds the glob of files while
 # also searching in the subdirectories of the given roots. An
 # optional set of exclusion patterns will filter out the
@@ -267,6 +278,7 @@
         ] ] ;
 }
 
+
 local rule .glob-tree ( roots * : patterns * : exclude-patterns * )
 {
     local excluded ;
@@ -290,7 +302,6 @@
 }
 
 
-#
 # Returns true is the specified file exists.
 #
 rule exists ( file )
@@ -300,8 +311,6 @@
 NATIVE_RULE path : exists ;
 
 
-
-#
 # Find out the absolute name of path and returns the list of all the parents,
 # starting with the immediate one. Parents are returned as relative names.
 # If 'upper_limit' is specified, directories above it will be pruned.
@@ -323,7 +332,8 @@
     }
     
     # All upper elements removed ?
- if ! $(upper_ele) {
+ if ! $(upper_ele)
+ {
         # Create the relative paths to parents, number of elements in 'path_ele'
         local result ;
         for local i in $(path_ele) {
@@ -332,13 +342,13 @@
         }
         return $(result) ;
     }
- else {
- error "$(upper_limit) is not prefix of $(path)" ;
+ else
+ {
+ errors.error "$(upper_limit) is not prefix of $(path)" ;
     }
 }
 
 
-#
 # Search for 'pattern' in parent directories of 'dir', up till and including
 # 'upper_limit', if it is specified, or till the filesystem root otherwise.
 #
@@ -355,7 +365,7 @@
     return $(result) ;
 }
 
-#
+
 # Assuming 'child' is a subdirectory of 'parent', return the relative
 # path from 'parent' to 'child'
 #
@@ -393,6 +403,7 @@
     }
 }
 
+
 # Returns the minimal path to path2 that is relative path1.
 #
 rule relative-to ( path1 path2 )
@@ -417,6 +428,7 @@
     return [ join . $(root_1) $(split2) ] ;
 }
 
+
 # Returns the list of paths which are used by the operating system
 # for looking up programs
 rule programs-path ( )
@@ -433,6 +445,7 @@
     return $(result) ;
 }
 
+
 rule make-NT ( native )
 {
     local tokens = [ regex.split $(native) "[/\\]" ] ;
@@ -459,6 +472,7 @@
     return $(result) ;
 }
 
+
 rule native-NT ( path )
 {
     local result = [ MATCH "^/?(.*)" : $(path) ] ;
@@ -466,6 +480,7 @@
     return $(result) ;
 }
 
+
 rule make-UNIX ( native )
 {
     # VP: I have no idea now 'native' can be empty here! But it can!
@@ -479,16 +494,19 @@
     }
 }
 
+
 rule native-UNIX ( path )
 {
     return $(path) ;
 }
 
+
 rule make-CYGWIN ( path )
 {
     return [ make-NT $(path) ] ;
 }
 
+
 rule native-CYGWIN ( path )
 {
     local result = $(path) ;
@@ -499,7 +517,7 @@
     return [ native-UNIX $(result) ] ;
 }
 
-#
+
 # split-VMS: splits input native path into
 # device dir file (each part is optional),
 # example:
@@ -516,7 +534,7 @@
     return $(device) $(dir) $(file) ;
 }
 
-#
+
 # Converts a native VMS path into a portable path spec.
 #
 # Does not handle current-device absolute paths such
@@ -592,7 +610,7 @@
     return $(portable) ;
 }
 
-#
+
 # Converts a portable path spec into a native VMS path.
 #
 # Relies on having at least one dot (".") included in the file
@@ -663,8 +681,8 @@
 }
 
 
-rule __test__ ( ) {
-
+rule __test__ ( )
+{
     import assert ;
     import errors : try catch ;
 
@@ -694,7 +712,6 @@
     assert.result ".." : parent "../foo" ;
     assert.result "../../foo" : parent "../../foo/bar" ;
 
-
     assert.result "." : reverse "." ;
     assert.result ".." : reverse "foo" ;
     assert.result "../../.." : reverse "foo/bar/giz" ;
@@ -820,5 +837,4 @@
     assert.result "disk:[my_docs.work]Jamfile." : native "/disk:/my_docs/work/Jamfile." ;
 
     modules.poke path : os : $(save-os) ;
-
 }

Modified: branches/fix-links/tools/jam/doc/bjam.qbk
==============================================================================
--- branches/fix-links/tools/jam/doc/bjam.qbk (original)
+++ branches/fix-links/tools/jam/doc/bjam.qbk 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -116,7 +116,7 @@
 The toolset used to build Boost.Jam is independent of the toolsets used for Boost.Build. Only one version of Boost.Jam is needed to use Boost.Build.
 ]
 
-The supported toolsets, and wether they are auto-detected, are:
+The supported toolsets, and whether they are auto-detected, are:
 
 [table Supported Toolsets
 

Modified: branches/fix-links/tools/jam/src/build.bat
==============================================================================
--- branches/fix-links/tools/jam/src/build.bat (original)
+++ branches/fix-links/tools/jam/src/build.bat 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -40,7 +40,7 @@
 
 
 :Test_Option
-REM Tests wether the given string is in the form of an option: "--*"
+REM Tests whether the given string is in the form of an option: "--*"
 setlocal & endlocal
 setlocal
 set test=%1

Modified: branches/fix-links/tools/jam/src/builtins.c
==============================================================================
--- branches/fix-links/tools/jam/src/builtins.c (original)
+++ branches/fix-links/tools/jam/src/builtins.c 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1004,16 +1004,14 @@
 /*
  * builtin_import() - IMPORT ( SOURCE_MODULE ? : SOURCE_RULES * : TARGET_MODULE ? : TARGET_RULES * : LOCALIZE ? )
  *
- * The IMPORT rule imports rules from the SOURCE_MODULE into the
- * TARGET_MODULE as local rules. If either SOURCE_MODULE or
- * TARGET_MODULE is not supplied, it refers to the global
- * module. SOURCE_RULES specifies which rules from the SOURCE_MODULE
- * to import; TARGET_RULES specifies the names to give those rules in
- * TARGET_MODULE. If SOURCE_RULES contains a name which doesn't
- * correspond to a rule in SOURCE_MODULE, or if it contains a
- * different number of items than TARGET_RULES, an error is issued.
- * if LOCALIZE is specified, the rules will be executed in
- * TARGET_MODULE, with corresponding access to its module local
+ * The IMPORT rule imports rules from the SOURCE_MODULE into the TARGET_MODULE
+ * as local rules. If either SOURCE_MODULE or TARGET_MODULE is not supplied, it
+ * refers to the global module. SOURCE_RULES specifies which rules from the
+ * SOURCE_MODULE to import; TARGET_RULES specifies the names to give those rules
+ * in TARGET_MODULE. If SOURCE_RULES contains a name which doesn't correspond to
+ * a rule in SOURCE_MODULE, or if it contains a different number of items than
+ * TARGET_RULES, an error is issued. If LOCALIZE is specified, the rules will be
+ * executed in TARGET_MODULE, with corresponding access to its module local
  * variables.
  */
 LIST *
@@ -1087,15 +1085,14 @@
 
     module_t* m = bindmodule( module_list ? module_list->string : 0 );
     
-
     for ( ; rules; rules = list_next( rules ) )
     {
         RULE r_, *r = &r_;
         r_.name = rules->string;
-
+
         if ( !m->rules || !hashcheck( m->rules, (HASHDATA**)&r ) )
             unknown_rule( frame, "EXPORT", m->name, r_.name );
-
+
         r->exported = 1;
     }
     return L0;

Modified: branches/fix-links/tools/jam/src/make1.c
==============================================================================
--- branches/fix-links/tools/jam/src/make1.c (original)
+++ branches/fix-links/tools/jam/src/make1.c 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -687,7 +687,7 @@
         FRAME frame[1];
         frame_init( frame );
 
- /* args * :: $(__ACTION_RULE__[2-]) */
+ /* args * :: $(__TIMING_RULE__[2-]) */
         lol_add( frame->args, list_copy( L0, timing_rule->next ) );
 
         /* target :: the name of the target */

Modified: branches/fix-links/tools/jam/src/modules/property-set.c
==============================================================================
--- branches/fix-links/tools/jam/src/modules/property-set.c (original)
+++ branches/fix-links/tools/jam/src/modules/property-set.c 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -15,12 +15,12 @@
     char* end = strchr(f, '>');
     string s[1];
     LIST* result;
-
+
     string_new(s);
 
     string_append_range(s, f, end+1);
     result = list_new(0, newstr(s->value));
-
+
     string_free(s);
     return result;
 }
@@ -28,22 +28,22 @@
 /*
 rule create ( raw-properties * )
 {
- raw-properties = [ sequence.unique
+ raw-properties = [ sequence.unique
         [ sequence.insertion-sort $(raw-properties) ] ] ;
-
+
     local key = $(raw-properties:J=-:E=) ;
-
- if ! $(.ps.$(key))
+
+ if ! $(.ps.$(key))
     {
         .ps.$(key) = [ new property-set $(raw-properties) ] ;
     }
- return $(.ps.$(key)) ;
+ return $(.ps.$(key)) ;
 }
 */
 
 LIST *property_set_create( PARSE *parse, FRAME *frame )
 {
- LIST* properties = lol_get( frame->args, 0 );
+ LIST* properties = lol_get( frame->args, 0 );
     LIST* sorted = 0;
     LIST* order_sensitive = 0;
     LIST* unique;
@@ -63,7 +63,7 @@
         }
         list_free(att);
     }
-
+
     sorted = list_sort(sorted);
     sorted = list_append(sorted, order_sensitive);
     unique = list_unique(sorted);
@@ -73,24 +73,24 @@
 
     string_new(var);
     string_append(var, ".ps.");
-
+
     for(tmp = unique; tmp; tmp = tmp->next) {
         string_append(var, tmp->string);
         string_push_back(var, '-');
     }
     val = var_get(var->value);
- if (val == 0)
- {
- val = call_rule("new", frame,
- list_append(list_new(0, "property-set"), unique), 0);
-
+ if (val == 0)
+ {
+ val = call_rule("new", frame,
+ list_append(list_new(0, "property-set"), unique), 0);
+
         var_set(newstr(var->value), list_copy(0, val), VAR_SET);
     }
     else
     {
         val = list_copy(0, val);
     }
-
+
     string_free(var);
     /* The 'unique' variable is freed in 'call_rule'. */
     list_free(sorted);
@@ -105,5 +105,4 @@
         char* args[] = { "raw-properties", "*", 0 };
         declare_native_rule("property-set", "create", args, property_set_create, 1);
     }
-
 }

Modified: branches/fix-links/tools/jam/src/native.c
==============================================================================
--- branches/fix-links/tools/jam/src/native.c (original)
+++ branches/fix-links/tools/jam/src/native.c 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -9,15 +9,14 @@
 # define C0 (char *)0
 
 
-void declare_native_rule(char* module, char* rule, char** args,
+void declare_native_rule(char* module, char* rule, char** args,
                          LIST*(*f)(PARSE*, FRAME*), int version)
-
 {
     module_t* m = bindmodule(module);
     if (m->native_rules == 0) {
         m->native_rules = hashinit( sizeof( native_rule_t ), "native rules");
     }
-
+
     {
         native_rule_t n, *np = &n;
         n.name = rule;
@@ -25,14 +24,13 @@
         {
             n.arguments = args_new();
             lol_build( n.arguments->data, args );
- }
+ }
         else
         {
             n.arguments = 0;
         }
- n.procedure = parse_make( f, P0, P0, P0, C0, C0, 0 );
+ n.procedure = parse_make( f, P0, P0, P0, C0, C0, 0 );
         n.version = version;
         hashenter(m->native_rules, (HASHDATA**)&np);
     }
 }
-

Modified: branches/fix-links/tools/quickbook/detail/actions.cpp
==============================================================================
--- branches/fix-links/tools/quickbook/detail/actions.cpp (original)
+++ branches/fix-links/tools/quickbook/detail/actions.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -1096,6 +1096,21 @@
             << " </author>\n";
     }
 
+ void xml_copyright::operator()(std::pair<std::vector<std::string>, std::string> const& copyright) const
+ {
+ out << "\n" << " <copyright>\n";
+
+ for_each(
+ copyright.first.begin()
+ , copyright.first.end()
+ , xml_year(out));
+
+ out << " <holder>" << copyright.second << "</holder>\n"
+ << " </copyright>\n"
+ << "\n"
+ ;
+ }
+
     void xml_year::operator()(std::string const &year) const
     {
         out << " <year>" << year << "</year>\n";
@@ -1170,19 +1185,12 @@
             out << " </authorgroup>\n";
         }
 
- if (!actions.doc_copyright_holder.empty())
+ if (!actions.doc_copyrights.empty())
         {
- out << "\n" << " <copyright>\n";
-
             for_each(
- actions.doc_copyright_years.begin()
- , actions.doc_copyright_years.end()
- , xml_year(out));
-
- out << " <holder>" << actions.doc_copyright_holder << "</holder>\n"
- << " </copyright>\n"
- << "\n"
- ;
+ actions.doc_copyrights.begin()
+ , actions.doc_copyrights.end()
+ , xml_copyright(out));
         }
 
         if (qbk_version_n < 103)

Modified: branches/fix-links/tools/quickbook/detail/actions.hpp
==============================================================================
--- branches/fix-links/tools/quickbook/detail/actions.hpp (original)
+++ branches/fix-links/tools/quickbook/detail/actions.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -743,6 +743,18 @@
         collector& out;
     };
 
+ struct xml_copyright
+ {
+ // Handles xml copyright
+
+ xml_copyright(collector& out)
+ : out(out) {}
+
+ void operator()(std::pair<std::vector<std::string>, std::string> const &copyright) const;
+
+ collector& out;
+ };
+
     void pre(collector& out, quickbook::actions& actions, bool ignore_docinfo = false);
     void post(collector& out, quickbook::actions& actions, bool ignore_docinfo = false);
 

Modified: branches/fix-links/tools/quickbook/detail/actions_class.cpp
==============================================================================
--- branches/fix-links/tools/quickbook/detail/actions_class.cpp (original)
+++ branches/fix-links/tools/quickbook/detail/actions_class.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -24,8 +24,7 @@
         , doc_version()
         , doc_id()
         , doc_dirname()
- , doc_copyright_years()
- , doc_copyright_holder()
+ , doc_copyrights()
         , doc_purpose()
         , doc_category()
         , doc_authors()

Modified: branches/fix-links/tools/quickbook/detail/actions_class.hpp
==============================================================================
--- branches/fix-links/tools/quickbook/detail/actions_class.hpp (original)
+++ branches/fix-links/tools/quickbook/detail/actions_class.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -28,6 +28,7 @@
 
         typedef std::vector<std::string> string_list;
         typedef std::vector<std::pair<std::string, std::string> > author_list;
+ typedef std::vector<std::pair<string_list, std::string> > copyright_list;
         typedef std::pair<char, int> mark_type;
         static int const max_template_depth = 100;
 
@@ -37,8 +38,7 @@
         std::string doc_version;
         std::string doc_id;
         std::string doc_dirname;
- string_list doc_copyright_years;
- std::string doc_copyright_holder;
+ copyright_list doc_copyrights;
         std::string doc_purpose;
         std::string doc_category;
         author_list doc_authors;

Modified: branches/fix-links/tools/quickbook/doc_info.hpp
==============================================================================
--- branches/fix-links/tools/quickbook/doc_info.hpp (original)
+++ branches/fix-links/tools/quickbook/doc_info.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -66,7 +66,7 @@
                               doc_version
                             | doc_id
                             | doc_dirname
- | doc_copyright
+ | doc_copyright [push_back_a(actions.doc_copyrights, copyright)]
                             | doc_purpose [actions.extract_doc_purpose]
                             | doc_category
                             | doc_authors
@@ -103,12 +103,12 @@
                     ;
 
                 doc_copyright =
- "copyright" >> hard_space
- >> +( repeat_p(4)[digit_p] [push_back_a(actions.doc_copyright_years)]
+ "copyright" >> hard_space [clear_a(copyright.first)]
+ >> +( repeat_p(4)[digit_p] [push_back_a(copyright.first)]
>> space
                         )
>> space
- >> (*(anychar_p - ']')) [assign_a(actions.doc_copyright_holder)]
+ >> (*(anychar_p - ']')) [assign_a(copyright.second)]
                     ;
 
                 doc_purpose =
@@ -178,6 +178,7 @@
 
             bool unused;
             std::pair<std::string, std::string> name;
+ std::pair<std::vector<std::string>, std::string> copyright;
             rule<Scanner> doc_info, doc_title, doc_version, doc_id, doc_dirname,
                             doc_copyright, doc_purpose,doc_category, doc_authors,
                             doc_author, comment, space, hard_space, doc_license,

Modified: branches/fix-links/tools/regression/src/process_jam_log.cpp
==============================================================================
--- branches/fix-links/tools/regression/src/process_jam_log.cpp (original)
+++ branches/fix-links/tools/regression/src/process_jam_log.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -633,9 +633,12 @@
   // * Calls stop_message() to stop capturing lines.
   // * Capture lines if line capture on.
 
+ static const int max_line_length = 8192;
   int line_num = 0;
   while ( std::getline( *input, line ) )
   {
+ if (max_line_length < line.size()) line = line.substr(0, max_line_length);
+
     ++line_num;
     
     std::vector<std::string> const line_parts( split( line ) );

Modified: branches/fix-links/tools/wave/build/Jamfile.v2
==============================================================================
--- branches/fix-links/tools/wave/build/Jamfile.v2 (original)
+++ branches/fix-links/tools/wave/build/Jamfile.v2 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
 #
 # http://www.boost.org/
 #
-# Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+# Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
 # Software License, Version 1.0. (See accompanying file
 # LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 

Modified: branches/fix-links/tools/wave/cpp.cpp
==============================================================================
--- branches/fix-links/tools/wave/cpp.cpp (original)
+++ branches/fix-links/tools/wave/cpp.cpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/
@@ -139,7 +139,7 @@
         "Wave: A Standard conformant C++ preprocessor based on the Boost.Wave library",
         "http://www.boost.org/",
         "",
- "Copyright (c) 2001-2007 Hartmut Kaiser, Distributed under the Boost",
+ "Copyright (c) 2001-2008 Hartmut Kaiser, Distributed under the Boost",
         "Software License, Version 1.0. (See accompanying file",
         "LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)",
         0

Modified: branches/fix-links/tools/wave/cpp.hpp
==============================================================================
--- branches/fix-links/tools/wave/cpp.hpp (original)
+++ branches/fix-links/tools/wave/cpp.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -3,7 +3,7 @@
 
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/tools/wave/cpp_config.hpp
==============================================================================
--- branches/fix-links/tools/wave/cpp_config.hpp (original)
+++ branches/fix-links/tools/wave/cpp_config.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -4,7 +4,7 @@
     
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/tools/wave/cpp_version.hpp
==============================================================================
--- branches/fix-links/tools/wave/cpp_version.hpp (original)
+++ branches/fix-links/tools/wave/cpp_version.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/tools/wave/stop_watch.hpp
==============================================================================
--- branches/fix-links/tools/wave/stop_watch.hpp (original)
+++ branches/fix-links/tools/wave/stop_watch.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/

Modified: branches/fix-links/tools/wave/trace_macro_expansion.hpp
==============================================================================
--- branches/fix-links/tools/wave/trace_macro_expansion.hpp (original)
+++ branches/fix-links/tools/wave/trace_macro_expansion.hpp 2008-01-21 15:15:02 EST (Mon, 21 Jan 2008)
@@ -2,7 +2,7 @@
     Boost.Wave: A Standard compliant C++ preprocessor library
     http://www.boost.org/
 
- Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
+ Copyright (c) 2001-2008 Hartmut Kaiser. Distributed under the Boost
     Software License, Version 1.0. (See accompanying file
     LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 =============================================================================*/


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk